【逆引き】【Solidity】特定のユーザーだけに実行可能な関数を作る

Calendar Clock iconCalendar Clock icon

イーサリアム

特定のユーザーだけに実行可能な関数の作り方を紹介します。

# 目的

特定のユーザーだけ実行可能な関数を定義する。

# 前提

Solidityのコントラクトはそのままでは公開した人とその他のユーザーを区別出来ません。

publicな関数は誰でも実行出来る一方で、privateな関数は公開した人でさえ実行出来ません。

そのため、特定のユーザーだけに実行権限を与えたい場合は自前のコードを書く必要があります。

# 実装方法

コンストラクタだけは、公開する人だけが実行できる特権的な関数です。

コンストラクタ内で特定のアドレスを特権ユーザーとして登録しておきます。

そして実行権限を制限したい関数が呼び出された場合、その実行前に権限をチェックするようにします。

権限チェックにはmodifierという構文を使用します。

# サンプルコード

以下のコードは[Remix][1]でそのまま試すことができます。

contract MyContract {

    address superUser;

    modifier onlySuperUser(address addr) {
        require(addr == superUser); // <- 関数実行前に権限チェック
        _; // <- これが関数の実行本体
    }

    constructor(address _superUser) public {
        superUser = _superUser;
    }

    // publicだけど、superUserだけが実行できる
    function stopService() public onlySuperUser {
        // コントラクトを停止させる
    }
}

以上、特定のユーザーだけに実行可能な関数の作り方を紹介しました。

1]: //remix.ethereum.org/


リモートフリーランスのウェブ&アプリエンジニア。
東アジアを拠点に世界を移動しながら生活。
現在は日本の企業様のみとお仕事をさせていただいています。

お問い合わせはこちら

コメント