msa*_*720 5 ethereum solidity smartcontracts evm
我有这样的 Solidity 智能合约,pragma solidity >=0.7.0 <0.9.0;即使 0.8+ 不需要它,我仍然可以导入 SafeMath 吗?由于 SafeMath 使用的是 0.7,但我的合同指定它接受 0.7.0 至低于 0.9.0,在这种情况下 SafeMath 会做什么。
Pet*_*jda 21
SafeMath 库验证算术运算是否会导致整数上溢/下溢。如果是这样,库会抛出异常,从而有效地恢复事务。
从 Solidity 0.8 开始,上溢/下溢检查是在语言级别实现的 - 它在编译期间向字节码添加了验证。
Solidity 0.8+ 不需要 SafeMath 库。您仍然可以在此版本中自由使用它,它只会执行两次相同的验证(一次在语言级别,一次在库中)。
强烈建议在0.7版本中使用它,因为该版本尚未在语言级别上进行验证。
因此,如果您允许在两个版本中编译合约,则应该包含该库。
pragma solidity >=0.7.0 <0.9.0;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
contract MyContract {
using SafeMath for uint256;
function foo() external pure {
uint256 number = 1;
number.add(1);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11285 次 |
| 最近记录: |