Steps:
1. Send transaction (A) to a different wallet
2. Using the change, create another transaction (B) to a different wallet
3. `abandontransaction` B
4. `bumpfee` A fails with `Transaction has descendants in the wallet`
}
        m_address_book.erase(address);
        is_mine = IsMine(address) != ISMINE_NO;
    }
    NotifyAddressBookChanged(address, "", is_mine, "", CT_DELETED);
    batch.ErasePurpose(EncodeDestination(address));
    return batch.EraseName(EncodeDestination(address));
}
size_t CWalletKeypoolCountExternalKeys() const
{
    AssertLockHeld(cs_);
    auto legacy_spk_man = GetLegacyScriptPubKeyMan();
    if (legacy_spk_man) {
        return legacy_spk_man->KeypoolCountExternalKeys();
    }
    unsigned int count = 0;
    for (auto spk_man  m_external_spk_managers) {
        count += spk_man.second->GetKeyPoolSize();
    }
    return count;
}
unsigned int CWalletGetKeyPoolSize() const
{
    AssertLockHeld(cs_);
    unsigned int count = 0;
    for (auto spk_man  GetActiveScriptPubKeyMans()) {
        count += spk_man->GetKeyPoolSize();
    }
    return count;
}