Compact Block Filters は軽量クライアント向けの確率的なブロック索引です。ウォレットはフィルターを取得して自分のスクリプトを手元で照合し、BIP 37 のように個人用アドレスフィルターをサーバーへ送りません。確認時点で BIP 157 と BIP 158 は Deployed ですが、完全なコンセンサス検証の代わりにはなりません。
BIP 157 は getcfilters/cfilter、getcfheaders/cfheaders、getcfcheckpt/cfcheckpt を定義します。BIP 158 は 0x00 型 basic フィルターを定めます。クライアントはブロックヘッダー、フィルターヘッダー、フィルターの順に同期し、一致時にブロックを取得して実際の取引を探します。高速なブロック転送用の BIP 152 Compact Blocks とは別です。 [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]
フィルターは OP_RETURN で始まるもの以外の新しい出力の scriptPubKey と、coinbase 入力を除く各入力が消費する過去の出力スクリプトを含みます。空の項目は除外し、要素を集合として扱います。全 txid、アドレス文字列、witness データの索引ではなく、構築には消費される過去の出力も必要です。 [BIP 158 — Compact Block Filters for Light Clients]
SipHash-2-4 の値を N × M の範囲へ写像して並べ、差分を Golomb-Rice で符号化します。Basic は P=19、M=784931 を使い、鍵はブロックハッシュの little-endian 表現の先頭 16 バイトです。シリアライズは CompactSize の N から始まります。非要素の照会は約 1/M の確率で誤一致しますが、正しいフィルターは含まれる要素を見逃しません。 [BIP 158 — Compact Block Filters for Light Clients]
フィルターハッシュはシリアライズ結果の double-SHA256 です。ヘッダーはそのハッシュと前のフィルターヘッダーを連結した double-SHA256 です。検証可能な連鎖ができますが、コミットメントはコンセンサスのブロックヘッダーに含まれません。全接続ピアが一貫した偽の連鎖を返せば、ハッシュだけでは見破れません。 [BIP 157 — Client Side Block Filtering]
BIP 157 は信頼するピアとの安全な接続がない場合、複数の独立ピアを推奨します。不一致があれば最初の差を探し、ブロックと必要な過去の出力データでフィルターを検証します。正しいフィルターの保証は少なくとも一つの正直なピアを前提とします。再編後は新しい枝にフィルターを接続し、関連するウォレット状態を再計算します。 [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]
手元での照合は監視スクリプトの一覧をピアに知らせません。ただし後の全ブロック要求は関心を示し、IP アドレスや反復照会と関連付けられます。BIP 157 はアウトバウンドピアからランダムにブロック取得元を選ぶよう推奨し、取得元はフィルター提供者でなくても構いません。匿名性の保証ではありません。 [BIP 157 — Client Side Block Filtering]
フィルターは確定済みブロックを対象とし、現在の Mempool は対象外です。一致だけでは支払いも支出権限も証明せず、取引と必要な検証が判断材料です。ノードはブロックを剪定後もフィルターを保存できますが、古い全ブロックを提供できない場合があります。軽量化は Full Node の安全性モデルを代替しません。 [BIP 157 — Client Side Block Filtering]
Bitcoin Core 29.0 の -blockfilterindex は索引を作り、-peerblockfilters は basic 索引を前提にピアへの提供を有効にします。NODE_COMPACT_FILTERS がそのサービスを示します。getblockfilter RPC は対象ブロックの filter と header を返します。RPC や索引の存在だけでは P2P 提供を意味せず、本項目はノード設定を変更しません。 [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]
理解を深めるには、この項目とあわせて次もお読みください Neutrino, Full Node, Pruned node, Bitcoin のプライバシー, Compact block relay. 次の項目からも参照されています Compact Block Filters, Neutrino.