Solidity

將 SafeMath 與舊版 Solidity 編譯器一起使用

  • October 31, 2021

我被告知 SafeMath 無關緊要。

SafeMath 會減慢速度,花費更多的 ETH,還是增加額外的穩定性?SafeMath 有一天會不受支持嗎?

contract SafeMath {
function safeAdd(uint a, uint b) public pure returns (uint c) {
   c = a + b;
   require(c >= a);
}
function safeSub(uint a, uint b) public pure returns (uint c) {
   require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0);
   c = a / b;
}

使用編譯器 0.5.0 還可以嗎?它過時了嗎?

謝謝你。

Solidity 在算術上溢和下溢方面存在歷史問題,這就是為什麼啟用 SafeMath 在當時是必要的。從 Solidity v0.8.0 開始, SafeMath 已經過時,因為預設添加了對算術運算的內部檢查。我建議盡可能使用最新版本的 Solidity。

SafeMath 用於保護您的合約免受數學錯誤的影響,例如溢出(例如uint,在 max 之上添加uint)。如果交易中發生錯誤的數學運算,SafeMath 將恢復交易。它可能會略微增加用於交易的氣體,但安全的好處通常是值得的。

如果您使用 Solidity 0.8.0 及更高版本,則不再需要 SafeMath。它已預設集成在編譯器中。

如果您確實想將 SafeMath 與較舊的編譯器一起使用,我建議您轉而依賴一個知名的庫,例如來自openzeppelin的庫,而不是建構您自己的 SafeMath 模組。

最佳實踐是使用最新版本的 Solidity 編譯器,因為安全問題已通過編譯器更新得到修復。使用舊版本並沒有錯,但你應該有理由這樣做。

引用自:https://ethereum.stackexchange.com/questions/101571