Skip to content

Commit

Permalink
Avoid stuck channels after fee increase
Browse files Browse the repository at this point in the history
Allow funders to dip into their channel reserve once to be able
to pay the increased commit tx fee for a pending HTLC.

This prevents channels from getting in a state where the channel is
unusable because of the increased commit tx cost of a new HTLC.

Fixes #728.
  • Loading branch information
t-bast committed Feb 24, 2020
1 parent dcbf858 commit 6773120
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions 02-peer-protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -794,9 +794,15 @@ is destined, is described in [BOLT #4](04-onion-routing.md).
#### Requirements

A sending node:
- MUST NOT offer `amount_msat` it cannot pay for in the
remote commitment transaction at the current `feerate_per_kw` (see "Updating
Fees") while maintaining its channel reserve.
- if it is _responsible_ for paying the Bitcoin fee:
- MUST NOT offer `amount_msat` it cannot pay for in the remote commitment
transaction at the current `feerate_per_kw` (see "Updating Fees") while
maintaining its channel reserve.
- if it is _not responsible_ for paying the Bitcoin fee:
- MUST NOT offer `amount_msat` if the remote cannot pay the fee for the
updated commitment transaction at the current `feerate_per_kw` (see
"Updating Fees"). In that case the remote may temporarily dip into its
channel reserve to pay the fee, but only for one pending non-dust HTLC.
- MUST offer `amount_msat` greater than 0.
- MUST NOT offer `amount_msat` below the receiving node's `htlc_minimum_msat`
- MUST set `cltv_expiry` less than 500000000.
Expand Down Expand Up @@ -863,6 +869,10 @@ seconds, and the protocol only supports an expiry in blocks.
specification; larger amounts are not necessary, nor wise, during the
bootstrap phase of the network.

The node _responsible_ for paying the Bitcoin fee should be allowed to dip into
its channel reserve to accomodate a fee increase, otherwise the channel may end
up in an unusable state (see [#728](https://github.com/lightningnetwork/lightning-rfc/issues/728)).

### Removing an HTLC: `update_fulfill_htlc`, `update_fail_htlc`, and `update_fail_malformed_htlc`

For simplicity, a node can only remove HTLCs added by the other node.
Expand Down

0 comments on commit 6773120

Please sign in to comment.