ERC20準拠のEthereumトークンをローカル環境にデプロイする方法[ソースコード付き]

Ethereum
Ethereum Solidity
スポンサーリンク

ERC20とは?

端的に言うと、ETHトークンの規格です。
特定のルールに則って作られた通貨とも言えるかと思います。
ICOに用いられる事が多く、6つの機能と2つのイベントを有している事が求められます。
6つの機能と2つのイベントは以下の通りです。

function totalSupply() constant returns (uint totalSupply);
function balanceOf(address _owner) constant returns (uint balance);
function transfer(address _to, uint _value) returns (bool success);
function transferFrom(address _from, address _to, uint _value) returns (bool success);
function approve(address _spender, uint _value) returns (bool success);
function allowance(address _owner, address _spender) constant returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);

検証環境

macOS Catalina : 10.15.4
node : v14.2.0

必須モジュール

truffle
ganache

nodejsとtruffleのインストール

ETHネットワークにデプロイするにはtruffleを用います。
truffleはnodejs上で駆動しますので、まずはnodejsをインストールしましょう。
nodejsのインストール方法は下記のサイトを参考にしてください。

MacにNode.jsをインストール - Qiita
MacにNode.jsの環境を構築するメモ。 その前に ※以下の方法もオススメです! MacにNode.jsをインストール(anyenv + nodenv編) 上記の場合はプロジェクト毎(フォルダ毎)に切り替えができます。 no...

nodejsのインストールが完了したら、次はtruffleをインストールします。
以下のコマンドをターミナル上で実行してください。

npm install -g truffle

ganacheのインストール

今回はganacheというETHのローカルネットワーク構築用便利パッケージを利用し、そこに独自トークンをデプロイします。
ですので、以下のサイトからganacheをインストールしてください。

Ganache | Truffle Suite
Deploy contracts, develop your decentralized applications (dapps), and run tests on smart contracts. Available as a desktop application & command-line tool.

ganacheの起動とポートの確認

ganacheを起動してポート番号を確認します。
以下のように確認してください。

ganache

※デフォルトでは7545のはずです。

ソースコードの取得

ERC20準拠のトークンを生成するためのプログラムを取得します。
github上に設置していますので、以下のプログラムをcloneしてください。

kenshow8/eth_erc20_token
Contribute to kenshow8/eth_erc20_token development by creating an account on GitHub.
git clone https://github.com/kenshow8/kenshow8_eth_erc20_token.git

コンパイルの準備

取得したプログラムを利用してデプロイ用のコンパイルを行います。
コンパイルする前にソースコードを少しだけ編集します。
編集するファイルはcontracts/kenshowcoin.solです。

pragma solidity ^0.5.0;

library SafeMath {
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

contract KenshowCoin {
  using SafeMath for uint256;

  address public owner = 0x70907A34E69C1EE58001C86471f896Cc445ef97c; ////////// この行を編集 ////////// 
  string public name = "KenshowCoin";
  string public symbol = "KSC";
  uint256 public decimals = 18;
  uint256 public totalSupply = 1000000000000000000000000; // 1,000,000 x 10^18

.....以下省略

トークンのオーナーとしたいウォレットアドレスをganacheのアドレスリストから選んで該当箇所に入力してください。

また、ソースコード内のtruffle-config.jsのポートが先程確認したポート番号と同様になっていることを必ず確認してください。

module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 7545,
      network_id: "*"
    }
  }
};

ここまででコンパイル前の準備は完了です。

トークンのコンパイル

solidityで書かれたトークンをETHブロックチェーンにアップロードするためにコンパイルが必要です。
コンパイルはtruffleというモジュールが提供してくれる簡単なコマンドで実行可能です。
コマンドは以下の通りです。

# kenshow8_eth_erc20_tokenディレクトリで実行してください。
truffle compile

truffle-compile

無事、コンパイルに成功すると、buildディレクトリ内にcontractsディレクトリが生成されて中に3つのjsonファイルが生成されます。
※コンパイルエラーが発生した場合やトークンのプログラムを修正した場合は、build/contractsディレクトを削除してからコンパイルをやり直してください。

トークンのデプロイ

いよいよ、トークンをブロックチェーンネットワークにデプロイします。
デプロイ用のコマンドは以下の通りです。

truffle migrate

無事デプロイ出来た場合は以下のように動作します。

truffle-migrate

returnされるテキストは以下のような感じです。

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.

Starting migrations...
======================
> Network name:    'development'
> Network id:      5777
> Block gas limit: 6721975 (0x6691b7)

1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0xabb001a7e2fed0f7dd39301d6e751b7d16bcf8ba5ebca8d9710d5f006bc326ac
   > Blocks: 0            Seconds: 0
   > contract address:    0x5d6B5B2383D7A7e2F88baBc23b9a8173468985bD
   > block number:        1
   > block timestamp:     1590323409
   > account:             0x97C735febeaAd6372B4Be4cf32a565e5d4309C01
   > balance:             99.99549526
   > gas used:            225237 (0x36fd5)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00450474 ETH

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00450474 ETH

2_deploy_contracts.js
=====================

   Deploying 'KenshowCoin'
   -----------------------
   > transaction hash:    0xb40410730705f191d688df51f87c7a3522a4a6258bf0be098df89517823fbce6
   > Blocks: 0            Seconds: 0
   > contract address:    0x3679DC33e2122Ec5d2EB7EfCBBd5aA0C6CE29dF1
   > block number:        3
   > block timestamp:     1590323410
   > account:             0x97C735febeaAd6372B4Be4cf32a565e5d4309C01
   > balance:             99.97254784
   > gas used:            1105008 (0x10dc70)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.02210016 ETH

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.02210016 ETH

Summary
=======
> Total deployments:   2
> Final cost:          0.0266049 ETH

33行目からが独自トークンがデプロイされた結果です。
デプロイされた結果には、contract addressが含まれています。
このcontract addressは後でトークンを使って実験をするときに必要ですので、何かしらの形で保存しておきましょう。
また、58行目にはデプロイにかかったgasが記載されています。
実際にganacheでオーナーアドレスのETHを確認すると、かかったgasが差し引かれているのがわかります。

ganache

まとめ

truffleを使ったERC20準拠トークンのローカルネットワークへのデプロイ方法を解説しました。
割と簡単にデプロイまでたどり着けたのではないでしょうか?
今回はローカルネットワークへのETHトークンのデプロイでしたが、rinkebyやropstenなどのテストネットワークはもちろんの事、本番環境のネットワークへも似たような方法でデプロイが可能です。
また、ETHトークン以外のsolidityプログラムでも同様です。
まずはローカルネットワークでETHトークンのデプロイに慣れて、その他のプログラムや環境へのデプロイに挑戦してみてはいかがでしょうか。

タイトルとURLをコピーしました