比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > DYDX > Info

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

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

直播|李慧:顯卡礦池如何殺出重圍:金色財經 · 直播主辦的《 幣圈 “后浪” 仙女直播周》第8期14:00準時開始,本期“后浪”仙女蜘蛛礦池 市場總監 李慧將在直播間聊聊“顯卡礦池如何殺出重圍”,感興趣的朋友掃碼移步收聽![2020/7/11]

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

動態 | 芬蘭海關對如何處理繳獲的比特幣感到困惑:金色財經報道,芬蘭財政部下屬的海關一直在考慮如何處理幾年前從販手中繳獲的1666枚比特幣。據悉,芬蘭海關不想拍賣沒收的比特幣,因為可能會將其返還給犯罪分子。這些比特幣在沒收的時候價值不到70萬歐元(約合76萬美元)。根據Coin360的數據,截至目前,這1666枚比特幣的價值接近1500萬歐元(超過1550萬美元)。據報道,該機構最初計劃在2018年拍賣這些資金,但最終以“反洗錢”為由凍結了這些比特幣。報告指出,除了持有超過1500萬美元的比特幣外,芬蘭海關還持有一些價值數百萬歐元的山寨幣。[2020/2/26]

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

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

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

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

聲音 | 迅雷鏈張慧勇:區塊鏈技術如何在實體經濟中應用是亟待解決的問題:5月15日,在世界智能大會2019全球區塊鏈科技創新峰會上,迅雷鏈開放平臺研發負責人張慧勇受邀出席了峰會并發表了“看迅雷鏈如何助力實體經濟”的演講。張慧勇表示,區塊鏈3.0時代亟待解決的問題是讓區塊鏈技術在實體經濟得以運用以發揮其價值。而只有符合實體企業應用需求的區塊鏈,才能真正落地。這就要求區塊鏈企業,從實體企業的現實需求出發,升級自己的技術架構,為實體經濟賦能構建有力基礎。迅雷鏈自2018年上線以來,始終在強化自身技術的同時踏實助力實體商業場景落地,已在版權、溯源、出行、營銷等多個領域有了規模級行業應用。[2019/5/16]

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

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

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

動態 | 更多人想通過谷歌知道如何購買XRP:據dailyhodl報道,在谷歌2018年最熱門\"How to”搜索中,“How to Buy Ripple”(如何購買XRP)排名第四,“How to Buy Bitcoin”(如何購買BTC)排名第八。[2018/12/14]

0x01:使用asset;

0x11:SafeMath的溢出。

0x12:除以0。

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

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

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

0x32:索引超長度異常。

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

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

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

如何遷移到Solidity0.8

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

美國商品期貨交易委員會公布關于如何定義加密貨幣已經交易完成的解釋: 美國商品期貨交易委員會(CFTC)已經公布了解釋說明,關于如何定義加密貨幣已經從買方“交付”給了賣方。確認交付已經完成的的兩個因素是:1. 客戶有能力 (i)擁有和控制全部數量的商品,無論是以保證金,還是使用杠桿或其他融資購買,以及(ii)在交易之日起28內,自由地商業使用商品(在任何特定平臺內外);以及2. 報價人及賣方(包括各自的關聯方或與報價人或賣家合作的其他人士)不保留任何利益或控制任何以保證金,杠桿或其他融資方式購買的商品,在超過自交易日期起計28日后。據CFTC稱,提議的解釋不是最終的,需要經過90天的公眾評議期。[2017/12/16]

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

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:SOLLIDSOLIDDITsol幣未來價值預測SolidexMoss Carbon Credit

DYDX
姚前:關于“央行數字貨幣”問題的10個深度思考_區塊鏈

最近,多地加速試點應用數字人民幣,本文論述了央行數字貨幣的發展及其背后的理論邏輯,可幫助我們理解央行數字貨幣的應用及其未來發展。原文發表于《比較》第111輯,本推文為刪節版,全文請參見財新網.

1900/1/1 0:00:00
評論:數字人民幣優化我國貨幣支付體系_數字貨幣

來源:經濟參考報 作者:董希淼 從2014年著手研發工作到2020年進行公開測試,中國版的法定數字貨幣即數字人民幣漸行漸近。這既是貨幣形態演變的必然趨勢,也是數字經濟發展的內在需求.

1900/1/1 0:00:00
回到未來,重識NFT_TOKEN

原文首發于Medium,作者黑鳯李,點擊閱讀英文原版 1.序言 互聯網出現之后,人類社會迎來了高速發展,顛覆了信息的生產和傳遞方式,改變了文明的演?進方向.

1900/1/1 0:00:00
關于以太坊MEV的一切,為何說這與你密切有關_ROL

注:原文作者是來自Paradigm基金的研究員CharlieNoyes,在這篇文章中,他解釋了礦工可提取價值的概念及類型,其表示,MEV問題會損害用戶和區塊鏈網絡.

1900/1/1 0:00:00
FIL日內上漲30%,這些Filecoin冷門知識你需要了解_FILE

Filecoin挖礦設計較為復雜。新年之際,我們細數一下有哪些冷門知識?起到哪些關鍵數據?這樣便于我們更好的對新的一年展開規劃,主要內容有:DataCap、基線與收益、投資釋放和拋壓.

1900/1/1 0:00:00
Messari:Web3是什么?_WEB3

本文來源:補天遺石,編譯:石濤聲本文是MessariCrypto研究分析師MasonNystrom的研究報告,由taoshengshi編譯并解讀。一言以蔽之——Web3是互聯網的下一個時代.

1900/1/1 0:00:00
ads