Solidity教程

Solidity 错误处理

Solidity 提供了很多错误检查和错误处理的方法。通常,检查是为了防止未经授权的代码访问,当发生错误时,状态会恢复到初始状态。
下面是错误处理中,使用的一些重要方法:
assert(bool condition) − 如果不满足条件,此方法调用将导致一个无效的操作码,对状态所做的任何更改将被还原。这个方法是用来处理内部错误的。
require(bool condition) − 如果不满足条件,此方法调用将恢复到原始状态。此方法用于检查输入或外部组件的错误。
require(bool condition, string memory message) − 如果不满足条件,此方法调用将恢复到原始状态。此方法用于检查输入或外部组件的错误。它提供了一个提供自定义消息的选项。
revert() − 此方法将中止执行并将所做的更改还原为执行前状态。
revert(string memory reason) − 此方法将中止执行并将所做的更改还原为执行前状态。它提供了一个提供自定义消息的选项。
示例
尝试下面的代码,来理解Solidity中的错误处理。
pragma solidity ^0.5.0;
contract Vendor {
   address public seller;
   modifier onlySeller() {
      require(
         msg.sender == seller,
         "Only seller can call this."
      );
      _;
   }
   function sell(uint amount) public payable onlySeller { 
      if (amount > msg.value / 2 ether)
         revert("Not enough Ether provided.");
      // 执行销售操作
   }
当调用revert时,它将返回十六进制数据,如下所示。
0x08c379a0                     // 错误函数选择器(字符串) 
0x0000000000000000000000000000000000000000000000000000000000000020 // 数据偏移/Data offset
0x000000000000000000000000000000000000000000000000000000000000001a // 字符串长度/String length
0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // 字符串数据/String data
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4