我們離Solidity1.0的發布越來越近了。Solidity0.8在0.7發布之后僅5個月就發布了!
登鏈社區正在同步翻譯Solidity0.8的文檔
今天我們就來探討一下如何把合約遷移升級到0.8版本......
尤達寶寶發布
0.8新功能和如何使用
我們來看看兩個大的新功能:集成的SafeMath和新的錯誤處理。
1.集成SafeMath
SafeMathMeme
沒錯,你不需要再導入OpenzeppelinSafeMath了。最重要的是,你不需要做任何事情就可以激活Solidity集成的SafeMath。只要寫上a+b,就會在溢出時自動回退交易。
Safe:將通過SafeDAO決定如何處置初始分配的ARB代幣:5月11日消息,數字資產管理平臺Safe(原GnosisSafe)表示,將代表Safe生態接收Arbitrum基金會初始分配的ARB代幣,并將在Safe DAO論壇上發帖,以決定如何分配這些資金,同時公布了資金接收地址。此前報道,Arbitrum面向DAO的空投總計1.13億枚(1.13%),其中Safe獲得257540枚。[2023/5/11 14:56: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;????}}
馬斯克回應查理芒格關于加密貨幣言論的推文:我們可能會死,但無論如何都值得一試:2月17日消息,馬斯克回應一條關于芒格最新的批評加密貨幣言論的推文,加密貨幣應該被禁止,并稱加密貨幣就像“性病”一樣令人不齒。馬斯克評論稱,“2009年,我曾和芒格共進午餐,他向整個餐桌的人說特斯拉將如何失敗。這讓我很難過,但我告訴他,我同意所有這些理由,我們可能會死,但無論如何都值得一試。[2022/2/17 9:57:26]
2.無效的操作碼被還原取代
到目前為止,某些操作會導致INVALID操作碼的執行。這個操作碼的問題是,它消耗掉所有剩余的Gas。這顯然是不好的且沒必要。為什么要浪費Gas,把它捐給礦工?
更多細節,在這里查看revert和assert的區別。
現在Solidity使用revert操作碼。為了區分常規revert和系統內部錯誤,Solidity在返回數據前加上一個標識符:
常規Revert錯誤以keccak256(Error(string))的前四個字節開始,等于0x08c379a0。
直播|清水 > 交易所新秀WEX,如何憑借IVO突出重圍:金色財經 · 直播主辦的《 幣圈 “后浪” 仙女直播周》第13期15:00準時開始,本期“后浪”仙女WEX的CMO 清水將在直播間聊聊“交易所新秀WEX,如何憑借IVO突出重圍”,請掃碼移步收聽![2020/8/21]
**系統內部錯誤**以keccak256(Panic(uint256))的前四個字節開始,等于0x4e487b71。
Panic有一個額外的錯誤標識。目前可用的Panic有:
0x01:使用asset;
0x11:SafeMath的溢出。
0x12:除以0。
0x21:轉換為不存在的枚舉類型。
0x22:存儲字節數組編碼錯誤。
0x31:在一個空數組上pop()。
0x32:索引超長度異常。
0x41:分配過多的內存或創建過大的數組。
大咖零距離 | 如何通過套保實現穩定收益:4月9日18:00,金色盤面邀請資深挖礦炒幣者小迷姐做客金色財經《大咖零距離》直播間,將分享《如何通過套保實現穩定收益》,敬請關注,欲進群觀看直播掃描下方二維碼報名即可。[2020/4/9]
0x51:調用未初始化的內部函數類型的變量。
更多細節請參見文檔中新的錯誤處理部分這里。
如何遷移到Solidity0.8
在大多數情況下,遷移應該是非常直接的。只有在一些情況下,你做奇怪的類型轉換可能會變得更加困難。
你必須為遷移做出的改變包括:
ABIEncoderV2現在是默認自動激活。從0.6開始,Encoder就不再是實驗性的了,只是因為遺留的原因,保留了pragmaexperimental這個名字。現在你不需要再加這行了。
移除任何OpenzeppelinSafeMath,你不再需要它了。
可能需要進行一些類型轉換。
肯尼亞成立了一個特別小組,研究如何利用人工智能和區塊鏈等最新技術:肯尼亞成立了一個特別小組,研究如何利用人工智能和區塊鏈等最新技術。“我們錯過了互聯網浪潮,趕上了移動技術……區塊鏈是下一個浪潮,我們必須參與其中。”信息部部長約瑟夫·穆切魯(Joseph Mucheru)表示,在其他用途中,區塊鏈可以幫助組織政府存儲的土地記錄,這對那些想要購買、出售或核實有關土地信息的人來說,是一種持續性的保障。[2018/5/5]
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熊
據慢霧科技統計,截止2021年1月25日,全球迄今已有368起區塊鏈行業相關安全事故發生,總計損失高達142.38億美元.
1900/1/1 0:00:00SynthetixDAO已為其治理生態中添加了一些新的令人驚訝的參與者。 今天,合成資產協議Synthetix宣布了由風險投資公司Paradigm,CoinbaseVentures和IOSG領投.
1900/1/1 0:00:002月8日晚間,特斯拉在提交給監管機構的文章中表示,預計在不久的將來開始接受比特幣作為支付產品的一種形式,將受適用法律的約束,并且最初將基于有限基礎.
1900/1/1 0:00:00那么什么是衍生品?它們為什么重要?在DeFi中最流行的衍生品協議有哪些?您將在本文中找到這些問題的答案。 衍生品 衍生品是所有成熟的金融系統的關鍵要素之一.
1900/1/1 0:00:00參與者 以太坊客戶端開發者-任何維護以太坊客戶端的人。這包括Geth、OpenEthereum、Nethermind開發者以及Besu開發者和維護這些客戶端的EthereumClassic分叉的.
1900/1/1 0:00:00一句話,市場似乎已經到了“閉眼梭哈也致富”的階段。很多挖礦或者使用Uniswap等需要用到以太坊鏈上轉賬的投資人發現,現在GAS費太貴了,有多貴呢?一個簡單的交易就需要幾百塊,復雜的合約交互,比.
1900/1/1 0:00:00