本文へスキップ
buybitcoinsmart

用語集 / ノードとソフトウェア

Neutrino

別名はBIP157、コンパクトブロックフィルターです。

Neutrinoとは?
Neutrinoとは、ウォレットがブロックごとに小さなフィルターをダウンロードし、ローカルで検査し、自分に関係する可能性がある完全なブロックだけを取得するライトクライアントの設計です。

BIP-157で規定されています。

従来の仕組みを逆転させることこそが、この設計の要点です。サーバーに監視するアドレスを伝える代わりに、ウォレットは各ブロックのコンパクトな要約を受け取り、照合を自身のハードウェア上で行います。Bitcoin Coreは2019年11月のバージョン0.19.0以降こうしたフィルターを構築でき、0.21.0以降はピアに提供できるため、この仕組みはもはや単一のプロバイダーへの信頼に依存していません。

仕組み

Neutrinoは、1つの役割を分担する2つの仕様に基づいています。

BIP158はフィルターそのものを定義します。各ブロックについて、そのブロックが作成するすべてのアウトプットスクリプトと使用するすべてのアウトプットスクリプトを含む集合を、Golomb-Rice符号化構造に圧縮します。2つのパラメーターは仕様で固定されており、Pは19、Mは784,931で、検査する要素あたりの誤検出率はおよそ784,931分の1になります。実際には、数十個のスクリプトを監視するウォレットが1年間にダウンロードする不要なブロックはわずかです。

BIP157は、それらのフィルターをやり取りするメッセージを定義します。フィルターにはgetcfiltersとcfilter、フィルターヘッダーの連鎖にはgetcfheadersとcfheaders、定期的なチェックポイントにはgetcfcheckptです。フィルターヘッダーは見た目以上に重要です。各ヘッダーは前のヘッダーにコミットしているため、クライアントは複数の独立したピアにチェックポイントを要求でき、そのうちの1つが他と異なるフィルターセットを提供していれば、ブロックをダウンロードすることなく即座に気づくことができます。

そこから先のウォレットの手順は単純です。ブロックヘッダーを同期し、すべてのフィルターをダウンロードし、それぞれを自身が保有するスクリプトと照合し、フィルターが一致の可能性を示した場合にのみブロック全体を要求します。そのブロックを提供するピアは、あなたがブロック912,345を求め、それ以外は何も求めていないことを知りますが、これはあなたのアドレスの一覧よりもはるかに弱いシグナルです。Bitcoin Coreのノードでは、インデックスはblockfilterindexで有効になり、機能の提供開始時点でディスク約4GiBを使用し、peerblockfiltersでピアに提供されます。

使われている場面

Neutrinoは、サーバーの実行を拒むモバイルのライトニングウォレットにおけるチェーンバックエンドです。

この名称はまず、Lightning LabsによるGo実装を指し、lndはフルノードの代わりにこれを使用できます。多くの人がこれに触れるのはそこです。チャネルを開き、インボイスを支払いながら、独自のブロックチェーンを持たないスマートフォンのウォレットです。Breezや他のいくつかのモバイルウォレットも同じ方式を採用しています。

代償は帯域幅と忍耐です。Neutrinoクライアントは、一致するかどうかに関係なくすべてのフィルターをダウンロードするため、単に残高をサーバーに問い合わせるウォレットよりはるかに多くのデータを使用します。また、古いバックアップを復元するには、1回の問い合わせで答えを得るのではなく、ウォレットの作成時のブロック高からフィルターを順にたどる必要があります。従量制のモバイル接続では、このトレードオフは形式的なものではなく、実際の判断となります。

Neutrino vs BIP37のブルームフィルター

Neutrinoではクライアントがブロックをフィルタリングしますが、BIP37ではクライアントが自身のフィルターをサーバーに渡しており、これは逆方向です。BIP37のブルームフィルターは自身のアドレスから構築され、ピアに送信されますが、誤検出がその内容を隠すのにほとんど役立たないことを研究者は繰り返し示してきました。また、任意のピアがノードに対して任意のフィルターでチェーン全体を再スキャンするよう要求できたため、安価なサービス拒否攻撃にもなりました。Bitcoin Coreはバージョン0.19.0でデフォルトでのBIP37の提供を停止しました。これはコンパクトフィルターのインデックスを導入したのと同じリリースであり、今なおこれに依存しているウォレットは、たまたま接続しているノードに自身のアドレス集合を漏らしています。

Neutrino vs Electrumサーバー

Neutrinoは作業と知識をあなたのデバイスに移しますが、Electrumサーバーはその両方を保持します。サーバーへの問い合わせはキロバイト単位のコストで即座に答えを返すため、デスクトップウォレットはこれを好みますが、運営者があなたのアドレス履歴を保有することになります。Neutrinoは、その履歴をスマートフォンに保つために、ウォレットの寿命にわたってギガバイト単位のデータを消費します。

混同しやすい用語

よくある質問

Neutrinoウォレットはフルノードの運用と同じくらいプライバシーが保護されますか?

近いですが、同等ではありません。照合はあなたのデバイス上で行われるため、あなたのアドレスを誰も知ることはありません。ただし、ブロックを提供するピアは、あなたがその特定のブロックを要求したことを知ります。あなたが管理するフルノードは何も漏らしません。

モバイルウォレットのデータ使用量が多いのはなぜですか?

コンパクトフィルターのクライアントは、あなたに関係するかどうかに関係なくブロックごとにフィルターをダウンロードし、さらにフィルターが一致するたびにブロック全体をダウンロードするためです。これは、保有するアドレスをサーバーに伝えないための代償であり、従量制の接続で同期する前に確認する価値があります。

関連用語

ノードとソフトウェアのその他の用語

このページを英語で読む