TestnetでToken発行

やったこと

ERC223 と ERC20に対応したToken作成して、Ropstenテストネットに、Tokenをあげた。 その後、そのTokenを他の人のアドレスに送金した。

Token作成

まず、Tokenを作成した。

こちらをみながらERC20系に必要なfunctionを利用。 https://github.com/OpenZeppelin/openzeppelin-solidity

ただ、これをそのまま実装しては、ERC223に対応できない。
そのため、有名なNANJ TOKEN を参考にした。

ERC223系では、

  • transferFrom
  • approve
  • allowance

とそれに紐づくイベントが削除されている代わりに、

  • transfer(address to, uint value, bytes memory data)

とそれに紐づくイベントが追加されている。 ERC223に沿った形で実装する必要がある。

ERC20の送金失敗の課題解決に挑戦するERC223

また、ERC20系で定義していたtransferは、上記サイトにあるように、Contract Address への送金した場合、そのTokenが失われないようにする必要がある。

NANJ TOKENは、他にも

  • frozenAccount
    • 指定したアカウントでは取引できないようにする
  • lockupAccount
    • 指定したカウントは指定された間ロックされる
  • mint
    • 新しくTokenを発行し、総供給量を増やす。
    • openzeppelin-solidityの、ERC20.solにもあるから、ほぼERC20系のデフォルト機能なのかも。
  • burn
    • Tokenを削除し、総供給量を減らす。
    • openzeppelin-solidityの、ERC20.solにもあるから、ほぼERC20系のデフォルト機能なのかも。
  • distributeAirdrop
    • 一括でユーザーにTokenを送金する。
  • collectTokens
    • 一括でユーザーからTokenを回収する。

がある。

今回は、こちらを参考にさせていろいろ機能を入れてみた。

Contractを、作成する際に、solidity 5.0系で作ったのだが、NANJ TOKEN をコピーしただけでは、上手く動かないので注意。

Localで確認

truffleとganacheをインストールして、ganacheを立ち上げる。

Truffle Suite | Documentation | Truffle | Truffle Quickstart

truffle.configに、以下を記述すると、ganacheにアクセスできるはず。

networks: {
   development: {
     host: "localhost", 
     port: 7545,
     network_id: "*",
    },

で、作ったContractを配置して、migrationフォルダ内に、

// 2_deploy_contracts.js
var MyToken = artifacts.require("./MyToken.sol");

module.exports = function(deployer) {
  return deployer.deploy(
    MyToken
  );
};

と書いて、以下コマンドを実行。

$ truffle development // truffleのコンソールを起動
> migrate // migrationフォルダのプログラムを実行して、Contractをデプロイ
> let instance = await ContractName.deployed() // deployしたContractを取得。
> instance.name() // Contractのnameメソッドが呼ばれ、TokenNameが取得できる!!

これで、localで確認終わったので、testnetへあげて見る

Testnetへデプロイ

truffleからもデプロイ可能だと思うが、geth立ち上げて、tastnetと同期してという作業が面倒だったので、remixを利用した。

Remix - Solidity IDE

トークン作ってみよう! - 誰にでも簡単なトークンの作り方|高瀬俊明 | ブロックチェーンの日々|note

上記記事がわかりやすすぎるので、説明は省略します。この記事通りに、TokenをDeployする。

そうすると、etherscan上に今発行したTokenを確認できる。

終わったら、metamaskとか使って、送金してしまえば終了!!

感想

一通り、Token発行までの流れが理解でき、Ethereum Tokenの仕様もだいたい理解できた。 Railsを使って、Walletを作る方法もわかったので、満足!