Neutrino ist ein in Go geschriebener Bitcoin-Light-Client von Lightning Labs, der auch für mobile Anwendungen mit Lightning Network gedacht ist. Er verwendet BIP 157 und BIP 158 für kompakte Blockfilter. Gemeint ist eine konkrete Softwarebibliothek, kein Sammelbegriff für leichte Wallets und kein Ersatz für einen Full Node, der alle Regeln selbst prüft.
Anna öffnet ihre Wallet und erwartet, eine eingegangene Zahlung zu sehen. Damit die Anzeige stimmt, muss die App Daten aus dem Bitcoin-Netzwerk abrufen und verarbeiten. Neutrino kann diesen Teil übernehmen, ohne die gesamte Blockkette dauerhaft auf dem Telefon zu speichern. Ein Block ist eine Gruppe von Transaktionen, die in der gemeinsamen Historie des Bitcoin-Netzwerks festgehalten wird. Die entsprechende Programmschnittstelle heißt ChainService: Sie kümmert sich um Verbindungen, eine lokale Datenbank und den Abgleich der Header. Ein Header fasst grundlegende Angaben eines Blocks zusammen. Ein privater Schlüssel ist eine geheime Zahl, mit der eine digitale Signatur zur Freigabe einer Ausgabe erstellt wird. Dass eine App Neutrino nutzt, sagt allerdings noch nichts darüber aus, wer Annas private Schlüssel hält oder Zahlungen freigibt. Schlüsselverwaltung, Benutzeroberfläche und Sicherungen liegen bei der Wallet, die die Bibliothek einsetzt. [1]
Ein kompakter Filter ähnelt einem kleinen Suchverzeichnis für einen Block. Die Wallet lädt ihn herunter und prüft auf dem eigenen Gerät, ob er zu ihrer Suche passt. Dabei vergleicht sie Skripte: Bedingungen, unter denen bestimmte Bitcoin-Ausgänge ausgegeben werden können. Ein Ausgang ist der Teil einer Transaktion, der einen Betrag und die Bedingungen für dessen spätere Ausgabe festlegt. Die Wallet muss der Gegenstelle nicht ihre vollständige Adressliste schicken. Bei einem Treffer lädt sie den betreffenden Block und sucht die tatsächliche Transaktion. Auch ein korrekt erstellter Filter kann einen falsch positiven Treffer liefern: Der Block wird unnötig geladen, weil der gesuchte Eintrag doch nicht darin steht. Ein Treffer allein belegt daher weder Zahlungseingang noch Betrag noch die Möglichkeit, das Geld auszugeben. [1] [2] [3]
Anna ersetzt ihr Telefon und stellt die Wallet wieder her. Nur ab den heutigen Blöcken zu suchen reicht nicht, wenn sie früher schon Zahlungen erhalten hat. Die App muss die richtigen überwachten Skripte und einen ausreichend frühen Suchbeginn vorgeben. Laut Dokumentation startet Rescan ohne angegebenen Startblock beim zuletzt bekannten Block, nicht automatisch am Anfang der gesamten Historie. Selbst ein funktionierender Filter findet keine Adresse, nach der die Wallet gar nicht sucht, und keine alten Zahlungen in übersprungenen Blöcken. Eine abgeschlossene Wiederherstellung ist deshalb von einer noch laufenden Suche zu unterscheiden. Eine vorübergehend leere Übersicht beweist nicht, dass das Geld verschwunden ist. [1]
Neutrino synchronisiert Block-Header und Filter-Header. Bei Block-Headern lassen sich Verkettung und Proof of Work, also der Nachweis geleisteter Rechenarbeit, prüfen und die Kette mit der größten kumulierten Arbeit verfolgen. Das ist erheblich mehr, als einem Server blind einen Kontostand abzunehmen, aber weniger als jede Transaktion und jede Regel selbst zu prüfen, wie es ein Full Node tut. Außerdem handelt es sich um zwei unterschiedliche Header-Ketten. Bitcoin-Block-Header binden die Richtigkeit dieser Filter nicht unmittelbar ein. Die bloße Kontrolle von Hashes, kryptografischen Fingerabdrücken, schließt deshalb eine betrügerische, aber in sich stimmige Filterfolge nicht aus. Die Arbeitsersparnis hat eine konkrete Vertrauensgrenze. [2] [4]
Ein Peer ist ein anderer Rechner im Netzwerk, von dem der Client Daten erhält. BIP 157 setzt auf den Vergleich von Antworten und mindestens einen ehrlichen Peer, um falsche Filter aufzudecken. Kontrolliert derselbe Angreifer alle Verbindungen, hilft die Anzahl der verbundenen Rechner allein nicht. Sie können dieselbe falsche Antwort geben oder einen neueren Zustand verschweigen. Eine solche Abschottung von ehrlichen Quellen steht im Zusammenhang mit einem Eclipse Attack. Die Wallet braucht verfügbare und ausreichend unabhängige Quellen, nicht nur Verbindungen. Ein grünes Verbindungssymbol beweist keinen aktuellen, vollständigen Zahlungsüberblick. [2]
Jan hat Anna gerade Geld geschickt. Seine Transaktion kann zunächst in einem Mempool warten, der lokalen Sammlung unbestätigter Transaktionen eines Knotens, bis ein Miner sie in einen Block aufnimmt. Die dokumentierten Neutrino-Meldungen recvtx und redeemingtx erfolgen bei der Bestätigung im Block, nicht schon beim Eintritt in einen Mempool. Will eine App eingehende unbestätigte Zahlungen anzeigen, braucht sie einen zusätzlichen geeigneten Mechanismus. Ein Blockfilter kann das nicht liefern, bevor der Block existiert. Senden, Annahme durch einen Peer und Bestätigung sind verschiedene Ereignisse; eine fehlende Meldung beweist noch nicht, dass Jan nichts gesendet hat. [1]
Ein Filtertreffer nützt nur, wenn der Client auch den benötigten Block bekommt. Liefert das Netzwerk ihn gerade nicht, lautet das richtige Ergebnis „Daten fehlen noch“, nicht „Guthaben null“. Auch eine Reorganisation kann den Zustand ändern: Das Netzwerk übernimmt einen anderen Zweig mit mehr kumulierter Arbeit und trennt zuvor angehängte Blöcke ab. Rescan meldet angehängte und abgetrennte Blöcke, damit die App ihre Aufzeichnungen neu berechnen kann. Vollständige Privatsphäre gibt es ebenfalls nicht: Ein Peer bekommt zwar keine Liste der gesuchten Adressen, sieht aber Anfragen nach bestimmten Blöcken und Netzwerkdaten der Verbindung. Wie Daten abgerufen werden, bleibt daher wichtig. [1] [2]
Lightning Network ist ein Zahlungsnetzwerk auf Basis von Bitcoin. In einem Zahlungskanal aktualisieren zwei Teilnehmer die Aufteilung ihrer gemeinsamen Mittel, statt jede Zahlung in einem Bitcoin-Block festzuhalten. Neutrino liefert Daten der Kette; es bewahrt für den Nutzer nicht selbst die Daten zur Wiederherstellung des aktuellen Kanalzustands auf. Wallet-Historie und Kanäle wiederherzustellen sind daher unterschiedliche Aufgaben. Das README beschreibt die Speicherung angeforderter Filter und den Abruf von Blöcken ohne deren dauerhafte Speicherung; die tatsächlichen Anforderungen hängen von Version und Konfiguration der App ab. Wer sich auf eine solche Wallet verlässt, sollte ihr Sicherungs- und Wiederherstellungsverfahren sowie ihr Verhalten beim Ausfall von Datenquellen kennen. Eine kleinere Datenbank auf dem Telefon nimmt einem diese Aufgaben nicht ab. [1] [4]
Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Compact Block Filters, Compact Block Filters, Full Node, Lightning Network, Eclipse Attack, Bitcoin. Auf diesen Eintrag verweisen außerdem Compact Block Filters, Compact Block Filters.