Solidityにおける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を使う場面はあまりないかもしれませんが、念のため覚えておきましょう。