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のインストール方法は下記のサイトを参考にしてください。

nodejsのインストールが完了したら、次はtruffleをインストールします。
以下のコマンドをターミナル上で実行してください。
npm install -g truffle
ganacheのインストール
今回はganacheというETHのローカルネットワーク構築用便利パッケージを利用し、そこに独自トークンをデプロイします。
ですので、以下のサイトからganacheをインストールしてください。

ganacheの起動とポートの確認
ganacheを起動してポート番号を確認します。
以下のように確認してください。
※デフォルトでは7545のはずです。
ソースコードの取得
ERC20準拠のトークンを生成するためのプログラムを取得します。
github上に設置していますので、以下のプログラムをcloneしてください。
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
無事、コンパイルに成功すると、buildディレクトリ内にcontractsディレクトリが生成されて中に3つのjsonファイルが生成されます。
※コンパイルエラーが発生した場合やトークンのプログラムを修正した場合は、build/contractsディレクトを削除してからコンパイルをやり直してください。
トークンのデプロイ
いよいよ、トークンをブロックチェーンネットワークにデプロイします。
デプロイ用のコマンドは以下の通りです。
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が差し引かれているのがわかります。
まとめ
truffleを使ったERC20準拠トークンのローカルネットワークへのデプロイ方法を解説しました。
割と簡単にデプロイまでたどり着けたのではないでしょうか?
今回はローカルネットワークへのETHトークンのデプロイでしたが、rinkebyやropstenなどのテストネットワークはもちろんの事、本番環境のネットワークへも似たような方法でデプロイが可能です。
また、ETHトークン以外のsolidityプログラムでも同様です。
まずはローカルネットワークでETHトークンのデプロイに慣れて、その他のプログラムや環境へのデプロイに挑戦してみてはいかがでしょうか。