diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2011-04-13 16:16:30 +0200 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2011-04-18 17:37:47 -0400 |
commit | 6a76c60e6c4c21c6355c5580f9f770fcc9f978ef (patch) | |
tree | ba3522df13633aeedf795b1bf967aa4f627ab584 /init.cpp | |
parent | 657cfe721b21934349c26ce00aa18661404d46c5 (diff) |
Automatically rescan after restoring wallet.dat
Information about the best known chain is added to wallet.dat. If this
information does not match the data in blkindex.dat, a rescan is automatically
performed, starting from the the last known block. When upgrading from a wallet
which does not have this information, no rescan is done automatically.
Diffstat (limited to 'init.cpp')
-rw-r--r-- | init.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -372,10 +372,21 @@ bool AppInit2(int argc, char* argv[]) strErrors += _("Error loading wallet.dat \n"); printf(" wallet %15"PRI64d"ms\n", GetTimeMillis() - nStart); + CBlockIndex *pindexRescan = pindexBest; if (GetBoolArg("-rescan")) + pindexRescan = pindexGenesisBlock; + else + { + CWalletDB walletdb; + CBlockLocator locator; + if (walletdb.ReadBestBlock(locator)) + pindexRescan = locator.GetBlockIndex(); + } + if (pindexBest != pindexRescan) { + printf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight); nStart = GetTimeMillis(); - ScanForWalletTransactions(pindexGenesisBlock); + ScanForWalletTransactions(pindexRescan); printf(" rescan %15"PRI64d"ms\n", GetTimeMillis() - nStart); } |