買比特幣 買比特幣
Ctrl+D 買比特幣
ads

SOLID:Solidity極簡入門第十講:控制流、用solidity實現插入排序_Pitquidity-BSC

Author:

Time:1900/1/1 0:00:00

這一講,我們將介紹 solidity 中的控制流,然后講如何用 solidity 實現插入排序(InsertionSort),一個看起來簡單,但實際上很容易寫出 bug 的程序。

我最近在重新學 solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每周更新 1-3 講。

所有代碼和教程開源在 github: github.com/AmazingAng/WTFSolidity

Solidity 的控制流與其他語言類似,主要包含以下幾種:

if-else

Soluna Holdings宣布進行注冊直接發售:金色財經報道,加密采礦數據中心開發商Soluna Holdings宣布已與公司的某些現有投資者簽訂證券購買協議,初始購買金額為855,000美元的普通股和購買普通股的五年認股權證,包括之前為公司可轉換票據交易提供資金的投資者。認股權證可立即行使,行使價為每股 0.76 美元,如果以現金全額行使,潛在總行使價最高可達 1,710,000 美元。公司打算將此次發行的凈收益用于數據中心的收購、開發和增長,包括加密貨幣挖掘處理器、其他計算機處理設備、數據存儲、電力基礎設施、軟件和不動產(即土地和建筑物)和業務,包括但不限于 Project Dorothy 設施,以及用于營運資金和一般公司用途。[2022/12/6 21:24:25]

for 循環

Andre Cronje新項目Solidly總鎖倉量突破20億美元:2 月 27 日,據 Defi Llama 數據顯示,Andre Cronje 新項目 Solidly 總鎖倉量已達到 21 億美元,在部署過 Fantom 鏈的 DeFi 項目中排名第二,排在第一位的是 Multichain,當前總鎖倉量已達 80.1 億美元。[2022/2/27 10:19:15]

while 循環

do-while 循環

Solana 區塊鏈上的NFT銷售額突破10 億美元:金色財經報道,據CryptoSlam數據,截至 2022 年 1 月份,Solana 區塊鏈上的非同質代幣 (NFT) 銷售額突破 10 億美元。Solana 的最高周交易量發生在 2021 年 8 月 29 日,達到 1.6039 億美元。第一個突破 100 萬美元的 Solana NFT 項目為Degenerate Ape Academy NFT, 是10,000 只算法生成的 3D 靈長類動物集合的一部分。[2022/1/20 9:00:25]

三元運算符

三元運算符是 solidity 中唯一一個接受三個操作數的運算符,規則條件? 條件為真的表達式:條件為假的表達式。此運算符經常用作 if 語句的快捷方式。

Solana上的借貸平臺JetProtocol發布白皮書:Jet Protocol于2021年7月30日發布白皮書。Jet為Solana上的借貸平臺,專注于創新借貸產品和跨鏈利率套利。

Jet Protocol于2021年7月10日完成種子輪融資,融資規模480萬美元,MGNR、漢金資詢、CMS Holdings、Alameda Research、ParaFi Capital、Robot Ventures、Defiance Capital、Kenetic Capital、Stablenode等機構參投。[2021/7/30 1:25:30]

另外還有 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

Tags:SOLLIDSOLIDDITSOLCASHSolidexSOLID價格Pitquidity-BSC

芝麻開門交易所
數字貨幣:法定貨幣與加密貨幣有什么區別_區塊鏈工程專業學什么女生好就業

與具有有形價值的黃金不同,法定貨幣僅由政府權威支持。法定貨幣包括美元、歐元、英鎊和日元。“菲亞特”是指“權威或任意的秩序”.

1900/1/1 0:00:00
PIC:元宇宙新基建四小天王_SPICE幣

元宇宙宏觀、龐大而又復雜,當下各路玩家對元宇宙進行了諸多幻想。有人認為元宇宙是電影頭號玩家里開放世界;有人認為元宇宙就是在現有的互聯網下增加AI、AR/VR技術;還有人說元宇宙是下一代互聯網.

1900/1/1 0:00:00
NBS:金色觀察 | 香港VS新加坡 誰能成為亞洲的Web 3中心_nbs幣官網

11月1日,香港金融科技周正式開啟,與常規金融論壇不同的是,在本次科技周上,香港正式宣布關于對于虛擬資產有政策傾向性的《宣言》.

1900/1/1 0:00:00
PUNK:Punks頭像風靡全網 NA(Nirvana)Chain如何賦能NFT賽場_PUNKS

如果說DeFi的出現啟動了久違的牛市,那么NFT的興起則將上半年市場的火爆行情得以延續。對于加密市場來說,2021年的后半年將毫無疑問屬于NFT.

1900/1/1 0:00:00
MET:華爾街日報:看了這篇文章你就知道Meta的元宇宙出了什么問題_metamask真的假的

本文轉自公號:老雅痞(laoyapi) 大多數訪問 Horizon Worlds 的游客通常不會在第一個月后返回;“空虛的世界是悲傷的世界”.

1900/1/1 0:00:00
SWAP:速覽 Uniswap V3在zkSync上部署的治理細節_zksync幣合法嗎

Uniswap 治理投票剛通過了4千萬張 "贊成 "票,預計Uniswap V3 將在4-6周內在zkSync上部署。 有趣的是,部署本身不會由Uniswap團隊完成.

1900/1/1 0:00:00
ads