BIP32-Wallet-Synchronisierung mit Bloom-Filtern

Ich arbeite an meiner SPV-Bibliothek und es fällt mir immer noch schwer, herauszufinden, wie ich die Kombination aus BIP32 + Bloom-Filtern angehen soll. So synchronisiere ich derzeit eine vorhandene HD-Wallet (nach schnellem Aufholen):

  1. Generieren Sie eine Anzahl beobachteter Look-Ahead-Adressen (z. B. 10).
  2. Laden Sie einen Bloom-Filter mit allen verwendeten Adressen plus Look-Ahead (N verwendet + 10 Look-Ahead).
  3. Laden Sie gefilterte Blöcke mit herunter getdata.
  4. Beobachtete Adressen als verwendet markieren, wenn sie in einer Blocktransaktion gefunden werden.
  5. Stellen Sie sicher, dass die zuletzt beobachtete Adresse nicht in einer Transaktion verwendet wurde.
  6. Wenn dies der Fall ist, generieren Sie neue Look-Ahead-Adressen, laden Sie den Bloom-Filter neu und laden Sie den letzten Block erneut herunter, um ihn erneut abzugleichen. Durch die Verwendung einer neuen Empfangsadresse für jede Transaktion haben wir möglicherweise andere Transaktionen im selben Block verpasst.
  7. Gehen Sie andernfalls zurück zu 4 und laden Sie neue Blöcke herunter.

Das klingt für mich jetzt skurril und zu kompliziert. Mehrere Diskussionen im Web sprechen über das „Scannen von Schlüsseln“, wenn es um die Brieftaschensynchronisierung geht, und ich verstehe nicht wirklich, ob sie von einem vollständigen Knoten oder einem leichten SPV-Knoten ausgehen, da ich keine Ahnung habe, wie man ohne Global „Schlüssel scannt“. UTXO-Datenbank. Auch das Gap-Limit scheint nur für einen Full-Node sinnvoll zu sein.

Ich stecke fest, danke.

Antworten (1)

Der Grund, warum Sie einige Vorwärtsschlüssel vorab generieren, besteht darin, die von Ihnen beschriebene Situation zu vermeiden. Wenn Sie nur nach vorne schauen, riskieren Sie, eine Transaktion im aktuellen Block zu verpassen (die Reihenfolge der Transaktionen im Block steht in keinem Zusammenhang mit der Reihenfolge Ihrer Schlüssel). .

Der Begriff "Gap-Limit" bezieht sich auf einen Parameter von Nicht-Bloomfilter-SPV-Clients, die nachschlagen, indem sie einen adressbasierten Index auf einem Remote-Peer abfragen. Die Lückengrenze ist der Endstopp des aktuellen Brieftaschenstatus. Wenn die scannende Brieftasche 10 leere Adressergebnisse in einer Reihe sieht, entscheiden sie, dass dies wahrscheinlich die letzte verwendete Adresse in der Brieftasche ist, und geben die weitere Generierung auf. Wenn es kein Lückenlimit gäbe, würden sie ungenutzte Adressen bis zum Ende der Zeit durchsuchen (oder 2**128, je nachdem, was zuerst eintritt).