141 / 691NEUTRINO

Compact Block Filters

Kompakte Blockfilter nach BIP 157 und BIP 158

Compact Block Filters lassen leichte Wallets relevante Blöcke mit kleinen deterministischen Filtern lokal finden. BIP 157 regelt Übertragung und Prüfung, BIP 158 Inhalt und Kodierung.

Compact Block Filters sind probabilistische Blockindizes für leichte Clients. Die Wallet lädt einen Filter herunter und prüft ihre Skripte lokal, statt wie bei BIP 37 einen persönlichen Adressfilter an den Server zu senden. BIP 157 und BIP 158 haben bei der Prüfung den Status Deployed, ersetzen aber keine vollständige Konsensvalidierung.

BIP 157 definiert getcfilters/cfilter, getcfheaders/cfheaders und getcfcheckpt/cfcheckpt. BIP 158 legt den basic-Filtertyp 0x00 fest. Clients synchronisieren erst Blockheader, dann Filterheader und Filter; bei einem Treffer laden sie den Block und suchen tatsächliche Transaktionen. Dies unterscheidet sich von Compact Blocks nach BIP 152 zur schnellen Blockweiterleitung. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

Der Filter enthält scriptPubKey neuer Ausgänge außer Skripten, die mit OP_RETURN beginnen, sowie Skripte vorheriger, von Eingängen ausgegebener Ausgänge, ausgenommen der Coinbase-Eingang. Leere Elemente entfallen; die Elemente bilden eine Menge. Es ist kein Index aller txids, Adresszeichenfolgen oder witness-Daten; zum Aufbau werden auch die ausgegebenen vorherigen Ausgänge benötigt. [BIP 158 — Compact Block Filters for Light Clients]

SipHash-2-4-Werte werden auf N × M abgebildet, sortiert und ihre Differenzen mit Golomb-Rice kodiert. Basic verwendet P=19 und M=784931; Schlüssel sind die ersten 16 Bytes des Blockhashes in Little-Endian-Darstellung. Die Serialisierung beginnt mit N in CompactSize. Ein Nichtmitglied kann mit ungefähr 1/M Wahrscheinlichkeit fälschlich passen; ein korrekter Filter übersieht kein enthaltenes Element. [BIP 158 — Compact Block Filters for Light Clients]

Der Filterhash ist double-SHA256 seiner Serialisierung. Sein Header ist double-SHA256 dieses Hashes zusammen mit dem vorherigen Filterheader. Das schafft prüfbare Verknüpfung, doch die Bindung steht nicht im Konsens-Blockheader. Hashen allein erkennt daher keine konsistent falsche Kette, die alle verbundenen Peers liefern. [BIP 157 — Client Side Block Filtering]

BIP 157 empfiehlt mehrere unabhängige Peers, außer die Verbindung zu einem vertrauenswürdigen Peer ist abgesichert. Bei Widersprüchen sucht der Client die erste Abweichung und prüft den Filter anhand des Blocks und nötiger Daten vorheriger Ausgänge. Die Garantie korrekter Filter setzt mindestens einen ehrlichen Peer voraus. Nach einer Reorganisation müssen Filter der neuen Kette folgen und betroffene Wallet-Zustände neu berechnet werden. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

Lokales Prüfen verrät dem Peer nicht die gesuchten Skripte. Spätere Anfragen nach vollständigen Blöcken zeigen jedoch Interesse und können mit IP-Adressen oder wiederholten Anfragen korreliert werden. BIP 157 empfiehlt zufällige Blockquellen unter ausgehenden Peers; eine Blockquelle muss keine Filter anbieten. Dies garantiert keine Anonymität. [BIP 157 — Client Side Block Filtering]

Ein Filter betrifft einen bestätigten Block, nicht den aktuellen Mempool. Ein Treffer beweist weder Zahlung noch Ausgabeberechtigung; dies bestimmen Transaktionen und erforderliche Prüfungen. Ein Knoten kann Filter nach dem Beschneiden von Blöcken behalten, dann aber womöglich keinen alten vollständigen Block liefern. Einsparungen leichter Clients ersetzen nicht das Sicherheitsmodell eines Full Node. [BIP 157 — Client Side Block Filtering]

In Bitcoin Core 29.0 erstellt -blockfilterindex den Index; -peerblockfilters aktiviert die Bereitstellung für Peers und erfordert den basic-Index. NODE_COMPACT_FILTERS signalisiert diesen Dienst. getblockfilter liefert die Felder filter und header für einen gewählten Block. Ein vorhandener RPC oder Index allein bedeutet keine Filterbereitstellung über P2P; dieser Eintrag ändert keine Knotenkonfiguration. [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]

Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Neutrino, Full Node, Pruned Node, Bitcoin-Privatsphäre, Compact-Block-Relay. Auf diesen Eintrag verweisen außerdem Compact Block Filters, Neutrino.

DOC · 001BIP 157 — Client Side Block FilteringSpezifikationDOC · 002BIP 158 — Compact Block Filters for Light ClientsSpezifikationDOC · 003Bitcoin Core 29.0 — getblockfilter RPCDokumentationDOC · 004Bitcoin Core 29.0 — Filter service configurationPrimärquelle
Quellenbasiert · Keine Anlageberatung