LoginSignup
2
3

More than 5 years have passed since last update.

Bitcoin CoreをAWS上で動かす

Posted at

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)の詳しい解説があります。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3