イーサリアムクライアントをいじってみた

まずは、資料が多いイーサリアムから触ってみよう!!

1173 views

ブロックの内容確認

前項では、アカウントを作成しました。本項ではブロックについてやっていく

Genesisブロックの確認

最初に、作成したGenesisブロックを確認してみましょう。
コマンドプロンプトに、下記のコマンドを入力してください。

>eht.getBlock(0)
{
  difficulty: 256,
  extraData: "0x",
  gasLimit: 134217728,
  gasUsed: 0,
  hash: "0x5704d029fe80f4fb605c0cb5e31d591511f10a46a0cb8166f97d8d559f9bc5b0",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x3333333333333333333333333333333333333333",
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x0000000000000033",
  number: 0,
  parentHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 507,
  stateRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  timestamp: 0,
  totalDifficulty: 256,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

下にずらーと出力されたのが、ジェネシスブロックの中身です。

マイニング

マイニングの開始

続けて、マイニングを開始します。マイニングとは、ブロックを生成することです。
さて、コマンド入力の時間です。
コマンドプロンプトに下記のコマンドを入力してください。

>miner.start(1)
null

出力がnullなのは、変だけど,,,うまくいってます。
怖いので、一応下記のコマンドを入力してください。

>eth.mining
true

こっちのほうが安心できるわ。

マイニングの停止

ここで、マイニングを停止します。
コマンドは以下のように入力してください。

>miner.stop()
true

>eth.mining
false

これでマイニングが停止されました。

コインベースの残高確認

ブロックのマイニングをすると、マイナーへ報酬が支払われます。
一回マイナーのコインベースを確認します。
コマンドプロンプトに下記のコマンドを入力してください。

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

>web3.fromWei(eth.getBalance(eth.accounts[0]),"ether")
70

上のコマンドでかなりの桁数が表示されます。
下のコマンドで単位をetherに変換してわかりやすくします。

送金

とりあえず送金する

本項では、送金を試してみます。
eth.sendTransactionコマンドから送金できるよ。
詳細は、下記に記す。コマンドプロンプトを起動してコマンドを入力してください。

//アカウント2が持っているetherを確認する
>web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")
0

//アカウント0からアカウント2に送金する。
>eth.sendTransaction({from: eth.accounts[0] , to: eht.accounts, value:web3.toWei(5,"ether")})
Error
......

おそらくエラーが出力されます。
今はこれでOKです。

ロック解除

エラーの理由は、アカウントがロックされているからです。
それでは、アカウントにかかっているロックを解除します。
下記のコマンドを入力してください。

>personal.unlockAccount(eth.accounts[0])
Unlock account 0x,,,,
Passphraqse://アカウント作成時に設定した文字。記事通りにやっているならば、「password」で解除可能
true

これでロック解除できました。
もう一度送金処理をすると、今度は成功します。

アンロックオプション

gethを終了する

ここまで、送金時にアカウントロックを解除してから、送信してきました。
ロック解除不要な方法もあるので、説明します。
まずは、gethを終了します。下記コマンドを入力してください。

>exit

これでgethが終了します。

アンロックオプションを設定する

ディレクトリ「C:\User\ユーザー名\Geth\prevate_net」を開いてください。
開いたら、password.txtを作成してください。
中身は下記の通りです。

password
password
password

上から、アカウント作成時に使用したワードを改行区切りで入力してください。

オプションを有効にして、起動する

それでは、アンロックオプションを有効にして下記のコマンドを入力しれください。

>geth --networkid "15" --nodiscover --datadir "C:\Users\ユーザー名\Geth\private_net" console 2>> C:\Users\ユーザー名\Geth\private_net\error.log --unlock 0x342537f3d666eebc4e695a0d25ade66a2d206482,0x83138fd7bc7799f90bdde00dd460e995b1ef337a,0xd2bbdb4f934b00e3970ec6893164523b5dc53a72 --password C:\Users\ユーザー名\Geth\private_net\password.txt


//アカウント2が持っているetherを確認する
>web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")
0

//アカウント0からアカウント2に送金する。
>eth.sendTransaction({from: eth.accounts[0] , to: eht.accounts, value:web3.toWei(5,"ether")})

今度はアカウントロックを解除せずに起動します。

トランザクションの確認

取り合えず確認

まずはトランザクションを確認しましょう。
下記コマンドを入力してください。

> eth.getTransaction("0xf69dd01d6e8eeba3dc4da3563edf4e06b01ca8d0ea8c2931b540760b0f3cc492")
{
  blockHash: null,
  blockNumber: null,
  from: "0x342537f3d666eebc4e695a0d25ade66a2d206482",
  gas: 21000,
  gasPrice: 1000000000,
  hash: "0xf69dd01d6e8eeba3dc4da3563edf4e06b01ca8d0ea8c2931b540760b0f3cc492",
  input: "0x",
  nonce: 2,
  r: "0xd3a1095ac60ec432d74f0422503bd758b30a3f42552309e71e57bd6b26dcf9dc",
  s: "0x16e4b999ab9a6b4039809eb6b30ca08e422334e02a5117cc3caaa969a8754df9",
  to: "0xd2bbdb4f934b00e3970ec6893164523b5dc53a72",
  transactionIndex: null,
  v: "0x66",
  value: 5000000000000000000
}

blockNumberが0になっていると思います。
この時点では、このトランザクションは、ブロックに取り込まれていません。
そのため、送金も実行されていません。
念のため、一度残高を確認しましょう。

> web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")
0

確かに0だね!!

マイニングを始める

トランザクションをブロックに取り込むためには、マイニングを実行する必要があります。
ここで、マイニングを開始しましょう。
ついでに、残高の確認もします

>miner.start(1)
null

//少し時間を開けてから実行してください
>eth.getTransaction("0xdb03d65cc20356e6e0cf128b1f4bbb2cf3619bbdd089ada52d8173fc5ffc6ee5")
{
  blockHash: "0xd7b551dc32a4a3097cb9e09f10bc74d52be1790c7caf2da2abb5f83bb78d2064",
  blockNumber: 18,
  from: "0x342537f3d666eebc4e695a0d25ade66a2d206482",
  gas: 21000,
  gasPrice: 1000000000,
  hash: "0xdb03d65cc20356e6e0cf128b1f4bbb2cf3619bbdd089ada52d8173fc5ffc6ee5",
  input: "0x",
  nonce: 3,
  r: "0x39249f49e5f54ddc13cb85e0e7c4789f0273391ae9b8187c38b6634b47306350",
  s: "0x32d27595c260ee663c14d64ae01ea0c36b22a627357584a74e72de00fac6632b",
  to: "0xd2bbdb4f934b00e3970ec6893164523b5dc53a72",
  transactionIndex: 3,
  v: "0x65",
  value: 5000000000000000000
}

blockNumberが入力されました。
これでブロックに取り込まれたことになりました。
ここで、アカウント2の残高を確認してみましょう。

> web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")
5

最後に、ブロックごとの残高を確認して終了します。
以下のコマンドを入力してください。


> web3.fromWei(eth.getBalance(eth.accounts[2],18),"ether")
5
> web3.fromWei(eth.getBalance(eth.accounts[2],17),"ether")
0

Page 5 of 6.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

owl

自己紹介

駆け出しエンジニア
だいたいweb系をかじってる
最近ちょとブロックチェーンに興味出てきた

サイト/ブログ

https://github.com/owl0109

ツイッター

@kijiken1