Bitcoin Coreとは
Bitcoin Coreとは、Bitcoinの全ての機能(ブロックチェーンデータベース、ウォレット、マイニング、ルーティングなど)を実装したBitcoinクライアントである。
動作要件
- 最近のWindows、Mac OS X、またはLinuxが動くハードウェア
- 145GBのディスク容量。最低100 MB/sの読み書き速度があること
- 2Gのメモリ
- 400Kbits(50Kbytes)/秒のアップロード速度の、ブロードバンドインターネット接続
- 従量制でない接続か、高いアップロード上限がある接続、またはアップロード上限を超過しないか常時モニタリングできる接続
- 1日6時間、Bitcoin Coreのノードを動かしたままにできること
特に気にすべきはディスク容量とメモリでしょうか。
最後の2つに関しては、(Bitcoinへの貢献目的でノードを継続的に稼働させるのでなければ)気にする必要はないと思います。
AWSを使用する理由
以下のようなニーズにより、AWSを使用することにしました。
- 普段使ってるMac Book Proに145Gものデータを入れたくない!
- 空いているWindows端末はあるが、コマンドラインで色々試したいのでLinux(またはOS X)を使いたい
- 一度環境を作った後は一旦インスタンスを停止させて(またはイメージを保存しておいて)、その後試したいタイミングで臨機応変に立ち上げたい
EC2のセットアップ
AWSでEC2のインスタンスを立ち上げます。
- インスタンスは、少し余裕を持たせてt2.medium(メモリ4G、vCPU2コア)を選択しました
- OSは、個人的に慣れているAmazon Linuxを選択しました。※他のLinuxでも問題ありません
- ストレージも、余裕を持たせて300Gを確保しました
インスタンスの選定は、OS以外はこちらをそのまま踏襲しました。
Bitcoin Coreのインストール
※これはUbuntu以外のLinuxディストリビューション(Amazon Linux、Cent OSなど)の場合の手順です。Ubuntuの場合は、こちらを参照
Bitcoin Coreをダウンロード
ダウンロードするファイルのパスは、ダウンロードページから、最新版のtgzファイルのリンクパスをコピーしてきて、適宜置き換えてください。
下記は、バージョン0.16.0のダウンロードパスです。
$ curl -O https://bitcoin.org/bin/bitcoin-core-0.16.0/bitcoin-0.16.0-x86_64-linux-gnu.tar.gz
解凍
圧縮ファイルを解凍する
$ tar zxvf bitcoin-0.16.0-x86_64-linux-gnu.tar.gz
解凍したら、bitcoin-0.16.0/ というディレクトリができる。
※バージョンが新しくなったら、数字の部分が変わるはず。以下の同様の箇所も同じ
インストール
以下のコマンドを実行し、bitcoin-0.16.0/bin/ 以下にある実行ファイルを/usr/local/bin以下にインストールする。
$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.16.0/bin/*
これでBitcoin Coreのソフトウェアのインストールが完了。
Bitcoin Coreを立ち上げる
Bitcoin Coreの立ち上げ
以下のコマンドで、Bitcoin Coreのバックグラウンドプロセス(Bitcoin Core Daemon)を立ち上げる。
これにより、Bitcoinの全トランザクションデータのダウンロードが始まる。
$ bitcoind -daemon
Bitcoin server startingという応答が返ってきたら、立ち上げが開始しています。
全トランザクションのダウンロードは、4時間半以内で完了しました。
(ずっと放ったらかしにしていたので、もっと短い時間で完了していたかもしれません)
また、ディスク容量は、システムファイルも含めて80G消費していました。
動作確認
以下のコマンドで、自分が立ち上げたノード上のブロックチェーンの情報を取得できます。
正常にトランザクションデータのダウンロードが進んでいれば、コマンドを打つ度に、返ってくる情報の中身が更新されているはず。
$ bitcoin-cli getblockchaininfo
{
"chain": "main",
"blocks": 187509,
"headers": 520683,
"bestblockhash": "0000000000000539dc3b554b713adfad45cfd7c51d77c733e07e420e5e304eb6",
"difficulty": 1751454.535340679,
"mediantime": 1341410872,
"verificationprogress": 0.01444533537428587,
"initialblockdownload": true,
"chainwork": "00000000000000000000000000000000000000000000001463cf438a2549ee06",
"size_on_disk": 2292373424,
"pruned": false,
"softforks": [
{
"id": "bip34",
"version": 2,
"reject": {
"status": false
}
},
{
"id": "bip66",
"version": 3,
"reject": {
"status": false
}
},
{
"id": "bip65",
"version": 4,
"reject": {
"status": false
}
}
],
"bip9_softforks": {
"csv": {
"status": "defined",
"startTime": 1462060800,
"timeout": 1493596800,
"since": 0
},
"segwit": {
"status": "defined",
"startTime": 1479168000,
"timeout": 1510704000,
"since": 0
}
},
"warnings": ""
}
Bitcoin Coreを停止する
Bitcoin Coreを停止する場合は、以下のコマンドを打つ。
トランザクション情報の同期が終わっていなくても、強制停止できる。
$ bitcoin-cli stop
Bitcoin Coreのコマンド
上記以外にも、多くの種類のコマンドが用意されている。
bitcoin-cli
の後ろに、上記に掲載されているようなコマンド(すべて小文字)を付けて実行する。
ブロックチェーンの情報の中身を取得するコマンドを、試しにいくつか実行してみる。
ブロックチェーンの現在の情報を取得する
※上で動作確認に使用したもの
$ bitcoin-cli getblockchaininfo
n番目のブロックのハッシュ値を取得する
ブロック高(何番目のブロックか?を表す数値)を引数に、そのブロックのハッシュ値(ブロックのIDの役割を果たす)を取得する。
以下では、試しに100000番目のブロックのハッシュ値を取得してみる。
$ bitcoin-cli getblockhash 100000
000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506
なお、0を指定すると、ジェネシスブロック(サトシ・ナカモトが採掘した一番最初のブロック)のハッシュ値が取得できる。
任意のブロックの詳細情報を取得する
任意のブロックのハッシュ値を引数にして、そのブロックの詳細情報を取得する。
上記で取得した、100000番目のブロックのハッシュ値を与えて試してみる。
bitcoin-cli getblock 000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506
{
"hash": "000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506",
"confirmations": 326765,
"strippedsize": 957,
"size": 957,
"weight": 3828,
"height": 100000,
"version": 1,
"versionHex": "00000001",
"merkleroot": "f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766",
"tx": [
"8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87",
"fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4",
"6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4",
"e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d"
],
"time": 1293623863,
"mediantime": 1293622620,
"nonce": 274148111,
"bits": "1b04864c",
"difficulty": 14484.1623612254,
"chainwork": "0000000000000000000000000000000000000000000000000644cb7f5234089e",
"previousblockhash": "000000000002d01c1fccc21636b607dfd930d31d01c3a62104612a1719011250",
"nextblockhash": "00000000000080b66c911bd5ba14a74260057311eaeb1982802f7010f1a9f090"
}
ブロックの詳細情報が取得できている。
参考
Bitcoin Coreの公式サイト
Running A Full Node - Bitcoin Core
Qiitaの関連記事
以下を参考にさせていただきました。
Bitcoin CoreをAWSで動かしてみる
Bitcoindの起動と停止
書籍
『ビットコインとブロックチェーン 暗号通貨を支える技術』
第3章にビットコインクライアント(Bitcoin Core)の詳しい解説があります。