【Solidity】requireの使い方は?

Solidityにおけるrequire関数の使い方について解説します。

使い方

require関数は、処理実行前に、入力や条件を検証したい場合に使用します。

主に外部から入力値や外部コンポーネントのエラーチェックに用いられます。

指定した条件を満たさなかった場合、処理を中断し、コントラクトの状態を元に戻します

処理済みのガス代は消費されますが、残りのガス代については返却されます。

構文

単に条件判定だけすることも、エラーメッセージを出力させることもできます。

それぞれ記します。

条件判定のみ

require(条件)

エラーメッセージも表示

require(条件, 文字列)

実際のコンソール上での表示

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は入力値チェックに適しています。また、残りのガス代は返却されるため、ユーザーフレンドリーです。

タイトルとURLをコピーしました