以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

如何將你的合約升級到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。只要寫上ab,就會在溢出時自動回退交易。

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

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

俄羅斯彼爾姆地區一家法院屏蔽解釋如何交易比特幣的網站:俄羅斯彼爾姆地區的一家法院決定屏蔽一些描述如何將加密貨幣兌換成法定貨幣的網站,當地檢察官聲稱,在俄羅斯傳播此類信息是違法的,違反了俄羅斯打擊犯罪收益合法化的立法,可能會促進非法洗錢行為。(Bitcoin.com)[2021/6/11 23:30:46]

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

如果你確實就希望代碼能夠溢出呢?還是非常在意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;????}}

美國國會研究人員:立法者需考慮數字貨幣立法將如何影響美元:金色財經報道,美國國會研究服務局在其題為“美元作為世界主要儲備貨幣”的報告中稱,不斷增長的加密貨幣空間的影響并沒有引起任何與美元地位有關的重大擔憂。報告承認,盡管“加密貨幣仍然是一個小而動蕩的利基市場”,但中央銀行數字貨幣(CBDC)正在興起。報告指出,迄今為止,尚無證據表明美元已脫離主要儲備貨幣。但是,國會不妨考慮一下包括制裁和數字貨幣在內的一系列政策領域的立法將如何影響美元。[2020/12/22 16:03:19]

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

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

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

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

直播|清水 > 交易所新秀WEX,如何憑借IVO突出重圍:金色財經 · 直播主辦的《 幣圈 “后浪” 仙女直播周》第13期15:00準時開始,本期“后浪”仙女WEX的CMO 清水將在直播間聊聊“交易所新秀WEX,如何憑借IVO突出重圍”,請掃碼移步收聽![2020/8/21]

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

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

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

0x01:使用asset;

0x11:SafeMath的溢出。

0x12:除以0。

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

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

英格蘭銀行正在探討如何將CBDC引入現有市場:英格蘭銀行(BoE)正在權衡發行以英鎊為單位的央行數字貨幣(CBDC)的利弊。他們剛發布了一份長達57頁的報告,探討了如何將CBDC引入現有市場,既充當價值存儲又用于日常交易。據悉,英國中央銀行逐漸意識到,數字英鎊可能會破壞當前的銀行體系。但是,數字貨幣可以利用最新的金融科技,使消費者更輕松快捷地進行交易。(Cointelegraph)[2020/3/13]

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

0x32:索引超長度異常。

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

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

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

如何遷移到Solidity0.8

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

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

動態 | 美國大學不知如何處理所得數字貨幣捐款:據Cryptoticker消息,美國大學處于數字資產捐贈的接收端,每年以比特幣和其他數字資產形式接受捐贈的美國大學名單繼續增長。然而,似乎并非所有大學都非常熱衷于接受不熟悉的資產作為捐贈,許多大學都不清楚如何處理他們所獲得的數字貨幣資金。[2018/10/18]

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

移除任何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:SOLLIDDITSOLIDSolarMineXethylidenegamecreditsSOLID幣

火必交易所
首發 | 從白銀行情分析比特幣的后續影響_區塊鏈

本文由NewBloc原創,授權金色財經首發。如今人們邁入2021年,已達1個多月的時間,回想去年此時的金融市場,先是由于流動性緊張導致風險資產相繼崩盤,后是加密貨幣市場的312事件發生,最后在全.

1900/1/1 0:00:00
春節不打烊,新春豪禮限時領(四)_NBA

尊敬的用戶: 新春將至,福利來襲,為回饋廣大用戶,WBF開展喜迎新春活動之“DOT八折限時大搶購”,活動詳情如下: 一、認購說明 1、2021年2月10日12:00-14:00可以搶購.

1900/1/1 0:00:00
關于“MDX /BAGS/SH充值上線”活動獎勵發放的公告_TPS

尊敬的ZT用戶: “MDX/BAGS/SH充值上線”活動已結束。活動獎勵已于2月5日發放至用戶ZT賬戶中,用戶可登陸自己ZT賬戶,在資產中查看是否已到賬。未達到活動要求的用戶則不予發放獎勵.

1900/1/1 0:00:00
比特幣持續震蕩 其他主流幣乘勢上行_比特幣

幣圈王哥:比特幣持續震蕩其他主流幣乘勢上行-八寶飯區塊鏈 比特幣午間行情走勢詳解 四小時級別圖中,布林帶收口,行情再布林帶的中上軌區域運行,現位于37362;五日均線和十日均線均趨于平緩運行.

1900/1/1 0:00:00
XT 關于即將上線 SAND 的公告_TPS

尊敬的XT用戶: XT即將上線SAND,詳情如下:充提時間:2021年2月7日16:16開放交易:2021年2月8日16:16TheSandbox是一個虛擬游戲世界.

1900/1/1 0:00:00
關于開啟TRC20-USDT充提功能的公告_RC20

關于開啟TRC20-USDT充提功能的公告尊敬的用戶:DiBiGlobal交易平臺將于2021年2月4日21:30(GMT+8)開放TRC20-USDT的充提功能.

1900/1/1 0:00:00
ads