ZeppelinOSの最新開発キット【Zepkit】のチュートリアルで使ったコマンドの紹介

こんにちは。HashHubインターンのたかてぃ(冨澤)です。
さて今回は、Zeppelinが来日してHashHubでハンズオンを行う予定で、記事を作成しました。その過程でわからないコマンドがいくつかあったので、調べた物を紹介していこうと思います!
間違えがありましたら、ご指摘頂けると嬉しいです。

前回書いた記事を元に、そのセッションで出てきたコマンドの紹介をしていきますので、最初に前回記事を見て大まかに流れを確認すると読み進みやすいと思います!

目次
・Zepkitをインストール・
・開発ネットワーク・
・アップグレード・
・Next Step: EVMパッケージ・
・最後に・


・Zepkitをインストール・

ここで使用したコマンドが、

truffle unbox zeppelinos/zepkit

です。Zepkitをダウンロードしています。
Truffleには、様々な基本的機能を詰め込んだboxという仕組みがあります。これを使う事によって開発者はユニークなDapps作成に集中する事が出来る様になります。
こちらのサイトでTruffle boxのサンプルコードを確認する事が出来ます。またこちらはGithubページとなっています。

そして、それらのフレームワークを指定してダウンロードします。
Zepkitには、React,ZeppelinOS,OpenZeppelin,Truffle and Infuraが含まれてTruffle Boxとなっているのでunboxコマンドが必要となります。


・開発ネットワーク・

ここでは、Ganacheを使ったローカル開発ネットワークに接続します。

Ganacheとは:
Ethereum開発の為の個人用のブロックチェーンです。GUIバージョンとCLIバージョンがあり、今回はCLIを使いました。機能としては、テストを行なったり、ニーモニックやアカウント情報がとても見やすくなっています!
元々はTestrpcとして呼ばれていて、Ethereum開発ツールのTruffle suiteの内の1つです。
コマンドはこちら。

ganache-cli --option

使用したオプションを紹介して行きます。

・u 
unlockという意味で、続く数字のアカウントをunlockします。

・secure
デフォルトでアカウントをロックするオプション。ですが上記の-uと併用すると指定されたunlockアカウント以外は全てロックします。

・mnemonic
PRNGシードを生成する為のbip39ニーモニックを使用。これはHDアカウントの生成に使われます。
つまり今回だと、自分のMetamaskに紐づいているニーモニックを使用しているのでここで作成されたHDアカウントはMetamaskでも使用する事が可能となります。

続いてのコマンドはこちらです。

zos init 

ZeppelinOSのプロジェクトをinitializeします。するとトップディレクトリ内にzos.jsonというファイルが作られます。

zos session

セッションコマンドでは、目的のネットワークと連結する為のコマンドでセッションを開始します。
今回は-network developmentオプションで実行するセッション管理情報を作成し、developmentネットワークへの接続を実行。また-fromオプションで実行するトランザクションのデフォルトの送信者アドレスを指定。これが今回自分のMetamaskのニーモニックから生成されたHDアカウントのシードから作られた、ローカルEthereum開発環境用のアドレスとなり、Metamaskとも繋がっています。

zos add

このコマンドではファイルを最初にコンパイルし、プロジェクトに追加します。さらにその情報をzos.jsonファイルに保存します。このファイルのcontractsの中に入っています。

zos push

このコマンドは、ファイルを指定されたネットワークにデプロイし、そのアドレスを記憶します。そして、これはzos.dev-<network_id>.jsonファイルを作成し、この特定のネットワーク内のプロジェクトに関する情報にデプロイされたコントラクトの実装アドレスも含めて作成します。

zos create filename --init initialize --args 

こちらのコマンドで、アップグレード可能なファイルのコントラクトインスタンスを作成します。-argsの後ろには引数を入れてあげます。
そしてこのコマンドを実行すると、zos.dev-<<network-ID-here>>.jsonというファイルが作成されます。開発ネットワークのネットワークIDを示しています。


・アップグレード・

zos push

新しい変更があった場合、ZeppelinOSのバージョンが2.2.0では、truffle compile — allコマンドを打たなくてもこのコマンドが自動的にコンパイルしてくれます。
プロジェクトの新しい変更を自分のブロックチェーンにpushしているので、インスタンスも更新します。

zos update 

このコマンドで、既にデプロイされたコントラクトを新しいコードにアップデートします。


・Next Step: EVMパッケージ・

zos link openzeppelin-eth

openzeppelin-eth EVMパッケージに接続します。
openzeppelin-ethとは、OpenZeppelinのEVMパッケージです。
EVMパッケージとは、基本的に再利用可能なチェーン上のコードの一部です。EVMパッケージメンテナンスやフォークなどが行われた場合でも、新しいコントラクトを展開せずに最新バージョンに簡単にアップグレードできます。
成功すると、zos.jsonファイルに情報が書き込まれます。

zos push --deploy-dependencies

このオプションは、mainnet,ropsten,rinkeby and kovanにデプロイされているパッケージを再利用する為に必要なオプションです。
しかし今回はこれらのネットワークを使用していない為、Truffleで空のローカル開発ネットワーク(Ganacheの事)を作成しました。なのでこのオプションではそこにデプロイする処理となります。
また前回までのコマンドだと、openzeppelin-ethとローカル開発ネットワークはリンクしていますがデプロイまではされていないので、pushのみだとファイルが見つからないと怒られてしまいます。
なのでオプションが必要です。実行すると、ブロックチェーンへのpushが出来ます。
成功すると、zos.dev-<<network-ID-here>>.jsonファイルに情報が書き込まれます。

zos create filename --init --args address

こちらで、インスタンスを作成しています。
成功すると、proxiesの部分に情報が追加されます。記入したアドレスよりインスタンスを生成し、アドレスも作成しています。こちらも、zos.dev-<<network-ID-here>>.jsonファイルに書き込まれます。

zos create openzeppelin-eth/StandaloneERC20 --init --args

openzeppelin-ethコントラクトのEVMパッケージを使い、ERC20トークンを発行しています。argsを使ってそれぞれの引数に値を入れています。
またOpenZeppelinのGithubで、openzeppelin-ethのリポジトリを確認できます。今回作成したERC20のコードも見る事ができ、今回は入れなかった所有アドレスなども設定できます。


・最後に・

前回作成した記事で使用したコマンド紹介をしましたが、こうして記事にする事で意識していなかった部分や新しい発見があって凄く勉強になりました。
また今回Zepkitの記事を作成していてエラーがissueが無かった時に、開発者に向けてissueを書いたのが初めてだったのでとても緊張しました、、。でも、そのお陰でソースコードをその日で改善してくれたりアドバイスも頂けたので嬉しかったです!


・お知らせ

■ブロックチェーンエンジニア集中講座開講中!
HashHubではブロックチェーンエンジニアを育成するための短期集中講座を開講しています。お申込み、詳細は下記のページをご覧ください。
ブロックチェーンエンジニア集中講座:https://www.blockchain-edu.jp/

■HashHubでは入居者募集中です!
HashHubは、ブロックチェーン業界で働いている人のためのコワーキングスペースを運営しています。ご利用をご検討の方は、下記のWEBサイトからお問い合わせください。また、最新情報はTwitterで発信中です。

HashHub:https://hashhub.tokyo/
Twitter:https://twitter.com/HashHub_Tokyo

■HashHubでは下記のポジションを積極採用中です!
・コミュニティマネージャー
・ブロックチェーン技術者・開発者
・ビジネスディベロップメント

詳細は下記Wantedlyのページをご覧ください。

Wantedly:https://www.wantedly.com/companies/hashhub/projects