Bitcoinのtestnetに接続する

　Bitcoinのtestnetに接続するため、githubからBitcoinのソースコードをダウンロードします。

```
$ git clone https://github.com/bitcoin/bitcoin.git
$ cd bitcoin
```

　ビルドする前に、*README.md*や*INSTALL.md*をよく確認します。これらに直接ビルド方法が載ってなくても、どこかに何か書いてあるはずなのでよく読みます。

　どうやら*INSTALL.md* によると、*doc/build-***.md* に環境ごとのビルド方法が記載されている様です。今回はUbuntu14.04なので*doc/build-unix.md* を参照します。まずはドキュメントにあるように、依存関係のあるパッケージをインストールしておきます。

```
$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3
$ sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev
```

> For Ubuntu only: db4.8 packages are available here. You can add the repository and install using the following commands:

　さらに上記で示されているようにBerkeleyDB4.8をインストールします。これはPPA

```
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:bitcoin/bitcoin
$ sudo apt-get update
$ sudo apt-get install libdb4.8-dev libdb4.8++-dev
```


そしていよいよ本体のビルドに入ります。

```
$ ./autogen.sh
```
　ここで次は *./configure* を実行するのですが、システム環境汚染を避けるためインストール先をホームディレクトリ以下に指定します。その際、*--prefix* オプションを使って**絶対パス**で指定します。

```
$ ./configure --prefix=/home/username/bitcoin-binary
```


```
$ make
$ make install
```

　*make install* で *./configure*の時に*--prefix*オプションで指定したディレクトリにインストールされます。

```
$ cd /home/username
$ mkdir .bitcoin
$ vi .bitcoin/bitcoin.conf
```

　*~/.bitcoin/bitcoin.conf*にtestnet用の設定ファイルを作ります。

```text:.bitcoin/bitcoin.conf
testnet=1
maxconnections=4
port=18333

daemon=1
server=1
rpcuser=username
rpcpassword=password
rpcallowip=127.0.0.1
rpcport=18332
```

　*testnet=1*とすることでtestnetに接続することを明示します。*port*や*rpcport*のポート番号は、mainnetではそれぞれ8333と8332となりますが、あくまで慣例的なものであって、ポート番号だけ変えれば良いというわけではありません。

```
$ cd /home/username/bitcoin-binary/bin
$ ./bitcoind
```

　Bitcoinデーモンを起動し、いよいよ世間を賑わすBitcoinの、testnetへの参加です。デーモンを起動したら別の端末でログインするなどして次に進みます。

```
$ ./bitcoin-cli getblockchaininfo
{
  "chain": "test",
  "blocks": 175406,
  :
  (略)
```
　ちゃんとtestnetに接続できているか確認してみましょう。
　mainnetに接続していた場合は*chain*の値が"main"になります。今回はtestnet目当てなので"test"が正常です。まだBitcoinデーモンを起動したばかりなので、*getblockchaininfo*を呼び出すたびに*blocks*の値が増えて行くのが確認できます。

```
$ ./bitcoin-cli stop
```

　先ほど起動したBitcoinデーモンを停止するには上記の様にRPCクライアントから停止命令を送ります。終了までに少し時間を取る場合がありますが、慌てて*bitcoind*をkillしないでください。時間を掛けてダウンロードしたブロックチェーンが壊れるかもしれません。

　ところでRPCクライアントであるbitcoin-cliのパラメータについてですが[公式APIコールリスト](https://en.bitcoin.it/wiki/Original_Bitcoin_client/API_calls_list)に一覧がありますのでそちらをご参照下さい。

---

　無事、testnetに接続できたので、Bitcoin(testnet)の受け取りアドレスを作ります。

```
$ ./bitcoin-cli getnewaddress test
2NE9htPKFUKu4c6CMW2A96rPVrguhBiwtuY
```

　この様にtestnet用のアドレスは頭文字がmainnetとは異なります。1や3がmainnetとなります。今回は**test**という名前の口座(アカウント)名で作りました。何も指定しないと無名口座になります。

```
$ ./bitcoin-cli getbalance test
0.00000000
```

残高0。作ったばかりなので当然ですね。そこで[Bitcoin testnet3 faucet](https://testnet.coinfaucet.eu/en/)でtestnet上のBitcoinを貰いに行きます。

```
$ ./bitcoin-cli getbalance test
1.77600132
```

上記のサイトでBitcoinを分けてもらいました。testnetと言えど
[BLOCKCYPHER](https://live.blockcypher.com/btc-testnet/tx/0fa8f698e425857705d62b629d2708063dc627c6ea0c91eb7f7944279ce6eca0/)でBitcoinの流れがしっかりと記録されていることが確認できます。

---
Bitcoin: 1PGrE58W6921iVNTMFPAQGBsiHTx7WmdY2