【Solidity】assertの使い方は?

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

使い方

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

主に内部エラーや不変条件のチェックに用いられます。

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

処理済みのガス代が消費されるのに加え、残りのガス代もすべて消費されます。

構文

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は内部エラーや不変条件のチェックに適しています。リバート(状態復帰)の前だけでなく残りのガスも全て消費してしまうため、許容できない条件/エラーを防ぎたい場合に使うのが望ましいです。

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