MORYLAB;

エンジニアの卵がソースコードやライフログを綴るブログ。

Ethereumをはじめてみる②

前回はプライベートネットワークを立てるところまでやりました。

EOAアカウントを作成する

Ethereumには2つのアカウントタイプがあって、

・EOA いわゆるユーザーアカウント。
・Contract  コントラクトコードによって操作される。

今回は、EOAアカウントを作成する。

前回同様にコンソールを立てて、

$ geth console --networkid "10" --nodiscover --datadir "/Users/userhoge/eth_private_net" 2>> /Users/userhoge/eth_private_net/geth_err.log

アカウントを作成する。

> personal.newAccounts("パスワード)
"0x30daa337a6696d7c007b32374c34c3362fe61bbf"

アカウントができたか確認。
先ほどのアドレスが表示されたら成功。

> eth.accounts
["0x30daa337a6696d7c007b32374c34c3362fe61bbf"]


ブロックを確認してみる

前回genesis.jsonを使用してはじめてのブロックを作ったので、ちゃんとそれが反映されているかを確認してみる。

eth.getBlock(n)は、
n番目のブロック情報を表示するコマンド。

>eth.getBlock(0)
{
  difficulty: 16384,
  extraData: "0x",
  gasLimit: 134217728,
  gasUsed: 0,
  略
  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  timestamp: 0,
  totalDifficulty: 16384,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

できてますね。OK


マイニング準備

マイニングをして報酬を受け取るために設定をしていく。
はじめに、コインベースのアカウントを確認する。

コインベースアカウントとは、マイニング報酬を受け取るアカウントのこと。
デフォルトではインデックス[0]のアカウントが使用されるが、念のため確認する。

> eth.coinbase
"0x30daa337a6696d7c007b32374c34c3362fe61bbf"

OK

コインベースをインデックスn番のアカウントに変更したい場合は、

> miner.setEtherbase(eth.accouts[n])


マイニング

いよいよマイニング。
()内の引数にはスレッド数をいれる。

>miner.start(1)
null

マイニングが開始されているはずなので、進行状況を確認してみる。

> eth.mining
true

しばらく時間をおいて、ハッシュレートを確認。
ハッシュレートが上がっていたらちゃんと掘れてる。ただし、マイニングを開始してしばらくはDAGをGenerateしているのでハッシュレートが0になっている場合も。少し待ってみよう。

> eth.hashrate
766590

しばらく放置したら、どれだけのブロックが掘れたかを確認してマイニングを停止する。

> eth.blockNumber
71
> miner.stop()
true


コインベースの残高確認

先ほどマイニングした報酬として、コインベースの残高が増えているはず。

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

やけに桁数が多いが、これは単位がWeiだから。
1 ether = 1 * 1018 wei

単位をetherに変換したい場合は、

> web3.fromWei(eth.getBalance(eth.accounts[0]))
495

495 etherが残高に追加されている。OK


とりあえず今日はここまで。