Blockchain
Ethereum

Blockchainハッカソンの振り返り(その2)〜Etherを送金〜

今回は機械学習コミュニティ「Team AI」が開催しているブロックチェーンハッカソンの振り返りを書こうと思います!
できる限り「Short & Simple」を心がけます。
なお、私自身ブロックチェーン初学者なので、内容に誤り等ありましたらご指摘いただけると幸いです。

今回やったこと

今回のハッカソンでは以下のことを行いました。

  • Etherの送金(プライベートネット上)
    • トランザクションの確認
    • 手数料の確認
  • Contractの作成
    • Node.js&npmのインストール
    • Truffleのインストール
    • Browser-Solidityのインストール

Contractの作成については、Browser-Solidityのインストールでちょっと躓いてしまったので残念ながら作成までたどり着けていません。なので今回は割愛して、作成までできたら改めてまとめようと思います。
なので今回のテーマは「Etherの送金」についてです。
これまでやってきたこととして、必要に応じて以下の記事もご参照ください。

ちなみにパソコンはMac(OSバージョンは10.12.6)です。

Gethの起動&アカウントの確認

まずはGethを起動しましょう。デゥレクトリなどは上述の記事で作成したものです。

$ geth --networkid 4649 --nodiscover --maxpeers 0 --datadir ~/ether-practice/testnet console 2>> ~/ether-practice/testnet/geth.log

アカウントの確認。

> eth.accounts
["0x5af6f4139ecd7b0497e36a26e0c5828efad55be1", "0xd7bd6786ced3bf0ece162db41c8579fb5ac08035"]

各アカウントのetherの持ち高を確認。

> eth.getBalance(eth.accounts[0])
950000000000000000000

> eth.getBalance(eth.accounts[1])
435000000000000000000

単位が「wei」になっていますが、accounts[0]950etheraccounts[1]435ether保持しています。

Etherの送金

accounts[1]からaccounts[0]35etherを送金してみます。

実際には送金時に送金元のアカウントのロックの解除が事前に必要なので、まずはロックを解除します。

> personal.unlockAccount(eth.accounts[1])
Unlock account 0xd7bd6786ced3bf0ece162db41c8579fb5ac08035
Passphrase:

上記の通りパスワードを求められるので、アカウント作成時に設定したパスワードを入力すればロックを解除できます。
また、送金の際は採掘処理をバックグラウンドで実行しておく必要があるので、採掘しておきましょう。

> miner.start(1)

etherを送金する準備が整いました。早速送金しましょう。

> eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[0], value: web3.toWei(35, "ether")})
"0x3c7d835a20aa4211dd02812cd293cc3aa182f9a3e6f0c974fba75bc09da598a1"

持ち高を確認します。

> eth.getBalance(eth.accounts[0])
985000000000000000000

> eth.getBalance(eth.accounts[1])
399999622000000000000

accounts[0]の持ち高は35ether増えて985etherになっています。accounts[1]の持ち高はというと、、、35ether以上減っていますね。具体的には35.000378ether減っています。この0.000378etherがトランザクション手数料です。

トランザクション情報の確認

トランザクション情報を確認してみましょう。eth.getTransaction(tx_id)コマンドで確認できます。tx_idには送金した際に出力されたトランザクションIDを指定します。

> eth.getTransaction("0x3c7d835a20aa4211dd02812cd293cc3aa182f9a3e6f0c974fba75bc09da598a1")
{
  blockHash: "0xd66268be66394441a9861c82d4e75d07b600f7f00f0a303aa462407aa16bcb0c",
  blockNumber: 726,
  from: "0xd7bd6786ced3bf0ece162db41c8579fb5ac08035",
  gas: 90000,
  gasPrice: 18000000000,
  hash: "0x3c7d835a20aa4211dd02812cd293cc3aa182f9a3e6f0c974fba75bc09da598a1",
  input: "0x",
  nonce: 0,
  r: "0x9b70974d01bc8ac3a1c8896b55b916d5a2cd774c64b27975b97fc313c84d8e39",
  s: "0x7d1642382bacca2c0f581ca0e71de7afd881611a4adfaec9dd4547f31ed76204",
  to: "0x5af6f4139ecd7b0497e36a26e0c5828efad55be1",
  transactionIndex: 0,
  v: "0x41",
  value: 35000000000000000000
}
  • gas
    • トランザクション処理時のgasの使用量の「最大値」を示しています。(実際のトランザクション処理時のgasの使用量ではないので注意!)
  • gasPrice
    • トランザクションの処理時に採掘者に支払う1 gas 当たりの手数料(wei)を示しています。

今回のトランザクションにどれだけのgasを使用したのかというと、

トランザクション手数料(wei) / gasPrice(wei) = 使用したgas

なので、

378000000000000 / 18000000000 = 21000

21,000 gasが使用されたことがわかります。

ということで今回はここまでです。

参考文献