Solidityにおけるrequire関数の使い方について解説します。
使い方
require関数は、処理実行前に、入力や条件を検証したい場合に使用します。
主に外部から入力値や外部コンポーネントのエラーチェックに用いられます。
指定した条件を満たさなかった場合、処理を中断し、コントラクトの状態を元に戻します。
処理済みのガス代は消費されますが、残りのガス代については返却されます。
構文
単に条件判定だけすることも、エラーメッセージを出力させることもできます。
それぞれ記します。
条件判定のみ
require(条件)
エラーメッセージも表示
require(条件, 文字列)
実際のコンソール上での表示
requireの条件を満たさない場合、コントラクトの状態が元に戻されていることを確認できます。
文字列も引数として渡した場合、エラーメッセージも出力されていることを確認できます。
サンプルコード
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Test {
function testRequire(uint _value) public pure {
require(_value > 0); // require関数(条件判定のみ)
// _valueが0より大きい場合に実行される処理
}
function testRequireWithErrMsg(uint _value) public pure {
require(_value > 0, "value must be greater than 0"); // require関数(エラーメッセージも表示)
// _valueが0より大きい場合に実行される処理
}
}
処理を中断させる関数という意味では、require/assert/revertの使い分けが難しいですが、今回解説したrequireは入力値チェックに適しています。また、残りのガス代は返却されるため、ユーザーフレンドリーです。