Solidity-error-handling

提供:Dev Guides
移動先:案内検索

堅牢性-エラー処理

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