加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > KuCoin > Info

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

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

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

大咖零距離 | 寶二爺,李笑來的成功我們能復制嗎?該如何抓住減半行情?:3月3日18:00,金色盤面邀請幣圈KOL老俞說幣做客金色財經《大咖零距離》直播間,將分享《寶二爺,李笑來的成功我們能復制嗎?該如何抓住減半行情?》,敬請關注,欲進群觀看直播掃描海報二維碼報名即可![2020/3/3]

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

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

聲音 | 韋氏評級:無論比特幣盈利能力如何 投資者都更傾向于存幣而非賣幣:韋氏評級今日稱,超過60%的比特幣一年多都存儲于錢包中而非在市場流通。在此期間,比特幣兌美元的價格從去年12月的3100美元上漲到僅6個月后2019年的13800美元高點。無論盈利能力如何,投資者都希望存幣而不是賣幣。[2019/12/3]

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

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

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

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

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

聲音 | 救助兒童會Paul Ronalds:慈善機構領導者也應去了解區塊鏈等技術如何運作:根據Coincryptorama消息,救助兒童會首席執行官Paul Ronalds在關于區塊鏈對慈善事業的潛在影響的小組討論后表示,慈善機構對區塊鏈的使用還處于初期階段”,要在其潛力被夸大之前需要進行更多的討論和研究。慈善機構面臨的主要障礙之一是,當涉及區塊鏈這種存儲數據的方法時,行業領導者并不能很好理解,我們需要確保慈善機構領導者同樣參與、了解數字世界以及如何運作區塊鏈等技術,來幫助他們的做好慈善事業。[2018/9/3]

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

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

0x01:使用asset;

0x11:SafeMath的溢出。

0x12:除以0。

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

行情 | 救贖說幣:WFEE最好不要買入,不管外界如何利好:據救贖分析,WFEE走勢圖可以看出,下跌之后,一直橫在那里,然后后面一波上漲漲幅1.3倍左右,接著再高點跌下來7倍。無論官方怎么發文也好,外界怎么利好也好,這幣沒有做市值管理,如果有,就不會跌那么慘,也不會橫盤那么久。所以這個幣種堅決不能買入。幣圈沒有底線,更沒有下限。技術分析來說,買盤不強,但是賣盤也幾乎沒有。但是賣盤只是暫時沒有,項目方還是手里有幣的。但是買盤沒有就真的沒有了。[2018/7/16]

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

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

0x32:索引超長度異常。

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

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

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

如何遷移到Solidity0.8

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

Digital Asset建筑與技術戰略首席技術官:對于智能合約 如何將資產與外部系統整合非常重要:據coindesk消息,區塊鏈初創公司Digital Asset的建筑與技術戰略首席技術官Shaul Kfir在Synchronize 2018會議上舉例美國財政部的回購國債,表示1億美元是一個小型交易,這是一個非常適合智能合同用例。在現實世界中,資產始終會被創造和摧毀。如何將資產與外部系統整合的問題非常重要。對于智能合約來說,最好的例子是“當人們想擁有這個邏輯上集中的IT系統,但是不希望它實際上是中心化的時候,任何時候在多個設備上都有一個工作流程。[2018/4/20]

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

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:SOLLIDSOLIDDITLNAsolution CoinMOSOLIDSMARTCREDIT幣

KuCoin
Gate.io 將上線 DIGG (DIGG) 交易的公告_GAT:HTT

Gate.io將于2021年2月6日14:00上線DIGG(DIGG)交易。DIGG是一種彈性的供應加密貨幣,與比特幣的價格掛鉤,由BadgerDAO管理.

1900/1/1 0:00:00
Bitcoinwin合約代理招募 百萬推廣費大放送!_BIT:hotcoinglobal交易所下載2022

春節到,送財來,Bitcoinwin為牛年到來送祝福,特推出送年貨卡及百萬推廣費補貼活動。擼羊毛,500元京東年貨卡還只是九牛一毛!你推廣,我補貼,這牛市如你所愿,百萬推廣費等你來拿~ 一、活動.

1900/1/1 0:00:00
從源頭賦能DeFi生態 波場TRON全球DeFi Hackathon開發者千萬美金賞金大賽火熱開啟_EFI:DEFI

2月3日,波場TRON2021全球DefiHackathon開發者千萬美金賞金大賽正式拉開帷幕,高達1000萬美金的高額獎池讓各界的開發者躍躍欲試.

1900/1/1 0:00:00
機構引領比特幣價格回升至4萬美元以上_BTC:Magi

由于領先的加密貨幣幾乎恢復了自一月初創下的歷史新高以來遭受的所有損失,因此比特幣的價格周六升至40,000美元以上.

1900/1/1 0:00:00
庫幣將支持Trias (TRY)總量縮減的計劃,并啟動 TRY升級換幣成TRIAS的工作_TRI:USD Sports

親愛的庫幣用戶, 庫幣將支持Trias(TRY)總量縮減計劃,并即將啟動Trias(TRY)升級換幣成Trias(TRIAS)的工作.

1900/1/1 0:00:00
BKEX Global關于暫停BCH、LTC挖礦寶業務的公告_KEX:BCH

親愛的BKEXer: 因市場中采用BCH、LTC進行流動性挖礦的項目已結束,以及未出現安全、穩定的可替代挖礦項目.

1900/1/1 0:00:00
ads