背景
フルノードの重要性とLightning NetworkやProof of Stakeがノード運営インセンティブに与える影響 - YouTube
やフルノードの重要性とフルノードが広がった世界について改めて考える - ビットコインダンジョン2.0
を読んで(見て)、ビットコインフルノードを立てたくなりました。
とはいえ以前、下記記事を書いたときに一度ノードを立てたことはあったので、二度目の構築です。
前回はMacBook Pro上で構築したためストレージ容量を節約したかったので、
当時の構築メモの通り、pruneモードで構築しました。
今回はフルノードです。
My first impressions of the Casa Bitcoin Node – The Startup – Medium
のようにCasaもありかなぁと思ったいたのですが、Casaのホームページを見たら2019年2月7日時点で出荷に1ヶ月掛かるとありました。
1ヶ月は待てなかったので、Casaは諦め1、以下のRaspberry Pi 3 Model b+2を購入しました。
なお、HDD、モニタ、キーボード、マウスは家にあったものを流用したので、今回発生した費用は本セットの約1万円でした。
開封の儀
届いたやつです。開封し、基盤を取り出します。
付属のmicroSDカードを挿します。
BluetoothマウスのUSBを取り付けます。
HDMIケーブルを挿します。
外付けHDD(USBケーブル)を挿します。
電源ケーブルを挿し、スイッチを入れます。
今回のキットにはSDカードにOSが入っているので、Raspbian
をインストールしました。
キーボードはBluetoothキーボードしか持っていなかったので、ここでやっとペアリングです。
Wi-Fiの設定も上図の赤い☓のところからいけます。
Bitcoin Coreのインストール
構築には、ラズパイでビットコインフルノードを動かしてみる(2017年) – Crypto Developer Blogを参考にさせていただきました。 2019年になりBitcoin Coreのバージョンも上がっており、コマンドが異なる部分もあるので、自分でやった手順を残します。3
まず、SWAP領域を拡張します。
# /etc/dphys-swapfile CONF_SWAPSIZE=1000 # termitanl $ sudo dphys-swapfile setup $ sudo dphys-swapfile swapon
apt-get
を最新の状態にします。
# termitanl $ sudo apt-get update $ sudo apt-get upgrade -y
ツール群をインストールします。
# termitanl $ sudo apt-get install autoconf libevent-dev libtool libssl-dev libboost-all-dev libminiupnpc-dev -y $ sudo apt-get install git -y $ sudo apt-get install qt4-dev-tools libprotobuf-dev protobuf-compiler libqrencode-dev -y
Bitcoin Coreをインストールします。本記事時点で最新の0.17
をインストールします。
# termitanl $ mkdir ~/bin $ cd ~/bin $ git clone -b 0.17 https://github.com/bitcoin/bitcoin.git $ cd bitcoin/ $ ./autogen.sh $ ./configure --enable-upnp-default --disable-wallet $ make -j2 # ここがとても長い $ sudo make install
HDDのマウント
HDDの容量はどれくらいがいいのか見積もっておきましょう。 ブロックチェーンサイズは、Blockchain Size - Blockchainで確認できます。グラフを引用すると以下のようになります。
2019年2月10日現在で200GBを超えたくらいですね。 ここ4年ほどは概ね線形にサイズが増加しており、約50GB/年くらいのスピードです。 フルノードで運用することを考えると500GBくらいあれば5年くらいは大丈夫そうですね。
かなりバッファを見て(手元にあったHDDなだけ)1TBのHDDでマウントします。 手順やハマった記録は以下記事参照。
Bitcoin Coreの設定
マウント先に/volumes/BTC/blocks
を作り、ここにデータを格納することにします。4
bitcoin.conf
に設定を書き込みます。どこにbitcoin.conf
を配置すべきかというと、Running Bitcoin - Bitcoin Wiki
に以下のように書いてあるので、/volumes/BTC/blocks
に配置します。
By default, Bitcoin (or bitcoind) will look for a file named 'bitcoin.conf' in the bitcoin data directory
デフォルトでは、bitcoinデータを格納するフォルダにある
bitcoin.conf
を見に行く
設定した内容は以下の通りです。
# bitcoin.conf rpcuser=bitcoinrpc rpcpassword=<PASSWORD>
# ~/.bashrc (追記分のみ) PATH="$PATH:/home/pi/bin/bitcoin/src" alias bitcoin-cli='bitcoin-cli -datadir=/volumes/BTC/blocks'
ラズパイでビットコインフルノードを動かしてみる(2017年) – Crypto Developer Blog
のように設定すると、bash
が~/.profile
を読みにいってくれないので、~/.bashrc
に集約しています。
本当はaliasとか.bash_aliases
に書くべきかもしれないですが、どうせフルノード専用機にするので管理箇所を集約することにしました。
Bitcoin Coreの起動
以下で起動します。
# termitanl $ bitcoind -datadir=/volumes/BTC/blocks -daemon
バックグラウンドで実行されているので同期がされていることをCLIで確認します。
v0.16.0
でgetinfo
は削除されてしまったので、getblockchaininfo
を確認しましょう。
# termitanl pi@raspberrypi:~ $ bitcoin-cli getblockchaininfo { "chain": "main", "blocks": 181901, "headers": 563103, "bestblockhash": "000000000000075b5e5ee7573921a3b48e45ace6d9020af7777f32fd99737f14", "difficulty": 1591074.961847305, "mediantime": 1338165561, "verificationprogress": 0.009423622364504645, "initialblockdownload": true, "chainwork": "000000000000000000000000000000000000000000000012406bed1889e1f934", "size_on_disk": 1702373506, "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": "" }
blocks
とheaders
が一致したら同期完了です。
最新ブロックが「いつマイニングされたものなのか」を確認するなら、debug.log
を見たほうがわかりやすいです。
$ tail -f /volumes/BTC/blocks/debug.log 2019-02-15T21:31:40Z UpdateTip: new best=000000000000000009bfca5a27f95c6212923139b0f43888d8581f49b3542fd4 height=338070 version=0x00000002 log2_work=81.95771 tx=56124782 date='2015-01-08T16:27:25Z' progress=0.150469 cache=497.6MiB(4300081txo) 2019-02-15T21:31:43Z UpdateTip: new best=00000000000000001177c70e7b05f9790c645202b6714b8dce38a10c1ddd9b0e height=338071 version=0x00000002 log2_work=81.957763 tx=56126029 date='2015-01-08T16:32:46Z' progress=0.150472 cache=497.6MiB(4300049txo)
同期開始(bitcoind
の起動)は2019/02/15 12:20頃です。
ルータで通信量を確認したところ、1日経過時点で40GB程度(その他の通信も込み)だったので、一週間くらい掛かりそうですね。。。
気長に待ちます。
(2019/4/10追記) wimaxの3日10GB制限あり、かつ、途中で同期を停止していたタイミングもあったので参考になるかわかりませんが、4/10早朝にprogressが1となりました。 制限ありの状況で2ヶ月くらい生活するとネットすら見れずかなりつらい日々でした。固定回線で同期しましょう。。。
References
- フルノードの重要性とLightning NetworkやProof of Stakeがノード運営インセンティブに与える影響 - YouTube
- フルノードの重要性とフルノードが広がった世界について改めて考える - ビットコインダンジョン2.0
- ビットコインとブロックチェーン:暗号通貨を支える技術を読んだ - 逆さまにした
- My first impressions of the Casa Bitcoin Node – The Startup – Medium
- Casa Node for Lightning and Bitcoin
- ラズパイでビットコインフルノードを動かしてみる(2017年) – Crypto Developer Blog
- Blockchain Size - Blockchain
- bitcoin/bitcoin: Bitcoin Core integration/staging tree