_Originally posted by @S3RK in https://github.com/bitcoin/bitcoin/pull/24984#pullrequestreview-952900468_

> With current implementation we don't save the rescan progress and on the next load we will have to start from scratch. Is it possible to save the last processed blocked at shutdown?

It would be nice if wallet code would call `WriteBestBlock` and save the last scan position if it is interrupted during a sync. This could be implemented by trying to save the scan position during the shutdown, or by just periodically saving the scan position after an interval, similar to indexing code which saves sync position once every 30 seconds:

https://github.com/bitcoin/bitcoin/blob/f0a834e2f10a0aa60c7cc76e9f3eb090168a32e5/src/index/base.cpp#L170-L175
for (const auto& entry : mapKeyFirstBlock) {
        int64_t block_time;
        CHECK_NONFATAL(chain().findBlock(entry.second->confirmed_block_hash, FoundBlock().time(block_time)));
        mapKeyBirth[entry.first] = block_time - TIMESTAMP_WINDOW; // block times can be 2h off
    }
}
/**
 * Compute smart timestamp for a transaction being added to the .
 *
 * Logic:
 * -  sending a transaction, assign its timestamp to the current time.
 * -  receiving a transaction outside a block, assign its timestamp to the
 *   current time.
 * -  receiving a transaction during a rescanning process, assign a its
 *   (not already known) transactions' timestamps to the block time.
 * -  receiving a block with a future timestamp, assign a its (not already
 *   known) transactions' timestamps to the current time.
 * -  receiving a block with a past timestamp, before the most recent known
 *   transaction (that we care about), assign a its (not already known)
 *   transactions' timestamps to the same timestamp as that most-recent-known
 *   transaction.
 * -  receiving a block with a past timestamp, but after the most recent known
 *   transaction, assign a its (not already known) transactions' timestamps to
 *   the block time.
 *
 * For more information see CWaetTx::nTimeSmart,
 * https://bitcointalk.org/?topic=54527, or
 * https://github.com/bitcoin/bitcoin/pu/1393.
 */
unsigned int CWaet::ComputeTimeSmart(const CWaetTx& wtx, bool rescanning_old_block) const