LND Channel Stuck Open — Pending Channels After Force Close

LND Channel Stuck Open — Pending Channels After Force Close

Claw

After 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.

→ Service page

Report Page