Wenn ein (leichter) SPV-Client einen Full Node nach dem Merkle-Zweig fragt, der eine bestimmte Transaktion (oder den Wert einer Adresse) enthält, wie findet der Full Node diese Transaktion (oder die UTXOs) in der Blockchain? Scannt der Full Node linear durch die gesamte Blockchain oder gibt es einen schnelleren Weg, Transaktionen und Blöcke zu verknüpfen?
Sie können die bip37- Spezifikation für alle groben Details lesen.
Wie findet der Full Node diese Transaktion (oder die UTXOs) in der Blockchain?
Der Client erstellt einen Filter, der das enthält, woran er interessiert ist, sei es Ausgabeskript (Adressen), öffentliche Schlüssel oder TXID. Diese senden sie dann an den Knoten, mit dem sie verbunden sind. Wenn sie Daten für einen bestimmten Block anfordern, filtert der Knoten diese so, dass sie nur Dinge enthalten, die mit dem Bloom-Filter des Clients übereinstimmen, und sendet sie an sie. Um alle ihre nicht verbrauchten UTXO zu finden, fordern sie nacheinander jeden einzelnen Block in der Kette an und suchen nach Dingen, die ihnen gehören könnten. Wie Sie meistens herausgefunden haben, bedeutet dies für jeden Client, dass der Knoten 80 GB Blöcke von der Festplatte lädt und extrem teure Filtervorgänge an ihnen durchführt.
Moderne Knoten erkennen, wie schrecklich das für eine Idee ist, und erlauben Benutzern, die Funktionalität aufgrund der massiven Last und des damit verbundenen Denial-of-Service-Risikos vollständig zu deaktivieren. Mit speziell gestalteten Transaktionen kann ein Remote-Peer mit einem einzigen Befehl von weniger als 50 Byte einen Knoten veranlassen, einen 1-MB-Block von der Festplatte zu laden, ihn über eine Million Mal zu hashen und dann nichts zurückzugeben.
Normalerweise fragt der Light-Client „ist diese Transaktion in diesem Block“, nicht „in welchem Block ist diese Transaktion“. Letzteres kann ohne allzu großen Aufwand durchgeführt werden, wenn es einen txindex (Transaktionsindex) gibt, für den Bitcoin eine Option hat.
txindex
da es ewig wachsen würde und unerschwinglich teuer wäre (das Aktivieren dieser Option verlangsamt die Geschwindigkeit des Einfügens von Blöcken erheblich und erhöht die Schreibvorgänge auf der Festplatte).
Mursch
Claris