我們離Solidity1.0的發布越來越近了。Solidity0.8在0.7發布之后僅5個月就發布了!
登鏈社區正在同步翻譯Solidity0.8的文檔
今天我們就來探討一下如何把合約遷移升級到0.8版本......
尤達寶寶發布
0.8新功能和如何使用
我們來看看兩個大的新功能:集成的SafeMath和新的錯誤處理。
1.集成SafeMath
SafeMathMeme
沒錯,你不需要再導入OpenzeppelinSafeMath了。最重要的是,你不需要做任何事情就可以激活Solidity集成的SafeMath。只要寫上a+b,就會在溢出時自動回退交易。
央行回應非指定機構如何參與數字人民幣運營:央行表示,需發揮其他商業銀行及非銀行支付機構作用,與指定運營機構一起,共同提供數字人民幣流通服務,包括支付產品設計創新、系統開發、場景拓展、市場推廣等服務。(一財)[2021/7/16 0:57:56]
你可能會在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;????}}
動態 | 烏克蘭國會收到一項關于應如何對與加密有關的收入征稅的草案:據Coindesk消息,一項草案規定了烏克蘭應如何對與加密有關的收入征稅,該草案已提交給該國議會Verkhovna Rada。該法案是由烏克蘭數字轉型部、區塊鏈4ukraine派系議會協會和更好的監管交付辦公室(BRDO)組織起草的。這份由13名議會成員撰寫的文件旨在修訂烏克蘭的稅法,并引入與加密資產相關的主要概念。該法案將此類資產定義為“一種特殊類型的有價值財產,以數字形式創建、記賬并通過電子方式處理”,比如加密貨幣、代幣以及草案中未指定的其他類型。總部位于烏克蘭的加密貨幣交易所Kuna的創始人,烏克蘭區塊鏈協會主席Michael Chobanian表示,他相信這項法律將奏效,但該行業還面臨其他障礙,需要解決。[2019/11/20]
2.無效的操作碼被還原取代
到目前為止,某些操作會導致INVALID操作碼的執行。這個操作碼的問題是,它消耗掉所有剩余的Gas。這顯然是不好的且沒必要。為什么要浪費Gas,把它捐給礦工?
聲音 | V神:如何公平有效地分配資源取決于機制設計的可信度:據prnewswire消息,V神表示,好的機制應該能夠給需求方分配最佳資源,無論需求方是項目、政府還是公司。如何公平、有效地分配資源取決于機制設計的可信度。雖然中心化機制仍然是常態,但這要求所有參與方都相信中心化機制能夠正確運作。[2018/9/15]
更多細節,在這里查看revert和assert的區別。
現在Solidity使用revert操作碼。為了區分常規revert和系統內部錯誤,Solidity在返回數據前加上一個標識符:
常規Revert錯誤以keccak256(Error(string))的前四個字節開始,等于0x08c379a0。
**系統內部錯誤**以keccak256(Panic(uint256))的前四個字節開始,等于0x4e487b71。
Panic有一個額外的錯誤標識。目前可用的Panic有:
0x01:使用asset;
現場 | 以太坊行業峰會第一場圓桌 如何應對智能合約安全問題:金色財經9月8日現場報道,Loi Luu (KyberNetwork 創始人)、Shawn Douglass
(Amberdata 聯合創始人兼CEO)、Jay Zhou (Loopring Protocol 聯合創始人)、Alan Li (FBG X 研發部負責人)、Antoine Cote (Enuma Technologies 聯合創始人兼CEO) 參與了討論,嘉賓們一致認為,由于智能合約涉及資產交易且不可篡改,一旦發生安全問題將引起資產嚴重受損,關注智能合約安全是必要的。Loi Luu指出,區塊鏈行業項目方,需要為開發者設立預警機制。開源代碼要引入第三方檢測,避免犯一些顯而易見的錯誤。
Jay zhou認為,需要更有經驗的開發者去開發用戶易用、以人為本的合約,同時也有必要引入交叉審計。
Shawn Douglass說:“因為智能合約的不可篡改性,在程序員開發前,就必須告知開發者未來可能造成的后果,特別是在涉及資產的領域必須確保事前萬無一失甚至考慮保險。”
Antoine Cote表示,可以在早期時候引入懸賞機制讓黑客或者社區成員共同發現漏洞。大家討論后得出共識,每一個開發者都必須在開發速度和安全性之間做一個平衡。在區塊鏈領域,注重安全和責任心是必須的。[2018/9/8]
0x11:SafeMath的溢出。
阿里巴巴集團首席人力官:區塊鏈能帶來無限可能 未來如何與產業結合還是未知 :在今日舉行的2018中國綠公司年會上,阿里巴巴集團首席人力官(CPO)童文紅表示,阿里巴巴與想做的百年企業來比還只是一個19歲的孩子,其實面臨著非常非常多的困難。區塊鏈、量子等技術創新帶來無限可能,未來怎樣跟產業結合,會帶來什么樣的變化,誰都無法預測,阿里也面臨著從平臺到生態的挑戰。[2018/4/23]
0x12:除以0。
0x21:轉換為不存在的枚舉類型。
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熊
據OKEx的數據顯示,當前BTC/USDT現貨報價為38600美元,24小時振幅為0.3%。OKEx交易大數據:BTC合約多空持倉人數比1.14,合約持倉總量為21.8億美元截至2月8日11:3.
1900/1/1 0:00:00本文來源:每日經濟新聞,作者:杜宇原題《24小時7.5萬人被“血洗”,30億做空資金被吞!比特幣眾生相:85后小伙靠“挖幣”資產過億,有同齡人一夜間財富歸零》比特幣再次站上40000美元關口.
1900/1/1 0:00:00快過年了請捂緊你的錢包防騙口訣要記牢 imToken 剛剛 18 這些年「比特幣」的話題熱度不減,區塊鏈技術也慢慢走進了人們的視野中,越來越多的人知道數字貨幣.
1900/1/1 0:00:00本文原發于,點滴科技資訊,譯者:劉斌,中國自貿區研究院金融研究室主任國際清算銀行高管:比特幣網絡可能很快因攻擊而崩潰:1月28日消息.
1900/1/1 0:00:00加密貓球星卡他們是“天價”NFT的制造者 DCNews 剛剛 452 “人類誕生以來的第一件事情就是收藏.
1900/1/1 0:00:00邁達斯國王最著名的是通過一則寓言告訴我們的孩子:國王可以把他碰過的任何東西變成金子。起初,這是一個好主意,他甚至貪婪的將食物變成了黃金,這使他變得富有卻無法活著.
1900/1/1 0:00:00