lnd: [bug]: unable to bump a channel open transaction

Background

Bumping the UTXO with lncli wallet bumpfee --conf_target 3 0891630eac3c56a538b28947ebbf356530d550e68081ff2cdf4d10f2a210cb38:0, no error reported. After exactly 30 seconds the CPFP tx is created and instantly removed as “invalid”, it’s never broadcasted. Tried the same with --sat_per_vbyte with any number up to 20, same outcome.

Mar 11 11:09:28 fullnode lnd[1252982]: 2023-03-11 11:09:28.529 [INF] SWPR: Candidate sweep set of size=1 (+0 wallet inputs), has yield=0.00519214 BTC, weight=397
Mar 11 11:09:28 fullnode lnd[1252982]: 2023-03-11 11:09:28.531 [INF] SWPR: Sweep candidates at height=780267 with fee_rate=1886 sat/kw, yield 1 distinct txns
Mar 11 11:09:58 fullnode lnd[1252982]: 2023-03-11 11:09:58.534 [INF] SWPR: Candidate sweep set of size=1 (+0 wallet inputs), has yield=0.00519214 BTC, weight=397
Mar 11 11:09:58 fullnode lnd[1252982]: 2023-03-11 11:09:58.539 [INF] SWPR: Creating sweep transaction 199a1f155bbc523e8a9328177211f7deaf1145a756dfbebf38d4c4ec7e7b48d1 for 1 inputs (0891630eac3c56a538b28947ebbf356530d550e68081ff2cdf4d10f2a210cb38:0 (TaprootPubKeySpend)) using 1886 sat/kw, tx_weight=445, tx_fee=0.00000839 BTC, parents_count=0, parents_fee=0 BTC, parents_weight=0
Mar 11 11:09:58 fullnode lnd[1252982]: 2023-03-11 11:09:58.545 [INF] LNWL: Inserting unconfirmed transaction 199a1f155bbc523e8a9328177211f7deaf1145a756dfbebf38d4c4ec7e7b48d1
Mar 11 11:09:58 fullnode lnd[1252982]: 2023-03-11 11:09:58.637 [INF] LNWL: Removed invalid transaction: (*wire.MsgTx)(0x405e051580)({
Mar 11 11:09:58 fullnode lnd[1252982]:  Version: (int32) 2,
Mar 11 11:09:58 fullnode lnd[1252982]:  TxIn: ([]*wire.TxIn) (len=1 cap=15) {
Mar 11 11:09:58 fullnode lnd[1252982]:   (*wire.TxIn)(0x4053df5aa0)({
Mar 11 11:09:58 fullnode lnd[1252982]:    PreviousOutPoint: (wire.OutPoint) 0891630eac3c56a538b28947ebbf356530d550e68081ff2cdf4d10f2a210cb38:0,
Mar 11 11:09:58 fullnode lnd[1252982]:    SignatureScript: ([]uint8) <nil>,
Mar 11 11:09:58 fullnode lnd[1252982]:    Witness: (wire.TxWitness) (len=1 cap=1) {
Mar 11 11:09:58 fullnode lnd[1252982]:     ([]uint8) (len=64 cap=64) {
Mar 11 11:09:58 fullnode lnd[1252982]:      00000000  1f b9 b7 0b 8f 8c 52 45  23 1b e9 db 23 23 bd 8f  |......RE#...##..|
Mar 11 11:09:58 fullnode lnd[1252982]:      00000010  64 9f 65 cd a8 b0 72 4d  44 f2 87 cc ce 90 d3 13  |d.e...rMD.......|
Mar 11 11:09:58 fullnode lnd[1252982]:      00000020  c5 2b fb 12 ec d8 43 eb  bb 95 83 a3 04 57 3e 92  |.+....C......W>.|
Mar 11 11:09:58 fullnode lnd[1252982]:      00000030  de 53 55 7e 61 d1 9d 5e  60 17 b9 73 d1 21 f2 aa  |.SU~a..^`..s.!..|
Mar 11 11:09:58 fullnode lnd[1252982]:     }
Mar 11 11:09:58 fullnode lnd[1252982]:    },
Mar 11 11:09:58 fullnode lnd[1252982]:    Sequence: (uint32) 0
Mar 11 11:09:58 fullnode lnd[1252982]:   })
Mar 11 11:09:58 fullnode lnd[1252982]:  },
Mar 11 11:09:58 fullnode lnd[1252982]:  TxOut: ([]*wire.TxOut) (len=1 cap=15) {
Mar 11 11:09:58 fullnode lnd[1252982]:   (*wire.TxOut)(0x4038a97620)({
Mar 11 11:09:58 fullnode lnd[1252982]:    Value: (int64) 519123,
Mar 11 11:09:58 fullnode lnd[1252982]:    PkScript: ([]uint8) (len=34 cap=500) {
Mar 11 11:09:58 fullnode lnd[1252982]:     00000000  51 20 90 2d 57 a5 43 f7  cd 75 f1 55 58 03 89 fd  |Q .-W.C..u.UX...|
Mar 11 11:09:58 fullnode lnd[1252982]:     00000010  1c 7e 82 b3 4d f7 d7 96  23 73 fc a2 6c eb e5 7f  |.~..M...#s..l...|
Mar 11 11:09:58 fullnode lnd[1252982]:     00000020  58 b0                                             |X.|
Mar 11 11:09:58 fullnode lnd[1252982]:    }
Mar 11 11:09:58 fullnode lnd[1252982]:   })
Mar 11 11:09:58 fullnode lnd[1252982]:  },
Mar 11 11:09:58 fullnode lnd[1252982]:  LockTime: (uint32) 780267
Mar 11 11:09:58 fullnode lnd[1252982]: })
Mar 11 11:09:58 fullnode lnd[1252982]: 2023-03-11 11:09:58.640 [INF] NTFN: Canceling spend notification: spend_id=89, outpoint=0891630eac3c56a538b28947ebbf356530d550e68081ff2cdf4d10f2a210cb38:0, script=1 0000000000000000000000000000000000000000000000000000000000000000

Your environment

  • version of lnd 0.15.5
  • which operating system (uname -a on *Nix) Raspbian testing amd64
  • version of btcd, bitcoind, or other backend bitcoind v24.0.0
  • any other relevant environment details

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 46 (3 by maintainers)

Most upvoted comments

Finally worked… Thanks for your support guggero!

You need to bump the change output, so try lncli wallet bumpfee --sat_per_byte 20 e230f9f104421b9386354c7708ca9e0f9994e10f98f51ce76f1e32a320f71309:1 instead.

Hi everyone,

First of all, thank you all for the great effort in make LND running in our own home nodes. The help you provide is highly appreciated.

I’ve been facing a similar problem to this since yesterday, in particular with transaction: e230f9f104421b9386354c7708ca9e0f9994e10f98f51ce76f1e32a320f71309. I erroneously tip 1 sat/vB instead of 10, and even if I can see the transaction in the meempool, my node is not able to bump the fee.

What I am doing is the following:

  1. I increased the mempool (-maxmempool=512) and broadcast the channel funding TX again:

lncli wallet publishtx 0200000000010102e5d8c103d3f87c48567d0d20ad0cac7416b7046944530448a94eb784bca2320000000000000000000240420f0000000000220020ab5285033019fa81163922c9f7741c8b743507678648fb457772415a18ebaebe1ac62d00000000002251207c2c105f7b88b72377cab2fc6a21a1a4bb3a007e48e77db106a0bd867c22db2302483045022100c24aa8ff883fc6d943d5756ba6e0076a300b79d0ab4d8836fe329a36aa9a60be02205d8bfc69eb36e8adce582613b1a2b1f075a994d783b5580a3be08c894bb81a81012103ded649cbcd2b884983d572405e4f051274b896e6145280cc9c386937bd503ba200000000

Result: { "txid": "e230f9f104421b9386354c7708ca9e0f9994e10f98f51ce76f1e32a320f71309" }

  1. Then I try to bump the fee and this is what happens:

lncli wallet bumpfee --sat_per_byte 20 e230f9f104421b9386354c7708ca9e0f9994e10f98f51ce76f1e32a320f71309:0 Result: [lncli] rpc error: code = Unknown desc = the passed output does not belong to the wallet

  1. I’ve also tried with command lncli wallet releaseoutput e230f9f104421b9386354c7708ca9e0f9994e10f98f51ce76f1e32a320f71309:0

And the result is: [lncli] rpc error: code = Unknown desc = unknown output

Do you have any idea of to proceed to unlock this transaction?

@rkfg are you running a node w/ default settings? If so, then your node might have dropped the tx out of the mempool. You can increase the mempool size, then confirm that lnd does a rebroadcast on start up. After that, you should be able to do the fee bump.

bitcoind’s config file

Hi guggero, Just to make sure I am doing right, the file to edit is: bitcoin.conf? I use umbrel, the pathway for me is showing: ./app-data/bitcoin/data/bitcoin/bitcoin.conf

Thank you!

No, you need to edit your bitcoind’s config file and add maxmempool=512.

Oooooffff, it finally worked

Okay, nice!

Yeah, kudos to Roasbeef for figuring that out, I guess I got side tracked fearing it might be something worse. I think we can do the following on the lnd side:

  • Improve the logging (so we can actually see why a transaction is deemed invalid and is removed) --> I’m going to create a PR for that.
  • Make sure we re-publish all pending transactions regularly --> This is actually addressed by https://github.com/lightningnetwork/lnd/pull/7448 which is in the current RC of v0.16.0-beta.
  • Look at the mempoolminfee field of the getmempoolinfo RPC that was added with bitcoind v0.21.0 and reject creating any transactions below that fee. That won’t solve the issue for Neutrino though, as we don’t have access to that fee rate info. --> Going to create a new issue for this.

Oooooffff, it finally worked: https://mempool.space/tx/ebfc6b2247142c8490a20c4c9ff95fdccd4b9018f136496b32363935989c793a

Thanks, this rebroadcast and bump helped. I increased the mempool but I think it’s not really needed as I disabled persisting it on disk long ago, it takes enormous load on RPi when I restart bitcoind so just dropping it is much better. After restart it should have plenty of space before repopulating with new txs but anyway, I guess it wouldn’t eat all the remaining RAM with 512 Mb limit.

Okay, now we have a bunch of issues to fix when working in a congested environment. Unfortunately, it’s gonna be like that in the foreseeable future. One of the big problems is that I didn’t have this tx among my wallet txs until I rebroadcasted it. Kinda makes sense after resetting the wallet txs because channel open tx can’t be derived directly from the seed if I understand it right, it includes two node pubkeys, and in my case there are 2 channels and one change output. So if mempool.space didn’t save this tx I’m not sure how I’d have recovered it.

The enhancements I’d suggest:

  • provide a better error message if we’re unable to send a bump tx, tell the user to check if mempool is full because currently it totally looks like a bug, a valid tx is considered invalid for no apparent reason. Thanks @Roasbeef for finding the real reason for that!
  • broadcast the channel open tx before bumping (if it’s not currently done), idk if it’s easy to detect purging of such tx

Guess that’s it. Feel free to close this issue as it’s technically solved, or maybe it’s good to keep it around until a better mempool congestion mitigation is implemented.

The TX is likely being removed (as in the first log), as the input is an unknown, since the transaction that created the input (funding tx) isn’t in the mempool of your node.

Sent you a message on Nostr