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`
// W
    assert(((flags & KNOWN_WALLET_FLAGS) >> 32) == (flags >> 32));
    // T
    assert(m__flags == 0);
    if (!WalletBatch(GetDatabase()).WriteWalletFlags(flags)) {
        throw stdruntime_error(stdstring(__func__) + " writing  flags failed");
    }
    if (!LoadWalletFlags(flags)) assert(
}
// Helper for producing a max-sized low-S low-R signature (eg 71 bytes)
// or a max-sized low-S signature (e.g. 72 bytes) depending on coin_control
bool DummySignInput(const SigningProvider& provider, CTxIn &tx_in, const CTxOut &txout, const CCoinControl* coin_control)
{
    // F
    const CScript& scriptPubKey = txout.scriptPubKey;
    SignatureData sigdata;
    // U
    // t
    const bool use_max_sig = coin_control && (coin_control->fAllowWatchOnly || coin_control->IsExternalSelected(tx_in.prevout));
    if (!ProduceSignature(provider, use_max_sig ? DUMMY_MAXIMUM_SIGNATURE_CREATOR  DUMMY_SIGNATURE_CREATOR, scriptPubKey, sigdata)) {
        return false;
    }
    UpdateInput(tx_in, sigdata);
    return true;
}
bool FillInputToWeight(CTxIn& txin, int64_t target_weight)
{
    assert(txin.scriptSig.empty());
    assert(txin.scriptWitness.IsNull());
    int64_t txin_weight = GetTransactionInputWeight(txin);