見出し画像

Solidity勉強日誌⑧OpenZeppelinのOwnableとは?

OpenZeppelinは安全でしかもコミュニティで検証を経たスマートコントラクトを持ったフレームワークです。デプロイした後は、変更することが出来ないというスマートコントラクトのメリットでもありデメリットでもある特徴があります。そのため、このスマートコントラクトなら大丈夫!バグからハッキングを受けない!とコミュニティで検証されたスマートコントラクトがOpenZeppelinにあるのです。

その中の1つにOwnableコントラクトというものがあります。

これは、コントラクトのアクセスに制限を与えるコントラクトになります。公開されているコントラクトは、呼び出した人がコントラクトのアドレスを変更することで、色々いじっちゃう事が可能になるのです。

ブロックチェーン上の他人のコントラクトとやりとりするには?

でご説明した通り、他の人から勝手にスマートコントラクトにアクセスされたら困るので、制限をアクセスするためにまずはOwnableコントラクトを継承して書き始める事が多いです。

コードは下記になります。function Ownable()はコンストラクタです。「コンストラクタ」はコントラクトではないですよ。名前が似てて分かりづらいですね。コンストラクタは、コントラクトが最初に作成された時に、1度だけ実行される関数です。ownerにmsg.sender(呼び出したユーザーのアドレス)を入れる関数ですね。

contract Ownable {
   address public owner;
   event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
   function Ownable() public {
   owner = msg.sender;
 }

そして、modifier関数があります。これは以前Solidity勉強日誌⑥modifier関数とは?でやりましたね。通常の関数を読み込む前に、読み込む関数です。ここでは、ownerに入っているアドレスが、呼び出したユーザーかどうかを確認していますね。そして、transferOwnership関数があります。ここでは新しいOwner(新しいアドレスを入れたユーザー)に権限を付与しています。


 modifier onlyOwner() {
   require(msg.sender == owner);
   _;
 }
 function transferOwnership(address newOwner) public onlyOwner {
   require(newOwner != address(0));
   OwnershipTransferred(owner, newOwner);
   owner = newOwner;
 }
}

このようにして、コントラクトにアクセスの制限をする事で、管理する事ができる便利なパッケージでございました。

参考:CryptoZombies


この記事が気に入ったらサポートをしてみませんか?