LND Channel Reserve Issues----Fix Reserve Balance Errors
LND Troubleshooting GuideWhat 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.