Wie verfolgen HD Wallets alle Konten?

Wenn ein HD Wallet zum Beispiel 1.000 Konten generiert.

Wie würden sie alle Guthaben des Kontos verfolgen, wenn jemand zum Beispiel auf das 455. Konto einzahlt, würden sie das Guthaben der Brieftasche aktualisieren wollen.

Ich stelle mir vor, dass das Speichern aller Konten nicht effizient wäre, und das Abfragen der Blockchain oder einer API für alle 1.000 wäre auch nicht effizient.

Verwenden eines isolierten Anwendungsfalls:

Wenn eine API-HD-Brieftasche 1.000 Adressen generiert, kann sie nicht jedes Mal, wenn der Benutzer das Telefon einschaltet, alle 1.000 abfragen, und sie kann dies nicht regelmäßig tun, da es ein Engpass wäre, wenn alle denselben Endpunkt erreichen.

Ich erinnere mich, dass blockchain.info es Ihnen ermöglicht, mit Ihrem erweiterten öffentlichen Schlüssel abzufragen. Ich stelle mir vor, dass sie die Konten auf die gleiche Weise mit dem Lückenlimit durchlaufen.

Können Sie erläutern, was Sie mit API HD Wallet meinen (es ist kein allgemein verwendeter Begriff). Meinst du eine SPV-Geldbörse wie Elektron?
@darkknight Eine Brieftasche, die API-Dienste wie blockchain.info verwendet, um das Guthaben abzurufen und Transaktionen zu senden, anstatt ein SPV zu sein

Antworten (1)

Im Allgemeinen verwenden HD Wallets die folgende Logik dafür, wie viele Adressen abgefragt werden und wann aufgehört werden soll:

  1. Beginnen Sie mit Konto 0, generieren Sie eine gap limitAnzahl von Adressen (normalerweise 20)
  2. Suchen Sie nach Transaktionen in diesen Adressen
  3. Wenn keine Transaktionen vorhanden sind, beenden Sie die Suche nach neuen Adressen und Konten
  4. Wenn es Transaktionen gibt, generieren gap limitSie mehr aus dem Index der letzten Adresse mit Transaktionen darauf. Führen Sie diesen Vorgang außerdem auch für Konto 1 durch (Sie prüfen nur nach n+1 Konten, wenn Konto n Transaktionen hat

Die allgemeine Idee ist, dass keine Konten existieren, wenn das vorherige Konto unbenutzt ist, und dass keine Adressen in einem Konto nach einem einzelnen, aufeinanderfolgenden gap limitNummernblock unbenutzter Adressen verwendet werden.

Unternehmen wie BitGo, die HD-Wallet-Dienste für Börsen usw. anbieten, bei denen Sie problemlos Tausende von ungenutzten Adressen hintereinander und dann Adressen mit Transaktionen haben können, ignorieren im Allgemeinen das Lückenlimit. Sie führen stattdessen eine Liste aller generierten Adressen und indizieren sie als einzelne Adressen, nicht als HD-Wallet.

Auf der API-Seite versuchen Wallets im Allgemeinen, einen laufenden Index zu führen. Sie werden einen Cache bekannter Transaktionen unterhalten und ihn weiter anhängen. Auf diese Weise scannt es beim Start nur nach Transaktionen in den neuen Blöcken seit dem letzten Scan. Dadurch können selbst leichte Clients wie Electrum oder Ledger/Trezor-Wallets Tausende von Benutzern mit nur einer Handvoll Knoten bedienen, da jede Wallet nicht erneut nach früheren Transaktionen abfragt, von denen sie bereits weiß.

Wenn Sie ein häufig verwendetes HD-Wallet in ein neues Wallet importieren oder den Cache löschen, kann die anfängliche Synchronisierung natürlich sehr lange dauern. Nachfolgende Synchronisierungen der Brieftasche werden jedoch viel schneller sein.

Darüber hinaus verlassen sich HD-Wallets häufig auf einen vollständigen Knoten (wie Bitcoin Core) oder ein System wie ElectrumX oder Insight. All dies ist in der Lage, einen vollständigen Index zu führen. Bitcoin Core verwaltet nur einen laufenden Index über bekannte Adressen (weshalb Sie beim Importieren einer Adresse erneut scannen müssen). ElectrumX und Insight pflegen einen erweiterten Index, der alle Transaktionen verfolgt und schnell Daten für jede beliebige Adresse zurückgeben kann.

HD Wallets prüft weiterhin alle verwendeten Adressen auf Transaktionen. Sie scannen einfach nicht jedes Mal die gesamte Kette neu. Aber für jeden neuen Block wird jeder tx in diesem Block auf jede Adresse in der HD-Wallet überprüft. Diese Prüfung kann schnell über Bloomfilter oder vorindizierte Daten wie von Electrum oder Insight erfolgen, ohne einen Engpass zu erreichen.

Ich verstehe, wie HD Wallets theoretisch funktionieren, danke für die Klarstellung. Meine Frage bezieht sich darauf, wie es in der Praxis funktioniert. Wie würde ein HD Wallet überprüfen, ob an eine der zuvor generierten Adressen effizient Geld gesendet wurde? Wenn sie 1.000 hätten, wäre dies ein Engpass für eine API-Wallet
@KyleGraham Die meisten Brieftaschen gehen damit um, indem sie eine Liste bekannter Transaktionen führen und nur txs in neueren Blöcken anfordern, anstatt jedes Mal die gesamte Kette nach jeder Adresse zu scannen. Ich habe die Antwort so bearbeitet, dass sie dies enthält.
Wenn das Wallet also 1.000 Konten verwaltet, wird es immer noch die Blockchain für jedes Konto scannen, aber es wird in neueren Blöcken suchen? Wenn dies korrekt ist, erscheint es nicht effizient, da Benutzer potenziell Tausende von Konten haben können. Mit jedem Konto, das die Möglichkeit hat, sich Geld zusenden zu lassen.
Das Scannen nach neuen Transaktionen hat die gleichen Kosten, egal ob Sie nach 1 Adresse oder 10000 scannen. Die meisten Implementierungen verwenden eine Art Bloom-Filter , um es schnell zu machen. Sobald der Filter erstellt ist, überprüfen Sie jeden TX, um festzustellen, ob er für Ihre Adresse trivial ist.
Ja genau. Es wäre verschwenderisch, jedes Mal, wenn der Benutzer das HD Wallet öffnet, nach allen 1.000 Adressen zu scannen (verwendete Adressen weiterzugeben). Wenn wir nicht überprüfen, ob jemand Geld an eine zuvor verwendete Adresse gesendet hat, zeigt das HD Wallet ein falsches Guthaben an. Meine Frage ist, wie gehen HD Wallets (mobile) damit um?
Ich habe die Antwort noch etwas bearbeitet. Kurz gesagt, das Wallet überprüft auch jede verwendete Adresse. Es gibt nur Möglichkeiten, dies effizient zu tun, bis zu einem Punkt, an dem es in den meisten Fällen kein Engpass mehr ist
@RaghavSood Inwiefern stellen über 1.000 HTTP-Anforderungen bei jedem Start der App keinen Engpass dar?
Jeder Ort, der mit erheblichen Mengen an Adressen zu tun hat, behält einen ständig aktualisierten Status für jede Adresse bei, indem der Mempool und jeder neue Block gescannt wird. Die Anwendungen, die das Adressguthaben, Transaktionen usw. verwenden, fragen dann die Überwachungsanwendungen ab, die so optimiert sind, dass sie keine 1000 Abfragen erfordern
@RaghavSood Wie kann eine mobile Brieftasche, die auf SPV oder ElectrumX angewiesen ist, ständig den Mempool und neue Blöcke scannen, wenn sie offline ist? Müsste es nicht jedes Mal, wenn es online geht, den Server nach allen darin enthaltenen Adressen abfragen?
Die Verwendung von Bloomf-Filtern ermöglicht es Ihnen, relativ große Stapel von Adressen gleichzeitig abzufragen – die meisten Electrum-Wallets, die eine Weile verwendet wurden, scannen bereits Tausende von Adressen in wenigen Minuten. Das funktioniert gut genug für persönliche Geldbörsen. Auf Börsenebene haben Sie benutzerdefinierte Systeme, die mit Millionen von Adressen umgehen sollen
Ich implementiere gerade eine mobile Brieftasche und würde gerne lernen, wie das geht, aber ich sehe keine ElectrumX-Methoden, die Stapelabfragen ermöglichen electrumx.readthedocs.io/en/latest/protocol-methods.html I Ich benutze auch Esplora und sehe solche Batch-Abfragen dort auch nicht github.com/Blockstream/esplora/blob/master/API.md