Skip to content

Latest commit

 

History

History
26 lines (18 loc) · 1.2 KB

File metadata and controls

26 lines (18 loc) · 1.2 KB

异常

Solidity三种抛出异常的方法:errorrequireassert

  • error: 推荐使用,最省gas。在contract之外定义异常,在执行当中搭配revert使用

    // 首先申明一个error异常
    error TransferNotOwner(); // 自定义error
    
    error TransferNotOwner(address sender);//自定义带参数的error
    
    // 搭配revert(回退)使用
    function transferOwner1(uint256 tokenId, address newOwner) public {
        if(_owners[tokenId] != msg.sender){
            revert TransferNotOwner();
            // revert TransferNotOwner(msg.sender);
        }
        _owners[tokenId] = newOwner;
    }
    
  • require : solidity 0.8版本之前抛出异常的常用方法,目前很多主流合约仍然还在使用它。它很好用,唯一的缺点就是gas随着描述异常的字符串长度增加,比error命令要高。使用方法:require(检查条件,"异常的描述"),当检查条件不成立的时候,就会抛出异常。

  • assert: 一般用于程序员写程序debug,因为它不能解释抛出异常的原因(比require少个字符串)。它的用法很简单,assert(检查条件),当检查条件不成立的时候,就会抛出异常。