1
0
mirror of https://github.com/lightning/bolts.git synced 2024-11-19 01:50:03 +01:00
Commit Graph

214 Commits

Author SHA1 Message Date
Corné Plooy
13520a0e36 tlvs -> tlv_stream subsitution everywhere 2020-11-09 13:10:22 -06:00
Antoine Riard
01f29bf9fe
Fail channel in case of high-S remote signature reception (#807)
See CVE-2020-26895 for context.
2020-11-03 09:24:42 +01:00
t-bast
c5693d336d Update Bolt 11 default recommendation 2020-08-20 14:57:34 +09:30
t-bast
886bf7a430 More conservative cltv_expiry_delta recommendations
Many channels use a value below 6, which is really insecure (there are
more than 2k such channels on mainnet).

While less risky, there are more than 7k channels with a value below 12.

This indicates that the spec should probably make the risks a bit more
clear to help guide node operators.
2020-08-20 14:57:34 +09:30
Joost Jager
1739746afa
Anchor outputs
This commit extends the specification with a new commitment format that
adds two anchor outputs to the commitment transaction. Anchor outputs
are a safety feature that allows a channel party to unilaterally increase
the fee of the commitment transaction using CPFP and ensure timely
confirmation on the chain. There is no cooperation required from the
remote party.
2020-08-19 15:27:21 +02:00
Bastien Teinturier
61dd63aff3
Avoid stuck channels after fee increase with additional reserve (#740)
Add an additional "reserve" for funders on top of the real reserve to
avoid getting in a state where the channel is unusable because
of the increased commit tx cost of a new HTLC.

Requirements are only added for the funder sending an HTLC.
Fundee receiving HTLCs may choose to verify that funders apply
this, but it may lead to an unusable UX.

Fixes #728.
2020-04-27 22:17:49 +02:00
Bastien Teinturier
f068dd0d8d
Bolt 1: Specify that extensions to existing messages must use TLV (#754)
The spec already prepared a hook to add additional information to existing
messages (additional bytes at the end of a message must be ignored).

Since we're using TLV in many places, it makes sense to use that optional
additional space at the end of each message to allow an optional tlv stream.

This requires making a few previously optional fields mandatory:

- channel_reestablish commitment points: it makes sense to always include those
  regardless of whether `option_dataloss_protect` or `option_static_remotekey` are set.
- option_upfront_shutdown_script: if you're not using one, just set the length to 0.
  That field is moved to a TLV record because luckily, the resulting bytes are the same.
  This provides more flexibility to later remove the requirement of making this field mandatory.

No need to change the `channel_update`'s `htlc_maximum_msat` because
the `message_flags` encode its presence/absence.
It can still be either included or omitted without causing issues to the extension stream.
2020-03-31 08:58:22 +02:00
Bastien Teinturier
f38f559244
Revert "Bolt 1: Specify that extensions to existing messages must use TLV (#714)" (#753)
This reverts commit 6ac177f95c.
2020-02-29 15:00:42 +01:00
Bastien Teinturier
6ac177f95c
Bolt 1: Specify that extensions to existing messages must use TLV (#714)
The spec already prepared a hook to add additional information to existing
messages (additional bytes at the end of a message must be ignored).

Since we're using TLV in many places, it makes sense to use that optional
additional space at the end of each message to allow an optional tlv stream.

This requires making a few previously optional fields mandatory:

- channel_reestablish commitment points: it makes sense to always include those
  regardless of whether `option_dataloss_protect` or `option_static_remotekey` are set.
- option_upfront_shutdown_script: if you're not using one, just set the length to 0.
  That field is moved to a TLV record because luckily, the resulting bytes are the same.
  This provides more flexibility to later remove the requirement of making this field mandatory.

No need to change the `channel_update`'s `htlc_maximum_msat` because
the `message_flags` encode its presence/absence.
It can still be either included or omitted without causing issues to the extension stream.
2020-02-28 10:25:44 +01:00
araspitzu
38479359a1
Single-option large channel proposal (#596)
Add option to open large channels (wumbo).
2020-02-18 09:21:22 +01:00
Tim Ruffing
fb7102e034
Remove reference to DER encoding for public keys in compressed format (#742)
ECDSA signatures in Bitcoin are DER-encoded but public keys are not.

The compressed format for public keys is for example standardized in
Sections 2.3.3 and 2.3.4 of

  Standards for Efficient Cryptography, SEC 1: Elliptic Curve
  Cryptography, Certicom Research, Version 2, 2009,
  https://www.secg.org/sec1-v2.pdf
2020-02-17 11:00:30 +01:00
Rusty Russell
206084c939 BOLT 9: flatten feature fields.
We simply specify, in each case, where they will appear ("Context").

Because `globalfeatures` is already in use, we fold that into the
renamed `localfeatures` field to unify them (now called `features`),
but dissuade further use.

Note also: we REQUIRE minimal `features` field in
channel_announcement, since otherwise both sides of channel will not
agree and not be able to create their signatures!

Consider these theoretical future features:

`opt_dlog_chan`: a new channel type which uses a new discrete log HTLC
type, but can't support traditional HTLC:

* `init`: presents as odd (optional) or even (if traditional channels
  not supported)
* `node_announcement`: the same as above, so you can seek suitable peers.
* `channel_announcement`: presents as even (compulsory), since users need
  to use the new HTLCs.

`opt_wumbochan`: a node which allows channels > 2^24 satoshis:

* `init`: presents as odd (optional), or maybe even (if you only want
  giant channels)
* `node_announcement`: the same as above, so you can seek suitable peers.
* `channel_announcement`: not present, since size of channel indicates
  capacity.

`opt_wumbohtlc`: a channel which allows HTLCs > 2^32 millisatoshis:

* `init`: presents as odd (optional), or even (compulsory)
* `node_announcement`: the same as above, so you can seek suitable peers.
* `channel_announcement`: odd (optional) since you can use the channel
  without understanding what this option means.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Co-Authored-By: Bastien Teinturier <31281497+t-bast@users.noreply.github.com>
2019-11-25 19:34:23 +00:00
Janus Troelsen
5f57ee3689 BOLT-02: Fix link to channel_id section (#704) 2019-11-21 20:05:23 -08:00
ueno
3a0a7fd064 remove funding_locked future section 2019-11-20 00:12:44 +00:00
Rusty Russell
78bc516f96 BOLT 2: specify that you can't send funding_locked until you've checked the tx.
We might argue this does not apply if you set `minimum_depth` to 0, since
you're assuming trust (TurboChannels-style), but it needs to be specified.

See: CVE-2019-12998 / CVE-2019-12999 / CVE-2019-13000
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-10-03 00:41:12 +00:00
Rusty Russell
2afe3559e8 option_static_remotekey: final draft.
This separates out the static remotekey changes from the more ambitious
option_simplified_commitment (which also included pushme outputs and
bring-your-own-fee for HTLC outputs).

As per http://www.erisian.com.au/meetbot/lightning-dev/2019/lightning-dev.2019-09-02-20.06.html

Thanks to everyone for feedback: @araspitzu @roasbeef @bitconner

Suggested-by: @roasbeef
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-09-26 06:19:58 +00:00
Dimitris Apostolou
3476c9b25a Fix typos 2019-09-26 06:12:41 +00:00
Nadav Kohen
8555709811 BOLT 3: Explicit description of implicitly enforced timelocks on HTLC outputs (#601)
* Added descriptions of how a 2-of-2 multisignature verification is used for enforcing timelocks when timing out on-chain offered HTLCs as well as spending on-chain received HTLCs in the success case.
2019-08-19 21:52:09 +00:00
lisa neigut
300f7a6e61 option_data_loss_protect: concretely define
`my_current_per_commitment_point`

Make it more obvious what the expected value of
`my_current_per_commitment_point` is.
2019-08-09 12:39:18 -05:00
Hiroki Gondo
44c6071d18 BOLT 2: correct next_remote_revocation_number to next_revocation_number (#652) 2019-07-29 07:31:07 +00:00
Rusty Russell
950b2f5481 BOLT 2: remove local/remote from reestablish field names.
(No spec change, just wording)

The "local" and "remote" here are just *confusing*.  Each side says
where it's at, and the other side retransmits based on that.

We could call it 'number_of_next_commitment_i_expect_to_receive' and
'number_of_next_revocation_i_expect_to_receive' but that's getting
silly.

These names were a major source of confusion while writing tests!

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-07-22 16:47:19 -05:00
Rusty Russell
6f6ea63233 BOLT 1,2,4,7: remove pubkey fundamental type in favor of point.
And remove `secret` and `preimage` types in favor of open-coding.

Agreed-at: http://www.erisian.com.au/meetbot/lightning-dev/2019/lightning-dev.2019-07-08-20.05.html

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-07-09 00:48:46 +00:00
Rusty Russell
6639cef095 Spec: use explicit types, not just bytelengths for fields.
It's trivial to make types->lengths, but not so much the other way.

The types I used here are the ones I found useful in implementation, and
I think add some clarity, though we can certainly argue about them.

There's no normative changes to the spec in here.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-07-09 00:48:46 +00:00
Jorge TimĂ³n
309e86d471 BOLT2: past fulfillment deadline fails channel 2019-05-21 22:19:13 +02:00
David A. Harding
d42b4e2ab6 BOLT2: rephrase cltv_expiry_delta text about accepting HTLCs
Saying "the risk is only to the node *accepting* the HTLC" is confusing
because merely accepting an HTLC is risk-free.  The risk comes from
accepting *responsibility to route the payment*, i.e. offering an HTLC
of your own in the next channel on the path, where a too-small
difference in the HTLC values could end up with you cheated out of a
payment.

This revised paragraph hopefully makes that clearer.
2019-04-29 23:20:37 +02:00
Simon Vrouwe
090af1a22d BOLT 2: fix sentence in introduction of chapter Channel Establishment 2019-02-18 10:09:32 +00:00
Orfeas Stefanos Thyfronitis Litos
eabfe2d7c5 Rephrase Forwarding HTLCs Requirements
Uses more specific and consistent language ("the"/"that" instead of "an"
where possible). Also helps avoid confusion with unrelated HTLCs that
serve other payments but are shared by the same two nodes.
2019-02-04 23:45:50 +00:00
Antoine Riard
6bd1981fc0 Clarify ownership of max_htlc limits at receiving update_add_htlc 2019-02-04 23:44:45 +00:00
Orfeas Stefanos Thyfronitis Litos
945051e4b0 Clarify behavior of id field in update_add_htlc
Clarify that the id value is not reset after an update is complete
2019-01-22 21:44:44 +01:00
Pierre-Marie Padiou
1f4538cf9b Update 02-peer-protocol.md
Co-Authored-By: rustyrussell <rusty@rustcorp.com.au>
2019-01-22 21:43:58 +01:00
Rusty Russell
a57ff00e93 BOLT #2: order htlc_signatures by BIP69 + increasing CLTV.
We express it has how the outputs are ordered, but the only way you can
detect that is by the htlc_signatures order, which is the part which really
matters.

I finally reproduced this, BTW, which is why I'm digging it up!

Closes: #448
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2019-01-22 21:43:58 +01:00
Hiroki Gondo
f6df488373 BOLT 2: revocation number not revocation hash. 2019-01-15 22:56:42 +00:00
Hiroki Gondo
f85e75be65 BOLT 2: add a requirement for next_local_commitment_number. 2019-01-15 22:55:51 +00:00
Hiroki Gondo
655a8b3eae BOLT 2: fix a requirement mistake of next_remote_revocation_number. 2019-01-15 22:55:51 +00:00
Hiroki Gondo
74bf24be5f BOLT 2: complete the message names in the diagram of Normal Operation. 2019-01-07 20:17:58 +01:00
Hiroki Gondo
c423308886 BOLT 0,2,5: closing transaction not (mutual) close transaction.
Be consistent.
2019-01-07 20:17:45 +01:00
Hiroki Gondo
7f68780c20 BOLT 2: delete unnecessary space. 2019-01-07 20:17:31 +01:00
Hiroki Gondo
353721b65e BOLT 2: update not HTLC in Normal Operation.
In the description here, the target is not only `HTLC`
but also general `update`.
2019-01-07 20:17:31 +01:00
Rusty Russell
a07dc3df3b BOLT 2: add missing spellcheck words, change 'funding txo' to 'funding output'.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2018-12-10 02:46:07 +00:00
Matt Corallo
fa52e74eac Clarify temporary_channel_id's acceptable usages 2018-12-10 02:46:07 +00:00
Rusty Russell
20524d4109
BOLT 2: advise ping-before-commitment_signed on quiescent connections. (#508)
This seems to be a cause of stuck HTLCs on the network: c-lightning has
done this for a while now (since 0.6.1).

[ Minor wording clarification merged --RR ]
Decided-at: Adelaide Summit 2018
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2018-11-29 04:32:11 +00:00
Hiroki Gondo
ae8c78c8a8 BOLT 2: Hashed Time Locked Contracts not Hash TimeLocked Contracts.
Be consistent.
ref. 00-introduction.md#glossary-and-terminology-guide
2018-11-29 04:24:47 +00:00
lisa neigut
a307f3b282 peer-protocol: periods make meaning clearer. sometimes. 2018-11-29 04:12:06 +00:00
lisa neigut
d923df5e43 peer-protocol: fixup punctuation to clarify meaning
The punctuation in this case made it hard to understand.
2018-11-29 04:12:06 +00:00
lisa neigut
9b5c3df9ce peer-protocol: explain what a commitment number is, in situ
Although commitment numbers are explained in the
[glossary](00-introduction.md#glossary-and-terminology-guide),
it's helpful to re-iterate at the place that it's first used.
2018-11-29 04:12:06 +00:00
lisa neigut
1bbcd5552b peer-protocol: fix tense use -> used 2018-11-29 04:12:06 +00:00
lisa neigut
c572c1c42a peer-protocol: add missing word
Missing `to`
2018-11-29 04:12:06 +00:00
lisa neigut
0087a64244 peer-protocol: Add link to channel failure in 05
To 'fail a channel' is mentioned multiple places in this
BOLT without any mention or definition of what that means.

This adds a link to the relevant text in BOLT 05 in the
first place that we mention 'fail the channel'.
2018-11-29 04:12:06 +00:00
lisa neigut
2f72c225ea peer-protocol: Add short note about channel_id
Clarify association between temp_id and channel_id, and make
explicit why we have to wait for the funding transaction.
2018-11-29 04:12:06 +00:00
lisa neigut
05a4d18c1e peer-protocol: Add links to referenced BOLTs
Add links to make it clearer that these two actions:
'authentication' and 'initialization' are specified elsewhere.
2018-11-29 04:12:06 +00:00