這一講,我們將介紹 solidity 中的控制流,然后講如何用 solidity 實現插入排序(InsertionSort),一個看起來簡單,但實際上很容易寫出 bug 的程序。
我最近在重新學 solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每周更新 1-3 講。
所有代碼和教程開源在 github: github.com/AmazingAng/WTFSolidity
Solidity 的控制流與其他語言類似,主要包含以下幾種:
if-else
Solana手機將于12月15日起交付給開發者,于2023年初正式推出:金色財經報道,Solana手機Saga的預生產版本將于12月15日開始交付給開發人員,該手機正準備在 2023 年初推出。
根據里斯本 Breakpoint 的最新消息,大約 3,500 個以開發人員為中心的套件已經制造出來并裝箱。最后一個障礙是正在通過最終測試的發布軟件。[2022/11/5 12:20:15]
for 循環
while 循環
CME為Solana,Cardano,Polygon等幣種增加參考利率:金色財經消息,芝加哥商品交易所集團(CME Group)與加密貨幣指數提供商CF benchmark合作,將于4月25日推出新的利率。新的參考價格將包括Algorand (ALGO)、比特幣現金(BCH)、Cardano、Chainlink(LINK)、Cosmos(ATOM)、Litecoin(LTC)、Polkadot、Polygon(MATIC)、Solana、Stellar Lumens (XLM)和Uniswap(UNI)的指數定價。
參考匯率和指數本身不是可交易的投資產品。顧名思義,參考利率是一項資產的價格數據。但擁有這些數據是提供etf和期貨合約等產品的重要前提。(decrypt)[2022/4/10 14:15:41]
do-while 循環
跨鏈聚合協議iSwap正式上線Solana主網:近日,iSwap新增了Solana主網,這是繼火幣生態鏈、以太坊、幣安智能鏈、OEC、Arbitrum、Fantom、Polygon和Avalanche之后,iSwap新增的又一公鏈網絡。
此次升級支持Solana主網跨鏈交易,為用戶提供更加豐富更加靈活的交易選擇,用戶可在iSwap體驗3秒跨鏈交易,提高鏈上資產流動性。[2022/3/15 13:57:49]
三元運算符
三元運算符是 solidity 中唯一一個接受三個操作數的運算符,規則條件? 條件為真的表達式:條件為假的表達式。此運算符經常用作 if 語句的快捷方式。
鏈上云平臺ETF交易專區 SOL3L/USDT 今日漲幅超過40%:據BitWind.com數據顯示,鏈上云平臺ETF交易專區中,SOL3L/USDT幣對今日午后漲幅超過40%,此外,AMPL3L漲幅超過20%。
鏈上云平臺,專注提供優質項目和熱門資產。行情數據僅供參考,投資有風險,入市需謹慎。[2020/9/14]
另外還有 continue(立即進入下一個循環)和 break(跳出當前循環)關鍵字可以使用。
寫在前面:
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
原文標題:《Bankless 創始人:加密「群英像」——加密僧侶、信徒、騙子》(Why Is Crypto Full of Scams?)撰文:David Hoffman.
1900/1/1 0:00:00本文來自來自OP Research 撰文:Sihan, CloudY 審核:Crystal 摘要:在我們上一篇介紹 DeSci 的文章中.
1900/1/1 0:00:00吃吃喝喝玩玩的國慶假期結束了,繼續努力工作賺錢等待下一次假期吧~祝每位金色數藏的小伙伴節后快樂依舊!為了讓快樂延續,現在我們來公布一下「小金庫杯·金色財經六周年」創作大賽的獲獎名單.
1900/1/1 0:00:00新加坡金融監管局(MAS)新聞發言人再次向《區塊鏈日報》記者透露,目前已經向89家DPT申請的企業發出通知,如果申請人采取必要措施以滿足MAS對于持牌運營的要求.
1900/1/1 0:00:00本文來自 caia,原文作者:VettaFi Research 副主任 Roxanna IslamOdaily 星球日報譯者 | Moni 在當前宏觀市場動蕩的情況下.
1900/1/1 0:00:00撰寫:Jacquelyn Melinek編譯:深潮 TechFlow周三,Alliance DAO 的“演示日”活動在 FTX 崩盤期間舉行,我們仍然看到了許多新的且不錯的加密初創項目.
1900/1/1 0:00:00