LND Circular Rebalancing - Fix No Route and Fee Errors

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.

Report Page