EthereumのERC20トークンをRopstenネットワークにデプロイしてオリジナル通貨を作る




オリジナル通貨

Ethereumを使うとオリジナルの通貨が作れます。以前記事で作ったKZM(KozumaToken)をEthereumのテストネットワークであるRopsteにデプロイしてみたいと思います。

ERC20がわからないという方は下記記事をお読みください。

参考記事:EthereumのERC20トークンとは?

トークン作成

前回はzeppelinsolidityのバージョン1.4.0を使っていましたが今回は最新版の1.7.0で再度作り直してみたいと思います。

Truffleのインストール

$ npm install -g truffle

雛形作成

Truffleを使うことでトークンの雛形を簡単に作成できます。zeppelin-solidity@1.7.0とtruffle-hdwallet-provider@0.1.0をnpmでインストールしておきます。

$ mkdir token & cd token
$ truffle init
$ tree
.
├── contracts
│   └── Migrations.sol
├── migrations
│   └── 1_initial_migration.js
├── test
├── truffle-config.js
└── truffle.js
$ npm init -f
$ npm install --save zeppelin-solidity@1.7.0 truffle-hdwallet-provider@0.1.0

トークンを実装

contracts配下にKzm.solを作成します。zeppelinsolidityのv1.7.0ではStandardToken.solの階層が変わっていることと、totalSupplyがtotalSupply_になっていることに注意してください。自分はv1.4.0のソースコードとごちゃまぜに考えてしまい、ハマってしまいました。

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

contract Kzm is StandardToken {
  string public name = "KozumaToken";
  string public symbol = "KZM";
  uint public decimals = 18;

  function Kzm(uint initialSupply) public {
    totalSupply_ = initialSupply;
    balances[msg.sender] = initialSupply;
  }
}

ソースコードがコンパイルできたら問題ないです。

$ truffle compile
Compiling ./contracts/Kzm.sol...
Compiling ./contracts/Migrations.sol...
Compiling zeppelin-solidity/contracts/math/SafeMath.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/BasicToken.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/ERC20.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/StandardToken.sol...
Writing artifacts to ./build/contracts

マイグレーションファイル

migrations配下に2_deploy_kzm_token.jsを作成します。

const Kzm = artifacts.require('./kzm.sol')

module.exports = (deployer) => {
  let initialSupply = 50000e18
  deployer.deploy(Kzm, initialSupply)
}

デプロイ設定

truffle.jsを下記に修正します。ROPSTEN_MNEMONICはMetaMaskでアカウントを作った時のものを使用します。INFURA_ACCESS_TOKENはこちらで作成したものを指定してください。HDWalletProviderはちゃんと理解していないので今後追記します。

const HDWalletProvider = require("truffle-hdwallet-provider");
const mnemonic = process.env.ROPSTEN_MNEMONIC;
const accessToken = process.env.INFURA_ACCESS_TOKEN;

module.exports = {
  // See <http://truffleframework.com/docs/advanced/configuration>
  // to customize your Truffle configuration!
  networks: {
    ropsten: {
      	provider: function() {
        	return new HDWalletProvider(
         		mnemonic,
          		'https://ropsten.infura.io/' + accessToken
        	);
      	},
      	network_id: 3,
      	gas: 4600000
    }   
  }
};

これで準備は完了です。

Ropstenへのデプロイ

gasの設定が悪いのかデプロイが失敗してます。この時のgasは500000を設定していました。

$ truffle compile
Compiling ./contracts/Kzm.sol...
Compiling ./contracts/Migrations.sol...
Compiling zeppelin-solidity/contracts/math/SafeMath.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/BasicToken.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/ERC20.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol...
Compiling zeppelin-solidity/contracts/token/ERC20/StandardToken.sol...
Writing artifacts to ./build/contracts


$ truffle migrate --network ropsten
Using network 'ropsten'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0x6a11fe7f9d3878fde3933a877aa1e26e591dc53de0fba2321d51b79495dc3bd1
  Migrations: 0xd29416206f197f39512d213079ee1aef43d1ec82
Saving successful migration to network...
  ... 0xa079904dc4b78073f62369b73e3d021176a68d61b6550267f9db2b18a84fc87f
Saving artifacts...
Running migration: 2_deploy_kzm_token.js
  Deploying Kzm...
  ... 0x669c4f09928e0461269c1806cbcc7d50a0cb41141fa609981b7913cce2f8835d
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: The contract code couldn't be stored, please check your gas amount.
    at Object.callback (/Users/.nvm/versions/node/v6.10.2/lib/node_modules/truffle/build/cli.bundled.js:329221:46)
    at /Users/.nvm/versions/node/v6.10.2/lib/node_modules/truffle/build/cli.bundled.js:39618:25
    at /Users/.nvm/versions/node/v6.10.2/lib/node_modules/truffle/build/cli.bundled.js:331159:9
    at /Users/.nvm/versions/node/v6.10.2/lib/node_modules/truffle/build/cli.bundled.js:175492:11
    at /Users/.nvm/versions/node/v6.10.2/lib/node_modules/truffle/build/cli.bundled.js:314196:9
    at Web3ProviderEngine._inspectResponseForNewBlock (/Users/private_work/erc20/my_token/node_modules/web3-provider-engine/index.js:231:12)
    at /Users/private_work/erc20/my_token/node_modules/web3-provider-engine/index.js:131:14
    at /Users/private_work/erc20/my_token/node_modules/async/dist/async.js:473:16
    at replenish (/Users/private_work/erc20/my_token/node_modules/async/dist/async.js:993:25)
    at iterateeCallback (/Users/private_work/erc20/my_token/node_modules/async/dist/async.js:983:17)

GitHubのissueで4600000にするとうまくいったよというのを見つけたので試してみたらうまくいきました。

$ truffle migrate --network ropsten
Using network 'ropsten'.

Running migration: 2_deploy_kzm_token.js
  Deploying Kzm...
  ... 0xa9fdfa79fcfb866631afd5ce94c479a8eb56a63f24d6c658ebe7f12279bf4d4d
  Kzm: 0x75830610cd1c532c408ab68a4f6dbee2856a0e29
Saving successful migration to network...
  ... 0x68f4df0b6598feb03d7afcf1f1082eec7f5e44bfbecc0f024a813166addd1b8d
Saving artifacts...

トークンのコントラクトアドレスは0x75830610cd1c532c408ab68a4f6dbee2856a0e29になります。RopsteのEthescanで確認できます。ページはこちら

MetaMasckへの反映

次はRopstenに作成したトークンをMetaMaskに反映させます。反映方法は簡単でTOKENSのADD TOKENにコントラクトアドレスを入力するだけです。

これで自分のアカウントにオリジナルのトークンが追加されます。

まとめ

ローカル環境にデプロイするのもテストネットにデプロイするのもそんなに手間が変わらないことが分かっていただけたかと思います。次は本番環境にデプロイする記事を書きたいと思います。

おすすめ書籍

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

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

The following two tabs change content below.

髙妻智一

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






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



コメントを残す

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