solidity系列教程七错误处理
错误处理(3种):
assert(bool condition):不满⾜条件,将抛出异常
assert(msg.sender == owner);
require(bool condition):不满⾜条件,将抛出异常
require(bool condition, string message):如果条件不满⾜则撤销状态更改 - ⽤于检查由输⼊或者外部组件引起的错误,可以同时提供⼀个错误消息。
require(msg.sender == owner);
revert() 抛出异常
revert(string reason):终⽌运⾏并撤销状态更改,可以同时提供⼀个解释性的字符串。
if(msg.sender != owner) { revert(); }
1.条件检查
Solidity提供了assert和require来进⾏
require: require函数来检查输⼊变量或合约状态变量是否满⾜条件以及验证调⽤外部合约返回值。可以有返回值require(condition, 'Something bad happened');
solidityassert: assert函数通常⽤来检查(测试)内部错误
注:同样作为判断⼀个条件是否满⾜的函数,require会退回剩下的gas,⽽assert会消耗所有的gas。
2.触发异常
Solidity提供了revert,throw来触发异常:
throw:关键字抛出异常(从0.4.13版本,throw关键字已被弃⽤,将来会被淘汰。)回滚所有状态改变,返回”⽆效操作代码错误”,⽽且消耗掉剩下的gas
revert:函数可以⽤来标记错误并回退当前调⽤,允许返回⼀个数值,将剩余gas返还调⽤者
3.如何选择
require()函数⽤于:
(1).确认有效条件,例如输⼊,
(2).确认合约声明变量是⼀致的
(3).从调⽤到外部合约返回有效值
revert()函数⽤于 :
处理与 require() 同样的类型,但是需要更复杂处理逻辑的场景
如果有复杂的 if/else 逻辑流,那么应该考虑使⽤ revert() 函数⽽不是require()。
assert()函数⽤于:预防本不该发⽣的事情,如果发⽣就意味着合约中存在需要修复的bug(⽐如assert(1 > 2))。⼀般地,尽量少使⽤ assert 调⽤,⼀般assert 应该在函数结尾处使⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论