solidity中error用法
Solidity中的error用于解释操作失败的原因,可以继承,参数列表可以只定义数据类型或为空,不能重载,不能作为控制流的一种手段,合约内部和外部均可定义。
调用时必须用revert修饰,revert用于回退error中数据给调用者并回退当前调用中所有更改。
pragma ^0.8.4; error InsufficientBalance(uint256 available,uint256 required);//合约外部定义error contract TestToken{ mapping(address => uint) balance; function transfer(address to, uint256 amount) public{ //ether不够,抛出异常,回退 if(amount > balance[msg.sender]){ revert InsufficientBalance({ available:balance[msg.sender], required:amount }); } //否则,转账扣ether balance[msg.sender] -= amount; balance[to] += amount; } }
来源(solidity官方文档):https://docs.soliditylang.org/en/v0.8.13/contracts.html#errors-and-the-revert-statement