やったこと
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系で定義していた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を利用した。
トークン作ってみよう! - 誰にでも簡単なトークンの作り方|高瀬俊明 | ブロックチェーンの日々|note
上記記事がわかりやすすぎるので、説明は省略します。この記事通りに、TokenをDeployする。
そうすると、etherscan上に今発行したTokenを確認できる。
終わったら、metamaskとか使って、送金してしまえば終了!!
感想
一通り、Token発行までの流れが理解でき、Ethereum Tokenの仕様もだいたい理解できた。 Railsを使って、Walletを作る方法もわかったので、満足!