Glossary / Lightning & layer 2
Base fee
- What is the base fee?
- The base fee is the flat amount a Lightning node charges for every HTLC it forwards, quoted in millisatoshi and advertised to the network in its channel_update message.
Every hop on a Lightning route charges two things, and the base fee is the half that ignores the amount. BOLT 7 carries it as a 32-bit field in millisatoshi, and a hop's total is the base plus the amount times its parts-per-million rate over 1,000,000. If you are withdrawing from an exchange over Lightning, the flat part is what makes small withdrawals proportionally expensive.
How it works
The base fee travels in channel_update, message type 258, the gossip message a node broadcasts to advertise what it charges for forwarding through one direction of one channel.
Two of that message's fields are the price. BOLT 7 says a node must set fee_base_msat to the base fee, in millisatoshi, it will charge for any HTLC, and must set fee_proportional_millionths to the amount, in millionths of a satoshi, it charges per transferred satoshi. Both are 32 bits wide, so the largest advertisable base fee is 4,294,967,295 millisatoshi, roughly 4.29 million satoshis. The requirements set no floor, so zero is equally legal. Each channel carries two updates, one per direction, so a hop can be cheap one way and expensive the other.
Note the wording: the charge is for any HTLC, not for any payment. Split a payment into four parts and each part pays the full base fee at every hop it crosses, which is why splitting a small payment costs more than sending it whole.
BOLT 7 works its own example. Four nodes, A, B, C and D, where B advertises 200 millisatoshi base and 2,000 millionths on its channel toward C. A pays C 4,999,999 millisatoshi through B, so it owes B:
200 + ( 4999999 * 2000 / 1000000 ) = 10199
A's HTLC to B therefore carries 5,010,198 millisatoshi. Send the same payment through D, which charges 400 base and 4,000 millionths, and the HTLC becomes 5,020,398. A pays nothing on its own channel into B, because a node does not charge itself, and C charges nothing because it is the destination, so a three-node route pays exactly one base fee.
Repricing means a fresh channel_update with a higher timestamp, and because propagation takes time, the specification says a node should keep honoring the old parameters for 10 minutes.
Where you see it
Base fees surface in your wallet's quote before you confirm, in a routing node's per-channel configuration, and in the published fee table of a Lightning app.
The flat part is what you feel on small amounts. At BOLT 7's example hop, 200 millisatoshi base and 2,000 millionths, forwarding 100 satoshis costs 400 millisatoshi and exactly half of that is flat.
The two-part shape reappears one layer up, in what consumer apps charge. Our Phoenix review records ACINQ's published table as 0.4 percent plus 4 satoshis to send, free to receive when you already hold the liquidity. Those 4 satoshis are a base fee under another name: on a 2,000 satoshi payment the flat part alone is 0.2 percent of the amount, and on a 500,000 satoshi payment it is under a thousandth of a percent. Test a wallet with tiny amounts and the flat component is most of what you are measuring.
Base fee vs fee rate
A base fee is a flat routing charge on Lightning, quoted in millisatoshi; a fee rate is an on-chain price for block space, quoted in satoshis per virtual byte.
They go to different people for different work. A base fee pays a node to forward one HTLC and never touches the blockchain, while a fee rate pays miners and decides whether your transaction enters a block at all. They also scale on unrelated axes: a fee rate tracks how many bytes your transaction occupies and ignores the amount it moves, while a base fee ignores both and leaves its proportional twin to follow the value. Opening or closing a channel costs a fee rate; everything in between costs base fees and proportional fees.