以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 世界幣 > Info

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

Author:

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

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

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

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

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

if-else

Solana生態DeFi協議Friktion:關閉其前端網站,敦促客戶提取資金:1月27日消息,基于Solana的投資組合管理平臺Friktion表示,正在關閉其前端網站,敦促客戶撤回資產。這意味著前端網站將不再提供相同的服務,但基礎協議仍然可以在區塊鏈上訪問。

根據DeFiLlama數據顯示,Friktion總市值已從去年4月的1.64億美元峰值下降至500萬美元,下降了約97%。據悉,該平臺在運行期間交易了30億美元,擁有超2萬個用戶錢包。

金色財經此前報道,去年11月,基于Solana的投資組合管理平臺Friktion首次為機構客戶推出了加密貨幣貸款產品。[2023/1/27 11:32:34]

for 循環

數據:當前Solana生態總市值為227.9億美元:金色財經消息,據CoinGecko最新數據顯示,當前Solana生態總市值為227.9億美元(截至發稿時為22,793,348,461美元),24小時交易額為1,836,494,668美元。[2022/8/7 12:06:53]

while 循環

do-while 循環

三元運算符

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

The Graph托管服務正在集成Solana:11月10日消息,The Graph表示,其托管服務正在集成Solana,集成將使用Firehose,從而實現更快的索引。The Graph將使開發人員更容易:查詢Solana區塊鏈、訪問歷史數據、可視化數據分析等。此外,The Graph將開始同步Solana子圖并開始支持Solana區塊鏈上的數據需求。[2021/11/10 6:43:39]

另外還有 continue(立即進入下一個循環)和 break(跳出當前循環)關鍵字可以使用。

寫在前面:

90% 以上的人用 solidity 寫插入算法都會出錯。插入排序

灰度增持MANA和SOL:據歐科云鏈鏈上大師數據顯示,截至美東時間12月6日,灰度投資已發行的14支單一資產信托基金總價值為453.42億美元;同期灰度信托增持4050枚MANA和498枚SOL,其余幣種信托未見增持;當前灰度MANA信托共計持有1847.83萬MANA,占供應總量的1.01%。[2021/12/7 12:56:00]

排序算法解決的問題是將無序的一組數字,例如 [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:SOLSOLIDLIDDITSOLX幣SOLID幣SolidexRebasing Liquidity

世界幣
國家隊進場 9家央媒背景的數字藏?品平臺盤點_區塊鏈

來源:ForeChain 作者:袁滿自“央數藏”在9月16日正式上線,國內央媒幾乎全員入局數字藏品市場,這對于國內數藏市場的發展來說無疑是個大動作.

1900/1/1 0:00:00
元宇宙賽道上:Meta激進 字節保守_元宇宙

近日,字節跳動社交戰略的”一進一退“引發媒體普遍關注。一方面,據Tech星球報道,繼推出虛擬形象”抖音仔仔“后,抖音又在近期推出了虛擬空間”抖音小窩“.

1900/1/1 0:00:00
新加坡「加密天堂」地位遭受沖擊_加密貨幣

對現已崩潰的加密貨幣運營商 Terraform Labs 聯合創始人 Do Kwon 的國際追捕將焦點放在了新加坡。在數個與這個城市國家有聯系的數字資產基金倒閉后,新加坡的聲譽受到了打擊.

1900/1/1 0:00:00
元宇宙中金融服務的未來_元宇宙

 今年,元宇宙作為一個火熱的概念已經滲透到廣大媒體的大部分技術板塊中,在Facebook于2021年11月更名為Meta時,這一概念就已經進入了大眾的視野.

1900/1/1 0:00:00
FTX事件影響:行情及后續風險預判_FTX

原文標題:《FTX 事件影響:行情及后續風險預判》原文作者: Flora Li、Nolan Liu、ZengHang、Barry Jiang.

1900/1/1 0:00:00
「小金庫杯·六周年」創作大賽獲獎名單_coinbase

吃吃喝喝玩玩的國慶假期結束了,繼續努力工作賺錢等待下一次假期吧~祝每位金色數藏的小伙伴節后快樂依舊!為了讓快樂延續,現在我們來公布一下「小金庫杯·金色財經六周年」創作大賽的獲獎名單.

1900/1/1 0:00:00
ads