こんばんは。最近、ライトニングノードをいくつか立ち上げる理由があり、自分がコントロールするノードそれぞれにビットコインノードを併設するのは負担が大きく感じたため、ライトニングノードを遠隔のビットコインノードに接続するNeutrinoという動作モード(いわゆる「ライトクライアント」)を活用することにしました。ところが、Neutrinoを通してライトニングノードにブロックチェーンのデータを送ることができるビットコイン実装はbtcdなのです。ノード実装にはBitcoin Coreの他にもbtcd、bcoin、Bitcoreなどがあり、bcoinなら自分でも使用したことがありますが、btcdは同期が非常に遅いことに気が付きました。同期を開始して5日以上経ちましたが、まだ2019年6月の段階なので、あと2~3日かかりそうです。比較対象として、今年同じ環境でBitcoin Coreを最初から同期したときは12時間前後で完了しました。ビットコインノードの同期がどのように進歩してきたか、btcdはなぜ同期が遅いのかなど、感じたことや調べたことをまとめてみました。
ビットコインの分散性を維持する上で、ブロックのサイズを小さくする目的は同期コストや検証コストを下げることなので、ブロックのサイズに関係なく同期や検証の速度を上げる技術は非常に重要なものとなります。
実装ごとのパフォーマンス
ちょうど一年ほど前に、Jameson Lopp氏がビットコインの実装ごとの同期パフォーマンス(所要時間)を計測した記事が出ていました。全ての実装に共通の設定として過去全ての署名を検証する設定を行い、また実装ごとにCPUとRAMの使用量をできる限り大きくしたそうです。
結果だけをまとめると:
・Bitcoin Core 0.19 - 6時間39分 (前年比 +28%)
計測した結果、ネットワークやストレージ、RAMではなく、CPUがボトルネックだったそうです。
・bcoin - 18時間29分 (前年比 -44%)
パフォーマンスの改善になると思って導入したUTXOキャッシュが実は改善にならなかったため排除した結果、そこそこ早い同期が実現しました。それでもBitcoin Coreには遠く及びません。