这一篇讲述 solidity 的错误处理。
在 solidity 中发生错误,会进行回滚。
没有 try 和 catch。
assert(bool condition)用于判断内部错误,条件不满足时抛出异常require(bool condition): 用于判断输入或外部组件错误,条件不满足时抛出异常require(bool condition, string message)同上,多了一个错误信息。revert(): 终止执行并还原改变的状态revert(string reason)同上,提供一个错误信息。
用 require 还是 assert
require
- 用于检查用户输入
- 用于检查合约返回值
require(addr.send(1))
- 用于检查状态
require(msg.sender = owner)
- 通常用于函数开头
- 不知道使用哪个的时候,就使用
require
assert
- 用于检查溢出错误
z = x + y;assert(z >= x);
- 用于检查不应该发生的异常错误
- 用于状态变化后,检查合约状态
- 尽量少使用
assert - 通常用于函数中间或者结尾
其他
下面的话我暂时还没理解。
solidity 有两种异常,一个是 assert 一个是 require 。但是,我不知道这两种异常是主动出现,还是你写完相应语句后抛出的异常。
另外:
assert代码异常消耗所有gasrequire外部异常,返还剩余gas