【Solidity】Require ,Assert, Revert 的用法和区别
Require vs Assert
同样作为判断一个条件是否满足的函数,require会退回剩下的gas,而assert会烧掉所有的gas。
Revert
revert的用法和throw很像,也会撤回所有的状态转变。但是它有两点不同:
- 它允许你返回一个值;
- 它会把所有剩下的gas退回给caller
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract test {
bool public isLessThanTen = false;
function testRequire(uint i) public {
require(i<=10,"i cannot be more than 10");//大于10就报错,退回剩下的gas
isLessThanTen = true;
}
function testRequire2(uint i) public {
assert(i<=10);//大于10就报错,不会退回剩下的gas
isLessThanTen = true;
}
function testRequire3(uint i) public {
if(i>10){
revert("i cannot be more than 10");//大于10就报错,退回剩下的gas, 类似于throw
}
isLessThanTen = true;
}
}
![]()
Facebook评论