堅牢性-エラー処理
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