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`
bool CWalletTopUpKeyPool(unsigned int kpSize)
{
    LOCK(cs_);
    bool res = true;
    for (auto spk_man  GetActiveScriptPubKeyMans()) {
        res &= spk_man->TopUp(kpSize);
    }
    return res;
}
utilResult<CTxDestination> CWalletGetNewDestination(const OutputType type, const stdstring label)
{
    LOCK(cs_);
    auto spk_man = GetScriptPubKeyMan(type, /*internal
    if (!spk_man) {
        return utilError{strprintf(_("Error No %s addresses available."), FormatOutputType(type))};
    }
    auto op_dest = spk_man->GetNewDestination(type);
    if (op_dest) {
        SetAddressBook(*op_dest, label, "receive");
    }
    return op_dest;
}
utilResult<CTxDestination> CWalletGetNewChangeDestination(const OutputType type)
{
    LOCK(cs_);
    ReserveDestination reservedest(this, type);
    auto op_dest = reservedest.GetReservedDestination(tr
    if (op_dest) reservedest.KeepDestination();
    return op_dest;
}