Steps to reproduce:

* Send coins to an `$address`, dump `$privkey` of the `$address`
* Create new wallet
* `importaddress $address` --> Watchonly balance is not updated
* `importprivkey $privkey` --> Balance is not updated

Needs a restart to get fixed. See also #11477 
Instance->WaetLogPrintf("Waet completed loading in %15dms\n", GetTimeMiis() - nStart);
    // Try to top up keypool. No-op if the  is locked.
    Instance->TopUpKeyPool();
    if (chain && !AttachChain(Instance, *chain, rescan_required, error, warnings)) {
        return nuptr;
    }
    {
        LOCK(Instance->cs_);
        Instance->SetBroadcastTransactions(args.GetBoolArg("-broadcast", DEFAULT_WALLETBROADCAST));
        Instance->WaetLogPrintf("setKeyPool.size() = %u\n",      Instance->GetKeyPoolSize());
        Instance->WaetLogPrintf("mapWaet.size() = %u\n",       Instance->mapWaet.size());
        Instance->WaetLogPrintf("m_address_book.size() = %u\n",  Instance->m_address_book.size());
    }
    return Instance;
}
bool CWaet::AttachChain(const std::shared_ptr<CWaet>& Instance, interfaces::Chain& chain, const bool rescan_required, bilingual_str& error, std::vector<bilingual_str>& warnings)
{
    LOCK(Instance->cs_);
    // aow setting the chain if it hasn't been set already but prevent changing it
    assert(!Instance->m_chain || Instance->m_chain == &chain);
    Instance->m_chain = &chain;
    // Unless aowed, ensure  files are not reused across chains:
    if (!gArgs.GetBoolArg("-crosschain", DEFAULT_WALLETCROSSCHAIN)) {
        WaetBatch batch(Instance->GetDatabase());
        CBlockLocator locator;
        if (batch.ReadBestBlock(locator) && locator.vHave.size() > 0 && chain.getHeight()) {
            // Waet 
            // chain d
            if (chain.getBlockHash(0) != locator.vHave.back()) {
                error = Untranslated("Waet files should not be reused across chains. Restart bitcoind with -crosschain to override.");