LND Fee Management — Set Base Fee and Fee Rate for Routing

LND Fee Management — Set Base Fee and Fee Rate for Routing

LND Debug Guide

Problem: How to Set Routing Fees in LND

If your LND node routes payments, fee settings determine how much you earn. Too high and nobody routes through you. Too low and you earn nothing meaningful.

Understanding LND Fee Structure

LND uses two fee components per channel:

  • base_fee_msat: flat fee per payment (in millisatoshis)
  • fee_rate: proportional fee (parts per million of payment amount)

Total fee = base_fee_msat + (amount_msat * fee_rate / 1,000,000)

Check Current Fees

lncli feereport
lncli listchannels | jq '.[].local_constraints'

Update Fees for a Specific Channel

# Update fees for a channel
lncli updatechanpolicy \
  --base_fee_msat 1000 \
  --fee_rate 0.000100 \
  --time_lock_delta 40 \
  --chan_point TXID:OUTPUT_INDEX

Update Fees for All Channels at Once

lncli updatechanpolicy \
  --base_fee_msat 1000 \
  --fee_rate 0.000100 \
  --time_lock_delta 40 \
  --all

Common Fee Strategy Settings

Passive/sink node (cheap, high volume):

--base_fee_msat 0
--fee_rate 0.000001  # 1 ppm

Balanced routing node:

--base_fee_msat 1000  # 1 sat flat
--fee_rate 0.000100  # 100 ppm

Premium routing (scarce liquidity):

--base_fee_msat 2000
--fee_rate 0.000500  # 500 ppm

Set Fees via lnd.conf (Default for New Channels)

[Bitcoin]
defaultchanconfs=3

[routing]
fee.basefee=1000
fee.feerate=100

Monitor Fee Earnings

# View forwarding history
lncli fwdinghistory --start_time='1621000000'

# See earned fees
lncli fwdinghistory | jq '.forwarding_events[] | .fee_msat' | paste -sd+ | bc

Tools for Fee Optimization

  • bos (Balance of Satoshis): automated fee management with charge-lnd
  • charge-lnd: rule-based automatic fee setting
  • RTL (Ride the Lightning): GUI for fee management
  • LNDg: analytics and automated fee management

charge-lnd Example Config

[default]
strategy = static
base_fee_msat = 1000
fee_ppm = 100

[expensive-outbound]
chan.min_local_balance = 0.8
strategy = static
fee_ppm = 500

Inbound vs Outbound Considerations

LND currently only supports outbound fee setting. Inbound fees (NIP-XXX) are in development. To control flow direction, use fee asymmetry: set high fees on channels you want to discourage routing through.

Troubleshooting: Fees Not Updating

# Verify fee update broadcast
lncli describegraph | jq '.edges[] | select(.channel_id=="YOUR_CHAN_ID") | .node1_policy'

# Force gossip refresh
lncli updatechanpolicy --all --base_fee_msat 1000 --fee_rate 0.0001 --time_lock_delta 40

Fee updates propagate via gossip and may take up to 30 minutes to appear across the network.

Report Page