Wie genau funktioniert -rescan?

-rescanist ein Befehlszeilenargument, das nach der Wiederherstellung von wallet.dat aus der Sicherung an den Bitcoin-Client übergeben wird.

  1. Welche Dateien werden neu berechnet?
  2. Welche Dateien liest der Rescan-Befehl?
  3. Warum ist es ratsam, zuerst alle Blöcke herunterzuladen, dann erneut zu scannen und nicht umgekehrt? (wie ein Kommentar zu dieser Antwort andeutet )

Antworten (2)

Der Bitcoin-Client speichert in der Wallet die Transaktionen, die sich auf die von ihm verwalteten Coins auswirken. Wenn es eine neue Transaktion sieht, prüft es, ob diese Transaktion irgendwelche in der Brieftasche gespeicherten Konten betrifft. Wenn dies der Fall ist, wird die Brieftasche aktualisiert. In ähnlicher Weise wird die Brieftasche aktualisiert, wenn die Kette neu organisiert wird.

Der Client überprüft jedoch nicht, ob das Wallet mit der aktuellen Blockchain synchronisiert ist. Um dies zu beheben, kann der rescanBefehl verwendet werden. Dies veranlasst den Client, beim Start jeden einzelnen Block, den er heruntergeladen hat, durchzugehen, nach Transaktionen zu suchen, die Konten in der Brieftasche betreffen, und den Transaktionsspeicher und die Salden der Brieftasche zu aktualisieren, um diese Transaktion widerzuspiegeln.

Es gibt einige Fälle, in denen Sie unbedingt erneut scannen müssen. Zum Beispiel:

Wenn Sie eine gesicherte Brieftasche wiederherstellen, fehlen alle Transaktionen in Blöcken, die Sie heruntergeladen haben, nachdem Sie die Brieftasche gesichert haben. Da der Client diese Blöcke nicht erhält (da er sie bereits hat), wird die normale Wallet-Update-Logik dies nicht beheben. Sie müssen erneut scannen.

Wenn Sie Ihre Brieftasche ändern, indem Sie beispielsweise Schlüssel hinzufügen oder Transaktionen daraus entfernen, sieht die Brieftaschen-Aktualisierungslogik die Transaktionen nicht. Wenn Sie also ein anderes Programm als den Client verwenden, um Ihre Brieftasche zu ändern, müssen Sie erneut scannen.

Theoretisch sollte es egal sein, ob Sie alle Blöcke herunterladen und dann erneut scannen oder umgekehrt. Der Client lädt während des erneuten Scannens keine Blöcke herunter. Und neu heruntergeladene Blöcke sollten die Brieftasche sowieso aktualisieren. Die Logik besteht im Grunde darin, dass dadurch sichergestellt wird, dass der Rescan-Prozess die Blöcke sieht, die fehlende Transaktionen enthalten, und nicht die reguläre Blockaktualisierungslogik. (Sie sollten beide funktionieren. Aber wenn Sie erneut scannen müssen, wissen wir sowieso, dass etwas nicht stimmt.)

Ab v0.3.21 wird der Client automatisch neu scannen, wenn der letzte Block, von dem das Wallet wusste, nicht der letzte Block in der Blockchain ist: bitcointalk.org/index.php?topic=6642.msg99812#msg99812
Außerdem wird durch die Verwendung von -checkblocks die Integrität der gesamten Blockchain überprüft: en.bitcoin.it/wiki/Running_Bitcoin
Wird es das Generieren von Adressen und das Senden von Münzen blockieren?

Dies ist auch nützlich, wenn Sie mehr als 1 privaten Schlüssel in Ihr Wallet importieren:

bitcoind importprivkey 1zbcvs.... "My Label" false
bitcoind importprivkey 1zbcvs.... "My Label" false
bitcoind importprivkey 1zbcvs.... "My Label" false
bitcoind stop

# One of the following
bitcoind -rescan 
bitcoin-qt -rescan
sehr schlau. Habe niemals drüber nachgedacht.