この記事は SYSKEN Advent Calendar 2018 の22日目の記事です。
最近ボーとしていることの多いchatotoです。
最近勉強していたブロックチェーンとWit AIどっちの話をしよっかなー?と悩んだ結果、ブロックチェーンについての話をします。
はじめに
ブロックチェーンには、様々なイーサリアムがあって、そのノードを構築するためにイーサリアムクライアントと呼ばれるものもたくさんあります。今回僕はEthereumというイーサリアムのgo-ethereum(Geth)というクライアントを使用します。
プライベートネットでの実行
今回プライベートネットでgethを動かすので、ローカル環境に初めてのブロックを生成します。最初のブロックはGenesisと呼ばれています。まず、gethフォルダの直下に保存場所としてprivate_netという名前のフォルダを用意します。その中にソースコード記述したファイルgenesis.jsonを保存します。
次に、gethの初期化処理をします。下記のコマンドで初期化を行います。
$ geth –datadir ~/geth/private_net/ init ~/geth/private_net/genesis.json
Gethの起動
gethの起動を行います。下記のコマンドで起動します。
$ geth –networkid “15” –nodiscover –datadir “/home/ubuntu/eth_private_net” console 2>> /home/ubuntu/eth_private_net/geth_err.log
gethがうまく起動できたら、$から>に変わっています。
アカウントの作成
下記のコマンドでアカウントを作成します。
personal.newAccount(“password”)
“password”の部分には、自分でパスワードを決めて入力します。
実行結果として”hogehoge”と出力されます。””この中にはアルファベットや数列が組み合えわさてなる、外部アカウントのアドレスです。
アカウントの確認
下記のコマンドでアカウントの確認を行います。
eth.accounts
実行結果として先程の実行結果の”hogehoe”が出力されています。
インデックス指定でのアカウントの確認
下記のコマンドでインデックス指定でのアカウントの確認を行います。
eth.accounts[0]
何個もアカウントを作った時に使います。デフォルトでは、インデックス0のアカウントです。
マイニング
いよいよマイニングを開始します。マイニングとは、ブロックを生成することです。
下記のコマンドでマイニングを開始します。()内の数字はスレッド数と呼ばれるものです。
ここからは、コマンドの下に実行結果を記述します。
miner.start(1)
null
マイニングの確認
下記のコマンドでマイニングされているかどうか確認します。
eth.mining
true
コインベース残高確認
ブロックをマイニングしていると、マイナーへ応酬が支払われます。つまりコインベースアカウントの残高は常に増加します。
コインベースの残高確認
etherに変更します。コインベースの残高を確認します。
eth.getBalance(eth.accounts[0])
10000000000000000
0が多くて分かりずらいのが分かります。これはweiという単位であるため単位をetherに変更します。下記のコマンドでetherに変更します。
web3.formWei(eth.getBalance(eth.accounts[0]), “ether”)
66
マイニングの停止
一旦マイニングを停止します。下記のコマンドでマイニングを停止します
miner.stop()
true
送金
他のアカウントにethを送金します(ここではアカウントをもう一つ作っているものとします)fromに送金元アドレス、toに送金先のアドレス、valueに送金額を指定します。
送金額の指定はwei単位であることを注意します。
まず、下記のコマンドでaccounts[2]のもっているetherを確認します。
web3.fromWei(eth.getBalance(eth.accounts[2]), “ether”)
0
ロックの解除
personal.unlockAccount(eth.accounts[0])
Unlock account hogehoge
Passphrase:password
true
passwordの所に設定したパスワードを入力します。
いよいよ送金します。下記のコマンドでaccount[0]からaccounts[2]へ10etherを送金します。
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[2], value:web3 toWei(10, “ether”)})
” hogehoge”
このhogehogeには16進数のトランザクションハッシュが返ってきます。
accounts[2]が持っているetherの確認
下記のコマンドでaccounts[2]が持っているetherの確認します。
web3.fromWei(eth.getBalance(eth.accounts[2]), “ether”)
10
Gethの終了
下記のコマンドでgethを終了します。
exit
おわりに
今回紹介したのは、ブロックチェーンのごく一部です。覚えるコマンドがいっぱいあって大変です(T . T)。今回は紹介しなかったのですが、独自トークンの発行やらSolidityによってアプリケーションの開発やらやることが山積みです。ブロックチェーンはめっちゃすごい技術なので皆さんもやってみたらどうでしょうか?
それではこの辺でおわりにします。残りもあと三日。明日の投稿はGimmickさんですお楽しみに。
コメントを残す