LND Channel Reserve Issues----Fix Reserve Balance Errors

LND Channel Reserve Issues----Fix Reserve Balance Errors

LND Troubleshooting Guide

What is Channel Reserve?

LND requires each side to keep a minimum balance (channel reserve) in every channel. This prevents cheating by ensuring both parties always have something to lose.

Default Reserve Amount

# Default: 1% of channel capacity
# Example: 1M sat channel = 10,000 sat reserve

# Check your reserve:
lncli listchannels | grep -E "local_balance|remote_balance|commit_fee|local_chan_reserve"

Error: "insufficient funds" Despite Having Balance

If you see this error when channel balance looks fine, the reserve is likely being held back.

# Spendable balance = local_balance - local_chan_reserve_sat - commit_fee
# NOT the full local_balance

Check Actual Spendable Amount

lncli listchannels | python3 -c "
import json, sys
channels = json.load(sys.stdin)[channels]
for c in channels:
    reserve = int(c.get(local_chan_reserve_sat, 0))
    local = int(c[local_balance])
    commit = int(c.get(commit_fee, 0))
    spendable = local - reserve - commit
    print(f\"{c[chan_id]}: local={local} reserve={reserve} spendable={max(0,spendable)}\")
"

Common Causes

- New channel: both sides hold reserve from start

- Small channel: reserve is large relative to balance

- After many payments: commit fee changes affect spendable amount

Cannot Drain Channel to Zero

# Reserve stays even when closing
# To get reserve back: cooperatively close channel
# Force close = CSV delay before you get reserve back
lncli closechannel --chan_point <channel_point>

Best Practice

Use lncli channelbalance to see aggregate spendable balance. For per-channel, always subtract local_chan_reserve_sat and commit_fee from local_balance.

Report Page