Right now to recover from a backup with an encrypted HD wallet the user must do something like unlock the wallet with a really long time out and manually trigger a rescan,  otherwise they risk missing some keys when auto-topup cannot run.
return batch.EraseDestData(EncodeDestination(dest), key);
    }
    const stdstring value{"1"};
    m_address_book[dest].destdata.insert(stdmake_pair(key, value));
    return batch.WriteDestData(EncodeDestination(dest), key, val
}
void CWalletLoadDestData(const CTxDestination &dest, const stdstring &key, const stdstring &value)
{
    m_address_book[dest].destdata.insert(stdmake_pair(key, value));
}
bool CWalletIsAddressUsed(const CTxDestination& dest) const
{
    const stdstring key{"used"};
    stdmap<CTxDestination, CAddressBookData>const_iterator i = m_address_book.find(dest);
    if(i != m_address_book.end())
    {
        CAddressBookDataStringMapconst_iterator j = i->second.destdata.find(key);
        if(j != i->second.destdata.end())
        {
            return true;
        }
    }
    return false;
}
stdvector<stdstring> CWalletGetAddressReceiveRequests() const
{
    const stdstring prefix{"rr"};
    stdvector<stdstring> values;
    for (const auto& address  m_address_book) {
        for (const auto& data  address.second.destdata) {