LoginSignup
19
16

More than 5 years have passed since last update.

OpenZeppelinを活用してセキュアのコントラクトを書く

Posted at

今2017年のスマートコントラクトは、トークンでしたら、普通に億円単位のお金を管理しているので、セキュリティは非常に重要です。そこで出てきたのは、OpenZeppelin。
OpenZeppelinは、Zeppelin Solutionsというスマートコントラクト審査サービスを提供する組織からベストのやり方を整理した内容であり、よく使われる各種スマートコントラクトを実装してオープンソースで公開しているので、それらを継承し拡張すれば、自分のコントラクトを実装できる。

今回は、OpenZeppelinを使ってERC-20トークンを作って、送金したりしてみます。

フロント側準備

  • npm install -g truffleでtruffleをインストールしておく
  • truffle unbox tutorialtokenでテンプレートを生成すると、下記の内容が生成される

Screen Shot 0029-12-24 at 21.56.33.png

  • npm install zeppelin-solidityでOpenZeppelinの最新バージョンをインストールする

コントラクトを作る

  • 下記内容でcontracts配下ににTutorialToken.sol作成する
pragma solidity ^0.4.17;
import 'zeppelin-solidity/contracts/token/StandardToken.sol';

contract TutorialToken is StandardToken {
  string public name = 'TutorialToken';
  string public symbol = 'TT';
  uint public decimals = 2;
  uint public INITIAL_SUPPLY = 15000;

  function TutorialToken() public {
    totalSupply = INITIAL_SUPPLY;
    balances[msg.sender] = INITIAL_SUPPLY;
  }
}
  • 下記内容でmigrations配下に2_deploy_tutorial_token.jsを作成する
var TutorialToken = artifacts.require("./TutorialToken.sol");

module.exports = function(deployer) {
  deployer.deploy(TutorialToken);
};
  • truffle developで開発用チェーンを起動しておく
  • migrateを実行し、マイグレーションを実行する
  • 別のターミナルでnpm run devを実行し、開発用webサーバーを起動すると、下記のように設定した残高が表示されるはず。

Screen Shot 0029-12-24 at 22.08.49.png

  • ChromeでMetaMask をインストールして、接続先を「Custom RPC」選択し接続先アドレスに「http://localhost:9545 」を設定しておく

Screen Shot 0029-12-24 at 22.11.30.png

Screen Shot 0029-12-24 at 22.14.08.png

  • 右上にあるユーザマックのアイコンをクリックし、新しいアカウントを作成する

Screen Shot 0029-12-24 at 22.15.46.png

  • 新しく作成したアカウントのアドレスをコピーし、画面上のアドレス欄に入れて 500 TT を送信する
    • 成功したらアラートメッセージが出て来る

Screen Shot 0029-12-24 at 22.17.01.png

  • MetaMaskで残高を確認してみる
    • アカウントのTokensタブでTTを追加すれば、残高がちゃんと表示される。
    • 画像が 5.00 TT となっているのは、コントラクトでuint public decimals = 2を設定した影響です。

Screen Shot 0029-12-24 at 22.38.40.png

  • Token Contract Address は、migrateコマンドを実行したときのログから確認できる

Screen Shot 0029-12-24 at 22.28.26.png

まとめ

  • 確認手順が少し多いですが、OpenZeppelinを使うことで、簡単かつセキュアなコントラクトを作成できた
19
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16