Solidityにおけるassert関数の使い方について解説します。
使い方
assert関数は、処理実行前に、入力や条件を検証したい場合に使用します。
主に内部エラーや不変条件のチェックに用いられます。
指定した条件を満たさなかった場合、処理を中断し、コントラクトの状態を元に戻します。
処理済みのガス代が消費されるのに加え、残りのガス代もすべて消費されます。
構文
assert(条件)
以下は、実際のコンソール上での表示です。
assertの条件を満たさない場合、コントラクトの状態が元に戻されていることを確認できます。
サンプルコード
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Test {
function testAssert(uint _value) public pure {
assert(_value > 0); // assert関数
// _valueが0より大きい場合に実行される処理
}
}
処理を中断させる関数という意味では、require/assert/revertの使い分けが難しいですが、今回解説したassertは内部エラーや不変条件のチェックに適しています。リバート(状態復帰)の前だけでなく残りのガスも全て消費してしまうため、許容できない条件/エラーを防ぎたい場合に使うのが望ましいです。