LND Circular Rebalancing - Fix No Route and Fee Errors
What Is LND Circular Rebalancing?
Circular rebalancing sends a payment from your node back to itself through a route, moving liquidity from one channel to another without closing. Useful when some channels are depleted on one side.
Common Errors
- unable to route payment to destination: no path found
- payment failed: TEMPORARY_CHANNEL_FAILURE
- fee exceeds maximum: rebalance not economical
- circular payment rejected: loop detected
Manual Circular Rebalance via lncli
# Generate invoice from your own node INVOICE=$(lncli addinvoice --amt 100000 | python3 -c "import json,sys; print(json.load(sys.stdin)['payment_request'])") # Pay it via a specific outgoing channel lncli payinvoice --fee_limit_sat 500 \ --outgoing_chan_id <depleted_channel_id> \ $INVOICE
Use bos (Balance of Satoshis)
# Install bos npm install -g balanceofsatoshis # Rebalance: move 200k sats from chan A to chan B bos rebalance \ --out <outgoing_peer_pubkey> \ --in <incoming_peer_pubkey> \ --amount 200000 \ --max-fee-rate 500
Use charge-lnd for Auto-Rebalancing
# charge-lnd config example [rebalance] strategy = proportional min_htlc_msat = 1000 base_fee_msat = 0 fee_rate = 100 # Run charge-lnd -c charge.config
Tips
- Keep max-fee-rate low (100-500 ppm) to stay profitable
- Rebalance during low-fee periods (nights/weekends)
- Use --avoid to skip expensive or unreliable peers
- Check channel balance with: lncli listchannels | python3 -c "import json,sys; [print(c['chan_id'], c['local_balance'], '/', c['capacity']) for c in json.load(sys.stdin)['channels']]"
Need help with Lightning rebalancing strategy? DM on Nostr.