Zum Inhalt springen
buybitcoinsmart

Glossar / Nodes und Software

Neutrino

Auch bekannt als BIP157, Kompakte Blockfilter, Compact Block Filters.

Was ist Neutrino?
Neutrino ist das Design eines Light Clients, bei dem Ihre Wallet für jeden Block einen winzigen Filter herunterlädt, ihn lokal prüft und nur die vollständigen Blöcke abruft, die Sie betreffen könnten.

Spezifiziert im BIP-157.

Die alte Anordnung umzudrehen, ist der ganze Gedanke. Statt einem Server zu sagen, welche Adressen er beobachten soll, nimmt die Wallet eine kompakte Zusammenfassung jedes Blocks und führt den Abgleich auf der eigenen Hardware durch. Bitcoin Core kann diese Filter seit Version 0.19.0 im November 2019 erstellen und sie seit 0.21.0 Peers bereitstellen, der Mechanismus hängt also nicht mehr davon ab, einem einzelnen Anbieter zu vertrauen.

Wie es funktioniert

Neutrino beruht auf zwei Spezifikationen, die sich eine Aufgabe teilen.

BIP158 definiert den Filter selbst: für jeden Block eine Menge, die jedes Output-Skript enthält, das der Block erzeugt, und jedes Output-Skript, das er ausgibt, komprimiert in eine Golomb-Rice-kodierte Struktur. Seine beiden Parameter sind durch die Spezifikation festgelegt, P bei 19 und M bei 784.931, was eine Falsch-Positiv-Rate von ungefähr eins zu 784.931 pro geprüftem Element ergibt. In der Praxis lädt eine Wallet, die ein paar Dutzend Skripte beobachtet, pro Jahr eine Handvoll nicht benötigter Blöcke herunter.

BIP157 definiert die Nachrichten, die diese Filter übertragen: getcfilters und cfilter für die Filter, getcfheaders und cfheaders für die Kette der Filter-Header, getcfcheckpt für regelmäßige Checkpoints. Filter-Header sind wichtiger, als sie klingen. Jeder bindet sich an den vorherigen, ein Client kann also Checkpoints bei mehreren unabhängigen Peers anfordern und sofort bemerken, wenn einer von ihnen einen anderen Filtersatz bereitstellt als die übrigen, ohne die Blöcke herunterladen zu müssen, um das herauszufinden.

Die Routine der Wallet ist dann einfach. Sie synchronisiert Block-Header, lädt jeden Filter herunter, prüft jeden gegen die Skripte, die sie besitzt, und fordert den ganzen Block nur an, wenn ein Filter auf eine mögliche Übereinstimmung hinweist. Der Peer, der diesen Block bereitstellt, erfährt, dass Sie Block 912.345 wollten und nichts anderes, was ein weit schwächeres Signal ist als eine Liste Ihrer Adressen. Auf einem Node von Bitcoin Core wird der Index mit blockfilterindex aktiviert, etwa 4 GiB Speicherplatz, als die Funktion eingeführt wurde, und mit peerblockfilters den Peers bereitgestellt.

Wo Sie es sehen

Neutrino ist das Chain-Backend in mobilen Lightning-Wallets, die keinen Server betreiben wollen.

Der Name gehört zuerst der Go-Implementierung von Lightning Labs, die lnd anstelle eines vollständigen Nodes verwenden kann, und dort begegnen ihm die meisten: eine Smartphone-Wallet, die Kanäle öffnet und Rechnungen bezahlt, ohne eine eigene Blockchain mitzuführen. Breez und mehrere andere mobile Wallets wählen denselben Weg.

Der Preis ist Bandbreite und Geduld. Ein Neutrino-Client lädt jeden Filter herunter, ob etwas passt oder nicht, er verbraucht also weit mehr Daten als eine Wallet, die einen Server einfach nach ihrem Guthaben fragt, und die Wiederherstellung einer alten Sicherung bedeutet, die Filter ab der Entstehungshöhe der Wallet vorwärts durchzugehen, statt in einer einzigen Abfrage eine Antwort zu erhalten. Bei einer mobilen Verbindung mit Datenlimit ist dieser Zielkonflikt eine echte Entscheidung, keine Formsache.

Neutrino vs. BIP37-Bloom-Filter

Bei Neutrino filtert der Client die Blöcke; bei BIP37 übergab der Client seinen Filter an einen Server, was genau verkehrt herum ist. Ein BIP37-Bloom-Filter wird aus Ihren eigenen Adressen gebildet und an einen Peer gesendet, und Forscher haben wiederholt gezeigt, dass die Falsch-Positiven kaum verbergen, was darin steht. Er war zudem eine billige Dienstblockade, da jeder Peer einen Node auffordern konnte, die gesamte Chain gegen einen beliebigen Filter neu zu durchsuchen. Bitcoin Core hat BIP37 in Version 0.19.0 standardmäßig nicht mehr bereitgestellt, derselben Veröffentlichung, die den Index für kompakte Filter einführte, und jede Wallet, die sich noch darauf verlässt, gibt ihre Adressmenge an welchen Node auch immer preis, mit dem sie gerade verbunden ist.

Neutrino vs. Electrum-Server

Neutrino verlagert die Arbeit und das Wissen auf Ihr Gerät; ein Electrum-Server behält beides. Eine Abfrage bei einem Server kostet Kilobytes und antwortet sofort, weshalb Desktop-Wallets ihn bevorzugen, doch der Betreiber hat am Ende Ihren Adressverlauf in der Hand. Neutrino verbraucht über die Lebensdauer einer Wallet Gigabytes, um diesen Verlauf stattdessen auf Ihrem Smartphone zu behalten.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Ist eine Neutrino-Wallet so privat wie ein vollständiger Node?

Fast, aber nicht gleich. Niemand erfährt Ihre Adressen, weil der Abgleich auf Ihrem Gerät stattfindet, doch der Peer, der Ihnen einen Block bereitstellt, erfährt, dass Sie genau diesen Block angefordert haben. Ein vollständiger Node, den Sie selbst steuern, gibt überhaupt nichts preis.

Warum verbraucht meine mobile Wallet so viele Daten?

Weil Clients für kompakte Filter für jeden Block einen Filter herunterladen, unabhängig davon, ob er Sie betrifft, plus den vollständigen Block, sobald ein Filter passt. Das ist der Preis dafür, einem Server nicht zu sagen, welche Adressen Sie besitzen, und es lohnt sich, das zu prüfen, bevor Sie mit einer Verbindung mit Datenlimit synchronisieren.

Verwandte Begriffe

Mehr zum Thema Nodes und Software

Diese Seite auf Englisch lesen