我們離 Solidity 1.0 的發布越來越近了(當然除非 0.9 之后是 0.10)。Solidity0.8在0.7 發布之后僅 5 個月就發布了!
登鏈社區正在同步翻譯 Solidity 0.8 的文檔
今天我們就來探討一下如何把合約遷移升級到 0.8 版本... ...
我們來看看兩個大的新功能:集成的 SafeMath 和新的錯誤處理。
沒錯,你不需要再導入 Openzeppelin SafeMath了。最重要的是,你不需要做任何事情就可以激活 Solidity 集成的 SafeMath。只要寫上a+b,就會在溢出時自動回退交易。
你可能會在 Remix 等工具中看到如下錯誤提示,因為 0.8 還沒有完全支持。比如溢出還沒有給出確切的原因。
transact to Solidity08.test errored: VM error: revert. revert但這種情況在未來應該會有所改變。
如果你確實就希望代碼能夠溢出呢?還是非常在意 Gas 費了?
Aave社區正對“如何分配Aave Grants DAO收到的30萬枚OP”提案進行投票:5月4日消息,Aave社區正對“如何分配Aave Grants DAO(AGD)收到的30萬枚OP”提案進行溫度檢查投票,該提案目前支持率為99.97%,并將于5月8日結束。根據該提案,Aave社區去年創建了一個提案并成功收到了30萬枚OP代幣,作為激勵基金OP Stimpack階段0的一部分。這些代幣將用于資助項目,以幫助Aave在Optimism上的發展。該提案旨在澄清收到的OP應如何分配并獲得社區支持。
該提案建議分配最多10萬枚OP用于當前AGD季度的贈款以及以Optimism為中心的事件和賞金,并將剩余的20萬枚OP保留在AGD多簽錢包中以用于AGD的未來季度贈款或分配。如果該提案獲得此次投票通過,AGD將按照上述方式進行資金分配。不需要AIP或進一步的治理行動。[2023/5/4 14:42:34]
則通過 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. 無效的操作碼被還原取代到目前為止,某些操作會導致 INVALID操作碼的執行。這個操作碼的問題是,它消耗掉所有剩余的 Gas。這顯然是不好的且沒必要。為什么要浪費 Gas,把它捐給礦工?
YFII社區發起YIP-5實施方案的投票,將決定如何使用5%的利潤:YFII社區發起一項關于實施YIP-5提案(5%利潤用作循環挖礦)的方案的投票。目前一共有3種方案供選擇,方案1是5%的利潤全部用于YFII或者iYFII/YFII LP的激勵,方案2是5%中大部分用于YFII相關激勵,少部分用于iToken的激勵,方案3是5%中少部分用于YFII相關激勵,大部分用于iToken的激勵。這三種方案中此前討論支持率最高的是方案1。投票從今天下午5點30分開始,持續72小時。[2020/9/29]
更多細節,在這里查看 revert和 assert的區別。
現在 Solidity 使用revert操作碼。為了區分常規 revert 和系統內部錯誤(panic),Solidity 在返回數據前加上一個標識符:
常規 Revert 錯誤以keccak256(Error(string))的前四個字節開始,等于0x08c379a0。
**系統內部錯誤(Panic)**以keccak256(Panic(uint256))的前四個字節開始,等于0x4e487b71。
聲音 | 人民郵電報:區塊鏈如何填補法律監管“空白”?:人民郵電報今日發表文章《區塊鏈:如何填補法律監管“空白”?》,文章表示, 如今,把區塊鏈作為核心技術自主創新重要突破口,加快推動區塊鏈技術和產業創新發展,成為大家關注的熱點話題。毫無疑問,區塊鏈將為新一代信息技術發展帶來新機遇,引發新一輪技術創新和產業變革。而與之相隨的,是新技術新業務發展應用所帶來的法律空白和監管困境,如何在監管空白與監管過度之間找到平衡點,成為擺在立法、執法者面前的一道難題。[2019/12/6]
Panic 有一個額外的錯誤標識。目前可用的 Panic 有:
0x01: 使用 asset;
0x11: SafeMath 的溢出。
0x12: 除以 0。
0x21: 轉換為不存在的枚舉類型。
0x22: 存儲字節數組編碼錯誤。
0x31: 在一個空數組上pop()。
0x32: 索引超長度異常。
0x41: 分配過多的內存或創建過大的數組。
0x51: 調用未初始化的內部函數類型的變量。
現場 | 降維安全CTO:交易所應該如何保護數字資產:12月16日,由ChainUP主辦,節點資本等聯合主辦的“Future BlockChain”全球行活動在韓國舉辦。降維安全CTO在會議中表示,交易所主要面臨Hacker、惡意量化團隊、惡意用戶、惡意項目方這些外部攻擊。具體到黑客攻擊有以下四點:DoS勒索、Web滲透/APT社會工程學攻擊以及利用區塊鏈項目自身的漏洞進行攻擊。據降維安全統計,交易所應用(不涉及期貨合約)風險,共有5大類,14個子類,68個風險點。他表示:專業的事情應該交給專業的人做,選擇專業的交易所系統和專業的安全服務商,非常重要。[2018/12/16]
更多細節請參見文檔中新的錯誤處理部分這里。
在大多數情況下,遷移應該是非常直接的。只有在一些情況下,你做奇怪的類型轉換可能會變得更加困難。
你必須為遷移做出的改變包括:
ABIEncoderV2現在是默認自動激活。從 0.6 開始,Encoder 就不再是實驗性的了,只是因為遺留的原因,保留了 pragma experimental這個名字。現在你不需要再加這行了。
聲音 | 肖磊:區塊鏈監管如何“去糟粕而留精華”存在挑戰:據騰訊科技報道,肖磊發表專欄文章稱,虛擬幣市場有其特殊性,這可能會給監管帶來一定的挑戰和困擾。由于虛擬幣這個概念,實際上來自于其底層技術“區塊鏈”,如果站在監管層的角度,其中一個考慮是,去糟粕而留精華,把炒作虛擬幣這個糟粕去掉,而留下“區塊鏈”這個精華,這個可能會存在很大的挑戰。[2018/8/23]
移除任何 Openzeppelin SafeMath,你不再需要它了。
可能需要進行一些類型轉換。
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: 1 ether }()改為:
myContract.functionCall{gas: 10000, value: 1 ether }()。
將 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/
Solidity 0.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
Cell Network: https://www.cellnetwork.io/?utm_souce=learnblockchain
譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny 熊
周四(2月18日),雖然美國股市整體大跌,但比特幣的表現異常穩定,目前維持在5.188萬美元。而以太幣(ETH)價格首次突破1900美元,逼近2000美元的關鍵心理關口.
1900/1/1 0:00:00在 DeFi 世界,去中心化借貸系統是一個極其重要的賽道,也是整個 DeFi 體系里面的基石系統,它能夠模擬現實世界里的金融系統,了解不同用戶的資金需求.
1900/1/1 0:00:00引言:關于 DeFi 的安全問題,從 2020 年 2 月份到現在,損失數億美元,各路專家已有無數文章來解析 DeFi 樂高的風險,直到現在這類問題依然沒有引起開發者們的高度重視.
1900/1/1 0:00:00通過標準采礦流程獲利的加密貨幣愛好者要么使用自己的采礦設備進行單獨開采,要么加入一個礦池,將一個人的采礦資源與其他礦池采礦者的礦產結合起來,以提高處理效率來提高采礦產量.
1900/1/1 0:00:00北京時間2月19日11時54分,ETH短線上漲,突破2000美元關口,創下新高。截至發稿時,ETH報價2017美元,自2021年開年以來,ETH漲幅達177%.
1900/1/1 0:00:00這天,某A向我咨詢,他購買的20臺顯卡礦機,突然都不能挖礦了。具體故障表現為:礦池顯示礦機掉線。由于長時間沒有算力,某A向我咨詢時,礦機已經顯示為失效了.
1900/1/1 0:00:00