比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

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

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

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

國際刑警組織正在調查如何監督元宇宙犯罪:金色財經報道,國際刑警組織(INTERPOL)正在調查如何在元宇宙中監督犯罪。然而,國際刑警組織的一名高級官員認為,定義“元宇宙犯罪”存在一些問題。據BBC報道,國際刑警組織秘書長Jurgen Stock透露,該組織打算監督元宇宙中的犯罪活動。Stock強調了“老練和專業”的罪犯適應新技術工具進行犯罪的能力。

此前2022年10月消息,國際刑警組織推出專門為全球執法部門設計的元宇宙INTERPOL Metaverse,該元宇宙允許注冊用戶參觀法國里昂的國際刑警組織總秘書處總部的虛擬場景,甚至可以通過其Avatar與其他官員進行互動以及為全球執法部門提供沉浸式培訓課程。(Cointelegraph)[2023/2/6 11:50:10]

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

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

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

大咖零距離 | 如何使用趨勢跟蹤策略只賺不虧:2月7日18:00,金色盤面邀請實盤大V數字貨幣大空頭做客金色財經《大咖零距離》直播間,將分享《如何使用趨勢跟蹤策略只賺不虧》,敬請關注,欲進群觀看直播掃描海報二維碼報名即可![2020/2/7]

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;????}}

聲音 | 北京工商大學顏蘇:區塊鏈行業如何與公檢法司形成有效的聯動機制,是值得研究的:據新華網消息,本月在上海法學會會議上,北京工商大學法學院副教授顏蘇表示,區塊鏈行業從業者應用自身掌握的區塊鏈這一新興技術,助力公檢法司進行區塊鏈領域的反詐騙,在這個方向上,行業如何能與公檢法司形成有效的聯動機制,是值得關注的研究主題。[2019/7/28]

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

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

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

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

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

聲音 | 段新星:看到有價值的場景時思考如何用區塊鏈去更好地打造才是正確的:Bytom創始人段新星在“區塊鏈平昌論壇2019(Blockchain Pyeongchang Forum, BPF2019)”的圓桌論壇上表示,在投機和炒作層面區塊鏈處于熊市,但是在區塊鏈應用層面仍然在向前發展。同時,他指出,不能像拿著錘子砸釘子一樣,把區塊鏈強加于所有項目,而應該在看到有價值、有意義的場景時,思考如何用區塊鏈去更好地打造才是正確的。只有做到這點,離區塊鏈下一次爆發也就不遠了。[2019/1/28]

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

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

0x01:使用asset;

0x11:SafeMath的溢出。

0x12:除以0。

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

普京:俄羅斯不能有自己的加密貨幣 但必須研??究如何使用加密貨幣:據cointelegraph消息,俄羅斯總統普京6月7日在與俄羅斯公眾的年度現場問答會議上表示,俄羅斯不能有自己的加密貨幣,這是因為加密貨幣超越了國界。對于所謂加密貨幣挖礦,普京指出俄羅斯確實沒有對此進行規范,但態度“非常謹慎”。關于加密貨幣作為支付方式,普京指出,雖然專家說日本已經部分采用加密貨幣作為支付,但這“在其他國家并不適用”。俄羅斯聯邦中央銀行認為加密貨幣既不是支付手段,也不是價值儲備手段。加密貨幣不受任何支持,人們應該小心謹慎地對待它。俄羅斯必須密切關注這一現象,以確定俄羅斯如何參與其進程。此外普京還補充說明,俄羅斯必須研??究如何使用加密貨幣,以避免在國際金融領域的任何限制。據cointelegraph分析,普京或許在暗示可以通過使用加密貨幣避免目前西方國家對俄羅斯的制裁。[2018/6/8]

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

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

0x32:索引超長度異常。

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

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

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

如何遷移到Solidity0.8

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

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

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:LIDSOLDITSOLIDethylidene1SOLDITTO幣MOSOLID

芝麻開門交易所
關于全球首發上線DSF及其交易的公告_UNC

尊敬的EXX用戶: ????EXX將于香港時間2021年3月1日07:00首發上線DSF項目,并開放DSF/USDT交易市場.

1900/1/1 0:00:00
以太坊GAS費爆棚 礦工瘋狂掃貨高端筆記本挖礦_DEF

一句話,市場似乎已經到了“閉眼梭哈也致富”的階段。很多挖礦或者使用Uniswap等需要用到以太坊鏈上轉賬的投資人發現,現在GAS費太貴了,有多貴呢?一個簡單的交易就需要幾百塊,復雜的合約交互,比.

1900/1/1 0:00:00
決定比特幣以太坊中長短期漲跌的因素?_區塊鏈

你好,這里是8分鐘區塊鏈,今天我們來聊一下決定幣價的長期,中期,以及短期的幾個因素,這里的幣呢,我特指的就是比特幣和以太坊,因為在我看來.

1900/1/1 0:00:00
杠桿之王興衰史:BitMEX如何走到今天這一步?_TME

眼看他起朱樓,眼看他宴賓客,眼看他樓塌了。??曾以百倍杠桿聞名江湖的合約交易所之王BitMEX如今在美國政府的監管鐵拳下,似乎逐漸日薄西山,這一切究竟是怎樣發生的?美國老牌生活雜志《名利場》萬字.

1900/1/1 0:00:00
這些幣出現箱體平臺行情,可以低吸。。。_BCH

? 01 加密數字貨幣市場 1、政策及市場指標 貪婪指數上升了3個點,其他的小幅上升,合約爆倉量有所上升,還會繼續.

1900/1/1 0:00:00
區塊鏈百科合集之十大概念:分布式一致性、區塊高度、分叉等_TOK

區塊鏈曾被《經濟學人》喻為“信用的機器”,它真正解決的是數字世界的信任問題。那其究竟是通過什么方式解決信任問題,并讓信任得以高效流通?本期《區塊鏈百科》專欄將與你一起回顧區塊鏈相關重要概念,例如.

1900/1/1 0:00:00
ads