跳到主要内容

unchecked

unchecked

0.8.0 版本开始,算术运算有两个计算模式:

  • unchecked模式,即在发生溢出的情况下会进行“截断”,不会触发失败异常,从而得靠引入额外的检查库来解决这个问题(如 OpenZeppelin 中的 SafeMath 库)
  • checked模式,默认情况下,会进行溢出检查,如果结果溢出,会出现失败异常回退。
contract TestContract {
function checkedTest() external pure returns(uint256) {
// 溢出 会触发异常
uint256 x = 0;
x--;
return x;
}
function uncheckedTest() external pure returns(uint256) {
// 不会报错
uint256 x = 0;
unchecked { x--; }
return x;
}
}