加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads

如何將你的合約升級到Solidity 0.8?_LID:Nolian Credits

Author:

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

我們離Solidity1.0的發布越來越近了。Solidity0.8在0.7發布之后僅5個月就發布了!

登鏈社區正在同步翻譯Solidity0.8的文檔

今天我們就來探討一下如何把合約遷移升級到0.8版本......

尤達寶寶發布

0.8新功能和如何使用

我們來看看兩個大的新功能:集成的SafeMath和新的錯誤處理。

1.集成SafeMath

SafeMathMeme

沒錯,你不需要再導入OpenzeppelinSafeMath了。最重要的是,你不需要做任何事情就可以激活Solidity集成的SafeMath。只要寫上a+b,就會在溢出時自動回退交易。

Terra生態行情網站Coinhall:無論Terra2.0最終結果如何,將繼續支持以完成集成:5月18日消息,Terra生態行情網站Coinhall發推稱,不知道Terra2.0的結果是什么,也無法評論最好的提案會是什么樣子,但將在繼續支持Terra1.0的基礎上完成集成,以便Terra用戶仍然可以在任一鏈上使用這個熟悉的平臺。[2022/5/18 3:25:02]

你可能會在Remix等工具中看到如下錯誤提示,因為0.8還沒有完全支持。比如溢出還沒有給出確切的原因。

?transact?to?Solidity08.test?errored:?VM?error:?revert.?revert

但這種情況在未來應該會有所改變。

如果你確實就希望代碼能夠溢出呢?還是非常在意Gas費了?

則通過unchecked形式包裝語句來停用SafeMath:

contract?Solidity08?{????function?test()?external?pure?returns(uint256)?{????????//?默認使用?SafeMath?,此時會回退????????uint256?x?=?0;????????x--;????????return?x;????}}contract?Solidity08?{????function?test()?external?pure?returns(uint256)?{????????//?不使用SafeMath,返回?type(uint256).max????????uint256?x?=?0;????????unchecked?{?x--;?}????????return?x;????}}

美聯儲威廉姆斯:加息的時機和速度將取決于通貨膨脹和經濟如何發展:美聯儲威廉姆斯:加息的時機和速度將取決于通貨膨脹和經濟如何發展。美聯儲在看到勞動力市場大幅改善和高通脹后,采取加息和取消寬松政策是有道理的。 (金十)[2022/1/15 8:50:19]

2.無效的操作碼被還原取代

到目前為止,某些操作會導致INVALID操作碼的執行。這個操作碼的問題是,它消耗掉所有剩余的Gas。這顯然是不好的且沒必要。為什么要浪費Gas,把它捐給礦工?

更多細節,在這里查看revert和assert的區別。

現在Solidity使用revert操作碼。為了區分常規revert和系統內部錯誤,Solidity在返回數據前加上一個標識符:

常規Revert錯誤以keccak256(Error(string))的前四個字節開始,等于0x08c379a0。

**系統內部錯誤**以keccak256(Panic(uint256))的前四個字節開始,等于0x4e487b71。

動態 | 火幣中國CEO與馬來西亞總理討論區塊鏈將如何在馬來西亞落地:據雅虎財經消息,近日,火幣中國CEO袁煜明與馬來西亞總理馬哈蒂爾(Mahathir Mohamad)就“如何在制造業和能源行業中應用區塊鏈”以及“區塊鏈將如何在馬來西亞落地”進行了討論。[2019/5/29]

Panic有一個額外的錯誤標識。目前可用的Panic有:

0x01:使用asset;

0x11:SafeMath的溢出。

0x12:除以0。

0x21:轉換為不存在的枚舉類型。

0x22:存儲字節數組編碼錯誤。

0x31:在一個空數組上pop()。

0x32:索引超長度異常。

0x41:分配過多的內存或創建過大的數組。

0x51:調用未初始化的內部函數類型的變量。

更多細節請參見文檔中新的錯誤處理部分這里。

如何遷移到Solidity0.8

聲音 | 加拿大央行副行長:加拿大央行正在考慮如何應對加密資產的風險:據溫哥華太陽報報道,加拿大銀行副行長Timothy Lane在卡爾加里大學Haskayne商學院講話時表示:加拿大央行正在考慮如何應對加密資產的風險。[2018/10/2]

在大多數情況下,遷移應該是非常直接的。只有在一些情況下,你做奇怪的類型轉換可能會變得更加困難。

你必須為遷移做出的改變包括:

ABIEncoderV2現在是默認自動激活。從0.6開始,Encoder就不再是實驗性的了,只是因為遺留的原因,保留了pragmaexperimental這個名字。現在你不需要再加這行了。

移除任何OpenzeppelinSafeMath,你不再需要它了。

可能需要進行一些類型轉換。

msg.sender和tx.origin默認不屬于payable類型。將msg.sender.transfer改為payable(msg.sender).transfer。

聲音 | V神:如何公平有效地分配資源取決于機制設計的可信度:據prnewswire消息,V神表示,好的機制應該能夠給需求方分配最佳資源,無論需求方是項目、政府還是公司。如何公平、有效地分配資源取決于機制設計的可信度。雖然中心化機制仍然是常態,但這要求所有參與方都相信中心化機制能夠正確運作。[2018/9/15]

只有在符合給定類型的情況下,才允許類型轉換,所以uint256(-1)將不再工作。使用type(uint256).max代替。

當多次改變符號時,類型轉換在某些情況下會受到限制,因為類型轉換的順序可能會對結果產生影響。你現在會看到一個類似TypeError的錯誤。不允許從int256到bytes32進行顯示的類型轉換,得先手動轉換為uint256。

修飾組合

myContract.functionCall{gas:10000}{value:1ether}()改為:

myContract.functionCall{gas:10000,value:1ether}()。

將x**y**z改為(x**y)**z,因為默認的執行順序改變了。

將byte類型改為byte1。

我省略了一些細節,關于完整的變更日志和所有變更的細節,請查看文檔這里。

來源:https://soliditydeveloper.com/solidity-0.8

參考資料

登鏈翻譯計劃:https://github.com/lbc-team/Pioneer

翻譯小組:https://learnblockchain.cn/people/412

Tiny熊:https://learnblockchain.cn/people/15

Solidity0.8:https://blog.soliditylang.org/2020/12/16/solidity-v0.8.0-release-announcement/

0.7發布:https://blog.soliditylang.org/2020/07/28/solidity-v0.7.0-release-announcement/

Solidity0.8的文檔:https://learnblockchain.cn/docs/solidity/

SafeMath:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol

這里:https://medium.com/blockchannel/the-use-of-revert-assert-and-require-in-solidity-and-the-new-revert-opcode-in-the-evm-1a3a7990e06e

這里:https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require

這里:https://docs.soliditylang.org/en/latest/080-breaking-changes.html

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

譯文出自:登鏈翻譯計劃

譯者:翻譯小組

校對:Tiny熊

Tags:LIDSOLSOLIDDITVSolidussol幣有價值嗎SolidexNolian Credits

幣安app官方下載最新版
證監會局長撰文:比特幣引發的全球“新型貨幣戰爭”才剛剛開始_數字貨幣:HASH

證監會科技監管局局長姚前表示,隨著現代信息技術革命的興起,技術對貨幣的影響正達到前所未有的狀態,比特幣已經引發了全球大規模的數字貨幣實驗。數字時代已然來臨,數字貨幣時代也必將來臨.

1900/1/1 0:00:00
2.9午間行情:前高已破 小目標在這_加密貨幣:比特幣sv和比特幣區別

據OKEx的數據顯示,當前BTC/USDT現貨報價為46600美元,24小時振幅為21%。比特幣稍作調整后再度挑戰40000美金上方的拋壓區,并放量攻破,最高打到了47470美金位置,一萬美金的.

1900/1/1 0:00:00
以太坊價格飛漲的背后 治理是如何運作的?_以太坊:POO

參與者 以太坊客戶端開發者-任何維護以太坊客戶端的人。這包括Geth、OpenEthereum、Nethermind開發者以及Besu開發者和維護這些客戶端的EthereumClassic分叉的.

1900/1/1 0:00:00
以太坊礦工可提取價值(MEV) 為何說這與你密切有關_MEV:MEVR

原文標題:《關于以太坊MEV的一切為何說這與你密切有關》注:原文作者是來自Paradigm基金的研究員CharlieNoyes,在這篇文章中,他解釋了礦工可提取價值的概念及類型,其表示.

1900/1/1 0:00:00
拜登政府對加密貨幣的態度:更友好更有效的監管_加密貨幣:GENS

本周特斯拉的驚天15億,打破了比特幣近一個月的盤亙走勢,更是令比特幣一舉向5萬美金的下一個里程碑躍進.

1900/1/1 0:00:00
DeFi 1月復盤:多個頭部項目創下新高,算法穩定幣表現不佳_EFI:ANC

文?|沉思錄?編輯|畢彤彤出品|PANews在ICO熱潮過去3年之后,ETH再次在一月份創下新高.

1900/1/1 0:00:00
ads