ERC20準拠のトークン

ERC20準拠のトーク

プロジェクト作成

$ mkdir dapps-token
$ cd dapps-token
$ truffle init

OpenZeppelinのインストール

$ npm init -f
$ npm install zeppelin-solidity

トークコントラクトの作成

デプロイスクリプト

  • migrations/2_deploy_dapps_token.jsファイルを作成

テストコードの作成

  • tests/DappsToken.jsファイルを作成
  • テストを実行
$ truffle develop
truffle(develop)> test
  • migrateコマンドでdevelopネットワークにデプロイし、設定した名前などを確認する
truffle(develop)> migrate
truffle(develop)> dappsToken = DappsToken.at(DappsToken.address)
truffle(develop)> dappsToken.name()
'DappsToken'
truffle(develop)> dappsToken.symbol()
'DTKN'
truffle(develop)> dappsToken.totalSupply()
{ [String: '1000'] s: 1, e: 3, c: [ 1000 ] }

発行量の確認

  • balanceOfコマンドでアカウント別の発行量を確認できる
  • アカウントの1番目は発行者なので、トークンを全額保持している
  • アカウントの2番目は保持量が0になっている
truffle(develop)> dappsToken.balanceOf(web3.eth.accounts[0])
{ [String: '1000'] s: 1, e: 3, c: [ 1000 ] }
truffle(develop)> dappsToken.balanceOf(web3.eth.accounts[1])
{ [String: '0'] s: 1, e: 0, c: [ 0 ] }

送金

  • transferコマンドで送金する
  • 送金完了後に各アカウントが所持するトークン数を確認すると、トークンが正常に動作していることがわかる
truffle(develop)> dappsToken.transfer(web3.eth.accounts[1], 100)
{ tx: '0xf001aa4460728b5b75b96e7afdc72e739d5a53cf71dffc4cb6323b83d1d5b2d0',
  receipt:
   { transactionHash: '0xf001aa4460728b5b75b96e7afdc72e739d5a53cf71dffc4cb6323b83d1d5b2d0',
     transactionIndex: 0,
     blockHash: '0x933600dadc8888729d6d538a27944088e37859b2d931af5f5e1a19a9f15e780f',
     blockNumber: 13,
     gasUsed: 51519,
     cumulativeGasUsed: 51519,
     contractAddress: null,
     logs: [ [Object] ],
     status: '0x01',
     logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010000008000000000000000000010000000080000000000000000000000000000000000000000000000000000000000000000010000000000000000000010000000000000000000000000000000000000000010000000002000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000010000000000000' },
  logs:
   [ { logIndex: 0,
       transactionIndex: 0,
       transactionHash: '0xf001aa4460728b5b75b96e7afdc72e739d5a53cf71dffc4cb6323b83d1d5b2d0',
       blockHash: '0x933600dadc8888729d6d538a27944088e37859b2d931af5f5e1a19a9f15e780f',
       blockNumber: 13,
       address: '0x345ca3e014aaf5dca488057592ee47305d9b3e10',
       type: 'mined',
       event: 'Transfer',
       args: [Object] } ] }
truffle(develop)> dappsToken.balanceOf(web3.eth.accounts[0])
{ [String: '900'] s: 1, e: 2, c: [ 900 ] }
truffle(develop)> dappsToken.balanceOf(web3.eth.accounts[1])
{ [String: '100'] s: 1, e: 2, c: [ 100 ] }

最後に

こちらにサンプルを置いておきます。

GitHub - akifumi/dapps-token