Upload
yuichiro-shibata
View
5.743
Download
18
Embed Size (px)
DESCRIPTION
Bitcoin testnetを使用したローカルBitcoinネットワークの構築方法。
Citation preview
Bitcoin勉強会3 testnetでのローカルBitcoinネットワークの構築
目的
• Bitcoinの仕組みを理解するためのテスト環境の構築 本物のBitcoinを使用せず、Block Chainへも影響を与えない環境の構築
• 具体的には、testnetを使用して、限定された端末のみのローカルBitcoinネットワークを構築
• ローカルBitcoinネットワーク内で、Bitcoinの送金や採掘の実施
testnetとは?
• Bitcoinとは別にtestnet用のBitcoin block chainを使用したBitcoinネットワーク
• Bitcoinの体験や、Bitcoinアプリケーションの開発などの使用が目的
※以降、本物のBitcoinネットワークを、mainnetと記載。
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
使用する環境
• 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
使用する環境②
使用する環境③
• アプリケーション • 各アプリケーション(bitcoind、Bitcoin-Qt)のインストール方法に関しては、以下のURLなどを参考にしてください。
• コンパイル済みアプリケーション • https://bitcoin.org/en/download
• ソースコード • https://github.com/bitcoin/bitcoin
testnetを使用した「ローカルBitcoinネットワーク」の構築手順
• 以下の手順で環境を構築します。 • ①bitcoin.confの設定
• Bitcoin設定ファイルの説明と設定。
• ②testnet block chainの取得 • testnetに接続し、testnet block chainの取得。
• ③testnetのbitcoinの取得 • 取引を行うために、testnetからbitcoinの取得。
• ④testnet ローカルBitcoinネットワークの構築 • 上記①と②で取得した、block chainとbitcoinを使用して、ローカルBitcoinネットワークの構築。
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
bitcoin.confの設定①
• miner役AとBは、以下を記載 • testnetを使用するための設定(既に設定済み)
• testnet=1
• JSON-RPC コマンドの受付許可 • server=1 • rpcuser=ユーザ名
• 例:rpcuser=Ulysseys
• rpcpassword=パスワード • 例:rpcpassword=1234
bitcoin.confの設定②
• 取引役CとDは、以下を記載 • testnetを使用するための設定(既に設定済み)
• testnet=1
testnet block chainの取得①
• miner役AとBでのblock chainの取得 • 「bitcoind」をそのまま起動してください。 本来のtestnetのblock chainを取得します。
• 取引役CとDでのblock chainの取得 • 「Bitcoind-Qt」をそのまま起動してください。 本来のtestnetのblock chainの取得します。
testnet block chainの取得②
• PCの性能にもよりますが、同期の完了まで45分から1時間程度。 同期が成功したかどうかは、取引役CやD(bitcoin-Qt)で確認。
testnetのbitcoinアドレスの確認
• Bitcoinアドレスの確認
testnetのbitcoinの取得①
• 以下のサイトを使用し、 testnet用のbitcoinを取得 • http://tpfaucet.appspot.com/
testnetのBitcoinの取得②
• 取得したBitcoinは一旦「unconfirmed」に計上。 minerによる検証が完了すると「Balance」に計上。
testnet ローカルBitcoinネットワークの構築
• 以下の手順で環境を構築します。 (一旦、全てのアプリは終了してから行う)
• ①bitcoin.confの設定
• miner役A/miner役B/取引役C/取引役D
• ②miner役Aとminer役Bの相互接続
• ③取引役Cと取引役Dの接続
miner役Aの設定①
• bitcoin.confに以下の設定を行う。 • testnetを使用するための設定(既に設定済み)
• testnet=1
• DNS シートの未使用設定 • dnsseed=0
• P2Pネットワークの接続先ノードの指定 • connect=miner役BのIPアドレス:ポート番号
• 例:connect=192.168.100.102:19000 ポート番号は任意。「19000」を使用する例
miner役Aの設定②
• bitcoin.confに以下の設定を行う。 • 他のノードからの接続を許可
• listen=1
• 他のノードを受け付けるポート番号の指定 • port=ポート番号
• 例:port=19000
• 採掘の設定 • gen=0 • ※初期値は採掘をしない設定とし、必要に応じてJSON-RPC コマンドで、ONにする。
miner役Aの設定③
• bitcoin.confに以下の設定を行う。
• JSON-RPC コマンドの受付許可
• server=1
• rpcuser=ユーザ名
• 例:rpcuser=Ulysseys
• rpcpassword=パスワード
• 例:rpcpassword=1234
• rpcport=ポート番号
• 例:rpcport=19001
miner役Aの設定④
• その他:不要な機能の停止 • UPnPの停止
• upnp=0
• 外部IPアドレスの取得の停止 • discover=0
• 今まで紹介した設定以外は、必要に応じて設定してください。
miner役Bの設定
• miner役Aとの差分のみ記載
• P2Pネットワークの接続先ノードの指定
• connect=miner役AのIPアドレス:ポート番号
• 例:connect=192.168.100.103:19000
取引役Cの設定①
• bitcoin.confに以下の設定を行う。 • testnetを使用するための設定
• testnet=1
• DNS シートの未使用設定 • dnsseed=0
• P2Pネットワークの接続先ノードの指定 • connect=miner役BのIPアドレス:ポート番号
• 例:connect=192.168.100.102:19000
取引役Cの設定②
• bitcoin.confに以下の設定を行う。 • その他:不要な機能の停止
• UPnPの停止 • upnp=0
• 外部IPアドレスの取得の停止 • discover=0
取引役Dの設定
• 取引役Cとの差分のみ記載
• P2Pネットワークの接続先ノードの指定
• connect=miner役AのIPアドレス:ポート番号
• 例:connect=192.168.100.103:19000
miner役Aとminer役Bの相互接続①
• 以下のコマンドで、miner役Aとminer役Bの起動 $ ./bitcoind -debug -debugnet -printtoconsole
• コマンドオプション • -debug:デバッグ情報を出力 • -debugnet:ネットワーク関連のデバッグ情報を出力 • -printtoconsole:デバッグ情報をコンソールに出力
miner役Aとminer役Bの相互接続②
• ログの確認
miner役A miner役B
取引役Cと取引役Dの接続①
• 取引役CとDの起動 ※ローカルbitocoinネットワーク内で、一定時間以上新たなblockの生成が行われていない場合、非同期状態となる。一定時間以内なら同期状態のまま。
取引役C 取引役D
動作確認
• 以下の動作確認を行います。
• mining(新規のblockの採掘)
• Bitcoinの送金と入金
• proof-of-workの発見
mining(新規のblockの採掘)①
• miner役Aで新規のblockを採掘 以下のJSON-RPCコマンドで、miningを有効にする。 • $ ./bitcoind setgenerate true ※無効にする場合は、「true」を「false」に変更
• CPUのcoreが2つのため、2つのスレッドでblockを生成開始。
mining(新規のblockの採掘)②
• proof-of-workの発見
mining(新規のblockの採掘)③
• 取引役CとDの同期 新規のblockが採掘され、同期が行われた。
取引役C 取引役D
Bitcoinの送金
• 取引役DからCへBitcoinの送金
取引役C 取引役D
Bitcoinの送金②
• miner役Aのデバッグログの確認
proof-of-workの発見①
• miner役Aでのproof-of-workの発見時のデバッグログ
• miner役Bでのデバッグログ
proof-of-workの発見③
• 送金の完了
今後やってみたいこと
• Bitcoinの技術を検証するために、Bitcoin福岡勉強会で以下のようなことをやれたら面白いかなと思っています。
1. Bitcoinをカスタマイズし、新たなblock chainを持つ「実験用Bitcoin」の作成 現状、bitcoin-0.6.3ベースでgenesis blockの作成まで成功。
2. 「実験用Bitcoin」を使用して以下のようなことを検証。 • Bitcoinの技術的な課題の明確化
• 上記課題の対処方法の検討
• Bitcoinの技術を流用したサービスの検討
• etc…