我有一个像这样的可靠智能合约,pragma solidity >=0.7.0 <0.9.0;
即使 0.8+ 不需要它,我仍然可以导入 SafeMath 吗?由于 SafeMath 使用的是 0.7,但我的合同规定它接受 0.7.0 到低于 0.9.0,SafeMath 在这种情况下会做什么。
问问题
619 次
1 回答
3
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);
}
}
于 2021-11-23T09:18:24.393 回答