読者です 読者をやめる 読者になる 読者になる

Develop with pleasure!

福岡でCloudとかBlockchainとか。

Bitcoinを使ったアプリケーションのテスト環境

Bitcoin

Bitcoin CoreはBitcoinを使ったアプリケーションのテスト用にテスト環境を提供してる。

Test Applications

Testnet

Bitcoin Coreを引数無しで起動するとデフォルトでBitcoinのmainnetに接続される。ただ開発の際は、そのmainnetではなく、testnetを使った方が安価かつ安全に検証ができる。testnetでは、コインが実際の価値を持たないようになっており、また標準のトランザクションのチェック等で、いくつかの制限が緩和されてる。mainnetでデフォルトで有効になっていないfunction等もテスト可能。

testnetを使うには、bitcoin-cli、bitcoind、bitcoin-qt等のコマンドの引数に-testnetを付加して起動するか、bitcoin.confに"testnet=1"を追記すれば良い。また、テストに使用するコインはTP's TestNet Faucetで無料で入手できる。またtestnetのブロックチェーンのデータは
Home - TEST Bitcoin Block Explorerで確認できるみたい。
※ testnetはコミュニティのメンバーから無償で提供されたリソースなので、乱用はしないでねと。

Regtest Mode

他のランダムなノードやブロックと連携したくない場合は、regression test mode (regtest mode) を使うとtestnetと同じルールで動作するプライベートブロックチェーンを新規に作成することができる。testnetと1つ大きく違うのは、regtest modeでは任意のタイミングで新しいブロックを追加することができる。このため、testnetではマイニングによって新しいブロックが作られるのに10分くらいかかるけど、regtest modeではそういった制限なく自由にブロックの追加のタイミングがコントロールできる。
(ブライベートなブロックチェーン環境になるのはそのためと)

続いてregtest modeの作り方。
まずbitcoindの起動オプションに-regtestを付加してregtest modeで起動する。

$ bitcoind -regtest -daemon
Bitcoin server starting
...

regtest modeのbitcoindが起動したら、続いてプライベートブロックチェーンを作成する。

Bitcoin Coreのバージョンが0.10.1以下の場合

$ bitcoin-cli -regtest setgenerate true 101

BItcoin Coreのバージョンがcommit 48265f3以降の場合

$ bitcoin-cli -regtest generate 101

regtest modeのみで使用可能な特殊なRPCで101個のブロックを作成している。普通のPCで30秒くらいで作成ができる。このブロックチェーンはBitcoinの通常のルールに基いて作られたもので、最初のブロックは50BTCの報酬を支払うことになる。mainnetとは違って、regtest modeでは最初の150ブロックのみが50BTCの報酬を支払うようになっている。
ただ通常のBitcoinと同様に報酬分のBitcoinが流通できるようになるには、報酬として支払われたBitcoinの検証ブロックから後に続く100ブロック分の検証が終わってからとなるので、coinbaseトランザクションへアクセスできるようにするための101個目のブロックを追加している。

↓で50BTCが利用できるようになってるのを確認できる。

$ bitcoin-cli -regtest getbalance
50.00000000

あとはbitcoin-cli -regtestを付加してコマンドを実行すればこのBTCが利用可能な状態になってる。

regtestのウォレットとブロックチェーンの状態はBitcoinの設定ファイルが置かれてるディレクトリ内のregtestディレクトリに保存される。このディレクトリを削除してBitcoin Coreを再起動するとまっさらなregtest環境になる。