Wie generiert Bitcoin eine neue Adresse, wenn die Brieftasche verschlüsselt ist?

Angenommen, meine Brieftasche ist mit einer Passphase verschlüsselt und ich habe derzeit keine bitcoindPassphrase für den Zugriff auf den Abschnitt mit privaten Schlüsseln der Brieftasche bereitgestellt.

Wenn ich eingebe:

bitcoind getnewaddress

Es gibt eine neue Adresse aus, sagen wir [someaddress], aber wo speichert es den dazugehörigen privaten Schlüssel?

Wenn ich eingebe:

bitcoind dumpprivkey [someaddress]

Ich erhalte eine Fehlermeldung, da ich die Wallet-Passphrase nicht angegeben habe.

Aber wenn ich zuerst die Wallet-Passphrase eingebe und es dann versuche dumpprivkey, wird der private Schlüssel angezeigt.

Als ich darum bat, eine neue Adresse zu erhalten, hatte ich die Passphrase nicht angegeben, also wie speichert es den privaten Schlüssel?

Antworten (1)

Es erhält sie aus dem Schlüsselpool, der standardmäßig 100 vorgenerierte Adressen enthält. Wenn Sie das nächste Mal Ihre Passphrase eingeben, wird der Pool mit neuen Adressen aufgefüllt.

Hier ist ein Beispiel, das zeigt, wie der Pool zur Neige geht und wieder aufgefüllt wird, wenn das Passwort angegeben wird. Die folgenden Befehle wurden von einem geschulten Fachmann ausgeführt. Bitte versuchen Sie dies nicht zu Hause (insbesondere die ersten 2 Befehle):

$ cd ~/.bitcoin
$ rm wallet.dat
$ bitcoin-cli -daemon -keypool=5
bitcoin server starting
$ bitcoin-cli encryptwallet mypass
wallet encrypted; bitcoin server stopping, restart to run with encrypted wallet
$ bitcoin-cli -daemon -keypool=5
bitcoin server starting
$ bitcoin-cli getnewaddress
1Bf6TrgiBxzZhdtEWZuWuREkbfoAtmZ5xa
$ bitcoin-cli getnewaddress
1JzjmeH1LHzJ5JYzUu3wh36N7LWvfVeB2u
$ bitcoin-cli getnewaddress
1sjVdVJAAWB6JTsja4nEVezdnqiE6Ko3V
$ bitcoin-cli walletpassphrase mypass 3600
$ bitcoin-cli walletlock
$ bitcoin-cli getnewaddress
1DVZHRNbdBivqRKzas7iFT8emsb8EtcJT1
$ bitcoin-cli getnewaddress
1HBXkVkWCVhntzgkxdb9hnUxNeMdFqVssQ
$ bitcoin-cli getnewaddress
18n17UHshaufcufo5z1PBPAdErPWxesBhs
$ bitcoin-cli getnewaddress
1CofrGkqWrAmibBUgtLysknXdsBpDJARTs
$ bitcoin-cli getnewaddress
1NwWuba3khc31ebZU8fVAept2MDdnSndgV
$ bitcoin-cli getnewaddress
16QVdikDatH2FkQNkrRgGXrQ9LbEooHAPF
$ bitcoin-cli getnewaddress
error: {"code":-12,"message":"Error: Keypool ran out, please call keypoolrefill first"}
$ bitcoin-cli walletpassphrase mypass 3600
$ bitcoin-cli walletlock
$ bitcoin-cli getnewaddress
1BSDX4PiHKvdssjAzDLVACAAQvwiijmETV
$ bitcoin-cli getnewaddress
1JJphgnC5gqunLtbbLAwtN8LXRnCUYWARm
$ bitcoin-cli getnewaddress
17UJqrpuakgPPuxPTLa8LeeWVAKijZW66x
$ bitcoin-cli getnewaddress
16itq5LpuwyhtfbiHbQxVzJYYdGE7nQRoz
$ bitcoin-cli getnewaddress
1QA4EnXPUHquK9WBxBppicfBTD2gYTB9ic
$ bitcoin-cli getnewaddress
12bgaABsakRouK9NZyUAK1RAD9nmDtHQKa
$ bitcoin-cli getnewaddress
error: {"code":-12,"message":"Error: Keypool ran out, please call keypoolrefill first"}
$ 
Wo verfolgt der Schlüsselpool, dass der Schlüssel verwendet wird, wenn die Brieftasche gesperrt ist? Was ist, wenn Bitcoin neu gestartet wird? bitcoin.stackexchange.com/q/5800/1878
Jedes 'getnewaddress' nimmt eine Adresse aus dem Schlüsselpool. „Gesperrt“ zu sein bedeutet einfach, dass die Passphrase, die zum Verschlüsseln des privaten Schlüssels jeder Adresse verwendet wird, nicht verfügbar ist. Dadurch wird verhindert, dass neue Adressen erstellt werden (da die Passphrase zum Verschlüsseln des neuen privaten Schlüssels erforderlich ist) und dass der Inhalt vorhandener Adressen ausgegeben wird (da die Passphrase zum Entschlüsseln ihres privaten Schlüssels erforderlich ist). Die Brieftasche ist nicht gesperrt im Sinne von unveränderlich, sodass Adressen als nicht mehr im Schlüsselpool enthalten markiert werden können.