ERC20準拠トークンを作成してRopstenにデプロイする

ERC20準拠トークンを作成してRopstenにデプロイする

どうもこじりょー(@kojiryoinvestor)です。

この記事では『ブロックチェーンアプリケーション開発の教科書』を参考にERC20準拠トークンを作成して、テストネット 「Ropsten」へのデプロイまでの手順をまとめました。

『ブロックチェーンアプリケーション開発の教科書』に記載されているコードでは動かない箇所があるので、当記事も合わせて参考にしていただければスムーズに開発ができます。

また今回のチュートリアルでは以下の3つのツールの使い方を知っている必要があります。

  • Truffle
  • Ganache
  • MetaMask

これらがまだよくわからない方はTruffleの「イーサリアム・ペットショップ」のチュートリアルをやることで学習することができますので挑戦してみてください。

ERC20トークンの作成

Truffleでプロジェクトを作成する

まずはじめにトークンを作成するためのプロジェクトを作成します。

これから作成するトークンの名前でディレクトリを作成するとわかりやすいです。

私はKLABO(クラボ)という名前のトークンを作るため、「klabo-token」という名前でディレクトリを作成しました。

mkdir klabo-token

ディレクトリを作成したらターミナルからディレクトリに移動して、Truffleで初期化を行います。

//プロジェクトディレクトリに移動

cd klabo-token

//Truffleの初期化コマンド

truffle init

「truffle init」を実行するとDapps開発に必要なディレクトリとファイルが自動で作成されます。

これでトークンを開発する準備は整いました。

コントラクトの作成

OpenZepplinをインストール

安全なトークンを作成するために「OpenZepplin」というライブラリを利用します。

「OpenZepplin」を利用することで一から安全なプログラムを開発する必要がないため、効率的にトークンの作成を行うことができます。

「OpenZepplin」はnpmを利用してプロジェクトにインストールします。

プロジェクトディレクトに移動して、ターミナルから下記のコマンドを実行します。

//パッケージJSONを作成

npm init -f

//OpenZeppelinのインストール

npm install zeppelin-solidity

上記のコマンドを実行すると、プロジェクトディレクトリ内に「node_module」というディレクトリが自動で作成され、その中に「zeppelin-solidity」が入っています。

コントラクトを実装する

作成するトークン名が「KLABO」であるため、コントラクトの名前は「KlaboToken」としました。

コントラクトの全体は以下のようになりました。

まずはじめに、おきまりのコントラクトが動作するSolidityのバージョンを指定します。

その次の「import」では、「OpenZeppline」の「StandardToken.sol」というプログラムを利用できるように、ここで読み込むように設定します。

import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol";

「import」により、「StadardToken」を継承することができるようになりました。

クラスを継承するには「コントラクト名 is 継承の参照」という形で定義します。

//KlaboTokenはStandardTokenを継承する
contract KlaboToken is StandardToken {}

コントラクトの中身はトークンの詳細を定義しています。

まずはじめにトークンの名前(name)を定義しています。

string public name = "KLABO";

次のコードではトークンの単位(symbol)を定義しています。

私の場合はトーク名と単位を同じにしています。

string public symbol = "KLABO";

トークンの最小単位(decimals)は以下のように定義しています。

uint public decimals = 18;

最小単位の設定はトークンの用途によって決めるといいです。

・1トークンが現実世界の何か1つを表すとき、 decimals を 0 に

・小数以下の桁が決まってるとき、decimals をその桁数に

・どちらでもないとき、細かくトークンを使えるように decimalsを18に

ERC-20トークンコントラクトはどのように動いているのか | The Coffee Times

ここでは特に用途が決まっていないのでETHと同じ「1KLABO = 1×10の18乗」としています。

constructor(uint initialSupply) public {
}

「constructor」はコントラクトが作成されるときに自動的に呼び出される関数です。

ここではあとで定義する「initialSupply(トークンの発行数)」を引数に受け取り、それを「totalSupply(全体の供給量)」に代入することでトークンの発行上限を定義しています。

totalSupply_ = initialSupply;

次に全トークンを「コントラクトを作成したアカウントアドレス」に入れることで、作成したばかりのトークンが全て作成者の元に行くようにしています。

balances[msg.sender] = initialSupply;

以上がトークンのコントラクトとなります。

マイグレーションの作成

続いてコントラクトをデプロイするためのマイグレーションを作成します。

マイグレーションのファイル名は「番号_作業内容_コントラクト名称」という形でつけることが一般的と言われているので「2_deploy_klabo_token.js」として作成しました。

スクリプトのファイル名は番号から開始し、アンダースコアで作業内容、さらにアンダースコアでコントラクト名称を入れることが一般的です。

加嵜 長門(著)・篠原 航(著)・丸山 弘詩(編)(2018)『ブロックチェーン・アプリケーション開発の教科書』(マイナビ出版)P.231

またマイグレーションファイルの全体は以下のようになります。

マイグレーションファイルではデプロイ時にトークンの初回発行量(initialSupply)を「1000e18 (1,000×10の18乗)」とするように定義しています。

またテストネットへのデプロイの際にはGasが必要なため設定をしています。

テストコードの作成

コントラクトのテスコードは以下のようにしました。

テストコードでは、コントラストがデプロイされた際に、最初のアカウント(オーナー)に1000KLABO発行されているかどうかを検証しています。

それではテストを実行します。

テストを実行する前に「Ganache」を起動しておきます。

次にターミナルから下記のコマンドを実行して、プライベートネットのノードへ接続します。

truffle console

ノードに接続したら下記のコマンドを入力してテストを実行しましょう。

test

以下のようになればテスト成功です。

下記のコマンドを実行すればコンソールから抜けることができます。

.exit

スポンサーリンク


テストネット「Ropsten」へのデプロイ

テストネット用のEtherを入手する

テストネットへのデプロイにはGasがかかるため、デプロイ用にEtherを入手しておく必要があります。

テストネット用のEtherは下記のサイトから無料で入手することができます。

MetaMask Ether Faucetにアクセスしたら、まずMetaMaskを起動します。

次にMetaMaskを「Ropsten Test Net」に接続させます。

コントラクトのデプロイは最初に作ったアドレスで行われるため、Etherを受け取るアドレスは初期アカウントにしましょう。

アカウント一覧を表示させて一番上にあるのが初期アカウントです。

あとはMetaMask Ether Faucetに戻って「request 1 ether from faucet」をクリックすれば、アカウントにEtherが送金されます。

INFURAに登録

テストネットやメインネットへのデプロイには、ブロックチェーンを自分のPCに同期させる必要があります。

しかしイーサリアムクライアントを利用してブロックチェーンを同期すると、ディスク容量が大量に消費されます。

そこでイーサリアムクライアントを利用しなくてもコントラクトのデプロイができるサービス「INFURA」を使います。

無料で利用できますので、「GET STARTED FOR FREE」をクリックして必要事項を入力して登録をしましょう。

登録が完了すると画面またはメールに、アクセストークンが表示されますので大切に保管しておきましょう。

ネットワーク設定

テストネット「Ropsten」へ接続するための設定をしていきます。

ネットワーク設定は「truffle.js」で行います。

truffle.jsは以下のようになります。

mnemonicには、MetaMaskでアカウントを作成した際に表示された単語を入れます。

accessTokenには、INFRAに登録した際に表示されたものを入れます。

テストネットへの接続には「truffle-hdwallet-provider」モジュールが必要なため、事前にプロジェクトディレクトリへnpmでインストールしておきましょう。

npm install truffle-hdwallet-provider

これでテストネット「Ropsten」へ接続する準備は整いました。

Ropstenへデプロイ

Ropstenへのデプロイは以下のコマンドを実行します。

truffle migrate --network ropsten

デプロイに成功するとコントラクトのアドレスが表示されます。

トークンを確認する

Ropstenへのデプロイが成功したら、作成したトークンを確認してみましょう。

まずMetaMaskを開いて「TOKENS」を選択し、「ADD TOKEN」をクリックします。

「Token Contract Address」にデプロイ時に表示されたコントラクトアドレスを入力します。

最後に「Add」をクリックすればトークンが発行されます。

おわりに

以上、ERC20準拠トークンの作成と「Ropsten」ネットワークへのデプロイでした。

テストネットへのデプロイができるようになったので、これで世界中の人にDappsを触ってもらうことができますね。

Dappsをどんどん作って公開し、この業界を盛り上げていきましょう!

Dapps開発カテゴリの最新記事