1 of 59

Unjamming LN

2 of 59

3 of 59

Characteristics of a Good Mitigation

  • Trivially inexpensive to honest parties, costly to attackers

  • Privacy conscious

  • Decentralized

  • Complexity of Implementation

  • User Experience Considerations

4 of 59

Overview of the suggested solution

  • Local Peer Reputation and endorsement
    • Each node assigns reputation to its neighbors
    • Reputation gives access to liquidity and slot
    • Reputation is gained by forwarding good HTLCs
  • Unconditional Fee
    • Paid even if the payment fails
    • Base fee + Proportional fee
    • Free relay

5 of 59

Isn’t reputation enough?

  • What is “bad behavior?”
  • Need to resolve in 10 seconds?
    • Resolve in 9 seconds and resend
  • Need a 50% success history?
    • Open several channels
  • Edge cases:
    • Are difficult to detect
    • Can happen to honest users

6 of 59

Isn’t unconditional fees enough?

Sat

20

50,000

Too cheap for attacker

Too expensive for regular user

7 of 59

Reputation + Fee

  • Local Peer Reputation
    • For “slow jams”
    • Difficult to build, easy to lose
    • Doesn’t change anything in times of peace

  • Unconditional Fee
    • For “quick jams”
    • Helps with spamming and probing
    • Always small for honest users

8 of 59

HTLC Endorsement

9 of 59

HTLC Endorsement

  • Odd TLV extension to update_add_htlc

  • Single-byte endorsed field (0/1):
    • =1 HTLC expected to resolve honestly
    • =0 HLTC is unknown

  • Set endorsed = 1 on outgoing HTLCS:
    • If you are the original sender
    • If incoming endorsed = 1 AND peer has good local reputation

10 of 59

HTLC Endorsement

Alice

Bob

Carol

Dave

11 of 59

Sender Endorses

Alice

Bob

Carol

Dave

Endorsed = 1

12 of 59

Alice

Bob

Carol

Dave

Endorsed = 1

Incoming node has good reputation

13 of 59

Endorsement Signal Propagates

Alice

Bob

Carol

Dave

Endorsed = 1

14 of 59

Incoming node has neutral reputation

Alice

Bob

Carol

Dave

Endorsed = 1

15 of 59

Endorsement Signal Drops

Alice

Bob

Carol

Dave

Endorsed = 0

16 of 59

Importance of Endorsement

  • Allows forwarding on unknown HTLCs:
    • Not all HTLCs are malicious.
    • Newcomers will be “unknown”.

  • Limits remote sabotage by peers.

  • Propagates resource limits along route (see detailed explanation here)

  • Preserves reliability in times of attack.

17 of 59

Resource Bucketing

18 of 59

Resource Bucketing

  • Gracefully degrade the network under attack
    • No (to low) impact in the steady state
    • Reserve resources for honest payments during attack times

  • Limit exposure to potentially risky “unknown” HLTCs

  • Cap usage scarce resources:
    • unknown_allocation_slots
    • unknown_allocation_liquidity

19 of 59

HTLC Classification

  • Bucketing allocation determined by:
    • HTLC Endorsement: peer signal that HTLC is honest

    • Local Reputation: local opinion peer’s behavior

Honest

iff endorsed AND good local reputation

Unknown

otherwise

20 of 59

Resource Bucketing

10 slots

21 of 59

Resource Bucketing

unknown_allocation_slots = 4

22 of 59

Resource Bucketing

4 slots unknown

23 of 59

Resource Bucketing

6 slots reserved

4 slots unknown

24 of 59

Resource Bucketing

6 slots available

4 slots available

25 of 59

Not Endorsed

endorsed=0

6 slots available

4 slots available

26 of 59

Not Endorsed

Unknown

6 slots available

3 slots available

27 of 59

Not Endorsed

endorsed=0

Unknown

6 slots available

3 slots available

28 of 59

Endorsed / Good Reputation

Unknown

Unknown

6 slots available

2 slots available

29 of 59

Endorsed / Good Reputation

Unknown

endorsed=1

Unknown

6 slots available

2 slots available

30 of 59

Endorsed / Good Reputation

Unknown

endorsed=1

Unknown

6 slots available

2 slots available

31 of 59

Endorsed / Good Reputation

Unknown

Unknown

Honest

5 slots available

2 slots available

32 of 59

Endorsed / Neutral Reputation

Unknown

endorsed=1

Unknown

5 slots available

2 slots available

Honest

33 of 59

Endorsed / Neutral Reputation

Unknown

endorsed=1

Unknown

5 slots available

2 slots available

Honest

34 of 59

Endorsed / Neutral Reputation

Unknown

Unknown

Honest

5 slots available

1 slot available

Honest

Unknown

35 of 59

Limited Exposure during Congestion

Unknown

Unknown

Honest

5 slots available

1 slot available

Unknown

endorsed=0

36 of 59

Limited Exposure during Congestion

Unknown

Unknown

Honest

5 slots available

0 slots available

Unknown

Unknown

37 of 59

Limited Exposure during Congestion

Unknown

Unknown

Honest

5 slots available

0 slots available

Unknown

Unknown

endorsed=0

38 of 59

Limited Exposure during Congestion

Unknown

Unknown

Honest

5 slots available

0 slots available

Unknown

Unknown

endorsed=0

39 of 59

Reserved Resources

Unknown

Unknown

Honest

5 slots available

0 slots available

Unknown

Unknown

40 of 59

Reserved Resources

Unknown

Unknown

Honest

5 slots available

0 slots available

Unknown

Unknown

endorsed=1

41 of 59

Reserved Resources

Unknown

Unknown

Honest

5 slots available

0 slots available

Unknown

Unknown

endorsed=1

42 of 59

Unknown

Unknown

Honest

4 slots available

0 slots available

Unknown

Unknown

Honest

Reserved Resources

43 of 59

Local Reputation

44 of 59

Local Reputation

  • Accumulated by forwarding fee-paying HTLCs
    • Reward fast-resolving, successful HTLCs
    • Penalize all slow-resolving HTLCs

  • Opportunity cost:
    • F = success fees for a HLTC
    • T = “reasonable” resolution time for HLTCs (eg, 10 seconds)
    • R = actual resolution time of HTLC
    • = ceil( ( R - T) / T ) * F

  • Reputation Delta = If success(fees) - if endorsed(opportunity cost)

45 of 59

HTLC Reputation Delta

F = 100

T = 10s

0

10

20

30

40

60

70

46 of 59

Reputation Delta - Fast Success

F = 100

T = 10s

R = 2s

0

10

20

30

40

60

70

47 of 59

Reputation Delta - Fast Success

F = 100

T = 10s

R = 2s

0

10

20

30

40

60

70

Reputation = Fees - OC

48 of 59

Reputation Delta - Fast Success

F = 100

T = 10s

R = 2s

0

10

20

30

40

60

70

Reputation = Fees - OC

= 100 - 0

49 of 59

Reputation Delta - Fast Success

F = 100

T = 10s

R = 2s

0

10

20

30

40

60

70

Reputation = Fees - OC

= 100 - 0

= 100

50 of 59

Reputation Delta - Slow Success

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

51 of 59

Reputation Delta - Slow Success

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

Reputation = Fees - OC

52 of 59

Reputation Delta - Slow Success

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

Reputation = Fees - OC

= 100 - 400

53 of 59

Reputation Delta - Slow Success

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

Reputation = Fees - OC

= 100 - 400

= -300

54 of 59

Reputation Delta - Slow Failure

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

55 of 59

Reputation Delta - Slow Failure

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

Reputation = - OC

56 of 59

Reputation Delta - Slow Failure

F = 100

T = 10s

R = 35s

0

10

20

30

40

60

70

Reputation = - OC

= - 400

57 of 59

Reputation Delta

58 of 59

Classifying Local Reputation

  • Paid more than potential damage

  • Notation:
    • S = maximum hold time for a HTLC (eg, 2016 blocks)
    • M = fee revenue generated by node over S
    • L = sliding window that reputation is assessed over (= 10 * S)

  • A forwarding node has good reputation if: fees forwarded in L >= M

  • If Alice is a routing node with 0.5 BTC revenue in the last 2 weeks:
    • 20 weeks forwarded 0.5 (adjusted) BTC -> Good reputation

59 of 59