比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads

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

Author:

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

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

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

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

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

if-else

借貸平臺Maple Finance停止在Solana上的借貸:金色財經報道,基于區塊鏈的貸款平臺Maple Finance做出了重要“戰略決定”,加倍使用以太坊區塊鏈并停止在Solana區塊鏈上的借貸。

此前報道,借貸協議Maple Finance發布2.0版本。[2022/12/15 21:45:35]

for 循環

while 循環

do-while 循環

加密借貸和交易公司Genesis向Maple基于Solana的借貸平臺投入7500萬美元:金色財經報道,加密借貸和交易公司Genesis正在向 Maple 基于 Solana 的借貸平臺投入 7500 萬美元來擴大其去中心化金融(DeFi)業務。

Maple 今年早些時候推出了基于 Solana 的平臺,還在以太坊上運行一個借貸平臺,通過此次注資,Genesis 將成為 Maple Solana 平臺資金池的首個中心化交易公司。

據 Genesis 稱,交易公司 Wintermute 和 Amber Group 計劃從該池中借款。Genesis 表示,Maple 平臺上的借款方經過由資金池代表監督的盡職調查流程,從而降低信用風險,通過 Maple 的基礎設施運行部分貸款賬簿,通過用鏈上功能替換傳統軟件工具,可以降低運營成本。(The Block)[2022/6/2 3:57:03]

基于 Solana 的 Messenger Secretum 支持 OTC 和 NFT 功能:10月31日消息,Secretum是一個完全去中心化的即時通訊應用程序,它利用區塊鏈節點來解決這一領域最危險的瓶頸。此外,它還通過 OTC 功能和不可替代的代幣存儲和交易模塊豐富了 Messenger 的使用體驗。(u.today)[2021/10/31 6:22:11]

三元運算符

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

Solana鏈上USDC發行量達24.9億枚 USDT發行量達11.4億枚:9月13日消息,據官方數據顯示,Solana鏈上USDC的總發行量已達24.9億枚,USDT的總發行量已達11.4億枚。[2021/9/13 23:20:43]

另外還有 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:SOLDITLIDSOLID2023年sol幣最新消息gamecreditsMOSOLIDSOLID價格

比特幣最新價格
區塊鏈:資訊:加密寒冬中區塊鏈游戲依舊保持穩定

以太坊仍然主導著市場 投資者對這個永無休止的加密貨幣寒冬感到惱火。它已經摧毀了其他行業,包括DeFi,NFT,dApp等.

1900/1/1 0:00:00
FTX:FTX千鈞一發之際 給加密行業哪些警示?

加密行業永遠不缺戲劇,昨夜今晨的兩次驚天逆轉,讓社區用戶跟著“提心吊膽”。而事情的結局令人失望,因為針對2008年雷曼兄弟時刻而催生的加密貨幣行業卻重走了雷曼之路.

1900/1/1 0:00:00
ENC:ZT三周年上線積分商城 眾多好禮等你來

據官網公告,ZT已經上線積分商城,目前用戶可以在APP端進行操作。積分商城是ZT為用戶提供的福利專區,用戶完成任務后可獲得對應獎勵.

1900/1/1 0:00:00
FTX:FTX 遭受GAS竊取攻擊 黑客0成本鑄造XEN Token 17K次

我們知道最近有個火爆的token,叫做XEN,只需要付出gas費就能鑄造大量代幣,那有沒有辦法讓別人替我們支付gas費呢,最近就有一個黑客正在讓 FTX 幫他付錢.

1900/1/1 0:00:00
以太坊:以太坊將成為元宇宙的貨幣?

這些天來,元宇宙(metaverse)一直是一個熱門話題,在我們最近的播客中,Raoul Pal 將其定義為“數字流動性”.

1900/1/1 0:00:00
加密貨幣:加密貨幣市場高速增長 中東和北非增速達48%

FX168財經報社(北美)訊 周三(10月5日)區塊鏈研究機構Chainalysis在一份報告中稱,中東和北非是世界上增長最快的加密貨幣市場,截至今年6月,這一地區的加密貨幣接收量增長了48%.

1900/1/1 0:00:00
ads