Solidity三种抛出异常的方法:error
,require
和assert
-
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(检查条件)
,当检查条件不成立的时候,就会抛出异常。