這一講,我們將介紹 solidity 中的控制流,然后講如何用 solidity 實現插入排序(InsertionSort),一個看起來簡單,但實際上很容易寫出 bug 的程序。
我最近在重新學 solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每周更新 1-3 講。
所有代碼和教程開源在 github: github.com/AmazingAng/WTFSolidity
Solidity 的控制流與其他語言類似,主要包含以下幾種:
if-else
Solana基金會、Ripple和GBBC等機構結成合作伙伴關系:金色財經報道,Solana 基金會和區塊鏈平臺 Ripple 正在與行業組織全球區塊鏈商業委員會(GBBC) 合作,以加速使用基于加密的解決方案應對氣候變化。新成立的非政府組織名為 Blockchain x Climate Leadership Network (BxC),旨在成為“全球范圍內氣候行動創新者、領導者和建設者最大的單一共同聚會”。[2023/1/18 11:17:40]
for 循環
while 循環
Solana生態借貸協議Jet Protocol發布V2測試版:8月9日消息,Solana生態借貸協議Jet Protocol發布V2測試版,已上線保證金系統Jet Margin、固定利率市場Jet Bond和固定期限市場。[2022/8/9 12:12:16]
do-while 循環
三元運算符
三元運算符是 solidity 中唯一一個接受三個操作數的運算符,規則條件? 條件為真的表達式:條件為假的表達式。此運算符經常用作 if 語句的快捷方式。
數據:6月Solana鏈上活躍地址數超BTC和ETH:7月14日消息,據AssetDash發布的推文,Kraken研究報告指出,6月,Solana鏈上活躍地址數為965,000,BTC為925,000,ETH為440,000,Solana超BTC和ETH。[2022/7/14 2:13:18]
另外還有 continue(立即進入下一個循環)和 break(跳出當前循環)關鍵字可以使用。
寫在前面:
90% 以上的人用 solidity 寫插入算法都會出錯。插入排序
排序算法解決的問題是將無序的一組數字,例如 [2, 5, 3, 1],從小到大一次排列好。插入排序(InsertionSort)是最簡單的一種排序算法,也是很多人學習的第一個算法。它的思路很簡答,從前往后,依次將每一個數和排在他前面的數字比大小,如果比前面的數字小,就互換位置。示意圖:
Cell Protocol獲Solana Riptide Hackathon兩項共計8萬美元的頭等獎:4月15日消息,智能流動性協議Cell Protocol(cellfi.io)在近日舉辦的Solana Riptide Hackathon獲得了兩項共計8萬美元的頭等獎,分別由去中心化永續合約交易市場Mango Markets和衍生品交易平臺Zeta Markets授予。
據介紹,Cell Protocol是一個搭建在訂單簿DEX上的集中流動性機器人(concentrated liquidity bot)平臺,致力于降低用戶做市交易門檻,為訂單簿DEX帶來更多、更準確的流動性。[2022/4/15 14:26:14]
插入排序
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
在數字化轉型的大背景下,全球主要國家都在加快布局區塊鏈技術,搶占新一輪創新變革的高地。 一、區塊鏈技術概述 技術特征 區塊鏈技術是密碼學、共識算法、P2P通信、智能合約等多種技術的集成創新,打造.
1900/1/1 0:00:001、DeFi代幣總市值:452.33億美元 DeFi總市值 數據來源:coingecko2、過去24小時去中心化交易所的交易量7.
1900/1/1 0:00:00近日,字節跳動社交戰略的”一進一退“引發媒體普遍關注。一方面,據Tech星球報道,繼推出虛擬形象”抖音仔仔“后,抖音又在近期推出了虛擬空間”抖音小窩“.
1900/1/1 0:00:00作者:周舟 香港已下定決心與新加坡、倫敦、紐約等城市爭奪全球加密金融中心和虛擬資產中心地位。10月16日,香港財政司司長陳茂波發表文章《香港的創科發展》,并指出要推動香港發展成國際虛擬資產中心.
1900/1/1 0:00:00本文來自 Medium,原文作者:Andre Cronje。近期,Yearn.finance 創始人 Andre Cronje 在其社交平臺曬圖暗示或將復出.
1900/1/1 0:00:00文章來源:wagame.eth 編譯:DeFi 之道 zksync 2.0 主網將在 3 周內到來.
1900/1/1 0:00:00