@@ -148,7 +148,7 @@ UniValue importprivkey(const JSONRPCRequest& request)
148
148
pwallet->UpdateTimeFirstKey (1 );
149
149
150
150
if (fRescan ) {
151
- pwallet->ScanForWalletTransactions (chainActive. Genesis () , true );
151
+ pwallet->RescanFromTime (TIMESTAMP_MIN , true /* update */ );
152
152
}
153
153
}
154
154
@@ -278,7 +278,7 @@ UniValue importaddress(const JSONRPCRequest& request)
278
278
279
279
if (fRescan )
280
280
{
281
- pwallet->ScanForWalletTransactions (chainActive. Genesis () , true );
281
+ pwallet->RescanFromTime (TIMESTAMP_MIN , true /* update */ );
282
282
pwallet->ReacceptWalletTransactions ();
283
283
}
284
284
@@ -436,7 +436,7 @@ UniValue importpubkey(const JSONRPCRequest& request)
436
436
437
437
if (fRescan )
438
438
{
439
- pwallet->ScanForWalletTransactions (chainActive. Genesis () , true );
439
+ pwallet->RescanFromTime (TIMESTAMP_MIN , true /* update */ );
440
440
pwallet->ReacceptWalletTransactions ();
441
441
}
442
442
@@ -536,11 +536,7 @@ UniValue importwallet(const JSONRPCRequest& request)
536
536
file.close ();
537
537
pwallet->ShowProgress (" " , 100 ); // hide progress dialog in GUI
538
538
pwallet->UpdateTimeFirstKey (nTimeBegin);
539
-
540
- CBlockIndex *pindex = chainActive.FindEarliestAtLeast (nTimeBegin - TIMESTAMP_WINDOW);
541
-
542
- LogPrintf (" Rescanning last %i blocks\n " , pindex ? chainActive.Height () - pindex->nHeight + 1 : 0 );
543
- pwallet->ScanForWalletTransactions (pindex);
539
+ pwallet->RescanFromTime (nTimeBegin, false /* update */ );
544
540
pwallet->MarkDirty ();
545
541
546
542
if (!fGood )
@@ -1126,14 +1122,10 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
1126
1122
}
1127
1123
1128
1124
if (fRescan && fRunScan && requests.size ()) {
1129
- CBlockIndex* pindex = nLowestTimestamp > minimumTimestamp ? chainActive.FindEarliestAtLeast (std::max<int64_t >(nLowestTimestamp - TIMESTAMP_WINDOW, 0 )) : chainActive.Genesis ();
1130
- CBlockIndex* scanFailed = nullptr ;
1131
- if (pindex) {
1132
- scanFailed = pwallet->ScanForWalletTransactions (pindex, true );
1133
- pwallet->ReacceptWalletTransactions ();
1134
- }
1125
+ int64_t scannedTime = pwallet->RescanFromTime (nLowestTimestamp, true /* update */ );
1126
+ pwallet->ReacceptWalletTransactions ();
1135
1127
1136
- if (scanFailed ) {
1128
+ if (scannedTime > nLowestTimestamp ) {
1137
1129
std::vector<UniValue> results = response.getValues ();
1138
1130
response.clear ();
1139
1131
response.setArray ();
@@ -1143,7 +1135,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
1143
1135
// range, or if the import result already has an error set, let
1144
1136
// the result stand unmodified. Otherwise replace the result
1145
1137
// with an error message.
1146
- if (GetImportTimestamp (request, now) - TIMESTAMP_WINDOW > scanFailed-> GetBlockTimeMax ( ) || results.at (i).exists (" error" )) {
1138
+ if (scannedTime <= GetImportTimestamp (request, now) || results.at (i).exists (" error" )) {
1147
1139
response.push_back (results.at (i));
1148
1140
} else {
1149
1141
UniValue result = UniValue (UniValue::VOBJ);
@@ -1159,7 +1151,7 @@ UniValue importmulti(const JSONRPCRequest& mainRequest)
1159
1151
" caused by pruning or data corruption (see bitcoind log for details) and could "
1160
1152
" be dealt with by downloading and rescanning the relevant blocks (see -reindex "
1161
1153
" and -rescan options)." ,
1162
- GetImportTimestamp (request, now), scanFailed-> GetBlockTimeMax () , TIMESTAMP_WINDOW)));
1154
+ GetImportTimestamp (request, now), scannedTime - TIMESTAMP_WINDOW - 1 , TIMESTAMP_WINDOW)));
1163
1155
response.push_back (std::move (result));
1164
1156
}
1165
1157
++i;
0 commit comments