這一講,我們將介紹 solidity 中的控制流,然后講如何用 solidity 實現插入排序(InsertionSort),一個看起來簡單,但實際上很容易寫出 bug 的程序。
我最近在重新學 solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每周更新 1-3 講。
所有代碼和教程開源在 github: github.com/AmazingAng/WTFSolidity
Solidity 的控制流與其他語言類似,主要包含以下幾種:
if-else
價值2.06億美元的SOL從未知錢包轉入Coinbase:金色財經報道,Whale Alert數據顯示,5筆共計958萬枚SOL于10:08從未知錢包轉移至Coinbase,總價值約2.06億美元。[2023/2/15 12:07:35]
for 循環
while 循環
do-while 循環
Solana生態NFT項目y00ts將于明年第一季度橋接至Polygon:12月26日消息,Solana生態NFT項目y00ts發推表示,將于明年第一季度橋接至Polygon,詳細信息將在準備就緒和測試后發布。同時,y00ts將在1月份發布更加正式的第二階段路線圖。
據悉,y00ts系列NFT在9月份開啟鑄造2小時后交易額已登頂OpenSea24小時交易額排行榜,交易量約合204.2萬美元。此前y00ts母公司Dust Labs完成700萬美元種子輪融資,由Chapter One、Foundation Capital、MagicEden、FTX Ventures、Jump Capital、Solana Ventures、MystenLabs等參投。[2022/12/26 22:07:16]
三元運算符
Ledger和Trezor錢包將為SOLO代幣提供支持:金色財經報道,區塊鏈公司Sologenic最近建立了新合作伙伴關系,將使用XRP Toolkit(由XRPL Labs生產),并與XUMM合作,其代幣SOLO將由Ledger和Trezor錢包提供支持。[2020/3/3]
三元運算符是 solidity 中唯一一個接受三個操作數的運算符,規則條件? 條件為真的表達式:條件為假的表達式。此運算符經常用作 if 語句的快捷方式。
另外還有 continue(立即進入下一個循環)和 break(跳出當前循環)關鍵字可以使用。
動態 | Solidity 0.6.1和0.5.16版本已經發布:據開發者Chris推特消息,Solidity 0.6.1和0.5.16版本已經發布,以Yul優化器中的一個bug。[2020/1/3]
寫在前面:
90% 以上的人用 solidity 寫插入算法都會出錯。插入排序
排序算法解決的問題是將無序的一組數字,例如 [2, 5, 3, 1],從小到大一次排列好。插入排序(InsertionSort)是最簡單的一種排序算法,也是很多人學習的第一個算法。它的思路很簡答,從前往后,依次將每一個數和排在他前面的數字比大小,如果比前面的數字小,就互換位置。示意圖:
插入排序
python 代碼
我們可以先看一下插入排序的 python 代碼:
改寫成 solidity 后有 BUG!
一共 8 行 python 代碼就可以完成插入排序,非常簡單。那么我們將它改寫成 solidity 代碼,將函數,變量,循環等等都做了相應的轉換,只需要 9 行代碼:
那我們把改好的放到 remix 上去跑,輸入 [2, 5, 3, 1]。BOOM!有 bug!改了半天,沒找到 bug 在哪。我又去 google 搜」solidity insertion sort」,然后發現網上用 solidity 寫的插入算法教程都是錯的,比如:Sorting in Solidity without Comparison
正確的 solidity 插入排序
花了幾個小時,在 Dapp-Learning 社群一個朋友的幫助下,終于找到了 bug 所在。solidity 中最常用的變量類型是 uint,也就是正整數,取到負值的話,會報 underflow 錯誤。而在插入算法中,變量 j 有可能會取到-1,引起報錯。
這里,我們需要把 j 加 1,讓它無法取到負值。正確代碼:
運行后的結果:
這一講,我們介紹了 solidity 中控制流,并且用 solidity 寫了插入排序。看起來很簡單,但實際很難。這就是 solidity,坑很多,每個月都有項目因為這些小 bug 損失幾千萬甚至上億美元。掌握好基礎,不斷練習,才能寫出更好的 solidity 代碼。
原文:《Solidity 極簡入門: 10. 控制流,用 solidity 實現插入排序》
來源:panews
PANews
媒體專欄
閱讀更多
金色早8點
Odaily星球日報
Bress
潘達看Web3
DeFi之道
區塊律動BlockBeats
比推 Bitpush News
中本聰在2009年發布比特幣白皮書和開源代碼,從那時起,加密行業就一直保持著開放的精神。從一開始,任何人都可以復制代碼、變換營銷方式并推出他們“自己的”代幣和網絡.
1900/1/1 0:00:002022年至今,Web3.0領域因欺詐騙局與漏洞所導致的安全事件已造成約28億美元的損失,今年共有508起攻擊事件記錄在案.
1900/1/1 0:00:00來源:老雅痞 1. 簡介 在以太坊過渡到權益證明共識機制(「合并」)之后,不同的評論家認為,以太坊的新質押模式可能導致其原始Token以太坊(ETH)被視為美國證券法下的證券.
1900/1/1 0:00:00以太坊仍然主導著市場 投資者對這個永無休止的加密貨幣寒冬感到惱火。它已經摧毀了其他行業,包括DeFi,NFT,dApp等.
1900/1/1 0:00:00原文來源:阿法兔研究筆記本文是筆者最近關于基礎安全領域的人、趨勢、現象的觀察,把系列思考總結成為了文章,試圖從幾個角度,探討一個國內相對較少有人探討的賽道——固件安全市場和需求變化的方向.
1900/1/1 0:00:001.DeFi代幣總市值:452.31億美元 DeFi總市值 數據來源:coingecko2.過去24小時去中心化交易所的交易量21.
1900/1/1 0:00:00