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

如何將你的合約升級到Solidity 0.8?_SOL

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,就會在溢出時自動回退交易。

Uniswap基金會:將在未來幾周討論如何部署超437萬枚ARB:金色財經報道,Uniswap 基金會表示將把 Arbitrum 分配的 4,378,188 枚 ARB 發送到 Arbitrum 上 Uniswap 基金會擁有的多重簽名地址(90xF4E08 開頭),接下來幾周將啟動關于如何部署這些資金的社區討論。[2023/4/18 14:11:14]

你可能會在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;????}}

美國議員要求孫宇晨解釋如何防止極端內容在DLive平臺上播出:2月10日消息,Reps. Raja Krishnamoorthi和Jackie Speier兩位美國議員寫信要求波場創始人孫宇晨和DLive首席執行官Charles Wayn解釋,繼上月華盛頓特區企圖叛亂后,他們計劃如何防止極端內容在BitTorrent旗下流媒體平臺DLive上播出。這封信與上個月國會的叛亂有關。幾名極右極端分子在美國國會大廈被攻破時通過DLive進行直播,其中一些人后來被捕。(CoinDesk)[2021/2/10 19:23:04]

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

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

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

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

直播 | 小鳳仙 > 交易所如何助力礦業發展?:金色財經 · 直播主辦的《 幣圈 “后浪” 仙女直播周》第4期今晚20:00準時開始,本期“后浪”仙女Aex CMO 小鳳仙將在直播間聊聊 “交易所如何助力礦業發展”,感興趣的朋友掃碼移步收聽![2020/6/9]

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

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

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

0x01:使用asset;

0x11:SafeMath的溢出。

0x12:除以0。

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

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

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

聲音 | 羅玫:金融機構非常重視如何對加密貨幣進行計量:據數字金融資產研究中心微信公眾號消息,清華經管數字金融資產研究中心主任羅玫稱如何對加密數字貨幣進行計量是國際國內證券監管機構、稅務和會計準則制定機構都非常重視的領域,國際會計準則和美國GAAP都沒有對加密數字貨幣的會計計量和確認制定單獨準則。建立新的財務報告規范需要會計準則制定委員會的參與,也需要和正在經歷變化的加密數字貨幣的證券規范、以及稅務規范同時融合更新。[2018/11/27]

0x32:索引超長度異常。

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

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

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

如何遷移到Solidity0.8

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

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

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

韓國政府正在考慮如何兌現沒收得來的加密貨幣:韓國政府正在考慮如何兌現最近沒收所得來的加密貨幣。作為一起刑事案件罰款,政府沒收了網站運營商“安恩”(Ahn)的191.32333418個比特幣。韓國最高法院此前判定,加密貨幣是政府可以沒收的財產。最有可能的選擇是通過政府所有的拍賣平臺進行拍賣。[2018/6/10]

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

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

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

只有在符合給定類型的情況下,才允許類型轉換,所以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:SOLLIDSOLIDDITSOLA幣BLIDSolidblockCreditcoin

聚幣
納斯達克與Hashdex合作推出全球首個加密資產ETF_ETF

本文來自TheBlock,作者:FrankChaparro譯者:Odaily星球日報余順遂 摘要: 一只加密ETF周二開始在百慕大證券交易所交易。該產品基于納斯達克的加密指數.

1900/1/1 0:00:00
加密貓 球星卡 他們是“天價”NFT的制造者_HAM

加密貓球星卡他們是“天價”NFT的制造者 DCNews 剛剛 452 “人類誕生以來的第一件事情就是收藏.

1900/1/1 0:00:00
通過新興的DeFi概念改善鏈上債務:期權_ETH

理解一下期權: 英文單詞是option,即選擇權,選擇在未來的某個時間點干或者不干某件事的權利.

1900/1/1 0:00:00
晚間必讀5篇 | 隱私幣能否成為牛市“新引擎”?_區塊鏈

晚間必讀5篇|隱私幣能否成為牛市“新引擎”? 金色薦讀 剛剛 22 1.一半海水一半火焰:隱私幣能否成為牛市“新引擎”?萊特幣MimbleWimble隱私協議代碼將進行測試.

1900/1/1 0:00:00
主網上線在即,Findora將如何在DeFi+Layer2兩大熱點上打響保衛戰丨鏈節點AMA_FIN

2月3日,Findora首席產品官Henry,FIndoraCMOLemonLin做客鏈節點ChainNode進行AMA.

1900/1/1 0:00:00
評論:資本之外,區塊鏈破圈正當時_區塊鏈

本文來源:未央網,作者:孟永輝當比特幣的價格一路上漲,它的終極歸宿便愈發清晰。歸根到底,它只不過是區塊鏈的一個應用場景,一味上漲的價格只會讓它不接地氣.

1900/1/1 0:00:00
ads