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

Implement option_simple_close #2747

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft

Implement option_simple_close #2747

wants to merge 5 commits into from

Conversation

t-bast
Copy link
Member

@t-bast t-bast commented Sep 20, 2023

Implement option_simple_close as defined in lightning/bolts#1096

Hopefully this is the last time we change the mutual close protocol! And at some point that will let us entirely remove all the code supporting the two previous mutual close protocols (this is why I kept the code as separate as possible instead of trying to fit into the existing NEGOTIATING state).

@codecov-commenter
Copy link

codecov-commenter commented Sep 20, 2023

Codecov Report

Attention: 38 lines in your changes are missing coverage. Please review.

Comparison is base (c37df26) 85.85% compared to head (57ae172) 85.83%.
Report is 1 commits behind head on master.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2747      +/-   ##
==========================================
- Coverage   85.85%   85.83%   -0.02%     
==========================================
  Files         216      216              
  Lines       18201    18387     +186     
  Branches      749      769      +20     
==========================================
+ Hits        15626    15783     +157     
- Misses       2575     2604      +29     
Files Coverage Δ
...core/src/main/scala/fr/acinq/eclair/Features.scala 100.00% <100.00%> (ø)
...in/scala/fr/acinq/eclair/channel/ChannelData.scala 100.00% <100.00%> (ø)
...in/scala/fr/acinq/eclair/channel/Commitments.scala 96.83% <100.00%> (+0.01%) ⬆️
...a/fr/acinq/eclair/channel/fsm/CommonHandlers.scala 85.71% <100.00%> (+0.42%) ⬆️
...inq/eclair/channel/fund/InteractiveTxBuilder.scala 91.37% <100.00%> (ø)
...src/main/scala/fr/acinq/eclair/crypto/Sphinx.scala 100.00% <100.00%> (ø)
...n/scala/fr/acinq/eclair/io/PeerReadyNotifier.scala 69.56% <100.00%> (+0.33%) ⬆️
...n/scala/fr/acinq/eclair/json/JsonSerializers.scala 96.42% <ø> (ø)
.../scala/fr/acinq/eclair/payment/PaymentPacket.scala 90.90% <100.00%> (+0.08%) ⬆️
...scala/fr/acinq/eclair/payment/send/Recipient.scala 98.52% <100.00%> (ø)
... and 11 more

... and 5 files with indirect coverage changes

This feature adds two new messages:

- `closing_complete` sent after exchanging `shutdown`
- `closing_sig` sent in response to `closing_complete`
The spec allows the closer to use an OP_RETURN output if their amount is
too low when using `option_simple_close`.
We introduce a new `NEGOTIATING_SIMPLE` state where we exchange the
`closing_complete` and `closing_sig` messages, and allow RBF-ing previous
transactions and updating our closing script.

We stay in that state until one of the transactions confirms, or a force
close is detected. This is important to ensure we're able to correctly
reconnect and negotiate RBF candidates.

We keep this separate from the previous NEGOTIATING state to make it
easier to remove support for the older mutual close protocols once we're
confident the network has been upgraded.
We add `nLocktime` to `closing_complete`, to allow the initiator to
decide what value to use to provide better anonymity and protection
against fee sniping.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants