お手軽にVPSでBitcoinフルノードを立ち上げる方法

#はじめに
testnetで手っ取り早くVPSでビットコインのフルノードの立ち上げ方をまとめてみました。フルノードを立ち上げて何に使うかですが私は今はLightning Networkの一つであるc-lightningを動かして遊んでます。

ブロックチェーンを触ってで感じるのはトランザクションがマイニングされないと確定しないこと。マイニングは定期的に実施されてるが確定まで時間がかかること。キャンセルという概念がないこと。あたりでしょうか。触って感じて慣れていきましょう。


#全体の流れ
- VPSの選択
- OSの選択
- bitcoindのインストール
- bitcoin.confの設定
- その他の設定
- トランザクションデータの同期
- ビットコインの入手方法


#VPSの選択
トランザクションデータを保存するためストレージ容量が多少必要なので安くてそこそこストレージ容量が選択でき、Ubuntuが選択できるサービスを選択しました。

カゴヤのOpenVZ　
現時点(2018/03)で200GBあればmainnet(本番環境),testnet(テスト環境)どちらでも使えます。メモリも1GBあれば動かすことは十分出来ます。
https://www.kagoya.jp/cloud/vps/price/#price2

一番安いHDDモデルを選択。
<img width="954" alt="kagoya_vps_menu.png" src="https://qiita-image-store.s3.amazonaws.com/0/173398/2cd80969-74e2-8dc1-41e0-ba865c4d4d16.png">


#OSの選択
Ubuntuがエラーなくインストールできるようです。CentOS、Debianだとエラーが出て自分のスキル不足で対処できなかったけどUbuntuだと問題なくサクッと出来ました。
<img width="965" alt="kagoya_vps_instance.png" src="https://qiita-image-store.s3.amazonaws.com/0/173398/2f225c6f-be00-f12f-6256-304840f6b8b3.png">


#bitcoindのインストール
インスタンス作成時にダウンロードしたログイン用認証キーのパスを指定してssh接続します。rootでログインしているので必要に応じてユーザー作成してください。

```
ssh -i ログイン用認証キーのパス/認証キーファイル名.key root@IPアドレス
```

接続したら以下を実行してインストールします。デフォルトで入ってないcurlコマンドのインストールも実施します。

```
$ apt-get update
$ apt-get upgrade
$ apt-get install curl
$ curl https://bitnodes.earn.com/install-full-node.sh | sh
```

以下のメッセージが出てインストール完了となります。2018/06/23時点ではbitcoindはVer 0.16.0がインストールされます。

```
If this your first install, Bitcoin Core may take several hours to download a full copy of the blockchain.

Installation completed!
```

#bitcoin.conf設定
bitcoindが起動時に読み込む設定ファイルです。これを環境に合うよう~/.bitcoin/bitcoin.confを編集します。

bitcoin.confのデフォルト設定

```
listen=1
bind=0.0.0.0
port=8333
maxconnections=64
upnp=1

dbcache=64
par=2
checkblocks=24
checklevel=0

disablewallet=1

rpcbind=127.0.0.1
rpcport=8332
rpcallowip=127.0.0.1
```

今回はtestnetに接続する設定にします。デフォルト設定を削除して以下のみ記述してください。

```
listen=1
testnet=1
maxconnections=16
maxmempool=100
```

細かい設定をしたい場合はbitcoin.confの自動作成サイトを参考にしてみてください。
https://jlopp.github.io/bitcoin-core-config-generator/


#その他設定
## portの設定
testnetなのでportは18333が使えるようにします。mainnetの場合は8333になります。
ufwコマンドもインストール。

```
$ apt-get install ufw
$ ufw allow 18333
$ ufw enable
$ ufw reload
$ ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
18333                      ALLOW       Anywhere
18333 (v6)                 ALLOW       Anywhere (v6)
```

## PATHの設定
PATH設定してbitcoind,bitcoin-cliを使いやすくします。
~/.profileに記述

```
PATH="$PATH:/root/bitcoin-core/bin"
```
PATHを有効にする。

```
$ source ~/.profile
```

#トランザクションデータ同期

bitcoindの起動
testnetで3~4時間、mainnetだと1日弱トランザクションデータの同期にかかるので同期されるまでしばらく待ちます。

```
$ bitcoind -daemon
```
ブロックの現状確認
エクスプローラのブロック高と比較して同期が終わってるか確認してください。

testnet用エクスプローラ
https://test-insight.bitpay.com/

`bitcoin-cli getblockchaininfo`で現在の状況を確認してください。

```
$ bitcoin-cli getinfo
{
  "deprecation-warning": "WARNING: getinfo is deprecated and will be fully removed in 0.16. Projects should transition to using getblockchaininfo, getnetworkinfo, and getwalletinfo before upgrading to 0.16",
  "version": 150100,
  "protocolversion": 70015,
  "walletversion": 139900,
  "balance": 3.79987325,
  "blocks": 1287262,
  "timeoffset": 0,
  "connections": 14,
  "proxy": "",
  "difficulty": 1,
  "testnet": true,
  "keypoololdest": 1518262030,
  "keypoolsize": 2000,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": "Warning: unknown new rules activated (versionbit 28)"
}
```

bitcoindの終了

```
$ bitcoin-cli stop
```

今回のVPSは最低限のリソースで設定しているのでインストールが終わったらVPSサーバーを再起動すると限られたリソースで構築してるのでリソースが開放されて安定するようです。再起動後はBitcoinCoreを再度起動させてVPSのコンソールでリソースの状況を確認してみてください。

#ビットコインの入手方法

最初にビットコインアドレスを取得します。

```
$ bitcoin-cli getnewaddress
2MwXnASptwmqs9Y1b7jbkuaRM3g16S6eJ3D
```

次にtestnet用に無料でビットコインを発行してくれるサイトで取得します。
https://testnet.manu.backend.hamburg/faucet

取得したビットコインアドレスを入力して`Give me some coins`ボタンをクリックします。
<img width="1162" alt="スクリーンショット 2018-03-26 5.46.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/173398/59763231-ce48-68fe-fe5e-926e9f5dc175.png">

トランザクションID（TX ID）が表示されるのでマイニングされ確定するまで待ちます。
<img width="1168" alt="スクリーンショット 2018-03-26 5.45.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/173398/dd100f2d-b963-6ecc-8b27-7fad7bd2dc11.png">

マイニングされるとtestnet用エクスプローラで0.65BTC入手できたことが確認できます。
<img width="1168" alt="スクリーンショット 2018-03-26 6.16.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/173398/5ecb9386-40c1-e47f-51bd-fa059a7dbd72.png">

念のためウォレットの残高を確認すると0.65BTCになってます。

```
$ bitcoin-cli getbalance
0.65000000
```