堅牢性-エラー処理

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.");
      // Perform the sell operation.
   }
}

revertが呼び出されると、次のように16進データが返されます。

出力

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