【Solidity】Require ,Assert, Revert 的用法和区别

Require vs Assert
同样作为判断一个条件是否满足的函数,require会退回剩下的gas,而assert会烧掉所有的gas。

Revert
revert的用法和throw很像,也会撤回所有的状态转变。但是它有两点不同:

  1. 它允许你返回一个值;
  2. 它会把所有剩下的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;
    }
}

Loading

Facebook评论