以太坊價格 以太坊價格
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

價值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

Tags:SOLDITLIDSOLIDSOLA價格wesendit幣gateethylideneVSolidus

歐易交易所app官網下載
區塊鏈:晚間必讀 | 香港下定決心 競爭全球虛擬資產中心

中本聰在2009年發布比特幣白皮書和開源代碼,從那時起,加密行業就一直保持著開放的精神。從一開始,任何人都可以復制代碼、變換營銷方式并推出他們“自己的”代幣和網絡.

1900/1/1 0:00:00
VER:2022年10月Web3.0領域發生超40起重大黑客攻擊事件 平均損失接近千萬美元

2022年至今,Web3.0領域因欺詐騙局與漏洞所導致的安全事件已造成約28億美元的損失,今年共有508起攻擊事件記錄在案.

1900/1/1 0:00:00
以太坊:以太坊新質押模型并不能代表 ETH 可被視為證券

來源:老雅痞 1. 簡介 在以太坊過渡到權益證明共識機制(「合并」)之后,不同的評論家認為,以太坊的新質押模式可能導致其原始Token以太坊(ETH)被視為美國證券法下的證券.

1900/1/1 0:00:00
ETF:資訊:加密寒冬中區塊鏈游戲依舊保持穩定

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

1900/1/1 0:00:00
BIO:盤點固件安全賽道 a16z看到了什么?

原文來源:阿法兔研究筆記本文是筆者最近關于基礎安全領域的人、趨勢、現象的觀察,把系列思考總結成為了文章,試圖從幾個角度,探討一個國內相對較少有人探討的賽道——固件安全市場和需求變化的方向.

1900/1/1 0:00:00
以太坊:金色Web3.0日報 | DeFi資管平臺Zapper宣布支持Optimism NFT

1.DeFi代幣總市值:452.31億美元 DeFi總市值 數據來源:coingecko2.過去24小時去中心化交易所的交易量21.

1900/1/1 0:00:00
ads