FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

「ブロックチェーン・プログラミング」を読む (bitcoinツールの導入)

"Mastering Bitcoin"によりビットコインの基礎中の基礎を学んだので、次にブロックチェーンをより実践的に触ってみたいと思い、以下の書籍を購入した。

ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)

ブロックチェーン・プログラミング 仮想通貨入門 (KS情報科学専門書)

ツールの導入

bitcoin-cli というツールを使うため、ビルドを行った。Ubuntu 16.04 LTSを使用している。

まずは必要なパッケージの導入だ。これをさぼると、例えばGUI版のインストールが行われない。

$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt update
$ sudo apt-get install -y libdb4.8-dev libdb4.8++-dev

$ sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
$ sudo apt-get install libqrencode-dev autoconf openssl libssl-dev libevent-dev
$ sudo apt-get install libminiupnpc-dev

次に、GitHubから bitcoin ツールのダウンロードとビルドを行う。

$ clone https://github.com/bitcoin/bitcoin.git
$ cd bitcoin/
$ git checkout v0.16.0
$ ./autogen.sh
$ ./configure
$ make -j4
$ sudo make install

設定ファイル bitcoin.conf の記述

Bitcoinには2つのネットワークがあるらしい。

  • testnet : 開発や実験のためのネットワーク。testnetで取引されるビットコインには価値がない。
  • mainnet : 実際に送金を行うことができるネットワーク。mainnet で取引できるビットコインには価値がある。

怖いので、もちろん testnet を使用する。以下のような設定ファイル bitcoin.conf を作成し、 ${HOME}/.bitcoin/ に配置した。

testnet=3                                 # use testnet
txindex=1                                 # make index, reference transaction ID
server=1                                  # accept command
rest=1                                    # enable REST interface
rpcuser=ユーザ名            # JSON RPC username
rpcpassword='パスワード'   # JSON RPC password
rpcport=18332                 # JSON PRC port number (testnet)

次に、bitcoin-cliを使って情報を取得してみる。書籍では、bitcoin-cli getinfoを使っているが、今回使用した v0.16.0 ではコマンド名が変わっている。

$ bitcoin-cli getinfo
error code: -32601
error message:
getinfo

This call was removed in version 0.16.0. Use the appropriate fields from:
- getblockchaininfo: blocks, difficulty, chain
- getnetworkinfo: version, protocolversion, timeoffset, connections, proxy, relayfee, warnings
- getwalletinfo: balance, keypoololdest, keypoolsize, paytxfee, unlocked_until, walletversion

bitcoin-cli has the option -getinfo to collect and format these in the old format.

例えば、bitcoin-cli getblockchaininfo を実行してみる。

$ bitcoin-cli getblockchaininfo
{
  "chain": "test",
  "blocks": 0,
  "headers": 418000,
  "bestblockhash": "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943",
  "difficulty": 1,
  "mediantime": 1296688602,
  "verificationprogress": 5.536704525417526e-08,
  "initialblockdownload": true,
  "chainwork": "0000000000000000000000000000000000000000000000000000000100010001",
  "size_on_disk": 293,
  "pruned": false,
  "softforks": [
    {
      "id": "bip34",
      "version": 2,
      "reject": {
        "status": false
      }
    },
    {
      "id": "bip66",
      "version": 3,
...

ネットワークノードの接続状態を確認してみる。8ノードと接続され、安定している。

$ bitcoin-cli getconnectioncount
8