0%

solidity | 错误处理

这一篇讲述 solidity 的错误处理。

solidity 中发生错误,会进行回滚。

没有 trycatch

  • 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
请我喝杯咖啡吧~