Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bLIP-0025: Allow forwarding HTLCs that underpay the onion encoded value #25

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ For more detail on the process, please read [bLIP-0001](./blip-0001.md) and
| [10](./blip-0010.md) | Podcasting 2.0 | Satoshis Stream | Active |
| [11](./blip-0011.md) | NameDesc | Hampus Sjöberg | Active |
| [17](./blip-0017.md) | Hosted Channels | Anton Kumaigorodskiy | Active |
| [25](./blip-0025.md) | Forward less than onion value | Valentine Wallace | Active |
| [32](./blip-0032.md) | Onion Message DNS Resolution | Matt Corallo | Active |
7 changes: 7 additions & 0 deletions blip-0002.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,13 @@ The following table contains extension tlv fields for the `payment_onion_payload
| 7629169 | `podcasting_2_0` | [bLIP 10](./blip-0010.md) |
| 5482373484 | `keysend_preimage` | [bLIP 3](./blip-0003.md) |

#### `update_add_htlc`

The following table contains extension tlv fields for the `update_add_htlc` message:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
The following table contains extension tlv fields for the `update_add_htlc` message:
The following table contains extension TLV fields for the `update_add_htlc` message:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skipped this to keep consistency with the rest of the file.


| Type | Name | Link |
|-------|-----------------------------|--------------------------------|
| 65537 | `extra_fee` | [bLIP 25](./blip-0025.md) |
valentinewallace marked this conversation as resolved.
Show resolved Hide resolved

#### `ping`

Expand Down
63 changes: 63 additions & 0 deletions blip-0025.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
```
bLIP: 25
Title: Allow forwarding HTLCs with less value than the onion claims to pay
Status: Draft
Author: Valentine Wallace <[email protected]>
Created: 2023-05-22
License: CC0
```

## Abstract

Penultimate hops in lightning payment paths may want to take an extra fee from the payee's final
received value. To do so, they can simply forward less than the amount encoded in the onion by the
sender, and specify the exact fee they took in a new `update_add_htlc` TLV for the receiver to
verify.

## Copyright

This bLIP is licensed under the CC0 license.

## Specification

We define a TLV field for `update_add_htlc` that allows a relaying node to
relay a smaller amount than the amount encoded in the onion:

1. `tlv_stream`: `update_add_htlc_tlvs`
2. types:
1. type: 65537 (`extra_fee`)
2. data:
- [`u64`:`amount_msat`]

The writer:
* MUST set `extra_fee` to the amount of extra fee they took from the receiver's final value

The receiver:
* MUST fail the HTLC if they did not expect an extra fee to be taken or if the extra fee taken is
too high
* MUST either accept or reject the HTLC as if it had received `htlc_value + extra_fee`

## Motivation

For context, it is expected that many lightning users will be connected to the lightning network via
Lightning Service Providers (LSPs), who are responsible for managing channel liquidity on end users'
behalf.

Often, users are onboarded to these services via a just-in-time inbound channel when they first
receive a payment. However, this channel open costs money, and so liquidity providers may want to
take an extra fee so that users can help bear the cost of this initial on-chain fee.

## Rationale

While it would be possible to avoid the extra TLV record if receivers could be trusted to calculate
that the fee taken by the penultimate hop is as-expected, in practice this may be tricky to get
right. If there were a bug in this logic, a sender could exploit it by forwarding less than the
invoice's expected value, and receive proof-of-payment that they paid the full value.

## Implementation Notes
See
<https://github.com/BitcoinAndLightningLayerSpecs/lsp/tree/main/LSPS2#3--invoice-generation>
for invoice requirements if this feature is being used in the JIT channel context.

## Reference Implementations
LDK: <https://github.com/lightningdevkit/rust-lightning/pull/2319>