比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

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

Author:

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

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

我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity極簡入門」,供小白們使用,每周更新1-3講。

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

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

控制流

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

Solana社區成員提議創建可將Ed25519密鑰對轉換為Curve25519密鑰對的加密標準:4月10日消息,Solana社區成員Valentin發起一項提案,建議創建一個將Ed25519密鑰對轉換為為Diffie Hellman密鑰交換協議設計的Curve25519密鑰對的標準,這將支持非對稱加密,而不必生成單獨的密鑰來執行這種操作。

Valentin解釋稱,隨著Solana生態系統的發展,對于保護敏感數據(如帳戶狀態或IPFS和Arveawe等分布式文件系統上的文件),對Solana密鑰對加密標準的需求變得越來越重要。雖然Ed25519密鑰對對簽名消息有效,但它們不能用于非對稱加密,而非對稱加密對于用戶隱私和數據保護至關重要。再次,提出這個建議是為了就如何派生Solana密鑰對以兼容Diffie Hellman密鑰交換或其他類型的加密機制兼容達成一致。一旦就此主題達成一致,錢包就可以開始實施加密功能,作為錢包標準的一部分。

Valentin還提到,作為從常規Solana密鑰對派生Curve25519密鑰對來執行加密的替代方案,Jordan Sexton建議可以從任何錢包(包括硬件錢包)的簽名消息中派生密鑰對來派生加密密鑰。這種方法的一個問題可能是,一旦兩個dApp請求使用相同種子的簽名,密碼就可能被破解。需要某種在每次加密時都必須不同的一次性隨機數,這很難實現。[2023/4/10 13:54:02]

if-else

Solana Space將在二月底關閉紐約和邁阿密門店:2月22日消息,以Solana生態為主題的線下零售門店Solana Space在社交媒體宣布該公司將在二月底關閉紐約市和邁阿密市的門店,并將工作重心轉移到NFT等數字產品。據Solana Spaces創始人Vibhu Norby透露,Solana Space實體店本可以繼續運營,但沒有意義,因為線上流量和實體店差不多,不過未來幾周內會在印度開設一家新的Solana Space實體店。[2023/2/22 12:21:16]

for循環

Solana生態現金流協議Zebec宣布通過Wormhole擴展至BNB Chain:9月27日消息,Solana生態現金流協議Zebec宣布通過Wormhole擴展至BNB Chain,跨鏈擴展正在開發和測試。未來Zebec用戶將能夠在交易中使用來自 BNB Chain 的代幣。

據悉,Zebec作為Solana上可編程的多簽資管和流式支付協議,支持以實時和連續支付的方式發送資金,可用于工資單、投資等場景,旨在幫助人們以流支付形式獲取報酬、購買產品及服務。此前8月份Zebec以10億美元估值完成850萬美元融資,Circle Ventures等參投。[2022/9/27 22:33:29]

前美國CFTC專員Dawn Stump加入加密風險監測公司Solidus Labs擔任顧問:8月16日消息,據TechCrunch記者Jacquelyn Melinek的推文,前美國CFTC(商品期貨交易委員會)成員Dawn Stump已加入加密貨幣風險監控公司Solidus Labs擔任顧問。

據悉,Dunn Stump于2018年9月至2022年4月擔任CFTC成員。Solidus Labs由前高盛工程師和網絡安全專家于2018年創立,是一家提供監管風險和合規服務的加密貨幣安全初創公司。[2022/8/16 12:29:02]

while循環

do-while循環

三元運算符

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

另外還有continue和break關鍵字可以使用。

用solidity實現插入排序

寫在前面:

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

排序算法解決的問題是將無序的一組數字,例如,從小到大一次排列好。插入排序是最簡單的一種排序算法,也是很多人學習的第一個算法。它的思路很簡答,從前往后,依次將每一個數和排在他前面的數字比大小,如果比前面的數字小,就互換位置。示意圖:

插入排序

python代碼

我們可以先看一下插入排序的python代碼:

改寫成solidity后有BUG!

一共8行python代碼就可以完成插入排序,非常簡單。那么我們將它改寫成solidity代碼,將函數,變量,循環等等都做了相應的轉換,只需要9行代碼:

那我們把改好的放到remix上去跑,輸入。BOOM!有bug!改了半天,沒找到bug在哪。我又去google搜」solidityinsertionsort」,然后發現網上用solidity寫的插入算法教程都是錯的,比如:SortinginSoliditywithoutComparison

正確的solidity插入排序

花了幾個小時,在Dapp-Learning社群一個朋友的幫助下,終于找到了bug所在。solidity中最常用的變量類型是uint,也就是正整數,取到負值的話,會報underflow錯誤。而在插入算法中,變量j有可能會取到-1,引起報錯。

這里,我們需要把j加1,讓它無法取到負值。正確代碼:

運行后的結果:

總結

這一講,我們介紹了solidity中控制流,并且用solidity寫了插入排序。看起來很簡單,但實際很難。這就是solidity,坑很多,每個月都有項目因為這些小bug損失幾千萬甚至上億美元。掌握好基礎,不斷練習,才能寫出更好的solidity代碼。

原文:《Solidity極簡入門:10.控制流,用solidity實現插入排序》

來源:panews

Tags:SOLSOLIDLIDDITsol幣是什么幣中文名SolidblockVSolidusSMARTCREDIT幣

以太坊價格今日行情
金色早報 | Huobi Global控股股東完成股份出售_加密貨幣

頭條 ▌HuobiGlobal控股股東完成股份出售金色財經報道,HuobiGlobal今天宣布,HuobiGlobal控股股東公司已向百域資本旗下基金轉讓所持有的全部HuobiGlobal股份.

1900/1/1 0:00:00
拋開去中心化敘事 我們需要DAO的4個理由_TPS

如果不關注去中心化的實踐載體這一身份,DAO被需要的理由是?我們分析了行業內數十篇深度文章,提出以下四個觀點.

1900/1/1 0:00:00
金色早報 | Facebook Pay正式更名為Meta Pay_比特幣

頭條 ▌FacebookPay正式更名為MetaPay金色財經報道,Meta周三宣布,FacebookPay正式更名為MetaPay,該公司指出,對MetaPay的更改只是品牌名稱的更改.

1900/1/1 0:00:00
HistoryDAO:去中心化《史記》_DAO

當人人都是“司馬遷”,是否能改寫“歷史由勝利者決定”的局面?作者:HistoryDAO9月15日,以太坊順利完成了合并,其PoW的最后一個區塊被VanityBlock鑄造成了NFT.

1900/1/1 0:00:00
模塊化:以太坊未來十年的破局之路_ROLL

原文標題:《破局之路的探索——區塊鏈模塊化》原文作者:CodexLabs?VitalikButerin提出TheBlockchainTrilemma已經有5年之久,?論是ETH-core社區.

1900/1/1 0:00:00
熊市之下 比特幣和美股的相關性究竟如何?_ETF

本文來自caia,原文作者:VettaFiResearch副主任RoxannaIslamOdaily星球日報譯者|Moni 在當前宏觀市場動蕩的情況下,“相關性”是一個需要認真考慮的因素.

1900/1/1 0:00:00
ads