Как именно работает -rescan?

-rescan— это аргумент командной строки, который передается биткойн-клиенту после восстановления wallet.dat из резервной копии.

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

Ответы (2)

Биткойн-клиент хранит в кошельке транзакции, влияющие на монеты, которыми он управляет. Если он видит новую транзакцию, он проверяет, влияет ли эта транзакция на какие-либо учетные записи, хранящиеся в кошельке. Если это так, кошелек обновляется. Точно так же, если цепочка реорганизована, кошелек обновляется.

Однако клиент не проверяет, синхронизирован ли кошелек с текущей цепочкой блоков. Чтобы исправить это, rescanможно использовать команду. Это заставляет клиент при запуске просматривать каждый загруженный блок, искать транзакции, затрагивающие учетные записи в кошельке, и обновлять хранилище транзакций кошелька и балансы, чтобы отразить эту транзакцию.

Есть несколько случаев, когда вам обязательно нужно пересканировать. Например:

Если вы восстановите резервную копию кошелька, в нем будут отсутствовать все транзакции в блоках, которые вы скачали после резервного копирования кошелька. Поскольку клиент не получит эти блоки (поскольку они у него уже есть), обычная логика обновления кошелька не исправит это. Вам нужно будет провести повторное сканирование.

Если вы измените свой кошелек, скажем, добавив в него ключи или удалив из него транзакции, логика обновления кошелька не увидит транзакции. Поэтому, если вы используете программу, отличную от клиента, для изменения вашего кошелька, вам нужно будет повторно сканировать.

Теоретически не должно иметь значения, загружаете ли вы все блоки, а затем повторно сканируете или наоборот. Клиент не будет загружать блоки во время повторного сканирования. И вновь загруженные блоки в любом случае должны обновить кошелек. Логика в основном заключается в том, что это гарантирует, что процесс повторного сканирования увидит блоки, содержащие любые отсутствующие транзакции, а не логику обычного обновления блока. (Они оба должны работать. Но если вам понадобится повторное сканирование, мы все равно знаем, что что-то не так.)

Начиная с версии 0.3.21 клиент будет автоматически повторно сканировать, если последний блок, о котором знал кошелек, не является последним блоком в блокчейне: bitcointalk.org/index.php?topic=6642.msg99812#msg99812
Кроме того, использование -checkblocks проверит целостность всей цепочки блоков: en.bitcoin.it/wiki/Running_Bitcoin .
будет ли он блокировать генерацию адресов, отправку монет?

Это также полезно, если вы импортируете в свой кошелек более одного закрытого ключа:

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
очень умный. никогда не думал об этом.