37
Bitcoin勉強会3 testnetでのローカルBitcoinネット ワークの構築

Bitcoin testnet

Embed Size (px)

DESCRIPTION

Bitcoin testnetを使用したローカルBitcoinネットワークの構築方法。

Citation preview

Page 1: Bitcoin testnet

Bitcoin勉強会3 testnetでのローカルBitcoinネットワークの構築

Page 2: Bitcoin testnet

目的

•  Bitcoinの仕組みを理解するためのテスト環境の構築 本物のBitcoinを使用せず、Block Chainへも影響を与えない環境の構築

•  具体的には、testnetを使用して、限定された端末のみのローカルBitcoinネットワークを構築

•  ローカルBitcoinネットワーク内で、Bitcoinの送金や採掘の実施

Page 3: Bitcoin testnet

testnetとは?

•  Bitcoinとは別にtestnet用のBitcoin block chainを使用したBitcoinネットワーク

•  Bitcoinの体験や、Bitcoinアプリケーションの開発などの使用が目的

※以降、本物のBitcoinネットワークを、mainnetと記載。

Page 4: Bitcoin testnet

mainnetとtestnetとの違い

•  Bitcoin network protocol listen port •  mainnet:8333 •  testnet:18333

•  RPC connection port •  mainnet:8332 •  testnet:18332

•  testnetの1.0difficultyは、mainnetの半分 0.5difficultyに相当

•  mainnetとは異なる、genesis blockを使用。

※参考:https://en.bitcoin.it/wiki/Testnet

Page 5: Bitcoin testnet

使用する環境

•  Mac OS X のPC上で、仮想環境(WMware fusion)を使用。

•  端末構成 •  Miner役 端末A:Linux Ubuntu 12.10 (in VMware fusion)

•  アプリケーション:bitcoind

•  Miner役 端末B:Linux Ubuntu 12.10 (in VMware fusion) •  アプリケーション:bitcoind

•  取引役 端末C:Windows 8 (in VMware fusion) •  アプリケーション:Bitcoin-Qt

•  取引役 端末D:MAC OS X Mavericks •  アプリケーション:Bitcoin-Qt

Page 6: Bitcoin testnet

使用する環境②

Page 7: Bitcoin testnet

使用する環境③

•  アプリケーション •  各アプリケーション(bitcoind、Bitcoin-Qt)のインストール方法に関しては、以下のURLなどを参考にしてください。

•  コンパイル済みアプリケーション •  https://bitcoin.org/en/download

•  ソースコード •  https://github.com/bitcoin/bitcoin

Page 8: Bitcoin testnet

testnetを使用した「ローカルBitcoinネットワーク」の構築手順

•  以下の手順で環境を構築します。 •  ①bitcoin.confの設定

•  Bitcoin設定ファイルの説明と設定。

•  ②testnet block chainの取得 •  testnetに接続し、testnet block chainの取得。

•  ③testnetのbitcoinの取得 •  取引を行うために、testnetからbitcoinの取得。

•  ④testnet ローカルBitcoinネットワークの構築 •  上記①と②で取得した、block chainとbitcoinを使用して、ローカルBitcoinネットワークの構築。

Page 9: Bitcoin testnet

bitcoin.conf①

•  bitcoin.confとは •  Bitcoinアプリケーション(bitcoind、Bitcoin-Qtなど)の設定ファイル。

•  格納場所 •  以下のサイトの「Bitcoin.conf Configuration File」を参照

•  https://en.bitcoin.it/wiki/Running_bitcoind#Bitcoin.conf_Configuration_File

•  bitcoin.confのサンプル •  以下のサイトの「Sample Bitcoin.conf」を参照

•  https://en.bitcoin.it/wiki/Running_bitcoind#Bitcoin.conf_Configuration_File

Page 10: Bitcoin testnet

bitcoin.confの設定①

•  miner役AとBは、以下を記載 •  testnetを使用するための設定(既に設定済み)

•  testnet=1

•  JSON-RPC コマンドの受付許可 •  server=1 •  rpcuser=ユーザ名

•  例:rpcuser=Ulysseys

•  rpcpassword=パスワード •  例:rpcpassword=1234

Page 11: Bitcoin testnet

bitcoin.confの設定②

•  取引役CとDは、以下を記載 •  testnetを使用するための設定(既に設定済み)

•  testnet=1

Page 12: Bitcoin testnet

testnet block chainの取得①

•  miner役AとBでのblock chainの取得 •  「bitcoind」をそのまま起動してください。 本来のtestnetのblock chainを取得します。

•  取引役CとDでのblock chainの取得 •  「Bitcoind-Qt」をそのまま起動してください。 本来のtestnetのblock chainの取得します。

Page 13: Bitcoin testnet

testnet block chainの取得②

•  PCの性能にもよりますが、同期の完了まで45分から1時間程度。 同期が成功したかどうかは、取引役CやD(bitcoin-Qt)で確認。

Page 14: Bitcoin testnet

testnetのbitcoinアドレスの確認

•  Bitcoinアドレスの確認

Page 15: Bitcoin testnet

testnetのbitcoinの取得①

•  以下のサイトを使用し、 testnet用のbitcoinを取得 •  http://tpfaucet.appspot.com/

Page 16: Bitcoin testnet

testnetのBitcoinの取得②

•  取得したBitcoinは一旦「unconfirmed」に計上。 minerによる検証が完了すると「Balance」に計上。

Page 17: Bitcoin testnet

testnet ローカルBitcoinネットワークの構築

•  以下の手順で環境を構築します。 (一旦、全てのアプリは終了してから行う)

•  ①bitcoin.confの設定

•  miner役A/miner役B/取引役C/取引役D

•  ②miner役Aとminer役Bの相互接続

•  ③取引役Cと取引役Dの接続

Page 18: Bitcoin testnet

miner役Aの設定①

•  bitcoin.confに以下の設定を行う。 •  testnetを使用するための設定(既に設定済み)

•  testnet=1

•  DNS シートの未使用設定 •  dnsseed=0

•  P2Pネットワークの接続先ノードの指定 •  connect=miner役BのIPアドレス:ポート番号

•  例:connect=192.168.100.102:19000 ポート番号は任意。「19000」を使用する例

Page 19: Bitcoin testnet

miner役Aの設定②

•  bitcoin.confに以下の設定を行う。 •  他のノードからの接続を許可

•  listen=1

•  他のノードを受け付けるポート番号の指定 •  port=ポート番号

•  例:port=19000

•  採掘の設定 •  gen=0 •  ※初期値は採掘をしない設定とし、必要に応じてJSON-RPC コマンドで、ONにする。

Page 20: Bitcoin testnet

miner役Aの設定③

•  bitcoin.confに以下の設定を行う。

•  JSON-RPC コマンドの受付許可

•  server=1

•  rpcuser=ユーザ名

•  例:rpcuser=Ulysseys

•  rpcpassword=パスワード

•  例:rpcpassword=1234

•  rpcport=ポート番号

•  例:rpcport=19001

Page 21: Bitcoin testnet

miner役Aの設定④

•  その他:不要な機能の停止 •  UPnPの停止

•  upnp=0

•  外部IPアドレスの取得の停止 •  discover=0

•  今まで紹介した設定以外は、必要に応じて設定してください。

Page 22: Bitcoin testnet

miner役Bの設定

•  miner役Aとの差分のみ記載

•  P2Pネットワークの接続先ノードの指定

•  connect=miner役AのIPアドレス:ポート番号

•  例:connect=192.168.100.103:19000

Page 23: Bitcoin testnet

取引役Cの設定①

•  bitcoin.confに以下の設定を行う。 •  testnetを使用するための設定

•  testnet=1

•  DNS シートの未使用設定 •  dnsseed=0

•  P2Pネットワークの接続先ノードの指定 •  connect=miner役BのIPアドレス:ポート番号

•  例:connect=192.168.100.102:19000

Page 24: Bitcoin testnet

取引役Cの設定②

•  bitcoin.confに以下の設定を行う。 •  その他:不要な機能の停止

•  UPnPの停止 •  upnp=0

•  外部IPアドレスの取得の停止 •  discover=0

Page 25: Bitcoin testnet

取引役Dの設定

•  取引役Cとの差分のみ記載

•  P2Pネットワークの接続先ノードの指定

•  connect=miner役AのIPアドレス:ポート番号

•  例:connect=192.168.100.103:19000

Page 26: Bitcoin testnet

miner役Aとminer役Bの相互接続①

•  以下のコマンドで、miner役Aとminer役Bの起動 $ ./bitcoind -debug -debugnet -printtoconsole

•  コマンドオプション •  -debug:デバッグ情報を出力 •  -debugnet:ネットワーク関連のデバッグ情報を出力 •  -printtoconsole:デバッグ情報をコンソールに出力

Page 27: Bitcoin testnet

miner役Aとminer役Bの相互接続②

•  ログの確認

miner役A miner役B

Page 28: Bitcoin testnet

取引役Cと取引役Dの接続①

•  取引役CとDの起動 ※ローカルbitocoinネットワーク内で、一定時間以上新たなblockの生成が行われていない場合、非同期状態となる。一定時間以内なら同期状態のまま。

取引役C 取引役D

Page 29: Bitcoin testnet

動作確認

•  以下の動作確認を行います。

•  mining(新規のblockの採掘)

•  Bitcoinの送金と入金

•  proof-of-workの発見

Page 30: Bitcoin testnet

mining(新規のblockの採掘)①

•  miner役Aで新規のblockを採掘 以下のJSON-RPCコマンドで、miningを有効にする。 •  $ ./bitcoind setgenerate true ※無効にする場合は、「true」を「false」に変更

•  CPUのcoreが2つのため、2つのスレッドでblockを生成開始。

Page 31: Bitcoin testnet

mining(新規のblockの採掘)②

•  proof-of-workの発見

Page 32: Bitcoin testnet

mining(新規のblockの採掘)③

•  取引役CとDの同期 新規のblockが採掘され、同期が行われた。

取引役C 取引役D

Page 33: Bitcoin testnet

Bitcoinの送金

•  取引役DからCへBitcoinの送金

取引役C 取引役D

Page 34: Bitcoin testnet

Bitcoinの送金②

•  miner役Aのデバッグログの確認

Page 35: Bitcoin testnet

proof-of-workの発見①

•  miner役Aでのproof-of-workの発見時のデバッグログ

•  miner役Bでのデバッグログ

Page 36: Bitcoin testnet

proof-of-workの発見③

•  送金の完了

Page 37: Bitcoin testnet

今後やってみたいこと

•  Bitcoinの技術を検証するために、Bitcoin福岡勉強会で以下のようなことをやれたら面白いかなと思っています。

1.  Bitcoinをカスタマイズし、新たなblock chainを持つ「実験用Bitcoin」の作成 現状、bitcoin-0.6.3ベースでgenesis blockの作成まで成功。

2.  「実験用Bitcoin」を使用して以下のようなことを検証。 •  Bitcoinの技術的な課題の明確化

•  上記課題の対処方法の検討

•  Bitcoinの技術を流用したサービスの検討

•  etc…