【逆引き】【Solidity】特定のユーザーだけに実行可能な関数を作る
# 目次
特定のユーザーだけに実行可能な関数の作り方を紹介します.
# 目的
特定のユーザーだけ実行可能な関数を定義する.
# 前提
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 {
// コントラクトを停止させる
}
}
以上、特定のユーザーだけに実行可能な関数の作り方を紹介しました.