mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-20 02:25:40 +01:00
Handle TIMESTAMP_WINDOW within CWallet::RescanFromTime
This way CWallet::RescanFromTime callers don't need to subtract TIMESTAMP_WINDOW themselves. This is pure refactoring, there is no change in behavior.
This commit is contained in:
parent
5b2be2b787
commit
deaf48b046
@ -537,7 +537,7 @@ UniValue importwallet(const JSONRPCRequest& request)
|
||||
file.close();
|
||||
pwallet->ShowProgress("", 100); // hide progress dialog in GUI
|
||||
pwallet->UpdateTimeFirstKey(nTimeBegin);
|
||||
pwallet->RescanFromTime(nTimeBegin - TIMESTAMP_WINDOW, false /* update */);
|
||||
pwallet->RescanFromTime(nTimeBegin, false /* update */);
|
||||
pwallet->MarkDirty();
|
||||
|
||||
if (!fGood)
|
||||
@ -1113,10 +1113,10 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
|
||||
}
|
||||
|
||||
if (fRescan && fRunScan && requests.size()) {
|
||||
int64_t scannedTime = pwallet->RescanFromTime(nLowestTimestamp - TIMESTAMP_WINDOW, true /* update */);
|
||||
int64_t scannedTime = pwallet->RescanFromTime(nLowestTimestamp, true /* update */);
|
||||
pwallet->ReacceptWalletTransactions();
|
||||
|
||||
if (scannedTime > nLowestTimestamp - TIMESTAMP_WINDOW) {
|
||||
if (scannedTime > nLowestTimestamp) {
|
||||
std::vector<UniValue> results = response.getValues();
|
||||
response.clear();
|
||||
response.setArray();
|
||||
@ -1126,7 +1126,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
|
||||
// range, or if the import result already has an error set, let
|
||||
// the result stand unmodified. Otherwise replace the result
|
||||
// with an error message.
|
||||
if (scannedTime <= GetImportTimestamp(request, now) - TIMESTAMP_WINDOW || results.at(i).exists("error")) {
|
||||
if (scannedTime <= GetImportTimestamp(request, now) || results.at(i).exists("error")) {
|
||||
response.push_back(results.at(i));
|
||||
} else {
|
||||
UniValue result = UniValue(UniValue::VOBJ);
|
||||
@ -1142,7 +1142,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
|
||||
"caused by pruning or data corruption (see bitcoind log for details) and could "
|
||||
"be dealt with by downloading and rescanning the relevant blocks (see -reindex "
|
||||
"and -rescan options).",
|
||||
GetImportTimestamp(request, now), scannedTime - 1, TIMESTAMP_WINDOW)));
|
||||
GetImportTimestamp(request, now), scannedTime - TIMESTAMP_WINDOW - 1, TIMESTAMP_WINDOW)));
|
||||
response.push_back(std::move(result));
|
||||
}
|
||||
++i;
|
||||
|
@ -1465,7 +1465,7 @@ void CWalletTx::GetAmounts(std::list<COutputEntry>& listReceived,
|
||||
/**
|
||||
* Scan active chain for relevant transactions after importing keys. This should
|
||||
* be called whenever new keys are added to the wallet, with the oldest key
|
||||
* creation time minus TIMESTAMP_WINDOW.
|
||||
* creation time.
|
||||
*
|
||||
* @return Earliest timestamp that could be successfully scanned from. Timestamp
|
||||
* returned will be higher than startTime if relevant blocks could not be read.
|
||||
@ -1478,13 +1478,13 @@ int64_t CWallet::RescanFromTime(int64_t startTime, bool update)
|
||||
// Find starting block. May be null if nCreateTime is greater than the
|
||||
// highest blockchain timestamp, in which case there is nothing that needs
|
||||
// to be scanned.
|
||||
CBlockIndex* const startBlock = chainActive.FindEarliestAtLeast(startTime);
|
||||
CBlockIndex* const startBlock = chainActive.FindEarliestAtLeast(startTime - TIMESTAMP_WINDOW);
|
||||
LogPrintf("%s: Rescanning last %i blocks\n", __func__, startBlock ? chainActive.Height() - startBlock->nHeight + 1 : 0);
|
||||
|
||||
if (startBlock) {
|
||||
const CBlockIndex* const failedBlock = ScanForWalletTransactions(startBlock, update);
|
||||
if (failedBlock) {
|
||||
return failedBlock->GetBlockTimeMax() + 1;
|
||||
return failedBlock->GetBlockTimeMax() + TIMESTAMP_WINDOW + 1;
|
||||
}
|
||||
}
|
||||
return startTime;
|
||||
|
Loading…
Reference in New Issue
Block a user