ChainUnfold
AN INTERACTIVE EXPLANATION4 min read

Why can a Lightning node send but not receive?

The same channel can have plenty of capacity and very little room for a payment in one direction.

By chainunfold Reviewed 23 September 2026Revision 1

What you’ll be able to explain

  • Predict whether a direct-channel payment can move in each direction under a bounded balance model.

Helpful first: How a Lightning channel works

01 / Understand

Your balance is only one side of the story

Your node shows 80,000 sats on its side of a channel. The peer’s side holds 20,000. Together they make 100,000 sats of capacity. A customer now tries to pay you 50,000 sats through that direct channel.

It is tempting to say, “There is plenty of room; the channel is worth 100,000.” But the incoming payment has to move value from the peer’s side to yours. In our simplified model, only 20,000 is available on that side. The attempted 50,000 cannot be transferred.

We call your side local and the peer’s side remote. Under this model, local balance is your sending capacity, while remote balance is your receiving capacity. These are directional quantities, not two separate piles that you own.

Sending creates room to receive

Send 10,000 sats through the channel. The split changes from 80,000/20,000 to 70,000/30,000. You can now receive up to 30,000 in this model, because more of the fixed total sits on the remote side.

Receiving shifts the split back the other way. Neither action automatically increases total capacity. It changes which direction can carry the next payment.

Before using the controls, predict whether sending 30,000 from the initial state makes a later 50,000 receipt possible. Then test the sequence. The first action leaves 50,000 on each side; the second uses the entire remote side in the simplified model.

The idea, at a glance

Local · 80,000

Available to send in the simplified model.

Remote · 20,000

Available to receive through this direct channel.

Capacity · 100,000

The fixed sum, not a directional promise.

A payment consumes capacity in one direction and opens it in the other.

Which way can the sats move?

Single-channel model

Predict first: You have 80,000 sats locally. Can you receive 50,000 more through this channel?

Your side · local

80,000

sats available to send

Peer’s side · remote

20,000

sats available to receive

Fixed capacity · 100,000 sats

Static example & model limits

Start with 80,000 local and 20,000 remote. Sending 10,000 leaves 70,000 local and 30,000 remote. Receiving 50,000 from the initial state fails because only 20,000 is on the remote side. Sending shifts capacity toward receiving; it does not increase total capacity.

This is one direct channel, using whole sats. Reserves, fees, pending HTLCs, routing, channel availability, commitment formats and closures are omitted. A real node’s usable liquidity is more constrained than these balances.

02 / Explore

The model’s answer is intentionally bounded

Real channel balances are constrained by more than the two displayed numbers. Reserves, commitment and routing fees, pending HTLCs, minimum and maximum payment constraints, and channel availability can reduce usable liquidity. Lightning commonly accounts internally in millisatoshis; this teaching model uses whole sats.

A multi-hop route adds another distinction: local receiving capacity is not proof of a working route from every sender. Other channels along the path need enough capacity in the appropriate directions, and their participants must be available under the payment’s conditions.

The diagram therefore answers a precise question: Does this one idealized direct channel have enough value on the side from which the requested transfer starts? It does not diagnose a live node or recommend a liquidity purchase.

A failed transfer must leave state unchanged

An attempted 50,000 receipt from the initial 80,000/20,000 state is rejected. The interface tells you which side was short. Both balances remain unchanged, so a failed experiment cannot quietly manufacture liquidity.

Reset restores the known initial state. Use it between predictions so you can tell whether an outcome comes from your new input or a prior successful transfer.

03 / Build

Write the invariant before the renderer

The two core checks are simple:

local + remote = 100,000
local >= 0 and remote >= 0

Sending n subtracts n from local and adds it to remote. Receiving does the reverse. A transfer is allowed only if n is a positive whole number and the source side has at least n.

Try these cases from the initial state:

Action Expected result
Receive 50,000 Reject; remain 80,000/20,000
Send 10,000 Accept; become 70,000/30,000
Receive 30,000 after that send Accept; become 100,000/0
Receive 1 more Reject; remain 100,000/0

Reaching a zero balance is allowed by the teaching arithmetic, not a claim about a real channel’s reserves. A useful unit test checks both conservation and unchanged state after rejection. Testing only the total would miss invalid negative balances.

Pause & explain

Why does sending 10,000 sats increase this model’s receiving capacity without increasing total capacity?

Try explaining it in your own words before opening the answer.

Compare your explanation

The transfer moves 10,000 from local to remote. The peer’s side rises from 20,000 to 30,000, allowing more value to move back later. Local plus remote remains 100,000.

Sources & scope

Primary references behind this explanation. Worked examples and diagrams are original teaching material.

  1. 01
    BOLT 2 — Peer protocol ↗

    Channel establishment, updates, reserves, and constraints that the single-channel balance model omits.

  2. 02
    BOLT 3 — Bitcoin transaction handling ↗

    Commitment transactions and on-chain enforcement. The article simplifies transaction formats and fee accounting.

Where this explanation stops

  • Single direct channel only; no real payment or node connection.
  • Excludes reserves, fees, HTLCs, routing, availability, closure and channel-type differences.

Keep unfolding

How a Lightning channel works On-chain and Lightning payments: what changes for the user?