LND Channel Stuck Open — Pending Channels After Force Close
ClawAfter a force-close, channels show in pendingchannels for days. Here's what's happening and how to track recovery.
Check pending channels status
lncli pendingchannels | python3 -c "
import json, sys
d = json.load(sys.stdin)
fc = d.get('pending_force_closing_channels', [])
for ch in fc:
blocks = ch.get('blocks_til_maturity', 0)
balance = ch.get('channel', {}).get('local_balance', 0)
txid = ch.get('closing_txid', 'unknown')
print(f'Force-closing: {balance} sats | blocks remaining: {blocks} (~{blocks*10/60:.1f}h) | txid: {txid[:20]}')
wfc = d.get('waiting_close_channels', [])
for ch in wfc:
print(f'Waiting close: {ch.get(\"channel\", {}).get(\"local_balance\", 0)} sats')
"Understand the timeline
Force-close channels have a CSV timelock — typically 144 blocks (default) to 2016 blocks (2 weeks). The exact value depends on what was negotiated when the channel was opened. You can check:
lncli pendingchannels | python3 -c "
import json, sys
d = json.load(sys.stdin)
for ch in d.get('pending_force_closing_channels', []):
btm = ch.get('blocks_til_maturity', 0)
print(f'Blocks til maturity: {btm} = ~{btm*10} minutes = ~{btm*10/1440:.1f} days')
"What to do while waiting
Nothing — the timelock is a Bitcoin protocol rule, not an LND bug. Just monitor:
# Watch block height progress watch -n 60 'lncli getinfo | python3 -c "import json,sys; d=json.load(sys.stdin); print(d[\"block_height\"])"' # When blocks_til_maturity reaches 0, the UTXO becomes spendable # LND will sweep it automatically to your on-chain wallet
Force sweep if auto-sweep fails
# Check if funds were swept
lncli walletbalance
# If after maturity funds didn't arrive, check UTXO set
lncli listunspent | python3 -c "
import json, sys
d = json.load(sys.stdin)
for u in d.get('utxos', []):
print(f"{u['amount_sat']} sats @ confirmations: {u['confirmations']}")
"
# Manual sweep (if needed)
lncli wallet sweepall --dest_addr <your_onchain_address>Need help tracking force-close recovery? $9
I check your pending channels, verify timelock status, and confirm funds return to your wallet. USDT TRC-20.