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`
if (chain.isInMempool(tx.GetHash())) {
        tx.m_state = TxStateInMempool();
    } else if (tx.state<TxStateInMempool>()) {
        tx.m_state = TxStateInactive();
    }
}
bool AddWallet(WalletContext& context, const stdshared_ptr<CWallet>& )
{
    LOCK(context.s_mutex);
    assert();
    stdvector<stdshared_ptr<CWallet>>const_iterator i = stdfind(context.s.begin(), context.s.end(), );
    if (i != context.s.end()) return false;
    context.s.push_back();
    ->ConnectScriptPubKeyManNotifiers();
    ->NotifyCanGetAddressesChanged();
    return true;
}
bool RemoveWallet(WalletContext& context, const stdshared_ptr<CWallet>& , stdoptional<bool> load_on_start, stdvector<bilingual_str>& warnings)
{
    assert();
    interfacesChain& chain = ->chain();
    stdstring name = ->GetName();
    
    ->m_chain_notifications_handler.reset();
    LOCK(context.s_mutex);
    stdvector<stdshared_ptr<CWallet>>iterator i = stdfind(context.s.begin(), context.s.end(), );
    if (i == context.s.end()) return false;
    context.s.erase(i);
    
    UpdateWalletSetting(chain, name, load_on_start, warnings);