【Solidity基礎】OpenZeppelinのOwnableについて




OpenZeppelinとは

OpenZeppelinはEthereum上で安全なスマートコントラクを実装するためのフレームワークです。OpenZeppelinには非常に多くの機能が実装されておりインポートするだけで安全にその機能を使うことができます。

トークンだとERC20、ERC721、ERC827の機能が実装されていたり、ICOに関しては返金やキャップ付きICOの機能が実装されています。これらを使うことで安全にICOを実施できます。

今回はOpenZeppelinの中でも一番使われているOwnableコントラクトについて説明します。

Ownableコントラクト

Ownableコントラクトを使うとコントラクトを作った人しか実行できない関数を作ることができます。これはスマートコントラクトを管理する上で非常に重要な機能となります。下記はOwnableコントラクトのソースコードです。

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original owner of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

Ownableコンストラクタ

function Ownable()はコントラクトがデプロイされたときに一度だけ実行されるコンストラクタです。ここではコントラクトをデプロイしたアカウントのアドレスがowner変数に代入されます。

Modifier onlyOwner

modifier onlyOwner()がこのコントラクトのメイン機能になります。このModifierを関数につけることでコントラクト作成者しかその関数を実行できなくなります。

実行権限の移譲

function transferOwnership(address newOwner)を使うことで所有権を任意のアドレスに写すことができます。やっていることはOwnableコンストラクタと同じでowner変数にアドレスを代入しているだけです。

まとめ

OpenZeppelinのOwnableはシンプルで使いやすいので多くのスマートコントラクトで使われています。このようにコミュニティで監査されて安全なモジュールを使うことで開発がスムーズになり、よりセキュアなコントラクト実装をすることができます。

最近、OpenZeppelinのソースコードを使わずに独自に実装したものを使用してハッキングにあったりしているケースもあるので独自実装は控えるようにしましょう!

OpenZeppelinには他にも便利な機能がたくさんあるので今後も紹介していきたいと思います。

おすすめ書籍

Ethereumを使ったDApps開発を学びたいなら今だとこの1冊が1番良いです!開発環境の構築から使うべきツール、フレームワーク、実装方法・注意点まで網羅的に解説されている書籍なのでおすすめです。出版も2018年1月ということでかなり新しい本で、DMM Bitcoinを作っているネクストカレンシー所属の方が書いているので信頼できます。

ビットコインとブロックチェーンの詳細をしっかりと学びたい方にはこちらの書籍が非常におすすめです。ウォレットの仕組み、楕円曲線暗号、P2Pプロトコル、公開鍵暗号などビットコインを支える技術について詳細に解説されています。また、サンプルコードを通して実際に手を動かして学べるので非常に濃い内容となっています。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です