近日リリース予定のBitcoin Core 0.21は、シュノア署名の導入に使われるコードが含まれていることが広く話題にされています。しかし、実は8月にBIP157というものがマージされており、去年マージされていたBIP158とセットで強力な機能をネットワークに提供できるようになります。その機能とはなにか、多くのユーザーが利益を享受するであろうメリットが何なのか、そして反対意見はどこを気にしているのか見ていきましょう。

BIP157+BIP158、またの名はNEUTRINO

BIP157はBIP158と合わせて「Neutrino」と呼ばれることがあります。実はこの2つのBIP(ビットコイン改善提案)はセットのようなもので、両方がそろって本領を発揮する類のものです。

そんなNeurtinoが何かというと、自身のフルノードを持たないSPVウォレットが、自身に関連するトランザクションを他のフルノードから取得する際のプロトコルです。フルノードを持たないSPVウォレットは、フルノードから必要なデータをダウンロードし、自身のウォレットに関連するトランザクションを問い合わせています。スマホにフルノードを導入するのは難しいため、ノンカストディアルなモバイル用ライトニングノードの多くがNeutrinoを採用しています。他にも、Bitcoin Bounty Huntなどのゲームに同梱されるライトニングノードや、ビットコインウォレットなどにも使用されています。

BIP157が軽量クライアントとのP2Pでの通信方式を規定し、Wasabi Walletにも採用されているBIP158はブロック内に自身に関連するトランザクションがあるか判断するのに使うデータであるブロックフィルタの形式を規定しています。

これまでもSPVウォレットは存在し、過去にはBIP37などといった方式で自身に関連するトランザクションを取得していましたが、特にBIP37はプライバシー面やインセンティブの面で問題点が多く、時代遅れと見られています。BIP37を置き換える優等生がNeutrinoなのです。

なおBicoin Core 0.21でBIP157とBIP158の対応が出揃いますが、CPUのリソース使用は控えめですが通信量はそれなりに増大するため、既定では機能自体はオフになります。必要な場合に、peerbloomfiltersとblockfilterindexの2機能をオンにして使うことになるでしょう。
メリット

単純にSPVウォレットのプロトコルとして見た際に、過去に広く使用されていたBIP37と比べて圧倒的にプライバシー面がしっかりしているため、NeutrinoはSPVウォレットの革命です。Bitcoin Coreへの導入でSPVウォレットの開発が増えるでしょうし、BIP37が完全に使われなくなるのも時間の問題でしょう。また、個人ユーザーがスマホ上のライトニングノードを自宅など遠隔地にある自身のビットコインノードに接続したい場合や、事業者がクラウド上のライトニングノードをオンプレミスのビットコインノードに接続したいしたい場合などに、追加のソフトなしにとても簡単に実現できるようになります。Bitcoin Coreはノードの9割以上を占める実装なので、多くのユーザーがNeutrinoでの接続をサポートする選択ができるようになるでしょう。

また、現在Neutrinoに対応しているビットコインノードはbtcdという実装が主で、同期に非常に時間がかかるなどの理由でノード数が非常に少ないです。Bitcoin Coreが対応することでごく少数のノードに多くのサービスが依存している状況が解消されるなら、それらのサービスやそのユーザーにとってセキュリティ上で大きなメリットではないでしょうか。

10月にbtcdのノードを同期した際、Bitcoin Coreなら12時間あれば終わるところ、1週間余りかかりました。また、11月に珍しい2ブロックのチェーン分岐が起こった際に、自分のbtcdのノードはなぜか落ちてしまいました。。
デメリット

ここまで読むとメリットが大きく感じるかもしれませんが、反対意見も少なくはありません。その多くは、Neutrinoによってフルノードを使う人が減り、ネットワークの中央集権化が進むことを危惧している意見です。「Neutrinoさえあればフルノードを動かさずに済む!」というのは、レイヤー1のコンセンサスを他者に委ねることに他ならないですし、これは広義のSPVウォレットにも当てはまる批判です。Neutrinoのプライバシー保護の出来がいいためフルノードの使用が減り、SPVウォレットの利用が拡大してしまうことを恐れています。また、メリットの欄で挙げたユースケースのように自分のノードに接続するのであれば、そもそもプライバシー面で信用できるのでElectrum Serverなどでよく、Neutrinoは不要なのではないかという意見もあります。それでもNeutrinoを使うとトランザクションのインデックスを作成したり、フルノード以外になにかのソフトを動かす必要がないのは楽ですが、一理あります。反対意見をまとめると、「SPVウォレットの利用の拡大 = フルノードの減少を促す恐れがあり、自身のノードと連携する使い方のメリットは小さい」でしょうか。長い目で見て、SPVのプライバシー面の向上がフルノードを動かすインセンティブを相対的に低下させることでネットワークの分散性を損なう可能性は確かにあるのかもしれません。

まとめ

・近日リリースされるBitcoin Core 0.21に盛り込まれている機能の中で、話題性は低いが重要度は高いBIP157サポート

・Wasabi Walletにも採用されているBIP158と合わせてNeutrinoとして知られ、SPVウォレットがフルノードに接続するプロトコルを規定している・ライトニングノードなどにも既に広く利用されており、SPVウォレットに関しては現行のどれよりもダントツで優れたプロトコル

・ただし、プライバシー面での出来が良すぎるため、長期的にはフルノードを動かすメリットを相対的に感じにくくなる副作用も懸念される