@@ -53,6 +53,7 @@ A node:
53
53
* [ Route Blinding] ( #route-blinding )
54
54
* [ Accepting and Forwarding a Payment] ( #accepting-and-forwarding-a-payment )
55
55
* [ Non-strict Forwarding] ( #non-strict-forwarding )
56
+ * [ Resource Bucketing] ( #resource-bucketing )
56
57
* [ Payload for the Last Node] ( #payload-for-the-last-node )
57
58
* [ Shared Secret] ( #shared-secret )
58
59
* [ Blinding Ephemeral Keys] ( #blinding-ephemeral-keys )
@@ -62,6 +63,7 @@ A node:
62
63
* [ Returning Errors] ( #returning-errors )
63
64
* [ Failure Messages] ( #failure-messages )
64
65
* [ Receiving Failure Codes] ( #receiving-failure-codes )
66
+ * [ Recommendations for Reputation] ( #recommendations-for-reputation )
65
67
* [ Test Vector] ( #test-vector )
66
68
* [ Returning Errors] ( #returning-errors )
67
69
* [ References] ( #references )
@@ -635,6 +637,35 @@ Alternatively, implementations may choose to apply non-strict forwarding only to
635
637
like-policy channels to ensure their expected fee revenue does not deviate by
636
638
using an alternate channel.
637
639
640
+ ## Resource Bucketing
641
+
642
+ When making the decision to forward a payment on its outgoing channel, a node
643
+ MAY choose to limit its exposure to HTLCs that put it at risk of a denial of
644
+ service attack.
645
+ * ` unknown_allocation_slots ` : defines the number of HTLC slots allocated to
646
+ unknown traffic (default: 50% of remote peer's ` max_accepted_htlcs ` ).
647
+ * ` unknown_allocation_liquidity ` : defines the amount of the channel balance
648
+ that is allocated to unknown traffic (default: 50% of remote peer's
649
+ ` max_htlc_value_in_flight_msat ` .
650
+
651
+ A node implementing resource bucketing limits exposure on its outgoing channel:
652
+ - MUST choose ` unknown_allocation_slots ` <= the remote channel peer's
653
+ ` max_accepted_htlcs ` .
654
+ - MUST choose ` unknown_allocation_liquidity ` <= the remote channel peer's
655
+ ` max_htlc_value_in_flight_msat ` .
656
+ - If ` endorsed ` is set to 1 in the incoming ` update_add_htlc ` AND the HTLC
657
+ is from a node that the forwarding node considers to have good local
658
+ reputation (see [ Recommendations for Reputation] ( #recommendations-for-reputation ) ):
659
+ - SHOULD proceed with forwarding the HTLC.
660
+ - SHOULD set ` endorsed ` to 1 in the outgoing ` update_add_htlc ` .
661
+ - Otherwise, the HTLC is classified as ` unknown ` :
662
+ - If ` unknown_allocation_slots ` HTLC slots are occupied by other ` unknown ` HTLCs:
663
+ - SHOULD return ` temporary_channel_failure ` as specified in [ Failure Messages] ( #failure-messages ) .
664
+ - If ` unknown_allocation_liquidity ` satoshis of liquidity are locked in
665
+ other ` unknown ` HTLCs:
666
+ - SHOULD return ` temporary_channel_failure ` as specified in [ Failure Messages] ( #failure-messages ) .
667
+ - SHOULD set ` endorsed ` to 0 in the outgoing ` update_add_htlc ` .
668
+
638
669
## Payload for the Last Node
639
670
640
671
When building the route, the origin node MUST use a payload for
@@ -1407,6 +1438,60 @@ The _origin node_:
1407
1438
- MAY use the data specified in the various failure types for debugging
1408
1439
purposes.
1409
1440
1441
+ ## Recommendations for Reputation
1442
+
1443
+ Local reputation is used by forwarding nodes to decide whether to endorse a HTLC
1444
+ on their outgoing link. Nodes MAY use any metric of their choosing to classify
1445
+ a peer as having "good" reputation, though a poor choice of reputation scoring
1446
+ metric will affect their downstream reputation.
1447
+
1448
+ - ` resolution_time ` : the time elapsed between ` update_add_htlc ` and its
1449
+ resolution (` update_fulfill_hltc ` / ` update_fail_hltc ` /
1450
+ ` update_fail_malformed_htlc ` ).
1451
+ - ` resolution_threshold ` : the resolution time threshold that is considered
1452
+ "good" behavior (default: 10 seconds).
1453
+ - ` fees ` : the fees paid by a forwarded HTLC (as described in [ BOLT #7 ] ( 07-routing-gossip.md#htlc-fees ) ,
1454
+ equal to 0 if the HTLC was failed).
1455
+
1456
+ For every incoming HLTC a peer has forwarded through a node, its ` effective_fees `
1457
+ are calculated as follows:
1458
+ - if ` endorsed ` = 1 in ` update_add_htlc ` :
1459
+ - if the HTLC was settled with ` update_fulfill_hltc ` :
1460
+ - ` effective_fees ` = ` fees ` - ceil( (` resolution_time ` - ` resolution_threshold ` ) / ` resolution_threshold ` ) * ` fees `
1461
+ - otherwise:
1462
+ - ` effective_fees ` = - ceil( (` resolution_time ` - ` resolution_threshold ` ) / ` resolution_threshold ` ) * ` fees `
1463
+ - otherwise:
1464
+ - if successfully resolved AND ` resolution_time ` <= ` resolution_threshold `
1465
+ - ` effective_fees ` = ` fees `
1466
+ - otherwise:
1467
+ - ` effective_fees ` = 0
1468
+
1469
+ The sum of the ` effective_fees ` for each HTLC that a peer has forwarded over
1470
+ a sliding window of time is used to assess local reputation.
1471
+
1472
+ - ` maximum_hold ` : the maximum amount of time that a HTLC can be locked in a
1473
+ node's commitment.
1474
+ - ` reputation_window ` : the period of time over which we assess revenue
1475
+ (recommended default = 10 * ` maximum_hold ` )
1476
+ - ` revenue ` : the total routing revenue generated by the node over ` maximum_hold `
1477
+ - ` reputation_revenue ` : the total ` effective_fees ` of HTLCs forwarded by the peer
1478
+ and resolved within ` reputation_window ` .
1479
+
1480
+ The local reputation that a peer has earned is compared to total revenue to
1481
+ classify reputation as good or neutral.
1482
+
1483
+ - if ` reputation_revenue ` over ` reputation_window ` >= ` revenue ` over ` maximum_hold `
1484
+ - a peer should be considered to have good local reputation.
1485
+ - otherwise, the peer should be considered to have neutral local reputation.
1486
+
1487
+ ### Rationale
1488
+ If a HTLC is endorsed by a peer they have signaled that they expect the HTLC
1489
+ to resolve honestly, so will be held accountable for the manner in which they
1490
+ resolve. By contrast, if a HTLC was not endorsed by the upstream peer, it
1491
+ should not have a negative impact on reputation. In the case where one of
1492
+ these "unknown" HTLCs succeeds within the reasonable resolution threshold, the
1493
+ peer is still credited with fees because the HTLC resolved desirably.
1494
+
1410
1495
# Test Vector
1411
1496
1412
1497
## Returning Errors
0 commit comments