<p>It is not necessary to use htlcs in the case of a direct payment. However as the protocol was designed with the idea to have a network of payment channels. This should allow multi hop atomicity of payments via htlcs.  For that the process with the htlcs to move forward the state in the channel operation protocol were necessary</p>
<p>I think from a design perspective it was cleaner to reuse this protocol for direct payments instead of implementing two protocols and make case distinctions</p>

CC BY-SA 4.0
2021-01-05T19:45:34.273Z
I guess the added complexity with having both would be signaling when it is payment directly to B and when it is a routed payment through B. You wouldn't use the Lightning protocol if you were never interested in the routed aspect.
Michael Folkson
CC BY-SA 4.0
2021-01-05T19:41:45.087Z
2021-01-05T19:41:45.087Z
Rene Pickhardt
<p>If Alice opens a channel to Bob and sends a payment directly to Bob, the following messages are exchanged:</p>
<pre><code>    +-------+                            +-------+
    |       |---- update_add_htlc ------&gt;|       |
    |       |---- commitment_signed ----&gt;|       |
    |       |                            |       |
    |       |&lt;--- revoke_and_ack --------|       |
    |       |&lt;--- commitment_signed -----|       |
    |       |                            |       |
    |       |---- revoke_and_ack -------&gt;|       |
    |       |                            |       |
    |   A   |                            |   B   |
    |       |                            |       |
    |       |&lt;--- update_fulfill_htlc ---|       |
    |       |&lt;--- commitment_signed -----|       |
    |       |                            |       |
    |       |---- revoke_and_ack -------&gt;|       |
    |       |---- commitment_signed ----&gt;|       |
    |       |                            |       |
    |       |&lt;--- revoke_and_ack --------|       |
    +-------+                            +-------+
</code></pre>
<p>(source: running <code>lnd</code> with <code>TRACE</code> logging and inspecting the logs)</p>
<p><strong>Why is it necessary to use HTLCs at all, instead of just exchanging updated commitment transactions directly?</strong></p>
<p>For example:</p>
<pre><code>    +-------+                            +-------+
    |       |---- commitment_signed ----&gt;|       |
    |       |                            |       |
    |       |&lt;--- revoke_and_ack --------|       |
    |   A   |                            |   B   |
    |       |&lt;--- commitment_signed -----|       |
    |       |                            |       |
    |       |---- revoke_and_ack -------&gt;|       |
    +-------+                            +-------+
</code></pre>

<lightning-network>
Why use `update_add_htlc` when paying directly across a channel?
Elliott
# Why use `update_add_htlc` when paying directly across a channel?

(Asked by: username_0 on 2021-01-05)

If Alice opens a channel to Bob and sends a payment directly to Bob, the following messages are exchanged:

```
    +-------+                            +-------+
    |       |---- update_add_htlc ------>|       |
    |       |---- commitment_signed ---->|       |
    |       |                            |       |
    |       |<--- revoke_and_ack --------|       |
    |       |<--- commitment_signed -----|       |
    |       |                            |       |
    |       |---- revoke_and_ack ------->|       |
    |       |                            |       |
    |   A   |                            |   B   |
    |       |                            |       |
    |       |<--- update_fulfill_htlc ---|       |
    |       |<--- commitment_signed -----|       |
    |       |                            |       |
    |       |---- revoke_and_ack ------->|       |
    |       |---- commitment_signed ---->|       |
    |       |                            |       |
    |       |<--- revoke_and_ack --------|       |
    +-------+                            +-------+

```

(source: running `lnd` with `TRACE` logging and inspecting the logs)

**Why is it necessary to use HTLCs at all, instead of just exchanging updated commitment transactions directly?**

For example:

```
    +-------+                            +-------+
    |       |---- commitment_signed ---->|       |
    |       |                            |       |
    |       |<--- revoke_and_ack --------|       |
    |   A   |                            |   B   |
    |       |<--- commitment_signed -----|       |
    |       |                            |       |
    |       |---- revoke_and_ack ------->|       |
    +-------+                            +-------+

```

**Tags:** lightning-network


---

## 1 answers

### Answer by username_1 on 2021-01-05. Score: 1 | Accepted answer

It is not necessary to use htlcs in the case of a direct payment. However as the protocol was designed with the idea to have a network of payment channels. This should allow multi hop atomicity of payments via htlcs. For that the process with the htlcs to move forward the state in the channel operation protocol were necessary

I think from a design perspective it was cleaner to reuse this protocol for direct payments instead of implementing two protocols and make case distinctions

> **Comments:**
> **username_2**: I guess the added complexity with having both would be signaling when it is payment directly to B and when it is a routed payment through B. You wouldn't use the Lightning protocol if you were never interested in the routed aspect.  

---

