You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Peers need to check each other's dust limit (#894)
Since HTLCs below this amount will not appear in the commitment tx, they
are effectively converted to miner fees. The peer could use this to grief
you by broadcasting its commitment once it contains a lot of dust HTLCs.
Add network dust thresholds computation details, as implemented in Bitcoin
Core's default relay policy.
Drop non-segwit support in shutdown: this allows dust limit to go as low
as 354 sats without creating relay issues with default node policies.
We add a requirement that dust limit cannot be lower than 354 sats.
This ensures implementers don't have to figure this subtlety on their own.
Fixes#696 and #905
Copy file name to clipboardExpand all lines: 02-peer-protocol.md
+25-12Lines changed: 25 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -258,7 +258,7 @@ The receiving node MAY fail the channel if:
258
258
- it considers `max_htlc_value_in_flight_msat` too small.
259
259
- it considers `channel_reserve_satoshis` too large.
260
260
- it considers `max_accepted_htlcs` too small.
261
-
- it considers `dust_limit_satoshis` too small and plans to rely on the sending node publishing its commitment transaction in the event of a data loss (see [message-retransmission](02-peer-protocol.md#message-retransmission)).
261
+
- it considers `dust_limit_satoshis` too large.
262
262
263
263
The receiving node MUST fail the channel if:
264
264
- the `chain_hash` value is set to a hash of a chain that is unknown to the receiver.
@@ -269,6 +269,7 @@ The receiving node MUST fail the channel if:
269
269
-`funding_pubkey`, `revocation_basepoint`, `htlc_basepoint`, `payment_basepoint`, or `delayed_payment_basepoint`
270
270
are not valid secp256k1 pubkeys in compressed format.
271
271
-`dust_limit_satoshis` is greater than `channel_reserve_satoshis`.
272
+
-`dust_limit_satoshis` is smaller than `354 satoshis` (see [BOLT 3](03-transactions.md#dust-limits)).
272
273
- the funder's amount for the initial commitment transaction is not sufficient for full [fee payment](03-transactions.md#fee-payment).
273
274
- both `to_local` and `to_remote` amounts for the initial commitment transaction are less than or equal to `channel_reserve_satoshis` (see [BOLT 3](03-transactions.md#commitment-transaction-outputs)).
274
275
-`funding_satoshis` is greater than or equal to 2^24 and the receiver does not support `option_support_large_channel`.
@@ -279,7 +280,7 @@ The receiving node MUST NOT:
279
280
280
281
#### Rationale
281
282
282
-
The requirement for `funding_satoshis` to be less than 2^24 satoshi was a temporary self-imposed limit while implementations were not yet considered stable, it can be lifted by advertising `option_support_large_channel`.
283
+
The requirement for `funding_satoshis` to be less than 2^24 satoshi was a temporary self-imposed limit while implementations were not yet considered stable, it can be lifted by advertising `option_support_large_channel`.
283
284
284
285
The *channel reserve* is specified by the peer's `channel_reserve_satoshis`: 1% of the channel total is suggested. Each side of a channel maintains this reserve so it always has something to lose if it were to try to broadcast an old, revoked commitment transaction. Initially, this reserve may not be met, as only one side has funds; but the protocol ensures that there is always progress toward meeting this reserve, and once met, it is maintained.
285
286
@@ -295,6 +296,10 @@ would be eliminated as dust. The similar requirements in
295
296
`accept_channel` ensure that both sides' `channel_reserve_satoshis`
296
297
are above both `dust_limit_satoshis`.
297
298
299
+
The receiver should not accept large `dust_limit_satoshis`, as this could be
300
+
used in griefing attacks, where the peer publishes its commitment with a lot
301
+
of dust htlcs, which effectively become miner fees.
302
+
298
303
Details for how to handle a channel failure can be found in [BOLT 5:Failing a Channel](05-onchain.md#failing-a-channel).
299
304
300
305
### The `accept_channel` Message
@@ -353,7 +358,6 @@ The receiver:
353
358
- if `channel_type` is set, and `channel_type` was set in `open_channel`, and they are not equal types:
354
359
- MUST reject the channel.
355
360
356
-
357
361
Other fields have the same requirements as their counterparts in `open_channel`.
358
362
359
363
### The `funding_created` Message
@@ -543,12 +547,9 @@ A sending node:
543
547
- MUST send the same value in `scriptpubkey`.
544
548
- MUST set `scriptpubkey` in one of the following forms:
2.`OP_HASH160``20` 20-bytes `OP_EQUAL` (pay to script hash), OR
549
-
3.`OP_0``20` 20-bytes (version 0 pay to witness pubkey hash), OR
550
-
4.`OP_0``32` 32-bytes (version 0 pay to witness script hash), OR
551
-
5. if (and only if) `option_shutdown_anysegwit` is negotiated:
550
+
1.`OP_0``20` 20-bytes (version 0 pay to witness pubkey hash), OR
551
+
2.`OP_0``32` 32-bytes (version 0 pay to witness script hash), OR
552
+
3. if (and only if) `option_shutdown_anysegwit` is negotiated:
552
553
*`OP_1` through `OP_16` inclusive, followed by a single push of 2 to 40 bytes
553
554
(witness program versions 1 through 16)
554
555
@@ -576,9 +577,11 @@ may immediately begin closing negotiation, so we ban further updates
576
577
to the commitment transaction (in particular, `update_fee` would be
577
578
possible otherwise).
578
579
579
-
The `scriptpubkey` forms include only standard forms accepted by the
580
-
Bitcoin network, which ensures the resulting transaction will
581
-
propagate to miners.
580
+
The `scriptpubkey` forms include only standard segwit forms accepted by
581
+
the Bitcoin network, which ensures the resulting transaction will
582
+
propagate to miners. However old nodes may send non-segwit scripts, which
583
+
may be accepted for backwards-compatibility (with a caveat to force-close
584
+
if this output doesn't meet dust relay requirements).
582
585
583
586
The `option_upfront_shutdown_script` feature means that the node
584
587
wanted to pre-commit to `shutdown_scriptpubkey` in case it was
@@ -674,6 +677,10 @@ The receiving node:
674
677
- MUST propose a value "strictly between" the received `fee_satoshis`
675
678
and its previously-sent `fee_satoshis`.
676
679
680
+
The receiving node:
681
+
- if one of the outputs in the closing transaction is below the dust limit for its `scriptpubkey` (see [BOLT 3](03-transactions.md#dust-limits)):
682
+
- MUST fail the channel
683
+
677
684
#### Rationale
678
685
679
686
When `fee_range` is not provided, the "strictly between" requirement ensures
@@ -690,6 +697,12 @@ to have a maximum feerate. It may want a minimum feerate, however, to ensure
690
697
that the transaction propagates. It can always use CPFP later to speed up
691
698
confirmation if necessary, so that minimum should be low.
692
699
700
+
It may happen that the closing transaction doesn't meet bitcoin's default relay
701
+
policies (e.g. when using a non-segwit shutdown script for an output below 546
702
+
satoshis, which is possible if `dust_limit_satoshis` is below 546 satoshis).
703
+
No funds are at risk when that happens, but the channel must be force-closed as
704
+
the closing transaction will likely never reach miners.
705
+
693
706
## Normal Operation
694
707
695
708
Once both nodes have exchanged `funding_locked` (and optionally [`announcement_signatures`](07-routing-gossip.md#the-announcement_signatures-message)), the channel can be used to make payments via Hashed Time Locked Contracts.
0 commit comments