【Solidity】revertの使い方は?

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

使い方

revert関数は、処理を中断したい場合に使用します。

revert関数に差し掛かると、処理は中断され、コントラクトの状態は元に戻されます

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

構文

単に処理中断だけすることも、メッセージを出力させることもできます。

それぞれ記します。

処理中断のみ

revert()

メッセージも表示

revert(文字列)

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

処理が中断され、コントラクトの状態が元に戻されていることを確認できます。

revert(処理中断のみ)
revert(処理中断のみ)

文字列を引数として渡した場合、メッセージも出力されていることを確認できます。

revert(メッセージも表示)
revert(メッセージも表示)

サンプルコード

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Test {

    function testRevert(uint _value) public pure {
        if (_value <= 0) {
            revert(); // revert関数(処理中断のみ)
        }
        // _valueが0より大きい場合に実行される処理
    }

    function testRevertWithReason(uint _value) public pure {
        if (_value <= 0) {
            revert("value must be greater than 0"); // revert関数(メッセージも表示)
        }
        // _valueが0より大きい場合に実行される処理
    }

}

処理を中断させる関数にはrequireやassertもありますが、今回解説したrevertはそれら2つとは異なり、評価判定は無く即時処理を中断します。require/assertで事足りるためrevertを使う場面はあまりないかもしれませんが、念のため覚えておきましょう。

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