這一講,我們將介紹solidity中的控制流,然后講如何用solidity實現插入排序,一個看起來簡單,但實際上很容易寫出bug的程序。
我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity極簡入門」,供小白們使用,每周更新1-3講。
所有代碼和教程開源在github:github.com/AmazingAng/WTFSolidity
這一講,我們將介紹solidity中的控制流,然后講如何用solidity實現插入排序,一個看起來簡單,但實際上很容易寫出bug的程序。
控制流
Solidity的控制流與其他語言類似,主要包含以下幾種:
Solana生態現金流協議Zebec宣布通過Wormhole擴展至BNB Chain:9月27日消息,Solana生態現金流協議Zebec宣布通過Wormhole擴展至BNB Chain,跨鏈擴展正在開發和測試。未來Zebec用戶將能夠在交易中使用來自 BNB Chain 的代幣。
據悉,Zebec作為Solana上可編程的多簽資管和流式支付協議,支持以實時和連續支付的方式發送資金,可用于工資單、投資等場景,旨在幫助人們以流支付形式獲取報酬、購買產品及服務。此前8月份Zebec以10億美元估值完成850萬美元融資,Circle Ventures等參投。[2022/9/27 22:33:29]
if-else
Coinbase:目前正在調查Solana幣提款延遲問題:7月7日消息,加密貨幣交易所Coinbase表示,目前正在調查Solana幣提款延遲問題。(金十)[2022/7/7 1:58:43]
for循環
while循環
do-while循環
SOL突破210美元:SOL突破210美元,現報210.0587美元,日內漲幅達到14.98%,行情波動較大,請做好風險控制。[2021/10/22 20:49:53]
三元運算符
三元運算符是solidity中唯一一個接受三個操作數的運算符,規則條件?條件為真的表達式:條件為假的表達式。此運算符經常用作if語句的快捷方式。
另外還有continue和break關鍵字可以使用。
用solidity實現插入排序
寫在前面:
調查:以太坊應用開發者中使用Solidity的占比達87.4%,其次為Web3.js和Truffle:根據企業以太坊聯盟(EEA)發布的一項關于以太坊應用開發者使用的智能合約語言、開發工具、客戶端、服務類型的調查報告,調查結果顯示,使用Solidity的開發者最多,占比達到87.4%,其次Web3.js(71.8%)、Truffle(69.2%)、Javascript(66.7%)、OpenZeppelin(59%)、Infura(56.4%)、Remix(53.8%)、IPFS(48.7%)以及Java(43.6%)[2021/2/4 18:52:21]
90%以上的人用solidity寫插入算法都會出錯。插入排序
排序算法解決的問題是將無序的一組數字,例如,從小到大一次排列好。插入排序是最簡單的一種排序算法,也是很多人學習的第一個算法。它的思路很簡答,從前往后,依次將每一個數和排在他前面的數字比大小,如果比前面的數字小,就互換位置。示意圖:
插入排序
python代碼
我們可以先看一下插入排序的python代碼:
改寫成solidity后有BUG!
一共8行python代碼就可以完成插入排序,非常簡單。那么我們將它改寫成solidity代碼,將函數,變量,循環等等都做了相應的轉換,只需要9行代碼:
那我們把改好的放到remix上去跑,輸入。BOOM!有bug!改了半天,沒找到bug在哪。我又去google搜」solidityinsertionsort」,然后發現網上用solidity寫的插入算法教程都是錯的,比如:SortinginSoliditywithoutComparison
正確的solidity插入排序
花了幾個小時,在Dapp-Learning社群一個朋友的幫助下,終于找到了bug所在。solidity中最常用的變量類型是uint,也就是正整數,取到負值的話,會報underflow錯誤。而在插入算法中,變量j有可能會取到-1,引起報錯。
這里,我們需要把j加1,讓它無法取到負值。正確代碼:
運行后的結果:
總結
這一講,我們介紹了solidity中控制流,并且用solidity寫了插入排序。看起來很簡單,但實際很難。這就是solidity,坑很多,每個月都有項目因為這些小bug損失幾千萬甚至上億美元。掌握好基礎,不斷練習,才能寫出更好的solidity代碼。
原文:《Solidity極簡入門:10.控制流,用solidity實現插入排序》
來源:panews
作者:AlexReeve為了給世界創建一個開放的金融系統,我們需要確保每個人都可以使用Web3.
1900/1/1 0:00:00以太坊目前使用零知識證明作為擴展解決方案已成為不可忽視的趨勢。零知識證明可以在不改變區塊大小或速度的情況下提高區塊鏈的吞吐量,從而使區塊鏈用戶實現隱私和安全.
1900/1/1 0:00:00NFT,一個鏈上token,一份存證,記錄著數據,記錄著文化,記錄著歷史,也記錄著資產。它可以是文字、可以是圖片、亦或影像、代碼,又或者說數據、藝術……無論它承載了什么,這都是一份獨一無二,不可.
1900/1/1 0:00:00作者:周舟 近日7UpDAO創始人在推特上表示,Azuki完成了10億美元估值的融資,這也是繼“無聊猿”40億美元、Doodles7.04億美元之后,又一個完成高額估值的NFT創業項目.
1900/1/1 0:00:00這是一篇關于加密貨幣的過去、現在和未來的文章,它會如何使世界變得更好,以及它如何正在使世界變得更糟。 介紹 2021年11月,加密市場達到3萬億美元的市場最高點.
1900/1/1 0:00:00DeFi數據 1.DeFi代幣總市值:463.4億美元 DeFi總市值數據來源:coingecko2.過去24小時去中心化交易所的交易量39.
1900/1/1 0:00:00