買以太坊 買以太坊
Ctrl+D 買以太坊
ads

BSP:如何將你的合約升級到Solidity 0.8?_SOL

Author:

Time:1900/1/1 0:00:00

我們離 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 費了?

Sweat授權社區決定如何處理自年初以來積累的1億枚SWEAT代幣:4月18日消息,Move-to-Earn 項目 Sweat 授權社區決定如何處理自今年年初以來積累的 1 億枚 SWEAT 代幣,投票選項包括 0% 分發和 100% 銷毀,25% 分發和 75% 銷毀,50% 分發和 50% 銷毀,75% 分發和 25% 銷毀,100% 分發和 0% 銷毀。[2023/4/18 14:11:30]

則通過 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,把它捐給礦工?

路透社:SBF欺詐指控回避了關于美國法律如何看待加密貨幣的爭論:1月9日消息,Sam Bankman-Fried可能會發現很難辯訴應該撤銷針對他的欺詐指控,因為美國法律如何對待加密貨幣存在不確定性,就像涉及數字資產的刑事案件中其他被告一樣完成了。法律專家表示,這是因為曼哈頓聯邦檢察官對現已破產的加密貨幣交易所 FTX 創始人的指控在很大程度上回避了正在進行的關于加密貨幣是否應作為證券或商品進行監管的辯論。但據專家稱,這種不確定性與針對SBF的大部分指控無關。雖然他面臨一項串謀證券欺詐的指控,但該指控稱他誤導了FTX的股票投資者,并未涉及交易所交易資產的性質。[2023/1/9 11:02:36]

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

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

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

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

美國職棒大聯盟正與律師討論如何處理與FTX的合作關系:11月17日,據消息人士透露,美國職業棒球大聯盟(MLB)正在與其法律顧問討論如何處理與FTX的合作關系。作為美國最知名的體育聯盟之一,MLB正密切關注FTX的情況。

據悉,MLB于2021年6月與FTX簽署五年協議。如果MLB最終決定終止與FTX的關系,FTX的品牌Logo將不會出現在MLB球場上。(Sporttechie)[2022/11/17 13:16:28]

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

0x01: 使用 asset;

0x11: SafeMath 的溢出。

0x12: 除以 0。

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

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

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

0x32: 索引超長度異常。

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

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

現場丨Cdot創始人劉毅:公鏈發展面臨的核心問題是如何突破性能瓶頸:金色財經現場報道,10月11日,由金色財經、Candaq和哼哈互動聯合發起的金色沙龍第55期“Polkadot-波卡萬物生長與跨界破圈對話”在北京正式舉行。在本次沙龍上,Cdot創始人劉毅指出,公鏈發展面臨的核心問題,是如何突破性能瓶頸,同時保持可組合性,不過度犧牲去中心化。目前解決方案有跨鏈、Layer2、超級Layer1和分片。Polkadot也是分片,但它是處在多鏈和分片之間的。分片最難的是跨片智能合約調度問題,Polkadot也面臨這個問題。此外,他表示,Polkadot的成功非常依賴于共享安全,共享安全成不成立確定了Polkadot整個設計成不成立。[2020/10/11]

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

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

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

ABIEncoderV2現在是默認自動激活。從 0.6 開始,Encoder 就不再是實驗性的了,只是因為遺留的原因,保留了 pragma experimental這個名字。現在你不需要再加這行了。

動態 | 印度官員赴日本等國學習監管機構如何處理加密貨幣問題:據bitcoin 9月3日消息,印度證券交易委員會(SEBI)在其2017 – 18年度報告中透露,它已派出一些官員前往日本、英國、瑞士三個國家,研究監管機構如何處理加密貨幣問題。印度證券監管機構此次行動旨在與國際監管機構合作,深入了解其加密機制和系統,以改善其自身管理流程。[2018/9/3]

移除任何 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 熊

Tags:BSPNBSLIDSOLBSP幣nbs幣發行量BLID價格sol幣價格

中幣交易所
穩定幣:谷燕西:對美國加密監管發展態勢的幾點預判_LIBRA

美國長期都是加密市場發展的中心地帶,而美國政府的監管政策與態度往往會對加密市場產生深遠影響,因而引發大量加密從業者的密切關注.

1900/1/1 0:00:00
MINE:騙局揭秘:你的礦機真的在挖礦嗎?_Minereum

這天,某A向我咨詢,他購買的20臺顯卡礦機,突然都不能挖礦了。具體故障表現為:礦池顯示礦機掉線。由于長時間沒有算力,某A向我咨詢時,礦機已經顯示為失效了.

1900/1/1 0:00:00
ROLL:Layer2觀察:質押量飆漲 手續費驟降 技術開發“百花齊放”_roll幣怎么用

不得不說,開發者、用戶早已受夠了以太坊高昂的手續費,最新數據顯示,目前以太坊平均手續費已高達20美元,是2018年巔峰時刻的8-10倍.

1900/1/1 0:00:00
比特幣:為什么MicroStrategy和其他機構還在瘋狂購買比特幣?_Axienomics

現在是進入加密市場的好時機嗎?全球最大的加密貨幣比特幣不僅上漲以觸及圖表上的另一個ATH,而且其市值昨天也突破了1萬億美元大關,這是兩個月前難以想象的水平.

1900/1/1 0:00:00
以太坊:首發 | 太和觀察:簡述Dex 現有問題解決方案_AscendEX

Along with the increasing trend of Dex development, issues like impermanent loss, slippage.

1900/1/1 0:00:00
比特幣:S2F模型和技術指標顯示 比特幣將在幾個月后達到10萬美元_PLA

進入2021年以來,市值最高的加密貨幣比特幣屢次刷新歷史高點。據比推數據,目前比特幣的價格已漲至4.7萬美元上方,距離5萬美元大關只有一步之遙.

1900/1/1 0:00:00
ads