这一篇讲述 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
代码异常消耗所有gas
require
外部异常,返还剩余gas