逆引きイーサリアム ethereum

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

【逆引き】【Solidity】特定のユーザーだけに実行可能な関数を作る
Feb. 2, 2020, 1:51 p.m.

目次

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

目的

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

前提

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/