【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评论