Как зашифрованный кошелек сохраняет использованные ключи от «getnewaddress» и пула ключей после перезапуска?

Я читаю эту вики о шифровании кошелька и не понимаю, как я могу вызвать getnewaddress, как описано здесь, и где это отслеживается после перезапуска bitcoind.

Когда кошелек зашифрован, фраза-пароль требуется для пополнения пула ключей, поэтому, если фраза-пароль вводится редко, возможно, что пул ключей может закончиться. В этом случае ключ по умолчанию будет использоваться в качестве цели для выплат за майнинг, а вызовы getnewaddress и getaccount address вернут ошибку. Чтобы предотвратить такие случаи, keypool автоматически пополняется при вызове walletpassphrase с правильной парольной фразой и при вызове topupkeypool (при разблокированном кошельке). Обратите внимание, что пул ключей продолжает пополняться в различных случаях, когда используется новый ключ из пула, а кошелек разблокирован (или не зашифрован).

Когда шифрование парольной фразы кошелька становится включенным, любые неиспользуемые ключи из пула ключей сбрасываются (помечаются как использованные), а новые ключи, защищенные шифрованием, добавляются. По этой причине сделайте новую резервную копию своего кошелька, чтобы вы могли восстановить ключи из нового пула ключей, если потребуется доступ к вашим резервным копиям.

В wallet.dat хранятся все приватные ключи. «Пул ключей» — это просто очередь для тех ключей, которые уже находятся в wallet.dat, но еще не выпущены через «getnewaddress» или не выбраны для использования в качестве сдачи в транзакции.

Ответы (2)

Вы не можете называть это бесконечное количество раз. На самом деле, с настройками по умолчанию 101-й вызов не удастся.

В то время как закрытые ключи, управляющие биткойнами, зашифрованы, адреса, соответствующие этим ключам, — нет.

Увлекательно... вы знаете, где он на самом деле хранится?
Где-то в wallet.dat. Кроме того, я не мог сказать вам.

Getnewaddress просто помечает закрытый ключ в wallet.dat как используемый (или, если быть более точным, удаляет этот адрес из пула ключей) и возвращает этот адрес в ответе.

Таким образом, закрытый ключ уже существует в wallet.dat до вызова getnewaddress.