ropsten testnetにerc20 tokenをtruffleでdeployする


概要

web上の情報をあちこち探すのがめんどくさいので(しかもバージョンの違いで若干仕様が異なったりするので)、自分用のメモがわりに、テストネット上でのERC20トークンの発行を簡潔にまとめておきます。

動作環境

MacOS High Sierra 10.13.6
Truffle v4.1.14
Python 2.7.9
node v9.3.0
solc Version: 0.4.24

事前に必要なもの

  • Infuraのアクセストークン取得
  • Metamaskのニーモニック取得
  • ropstenのETH

作業ディレクトリにパッケージの準備をする

$ mkdir mytoken
$ cd mytoken
$ truffle init

続いて、truffleの初期化が終わったら、OpenZeppelinの神パッケージをインストールします。

$ npm init -f
$ npm install zeppelin-solidity --save

node_modulesフォルダにzeppelin-solidityのフォルダがあることが確認できるはずです。

contractの記述

ERC20トークンに必要な、name, symbol, decimalsを適当に決めます。decimalsは小数点以下何桁あるのかを表しています。

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

contract MyToken is StandardToken {
  string public name = "MyToken";
  string public symbol = "MYT";
  uint public decimals = 18;

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

OpenZeppelinのパッケージを継承しているので楽チンですね。

※solidityのコンパイラのバージョンが、0.4.23以前は、contractの名前と同じ関数が、一番最初に実行されていましたが、0.4.23以降は、constructorがその役割を果たすようになりました。

コントラクトの名前と、ファイルの名前が一致するようにして、contractsフォルダ下に配置します。

migration fileの作成

migrationsフォルダ下に2_deploy_contracts.jsを設置します。migrationsフォルダ下にあるファイルは、1から順に読み込まれることになるので、2から始まるファイル名にします。

このファイルでは、deployするコントラクトとそのコントラクトのconstructorに渡す引数を指定します。この場合は、総発行量を引数にとりますので、任意の数字を設定します。

2_deploy_contracts.js
const MyToken = artifacts.require('./MyToken.sol')

module.exports = (deployer) => {
  const initialSupply = 100000e18
  deployer.deploy(MyToken, initialSupply)
}

truffle.jsの作成

ニーモニック(秘密鍵)は、12個の英単語で、そのニーモニックを元にして公開鍵が生成されているほか、トランザクションの署名にも使用されます。

インフラは、はEthereumのフルノードの代理で担ってくれるサービスで、指定されたエンドポイントに対してWeb3のJSON-RPCのリクエストを送信することでEtehreumネットワークに対するコール、トランザクションの処理を行うことが可能になります。非常に便利!

truffle.js
const HDWalletProvider = require("truffle-hdwallet-provider");
const mnemonic = "ニーモニックを入力";
const infura_url = "https://ropsten.infura.io/アクセストークンを入力";
module.exports = {
  networks: {
    ropsten: {
      provider: function () {
        return new HDWalletProvider(mnemonic, infura_url)
      },
    network_id: 3,
    gas: 4700000 //Gasは、Gas limit最大値の4700000に設定しておきましょう。
    }
  }
};

truffle-hdwallet-providerのインストール

$ npm install truffle-hdwallet-provider

Truffleでウォレットを扱うために必要なパッケージです(この場合、Metamask)。
インストールする際にエラーが発生した場合、こちらを参考にしてみてください。

truffle開発時に発生したエラー npm install truffle-hdwallet-provider

deploy

さて、整いました!
ropstenにdeployしましょう。

$ truffle migrate --network ropsten

deployできたら、ropstenのetherscanでコントラクトアドレスを確認して、自分のmetamaskにtokenをimportしましょう。