0%

solidity | 报错控制

  • require
  • revert
  • assert

require

只有满足前面表达式才能继续运行。

1
require(i <= 10,"i>10");

revert

不包含表达式,要自己判断。

1
2
3
if(i>10){
revert("i>10");
}

assert

断言不包括报错信息。

1
assert(num == 123);

状态回滚

如果出现错误,那么状态就会回滚,gas 费退回。

自定义异常

1
2
3
function test(unit _i) public pure{
require(_i<=10,"very long error error error...");
}

如果报错信息非常长,则会浪费很多 gas,所以,可以通过自定义 error 来节约 gas。

1
2
3
4
5
6
7
error MyError();

function test(unit _i) public pure{
if(_i > 10){
revert MyError();
}
}

error

1
2
3
4
5
6
7
error MyError(address caller,unit i);

function test(unit _i) public pure{
if(_i > 10){
revert MyError(msg.sender,_i);
}
}
请我喝杯咖啡吧~