Solidity基础(9)--Solidity异常处理

本文介绍了Solidity中的异常处理机制,包括条件检查、触发异常的方法。require函数用于输入验证和条件检查,会退回剩余gas;assert用于内部错误检查,消耗所有gas;revert则用于更复杂的异常场景,允许返回部分gas。建议require用于常规验证,revert用于复杂逻辑的异常,assert则用于预防不应该发生的错误,主要在测试阶段使用。

Solidity是通过回退状态的方式来处理异常错误(有点像事务回滚)。发生异常时会撤消当前调用(及其所有子调用)所改变的状态,同时给调用者返回一个错误标识。注意捕捉异常是不可能的,因此没有try catch。


1.条件检查

Solidity提供了assertrequire来进行
* require: require函数来检查输入变量或合约状态变量是否满足条件以及验证调用外部合约返回值。可以有返回值require(condition, 'Something bad happened');
* assert: assert函数通常用来检查(测试)内部错误

:同样作为判断一个条件是否满足的函数,require会退回剩下的gas,而assert会消耗所有的gas。

2.触发异常

提供了revert,throw来触发异常:
* throw:关键字抛出异常(从0.4.13版本,throw关键字已被弃用,将来会被淘汰。)回滚所有状态改变,返回”无效操作代码错误”,而且消耗掉剩下的gas
* revert:函数可以用来标记错误并回退当前调用,允许返回一个数值,将剩余gas返还调用者

传统处理异常的方式if...throw模式
即 if(msg.sender != owner) { throw; }
等价于:
* if(msg.sender != owner) { revert(); }//如果不等则异常
* assert(msg.sender == owner);//校验是否等于
* require(msg.sender == owner);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值