📜  Solidity-错误处理

📅  最后修改于: 2020-11-04 04:30:38             🧑  作者: Mango


 

Solidity提供了各种用于错误处理的功能。通常,发生错误时,状态会恢复为原始状态。其他检查是为了防止未经授权的代码访问。以下是错误处理中使用的一些重要方法-

  • assert(bool condition) -如果不满足条件,则此方法调用将导致无效的操作码,并且对状态所做的任何更改都将被还原。此方法用于内部错误。
  • require(bool condition) -如果不满足条件,此方法调用将恢复为原始状态。 -此方法将用于输入或外部组件中的错误。
  • require(布尔条件,字符串存储消息) -如果不满足条件,则此方法调用恢复为原始状态。 -此方法将用于输入或外部组件中的错误。它提供了提供自定义消息的选项。
  • revert() -此方法中止执行并将所有对状态所做的更改还原到状态。
  • revert(字符串存储原因) -此方法中止执行并将任何所做的更改还原到状态。它提供了提供自定义消息的选项。

尝试以下代码以了解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.");
      // Perform the sell operation.
   }
}

调用revert时,将返回如下的十六进制数据。

输出

0x08c379a0                     // Function selector for Error(string)
0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset
0x000000000000000000000000000000000000000000000000000000000000001a // String length
0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data