Zum Inhalt springen
buybitcoinsmart

Glossar / Nodes und Software

Kompakter Blockfilter

Was ist ein kompakter Blockfilter?
Ein kompakter Blockfilter ist eine kleine, Golomb-kodierte Zusammenfassung der Output-Skripte, die ein Block erzeugt und ausgibt, veröffentlicht von Full Nodes, damit eine Light Wallet Blöcke prüfen kann, ohne preiszugeben, was sie besitzt.

Spezifiziert im BIP-158.

Ein Filter deckt einen Block ab, und er listet Output-Skripte auf, nicht Adressen, Beträge oder Transaktions-IDs. BIP-158 legt den grundlegenden Typ auf 0x00 fest, mit P gleich 19 und M gleich 784.931, sodass ein Element, das nicht im Block ist, trotzdem etwa einmal bei 784.931 Versuchen passt. Weil der Abgleich auf Ihrem Gerät läuft, erfährt der Node, der den Filter ausliefert, nie, welche Bitcoin Ihnen gehören.

So funktioniert es

Ein kompakter Blockfilter wird zusammengestellt, indem die Output-Skripte, die ein Block erzeugt und ausgibt, in einen einzigen numerischen Bereich gehasht, die Ergebnisse sortiert und nur die Abstände zwischen ihnen notiert werden.

Die Elementliste ist durch die Spezifikation festgelegt, sodass zwei ehrliche Nodes byte-identische Filter für denselben Block erzeugen. Für jede Transaktion nimmt der Filter das vorherige Output-Skript, das jeder Input ausgibt, wobei die Coinbase-Transaktion übersprungen wird, sowie das scriptPubKey jedes Outputs. Eine Kategorie bleibt absichtlich ausgenommen: Outputs, die mit OP_RETURN beginnen. BIP-158 schließt sie aus, damit Filter später in einem Coinbase-OP_RETURN-Output festgeschrieben werden können, so wie es beim Witness Commitment bereits geschieht, ohne dass das Commitment sich selbst abdecken muss.

Beim Hashing wird SipHash mit c gleich 2 und d gleich 4 verwendet, mit den ersten 16 Bytes des Block-Hashs in seiner standardmäßigen Little-Endian-Form als Schlüssel. Dieser Schlüssel ändert sich mit jedem Block, sodass dasselbe Skript in jedem Block an einer anderen Stelle landet und niemand eine Nachschlagetabelle erstellen kann, die über die ganze Chain funktioniert. Jede 64-Bit-Ausgabe wird dann mit einer Multiplikation und einer Verschiebung statt einer Division auf den Bereich null bis N mal M abgebildet.

Die Kompression ist das, worauf der Name hinweist: Sortierte Werte werden durch ihre aufeinanderfolgenden Differenzen ersetzt, und jede Differenz wird zu einem Quotienten in Unärform, gefolgt von 19 Restbits, was Golomb-Rice-Kodierung ist. Die Ausgabe kann nicht kleiner als N mal 20 Bit sein, und ihr wird die Elementanzahl N als CompactSize vorangestellt; ein Block, dessen Filter keine Elemente hat, wird als ein einzelnes Byte aus Nullen gespeichert. Ein Node, der bereit ist, diese Filter auszuliefern, kündigt das Service-Bit NODE_COMPACT_FILTERS an, definiert als 1 um 6 Stellen nach links verschoben.

Wo Sie ihn sehen

Kompakte Blockfilter sind die Synchronisierungsmethode, die Wallets wählen, die lieber Bandbreite verbrauchen, als einem Server eine Adressliste auszuhändigen.

Wasabi Wallet ist das Beispiel in unseren eigenen Bewertungen: nur Desktop, nur Bitcoin, jede Verbindung standardmäßig über Tor, und Synchronisierung aus Filtern, damit kein Server erfährt, welche Adressen Ihnen gehören. Diese Website bewertet sie mit 3,6 und kennzeichnet sie mit Vorsicht, aus einem Grund, der nichts mit der Synchronisierung zu tun hat. Electrum, bewertet mit 4,4, geht den anderen Weg: Sie verifiziert per SPV gegen einen Indexierungsserver, den jeder betreiben kann, und dieser Server hält am Ende die Liste der Adressen, die Ihnen gehören.

Zwei Grenzen sind zu kennen, bevor Sie sich auf Filter verlassen. Ein Filter ist auf Skripte geschlüsselt, sodass Sie eine Transaktions-ID nicht darin nachschlagen können: Mit nur einer txid brauchen Sie weiterhin einen Node oder einen Block-Explorer. Und OP_RETURN-Outputs fehlen konstruktionsbedingt, sodass Software, die auf datentragende Outputs achtet, auf diesem Mechanismus überhaupt nicht aufgebaut werden kann.

Kompakter Blockfilter vs. Compact Block Relay

Ein kompakter Blockfilter sagt einer Wallet, ob sich ein Block zum Herunterladen lohnt; Compact Block Relay, spezifiziert in BIP152, verkleinert einen Block, der sich bereits zwischen zwei Full Nodes auf dem Weg befindet.

Die Zielgruppen sind unterschiedlich. Filter gelten pro Block, sind deterministisch, verwenden die ersten 16 Bytes des Block-Hashs als Schlüssel und werden von Clients heruntergeladen, die keine eigene Chain führen. Compact Block Relay ersetzt die meisten Transaktionen eines Blocks durch 48-Bit-Identifikatoren, deren Schlüssel aus dem Block-Header zusammen mit einem vom Sender gewählten Nonce gehasht wird, und es spart nichts für einen Empfänger, dessen Mempool diese Transaktionen nicht bereits enthält. Das eine erspart einem Smartphone das Herunterladen von Blöcken, die es nicht braucht; das andere erspart einem Node, Transaktionen zweimal zu empfangen. Das gemeinsame Wort „kompakt“ ist die ganze Ähnlichkeit.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Kann ein kompakter Blockfilter jemandem verraten, welche Adressen meine Wallet beobachtet?

Nein. Der Filter wird vom Node aus dem Inhalt des Blocks selbst erstellt und für alle veröffentlicht, sodass nichts über Ihre Wallet Ihr Gerät verlässt. Der Peer, der Ihnen einen passenden Block ausliefert, erfährt allerdings, dass Sie genau diesen Block angefordert haben, was ein weit schwächeres Signal ist als eine Adressliste.

Warum lädt meine Wallet manchmal einen Block herunter, der nichts mit mir zu tun hat?

Weil die Filter probabilistisch sind. Ein Element, das Sie prüfen und das nicht im Block ist, passt trotzdem etwa einmal bei 784.931 Versuchen, sodass eine Wallet, die viele Skripte beobachtet, einige falsche Treffer sammelt, diese Blöcke abruft und nichts Eigenes darin findet.

Kann ich eine Transaktions-ID in einem kompakten Blockfilter nachschlagen?

Nein. Ein BIP-158-Basisfilter enthält nur Output-Skripte: das scriptPubKey jedes Outputs außer OP_RETURN-Outputs, plus das Skript des vorherigen Outputs, das jeder Nicht-Coinbase-Input ausgibt. Eine Transaktions-ID ist nicht darin enthalten, daher benötigen Sie weiterhin einen Node oder einen Block-Explorer.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Nodes und Software

Diese Seite auf Englisch lesen