<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2023-06-09T12:22:34Z</updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by Carla Kirk-Cohen [ARCHIVE]</title>
  <author>
    <name>Carla Kirk-Cohen [ARCHIVE]</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub17xugd458km0nm8edu8u2efuqmxzft3tmu92j3tyc0fa4gxdk9mkqmanw36.rss" />
  <link href="https://nostr.ae/npub17xugd458km0nm8edu8u2efuqmxzft3tmu92j3tyc0fa4gxdk9mkqmanw36" />
  <id>https://nostr.ae/npub17xugd458km0nm8edu8u2efuqmxzft3tmu92j3tyc0fa4gxdk9mkqmanw36</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqs2z3h8tlnhusl7mckw776z4kx4ghg7h34lzxhg05vhe0dttwx3usqzyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcz97w7j</id>
    
      <title type="html">📅 Original date posted:2023-08-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2z3h8tlnhusl7mckw776z4kx4ghg7h34lzxhg05vhe0dttwx3usqzyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcz97w7j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs87kxuy37ztx7mu806kxjwqs0ku2yhgcyh8ssythpw74yzpuvu3mq6sv2z8&#39;&gt;nevent1q…v2z8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-08-03&lt;br/&gt;🗒️ Summary of this message: The sender expresses concerns about the potential re-identification of anonymized data and requests clarification on the collection period, data storage, and access. The recipient assures that data will be handled securely, anonymized, and not shared. They also mention the possibility of fuzzing timestamps.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Elias,&lt;br/&gt;&lt;br/&gt;Thanks for re-emphasizing the importance of being privacy-conscious&lt;br/&gt;as we look into this work - we completely agree!&lt;br/&gt;&lt;br/&gt;&amp;gt; clarify upfront whether you intend to time-box the collection period,&lt;br/&gt;where the data would be stored, and who would have access to it&lt;br/&gt;&lt;br/&gt;Our ideal collection period would be limited to a 6 month period. One&lt;br/&gt;of our main aims in defining a common data format is to ensure that we&lt;br/&gt;can provide node operators with tooling that they can run locally, so&lt;br/&gt;that they do not need to export the data _at all_, only very aggregated&lt;br/&gt;results.&lt;br/&gt;&lt;br/&gt;In the case where folks are comfortable sharing their data with us,&lt;br/&gt;we will follow best practices handling this sensitive information and&lt;br/&gt;will not share the data onwards at all. Fields will also be anonymized&lt;br/&gt;as described in the original email. Re your concerns around timestamps,&lt;br/&gt;we can also fuzz timestamps, as only the resolution period matters to&lt;br/&gt;our work (thanks for flagging!).&lt;br/&gt;&lt;br/&gt;I hope that addresses your concerns. Research based on real world data&lt;br/&gt;is always a difficult line to walk, but we believe worthwhile in this&lt;br/&gt;case.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Carla &#43; Clara&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Aug 3, 2023 at 4:54 AM Elias Rohrer &amp;lt;lnml at tnull.de&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Carla &#43; Clara,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I want to prefix this by saying that I&amp;#39;m very familiar with how limiting&lt;br/&gt;&amp;gt; the lack of available real-world datasets can be for conducting significant&lt;br/&gt;&amp;gt; simulations and empirical experiments on Lightning.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, it may be noteworthy that long-term collection of the proposed&lt;br/&gt;&amp;gt; fields could potentially allow to re-identify the anonymized channel&lt;br/&gt;&amp;gt; counterparties based off some heuristics correlating with the public graph&lt;br/&gt;&amp;gt; data, especially when datasets from multiple (possibly neighbouring)&lt;br/&gt;&amp;gt; collection points will end up being combined. Subsequently, this might&lt;br/&gt;&amp;gt; allow to draw further conclusions on transferred amounts, channel&lt;br/&gt;&amp;gt; liquidities at particular times, and, as HTLC settlement/failure timestamps&lt;br/&gt;&amp;gt; are recorded in nanosecond resolution, potentially even the payment&lt;br/&gt;&amp;gt; destination&amp;#39;s identity (cf. 1 &amp;lt;&lt;a href=&#34;https://arxiv.org/pdf/2006.12143.pdf&amp;gt&#34;&gt;https://arxiv.org/pdf/2006.12143.pdf&amp;gt&lt;/a&gt;;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As surrendering this kind of data therefore requires a good level of trust&lt;br/&gt;&amp;gt; in the researchers, it might be helpful (and best practise) if you could&lt;br/&gt;&amp;gt; clarify upfront whether you intend to time-box the collection period, where&lt;br/&gt;&amp;gt; the data would be stored, and who would have access to it. From my point of&lt;br/&gt;&amp;gt; view clearly defining the collection period would also be mandatory as we&lt;br/&gt;&amp;gt; don&amp;#39;t want to incentivise node operators to collect and store HTLC data&lt;br/&gt;&amp;gt; longer-term, especially if it&amp;#39;s to this degree of detail.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Elias&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### 1. Collect Anonymized Data&lt;br/&gt;&amp;gt; We&amp;#39;re aware that we are dealing with sensitive and private information.&lt;br/&gt;&amp;gt; For this reason, we propose defining a common data format so that&lt;br/&gt;&amp;gt; analysis tooling can be built around, so that node operators can run&lt;br/&gt;&amp;gt; the analysis locally if desired. Fields marked with [P] *MUST* be&lt;br/&gt;&amp;gt; randomized if exported to researching teams.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The proposed format is a CSV file with the following fields:&lt;br/&gt;&amp;gt; * version (uint8): set to 1, included to future-proof ourselves&lt;br/&gt;&amp;gt; against the need to change this format.&lt;br/&gt;&amp;gt; * channel_in (uint64)[P]: the short channel ID of the incoming channel&lt;br/&gt;&amp;gt; that forwarded the HLTC.&lt;br/&gt;&amp;gt; * channel_out (uint64)[P]: the short channel ID of the outgoing&lt;br/&gt;&amp;gt; channel that forwarded the HTLC.&lt;br/&gt;&amp;gt; * peer_in (hex string)[P]: the hex encoded pubkey of the remote peer&lt;br/&gt;&amp;gt; for the channel_in.&lt;br/&gt;&amp;gt; * peer_out (hex_string)[P]: the hex encoded pubkey of the remote peer&lt;br/&gt;&amp;gt; for the channel_out.&lt;br/&gt;&amp;gt; * fee_msat(uint64): the fee offered by the HTLC, expressed in msat.&lt;br/&gt;&amp;gt; * outgoing_liquidity (float64): the portion of&lt;br/&gt;&amp;gt; `max_htlc_value_in_flight` that is occupied on channel_out after the&lt;br/&gt;&amp;gt; HTLC has been forwarded.&lt;br/&gt;&amp;gt; * outgoing_slots (float64): the portion of `max_accepted_htlcs` that&lt;br/&gt;&amp;gt; is occupied on channel_out after the HTLC has been forwarded.&lt;br/&gt;&amp;gt; * ts_added_ns (uint64): the unix timestamp that the HTLC was added,&lt;br/&gt;&amp;gt; expressed in nanoseconds.&lt;br/&gt;&amp;gt; * ts_removed_ns (uint64): the unix timestamp that the HLTC was&lt;br/&gt;&amp;gt; removed, expressed in nanoseconds.&lt;br/&gt;&amp;gt; * htlc_settled (bool): set to 0 if the HTLC failed, and 1 if it was&lt;br/&gt;&amp;gt; settled.&lt;br/&gt;&amp;gt; * incoming_endorsed (int16): an integer indicating the endorsement&lt;br/&gt;&amp;gt; status of the incoming HTLC (-1 if not present, otherwise set to the&lt;br/&gt;&amp;gt; value in the incoming endorsement TLV).&lt;br/&gt;&amp;gt; * outgoing_endorsed (int16): an integer indicating the endorsement&lt;br/&gt;&amp;gt; status of the outgoing HTLC (-1 if not set, otherwise set to the&lt;br/&gt;&amp;gt; value set in the outgoing endorsement TLV).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Before we add endorsement signaling and setting via an experimental&lt;br/&gt;&amp;gt; TLV, the last two values here will always be -1. The data is still&lt;br/&gt;&amp;gt; incredibly useful in the meantime, and allows for easy update once the&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; TLV is propagated through the network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230803/bc25467c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230803/bc25467c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-08-04T20:17:18Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqv5jfp7rrjehnyv8sqcfp624r9sypp8rs9wp42ukurzepwdgy65szyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwc7q8ckt</id>
    
      <title type="html">📅 Original date posted:2023-08-01 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqv5jfp7rrjehnyv8sqcfp624r9sypp8rs9wp42ukurzepwdgy65szyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwc7q8ckt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9hn86s3wll520xwj78vtxzj84zd6k4n73xukngvfs373afyudkls90m6kk&#39;&gt;nevent1q…m6kk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-08-01&lt;br/&gt;🗒️ Summary of this message: The plan is to collect data on HTLC endorsement and local reputation tracking to mitigate jamming attacks. Multiple teams are involved in different phases of the plan.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi list,&lt;br/&gt;&lt;br/&gt;## TL;DR&lt;br/&gt;We&amp;#39;re moving ahead with the plan discussed at the summit to &amp;#34;dry run&amp;#34;&lt;br/&gt;HTLC endorsement and local reputation tracking to better inform our&lt;br/&gt;efforts to mitigate jamming attacks.&lt;br/&gt;&lt;br/&gt;Our goals are:&lt;br/&gt;* To use real-world data to sanity check the &amp;#34;steady state&amp;#34; behavior&lt;br/&gt;  of local reputation algorithms, and to better inform creation of&lt;br/&gt;  synthetic data for simulating attack scenarios.&lt;br/&gt;* To obtain liquidity and slot utilization data to inform sane defaults&lt;br/&gt;  for resource bucketing.&lt;br/&gt;* To provide a common data export format to use as a common basis for&lt;br/&gt;  analysis.&lt;br/&gt;&lt;br/&gt;As code takes some time to write and deploy, there are a few phases&lt;br/&gt;for this plan - details at the end of the email for those who are&lt;br/&gt;interested!&lt;br/&gt;1. Collect anonymized forwarding data with a common format.&lt;br/&gt;2. Propagate experimental `endorsement` TLV.&lt;br/&gt;3. Implement local reputation and set `endorsement` values.&lt;br/&gt;&lt;br/&gt;This is a multi-team effort:&lt;br/&gt;* Eclair: Thomas is looking into collecting local reputation data&lt;br/&gt;  in [1].&lt;br/&gt;* CLN: Vincenzo is working on experimental update to propagate the&lt;br/&gt;  endorsement field and a plugin that will allow us to run local&lt;br/&gt;  reputation scoring.&lt;br/&gt;* LND: I am working on data export and HTLC endorsement via&lt;br/&gt;  circuitbreaker [2].&lt;br/&gt;* LDK: some additional plumbing is needed, as outlined in [3].&lt;br/&gt;&lt;br/&gt;## Research Plan&lt;br/&gt;&lt;br/&gt;### 1. Collect Anonymized Data&lt;br/&gt;We&amp;#39;re aware that we are dealing with sensitive and private information.&lt;br/&gt;For this reason, we propose defining a common data format so that&lt;br/&gt;analysis tooling can be built around, so that node operators can run&lt;br/&gt;the analysis locally if desired. Fields marked with [P] *MUST* be&lt;br/&gt;randomized if exported to researching teams.&lt;br/&gt;&lt;br/&gt;The proposed format is a CSV file with the following fields:&lt;br/&gt;* version (uint8): set to 1, included to future-proof ourselves&lt;br/&gt;  against the need to change this format.&lt;br/&gt;* channel_in (uint64)[P]: the short channel ID of the incoming channel&lt;br/&gt;  that forwarded the HLTC.&lt;br/&gt;* channel_out (uint64)[P]: the short channel ID of the outgoing&lt;br/&gt;  channel that forwarded the HTLC.&lt;br/&gt;* peer_in (hex string)[P]: the hex encoded pubkey of the remote peer&lt;br/&gt;  for the channel_in.&lt;br/&gt;* peer_out (hex_string)[P]: the hex encoded pubkey of the remote peer&lt;br/&gt;  for the channel_out.&lt;br/&gt;* fee_msat(uint64): the fee offered by the HTLC, expressed in msat.&lt;br/&gt;* outgoing_liquidity (float64): the portion of&lt;br/&gt;  `max_htlc_value_in_flight` that is occupied on channel_out after the&lt;br/&gt;  HTLC has been forwarded.&lt;br/&gt;* outgoing_slots (float64): the portion of `max_accepted_htlcs` that&lt;br/&gt;  is occupied on channel_out after the HTLC has been forwarded.&lt;br/&gt;* ts_added_ns (uint64): the unix timestamp that the HTLC was added,&lt;br/&gt;  expressed in nanoseconds.&lt;br/&gt;* ts_removed_ns (uint64): the unix timestamp that the HLTC was&lt;br/&gt;  removed, expressed in nanoseconds.&lt;br/&gt;* htlc_settled (bool): set to 0 if the HTLC failed, and 1 if it was&lt;br/&gt;  settled.&lt;br/&gt;* incoming_endorsed (int16): an integer indicating the endorsement&lt;br/&gt;  status of the incoming HTLC (-1 if not present, otherwise set to the&lt;br/&gt;  value in the incoming endorsement TLV).&lt;br/&gt;* outgoing_endorsed (int16): an integer indicating the endorsement&lt;br/&gt;  status of the outgoing HTLC (-1 if not set, otherwise set to the&lt;br/&gt;  value set in the outgoing endorsement TLV).&lt;br/&gt;&lt;br/&gt;Before we add endorsement signaling and setting via an experimental&lt;br/&gt;TLV, the last two values here will always be -1. The data is still&lt;br/&gt;incredibly useful in the meantime, and allows for easy update once the&lt;br/&gt;TLV is propagated through the network.&lt;br/&gt;&lt;br/&gt;### 2. Propagate Experimental Endorsement TLV&lt;br/&gt;HTLC endorsement is signaled using an experimental range TLV in&lt;br/&gt;`update_add_htlc` (which has been reserved in [4]):&lt;br/&gt;&lt;br/&gt;tlv_stream: update_add_htlc_tlvs&lt;br/&gt;  Type: 655555&lt;br/&gt;  Data: byte (endorsed)&lt;br/&gt;&lt;br/&gt;This signal should be propagated by forwarding nodes in the following&lt;br/&gt;manner:&lt;br/&gt;- if `endorsed` is present in the incoming `update_add_htlc`:&lt;br/&gt;  - set the same value for the outgoing `update_add_htlc`.&lt;br/&gt;- otherwise:&lt;br/&gt;  - set `endorsed` = 0 for the outgoing `update_add_htlc`.&lt;br/&gt;&lt;br/&gt;### 3. Implement Local Reputation and Set Endorsement&lt;br/&gt;The final step will be to implement local reputation algorithms and&lt;br/&gt;start to actively set the value of the `endorsed` TLV for outgoing&lt;br/&gt;HTLCs, rather than simply copying the value presented by the sending&lt;br/&gt;node. This signal will *not* be used for any purpose other than&lt;br/&gt;data collection.&lt;br/&gt;&lt;br/&gt;Experimenters are free to use the full range of bits to express&lt;br/&gt;endorsement values, but should be aware that any non-zero value will&lt;br/&gt;be interpreted as a positive endorsement signal by implementations&lt;br/&gt;using binary endorsement (as is currently specified in [5]).&lt;br/&gt;&lt;br/&gt;A positive endorsement signal requires that the original sender of a&lt;br/&gt;HTLC sets a non-zero value, but bears the privacy risk of indicating&lt;br/&gt;that they are the sending node during upgrade. We suggest that senders&lt;br/&gt;choose some probability P (suggested default: 20%) with which to set&lt;br/&gt;endorsed=1 for their payments.&lt;br/&gt;&lt;br/&gt;Once we&amp;#39;ve got data collection code in place, we&amp;#39;ll make a more&lt;br/&gt;general call for node operators to start collection. In the meantime,&lt;br/&gt;feel free to reach out if you have any questions or are interested in&lt;br/&gt;helping out!&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Carla &#43; Clara&lt;br/&gt;&lt;br/&gt;## References&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/ACINQ/eclair/pull/2716&#34;&gt;https://github.com/ACINQ/eclair/pull/2716&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/lightningequipment/circuitbreaker/issues/77&#34;&gt;https://github.com/lightningequipment/circuitbreaker/issues/77&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/issues/2425&#34;&gt;https://github.com/lightningdevkit/rust-lightning/issues/2425&lt;/a&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://github.com/lightning/blips/pull/27&#34;&gt;https://github.com/lightning/blips/pull/27&lt;/a&gt;&lt;br/&gt;[5] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1071&#34;&gt;https://github.com/lightning/bolts/pull/1071&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230801/9ef1baa2/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230801/9ef1baa2/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-08-02T22:15:37Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfpn6dj0k60mngntld7aerzma9a7jn626h8s05ruqu2tg52x5s9hczyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcs5typa</id>
    
      <title type="html">📅 Original date posted:2023-07-27 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfpn6dj0k60mngntld7aerzma9a7jn626h8s05ruqu2tg52x5s9hczyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcs5typa" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrh50tqetzx3hz305g4ewa6wnzr6vv8h50cwtnh25qmd2xdwtshhszxr5h7&#39;&gt;nevent1q…r5h7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-27&lt;br/&gt;🗒️ Summary of this message: Transcripts of specification meetings held every other Monday are now available at &lt;a href=&#34;https://btctranscripts.com/lightning-specification&#34;&gt;https://btctranscripts.com/lightning-specification&lt;/a&gt;, thanks to Gurwinder at Chaincode.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi List,&lt;br/&gt;&lt;br/&gt;Since the beginning of the year we&amp;#39;ve made an effort to record and&lt;br/&gt;transcribe the specification meetings that we hold every other Monday.&lt;br/&gt;We&amp;#39;ve managed to keep the habit up, so I&amp;#39;m sharing here in the hopes&lt;br/&gt;that they&amp;#39;ll be discovered by those who will find them useful.&lt;br/&gt;&lt;br/&gt;These transcripts are available here:&lt;br/&gt;&lt;a href=&#34;https://btctranscripts.com/lightning-specification&#34;&gt;https://btctranscripts.com/lightning-specification&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Massive thanks to Gurwinder at Chaincode who human-checks the&lt;br/&gt;transcripts to keep the AI overlords on their best behavior.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Carla&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230727/8322a83c/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230727/8322a83c/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-07-30T22:54:53Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsptuvh3nw9xhhsvd40yddfqzd00n97q0l87tmmtxjpw93jlcacg6gzyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwckkmt63</id>
    
      <title type="html">📅 Original date posted:2023-07-19 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsptuvh3nw9xhhsvd40yddfqzd00n97q0l87tmmtxjpw93jlcacg6gzyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwckkmt63" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspeh623e29xtcu2e7ppncjdqe672yrlys47cgrx82ztf39vywgs0cupkuqe&#39;&gt;nevent1q…kuqe&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-19&lt;br/&gt;🗒️ Summary of this message: The text is a summary of the annual specification meeting held in NYC. It includes discussions on package relay, commitment transactions, and zero fee commitments.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi List,&lt;br/&gt;&lt;br/&gt;At the end of June we got together in NYC for the annual specification&lt;br/&gt;meeting. This time around we made an attempt at taking transcript-style&lt;br/&gt;notes which are available here:&lt;br/&gt;&lt;a href=&#34;https://docs.google.com/document/d/1MZhAH82YLEXWz4bTnSQcdTQ03FpH4JpukK9Pm7V02bk/edit?usp=sharing&#34;&gt;https://docs.google.com/document/d/1MZhAH82YLEXWz4bTnSQcdTQ03FpH4JpukK9Pm7V02bk/edit?usp=sharing&lt;/a&gt;&lt;br/&gt;.&lt;br/&gt;To decrease our dependence on my google drive I&amp;#39;ve also included the&lt;br/&gt;full set of notes at the end of this email (no promises about the&lt;br/&gt;formatting however).&lt;br/&gt;&lt;br/&gt;We made a semi-successful attempt at recording larger group topics, so&lt;br/&gt;these notes roughly follow the structure of the discussions that we had&lt;br/&gt;at the summit (rather than being a summary). Speakers are not&lt;br/&gt;attributed, and any mistakes are my own.&lt;br/&gt;&lt;br/&gt;Thanks to everyone who traveled far, Wolf for hosting us in style in&lt;br/&gt;NYC and to Michael Levin for helping out with notes &amp;lt;3&lt;br/&gt;&lt;br/&gt;# LN Summit - NYC 2023&lt;br/&gt;&lt;br/&gt;## Day One&lt;br/&gt;&lt;br/&gt;### Package Relay&lt;br/&gt;- The current proposal for package relay is ancestor package relay:&lt;br/&gt;  - One child can have up to 24 ancestors.&lt;br/&gt;  - Right now, we only score mempool transactions by ancestry anyway, so&lt;br/&gt;there isn’t much point in other types of packages.&lt;br/&gt;- For base package relay, commitment transactions will still need to have&lt;br/&gt;the minimum relay fee.&lt;br/&gt;  - No batch bumping is allowed, because it can open up pinning attacks.&lt;br/&gt;  - With one anchor, we can package RBF.&lt;br/&gt;- Once we have package relay, it will be easier to get things into the&lt;br/&gt;mempool.&lt;br/&gt;- Once we have V3 transactions, we can drop minimum relay fees because we&lt;br/&gt;are restricted to one child pays for one parent transaction:&lt;br/&gt;  - The size of these transactions is limited.&lt;br/&gt;  - You can’t arbitrarily attach junk to pin them.&lt;br/&gt;- If we want to get rid of 330 sat anchors, we will need ephemeral anchors:&lt;br/&gt;  - If there is an OP_TRUE output, it can be any value including zero.&lt;br/&gt;  - It must be spent by a child in the same package.&lt;br/&gt;  - Only one child can spend the anchor (because it’s one output).&lt;br/&gt;  - The parent must be zero fee because we never want it in a block on its&lt;br/&gt;own, or relayed without the child.&lt;br/&gt;  - If the child is evicted, we really want the parent to be evicted as&lt;br/&gt;well (there are some odd edge cases at the bottom of the mempool, so zero&lt;br/&gt;ensures that we’ll definitely be evicted).&lt;br/&gt;- The bigger change is with HLTCs:&lt;br/&gt;  - With SIGHASH_ANYONECANPAY, your counterparty can inflate the size of&lt;br/&gt;your transaction - eg: HTLC success, anyone can attack junk.&lt;br/&gt;  - How much do we want to change here?&lt;br/&gt;- So, we can get to zero fee commitment transactions and one (ephemeral)&lt;br/&gt;anchor per transaction.&lt;br/&gt;  - With zero fee commitments, where do we put trimmed HTLCs?&lt;br/&gt;     - You can just drop it in an OP_TRUE, and reasonably expect the miner&lt;br/&gt;to take it.&lt;br/&gt;- In a commitment with to_self and to_remote and an ephemeral anchor that&lt;br/&gt;must be spent, you can drop the 1 block CSV in the transaction that does&lt;br/&gt;not have a revocation path (ie, you can drop it for to_remote).&lt;br/&gt;  - Any spend of this transaction must spend the one anchor in the same&lt;br/&gt;block.&lt;br/&gt;  - No other output is eligible to have a tx attached to it, so we don’t&lt;br/&gt;need the delay anymore.&lt;br/&gt;     - Theoretically, your counterparty could get hold of your signed local&lt;br/&gt;copy, but then you can just RBF.&lt;br/&gt;- Since these will be V3 transactions, the size of the child must be small&lt;br/&gt;so you can’t pin it.&lt;br/&gt;  - Both parties can RBF the child spending the ephemeral anchor.&lt;br/&gt;  - This isn’t specifically tailored to lightning, it’s a more general&lt;br/&gt;concept.&lt;br/&gt;  - Child transactions of V3 are implicitly RBF, so we won’t have to worry&lt;br/&gt;about it not being replaceable (no inheritance bug).&lt;br/&gt;- In general, when we’re changing the mempool policy we want to make the&lt;br/&gt;minimal relaxation that allows the best improvement.&lt;br/&gt;- We need “top of block” mempool / cluster mempool:&lt;br/&gt;  - The mempool can have clusters of transactions (parents/children&lt;br/&gt;arranged in various topologies) and the whole mempool could even be a&lt;br/&gt;single cluster (think a trellis of parents and children “zigzagging”).&lt;br/&gt;  - The mining algorithm will pick one “vertical” using ancestor fee rate.&lt;br/&gt;  - There are some situations where you add a single transaction and it&lt;br/&gt;would completely change the order in which our current selection picks&lt;br/&gt;things.&lt;br/&gt;  - Cluster mempool groups transactions into “clusters” that make this&lt;br/&gt;easier to sort and reason about.&lt;br/&gt;  - It can be expensive (which introduces a risk of denial of service), but&lt;br/&gt;if we have limits on cluster sizes then we can limit this.&lt;br/&gt;  - This is the only way to get package RBF.&lt;br/&gt;- How far along is all of this?&lt;br/&gt;  - BIP331: the P2P part that allows different package types is moving&lt;br/&gt;along and implementation is happening. This is done in a way that would&lt;br/&gt;allow us to add different types of packages in future if we need them.&lt;br/&gt;     - There are some improvements being made to core’s orphan pool,&lt;br/&gt;because we need to make sure that peers can’t knock orphans out of your&lt;br/&gt;pool that you may later need to retrieve as package ancestors.&lt;br/&gt;     - We reserve some spots with tokens, and if you have a token we keep&lt;br/&gt;some space for you.&lt;br/&gt;  - V3 transactions: implemented on top of package relay, since they don’t&lt;br/&gt;really make sense without it. This is an opt-in regime where you make&lt;br/&gt;things easier to RBF.&lt;br/&gt;  - Ephemeral Anchors: on top of package relay and V3.&lt;br/&gt;  - Cluster Mempool: This is further out, but there’s been some progress.&lt;br/&gt;Right now people are working on the linearization algorithm.&lt;br/&gt;- If these changes don’t suit lightning’s use case, now is the time to&lt;br/&gt;speak because it’s all being worked on.&lt;br/&gt;  - In what way does it not fit LN, as it’s currently designed?&lt;br/&gt;     - With the V3 paradigm, to stop all pinning vectors, HTLC transactions&lt;br/&gt;will need to get anchors and you will have to drop ANYONECANPAY (to use&lt;br/&gt;anchors instead).&lt;br/&gt;     - Could we fix this with additional restrictions on V3 (or a V4)?&lt;br/&gt;     - You could do something where V4 means that you can have no ancestors&lt;br/&gt;and no descendants (in the mempool).&lt;br/&gt;     - V3 restricts the child, you could also restrict the parent further.&lt;br/&gt;     - You could have a heuristic on the number of inputs and outputs, but&lt;br/&gt;anyone can pay or add inputs.&lt;br/&gt;     - You could commit to the whole thing being some size by setting a&lt;br/&gt;series of bits in sequence to mark maximum size but that would involve&lt;br/&gt;running script (which is annoying).&lt;br/&gt;     - The history of V3 was to allow a parent of any size because&lt;br/&gt;commitment transactions can be any size.&lt;br/&gt;- What about keeping HTLCs the way they are today?&lt;br/&gt;  - A lot of other things are less pineapple, maybe that’s ok? It’s a step&lt;br/&gt;forward.&lt;br/&gt;  - The long term solution is to change relay policy to top of mempool. We&lt;br/&gt;shouldn’t be doing things until the long term solution is clear, and we&lt;br/&gt;shouldn’t change the protocol in a way that doesn’t fit with the long term.&lt;br/&gt;  - We already do a lot of arbitrary things, if we were starting from day&lt;br/&gt;one we wouldn’t do HTLCs with anchors (it’s too much bloat), and being&lt;br/&gt;unable to RBF is more bloat because you overpay.&lt;br/&gt;  - If the remote commitment is broadcast, you can spen the HTLC with V2.&lt;br/&gt;You can’t add a V3 child (it won’t get in the mempool).&lt;br/&gt;  - If you want to be consistent, even when it’s the remote commit you need&lt;br/&gt;a presigned transaction, we should just use it as designed today.&lt;br/&gt;- What is the “top of mempool” assumption?&lt;br/&gt;  - If large transactions are at the top of your mempool, you (a miner)&lt;br/&gt;want transactions with higher fee rates to increase your total revenue.&lt;br/&gt;  - Today, you can’t really easily answer or reason about these questions.&lt;br/&gt;  - We want to accept transactions in our mempool in a denial of service&lt;br/&gt;resistant way that will strictly increase our miner fees.&lt;br/&gt;  - If a transaction is at the top of your mempool, you may be more willing&lt;br/&gt;to accept a replacement fee. If it’s way down in the mempool, you would&lt;br/&gt;probably replace more slowly.&lt;br/&gt;  - It’s conceivable that we could get here, but it’s years off.&lt;br/&gt;     - Once we have this, pinning only happens with large transactions at&lt;br/&gt;the bottom of the mempool. If you just slow roll these transactions, you&lt;br/&gt;can just relay what you’ve got.&lt;br/&gt;     - If somebody comes and replaces the bottom with something small&lt;br/&gt;that’ll be mined in the next two blocks, you clearly want to accept that.&lt;br/&gt;- Does cluster mempool fix rule 3?&lt;br/&gt;  - No but they help.&lt;br/&gt;  - Today when you get a transaction you don’t know which block it’s going&lt;br/&gt;in - we don’t have a preference ordering.&lt;br/&gt;  - Miners don’t make blocks as they go - with cluster mempool you can make&lt;br/&gt;very fast block templates.&lt;br/&gt;  - When talking about relay, you can ignore block making and just get a&lt;br/&gt;very good estimate.&lt;br/&gt;- The question is: when do we jump?&lt;br/&gt;  - Wail until V3? Package Relay?&lt;br/&gt;     - Package relay will help. You still negotiate fees but they don’t&lt;br/&gt;matter as much.&lt;br/&gt;     - We’d like to kill upate fee and have a magic number for fees, can we&lt;br/&gt;do that when we get package relay?&lt;br/&gt;     - Package relay is the hard part, V3 should be relatively easier after&lt;br/&gt;that.&lt;br/&gt;     - When we get V3 we can drop to zero fee.&lt;br/&gt;- Is there a future where miners don’t care about policy at all?&lt;br/&gt;  - Say, the block that I’m mining has V3 transactions. They’re just&lt;br/&gt;maximizing fees so they’ll accept anything out of band, ignoring these new&lt;br/&gt;policy rules.&lt;br/&gt;  - Accelerators are already starting to emerge today - how are they doing&lt;br/&gt;it?&lt;br/&gt;  - We’re carving out a small space in which mempool rules work, and it’s&lt;br/&gt;okay to work around it.&lt;br/&gt;  - If a miner mines it, great - that’s what we want. The problem is not&lt;br/&gt;getting mined (ie pinning).&lt;br/&gt;- Figuring this out is not simple:&lt;br/&gt;  - Today there are times where we accept replacements when we should&lt;br/&gt;reject them and times where we reject replacements when we should accept&lt;br/&gt;them.&lt;br/&gt;  - There can be situations where miners will mine things that aren’t&lt;br/&gt;incentive compatible (ie, not the best block template).&lt;br/&gt;- What if somebody pays out of band not to mine?&lt;br/&gt;- Ephemeral anchors are interesting, they never enter the UTXO set - if the&lt;br/&gt;child gets evicted, you get evicted.&lt;br/&gt;  - The first transaction being zero is optimal, want to be sure it’ll be&lt;br/&gt;evicted (there are some mempool quirks).&lt;br/&gt;  - It must be zero fee so that it will be evicted.&lt;br/&gt;- Should we add trimmed HTLCs to the ephemeral anchor?&lt;br/&gt;  - We don’t want to get above min relay fee because then we could hang&lt;br/&gt;around in the mempool.&lt;br/&gt;  - The eltoo implementation currently does this.&lt;br/&gt;  - You can’t keep things in OP_TRUE because they’ll be taken.&lt;br/&gt;  - You can also just put it in fees as before.&lt;br/&gt;- More on cluster mempools:&lt;br/&gt;  - It can be used for block selection, but it’s currently focused on&lt;br/&gt;mempool selection.&lt;br/&gt;  - You can simulate template selection with it.&lt;br/&gt;  - When you’re mining, you have to pick from an ancestor downwards.&lt;br/&gt;  - First we lineralize the transactions to flatten the structure&lt;br/&gt;intelligently (by topology and fee rate).&lt;br/&gt;  - Then we figure out the best ordering of this flat structure.&lt;br/&gt;  - Each chunk in a cluster is less than 75 transactions, and a cluster has&lt;br/&gt;chunks of transactions.&lt;br/&gt;  - If you woul include a transaction with the ancestor, it goes in the&lt;br/&gt;same chunk. Otherwise it goes in the next chunk.&lt;br/&gt;  - Miners select the highest fee rate chunks, lower fee rate ones can&lt;br/&gt;safely be evicted.&lt;br/&gt;  - For replacement, you can just check replacement for a single cluster,&lt;br/&gt;rechunk it and then resort the chunks.&lt;br/&gt;     - It must beat the fee rate of the chunks to get in.&lt;br/&gt;     - You can check how much it beats the chunk by, whether it would go in&lt;br/&gt;the next block(s) and then decide.&lt;br/&gt;  - Chunk ordering takes into account transaction size, beyond 25&lt;br/&gt;transactions we just do ancestor set feerate.&lt;br/&gt;  - One of the limits is going away, one is sticking around. We still have&lt;br/&gt;sibling eviction issues.&lt;br/&gt;  - Is one of the issues with chunks is that they’re limited by transaction&lt;br/&gt;weight, 101 kilo-v-bytes, which is the maximum package size?&lt;br/&gt;     - We should be okay, these limits are higher than present.&lt;br/&gt;     - You can bound chunk size pretty easily.&lt;br/&gt;  - If we get chunk fee rate replacement then you can do batch fee bumping&lt;br/&gt;(eg, a bunch of ephemeral anchors that are all batched together).&lt;br/&gt;- Are there long term policy implications for privacy for ephemeral anchors?&lt;br/&gt;  - You’re essentially opting into transaction sponsors?&lt;br/&gt;  - If everyone uses V3 eventually there’s no issue.&lt;br/&gt;  - For right now, it would be nice if V3 is only for unilateral closes.&lt;br/&gt;  - It’s also useful in a custodial wallet setting, where you have one team&lt;br/&gt;creating on chain transactions and the other attaching fees. This is a&lt;br/&gt;common accounting headache. People can also non-interactively fee bump.&lt;br/&gt;&lt;br/&gt;### Taproot&lt;br/&gt;- Spec is still in draft right now, and the code is a bit ahead of the test&lt;br/&gt;vectors.&lt;br/&gt;- The biggest change that has been made is around anchors, which become&lt;br/&gt;more complicated with taproot:&lt;br/&gt;  - The revocation path on to_local takes the script path, so now we need&lt;br/&gt;to reveal data for the anchor.&lt;br/&gt;  - The downside is that revocation is more expensive - 32 more bytes in&lt;br/&gt;the control block.&lt;br/&gt;- The to_remote has a NUMS point, previously we just had multisig keys:&lt;br/&gt;  - If you’re doing a rescan, you won’t know those keys.&lt;br/&gt;  - Now you just need to know the NUMS point and you can always rescan.&lt;br/&gt;  - The NUMS point itself is pretty verifiable, you just start with a&lt;br/&gt;string and hash it.&lt;br/&gt;  - It is constant, you just use it randomized with your key.&lt;br/&gt;- The internal pubkey is constant on to_remote.&lt;br/&gt;- Co-op close [broke into several different discussions]:&lt;br/&gt;  - The idea here is to remove negotiation, since we’ve had disagreement&lt;br/&gt;issues in the past.&lt;br/&gt;  - In this version, the initiator just accepts the fee.&lt;br/&gt;  - Do we want negotiation?&lt;br/&gt;     - In the past we’ve had bugs with fee rate estimates that won’t budge.&lt;br/&gt;  - Why don’t we just pick our fees and send two sets of signatures?&lt;br/&gt;     - This would no longer be symmetric.&lt;br/&gt;     - What if nobody wants to close first? We’d need to work through the&lt;br/&gt;game theory.&lt;br/&gt;     - The person who wants their funds has an incentive.&lt;br/&gt;  - Why is RBF so hard for co-op close?&lt;br/&gt;     - Closing should be marked as RBF, there’s no reason not to.&lt;br/&gt;     - Just pick your fee rate, pay it and then come back and RBF if you’d&lt;br/&gt;like. You can bump/broadcast as much as you like.&lt;br/&gt;     - If we’re going to have something like that where we iterate, why&lt;br/&gt;don’t we just do the simple version where we pick a fee and sign?&lt;br/&gt;     - If you have to pay the whole fee, you have less incentive to sign.&lt;br/&gt;  - Why is this linked to taproot work?&lt;br/&gt;     - It needs to change anyway, and we need to add nonces.&lt;br/&gt;  - What about, whoever wants to close sends a fee rate (paying the fees)&lt;br/&gt;and the responder just sends a signature?&lt;br/&gt;     - If you don’t have enough balance, you can’t close. But why do you&lt;br/&gt;care anyway, you have no funds?&lt;br/&gt;     - We can do this as many times as we want.&lt;br/&gt;  - Shutdown is still useful to clear the air on the channel.&lt;br/&gt;  - When you reconnect, you start a new interaction completely.&lt;br/&gt;  - TL;DR:&lt;br/&gt;     - Shutdown message stays.&lt;br/&gt;     - You send a signature with a fee rate.&lt;br/&gt;     - The remote party signs it.&lt;br/&gt;     - If they disagree, you do it again.&lt;br/&gt;     - It’s all RBF-able.&lt;br/&gt;     - You must retransmit shutdown, and you must respond with a shutdown.&lt;br/&gt;     - You can send nonces at any time:&lt;br/&gt;     - In revoke and ack.&lt;br/&gt;     - On channel re-establish.&lt;br/&gt;- For taproot/musig2 we need nonces:&lt;br/&gt;  - Today we store the commitment signature from the remote party. We don’t&lt;br/&gt;need to store our own signature - we can sign at time of broadcast.&lt;br/&gt;  - To be able to sign you need the verification nonce - you could remember&lt;br/&gt;it, or you could use a counter:&lt;br/&gt;     - Counter based:&lt;br/&gt;     - We re-use shachain and then just use it to generate nonces.&lt;br/&gt;     - Start with a seed, derive from that, use it to generate nonces.&lt;br/&gt;     - This way you don’t need to remember state, since it can always be&lt;br/&gt;generated from what you already have.&lt;br/&gt;     - Why is this safe?&lt;br/&gt;     - We never re-use nonces.&lt;br/&gt;     - The remote party never sees your partial signature.&lt;br/&gt;     - The message always stays the same (the dangerous re-use case is&lt;br/&gt;using the same nonce for different messages).&lt;br/&gt;     - If we used the same nonce for different messages we could leak our&lt;br/&gt;key.&lt;br/&gt;     - You can combine the sighash &#43; nonce to make it unique - this also&lt;br/&gt;binds more.&lt;br/&gt;     - Remote party will only see the full signature on chain, never your&lt;br/&gt;partial one.&lt;br/&gt;  - Each party has sign and verify nonces, 4 total.&lt;br/&gt;  - Co-op close only has 2 because it’s symmetric.&lt;br/&gt;&lt;br/&gt;### Gossip V1.5 vs V2&lt;br/&gt;- How much do we care about script binding?&lt;br/&gt;  - It it’s loose, it can be any script - you can advertise any UTXO.&lt;br/&gt;  - You revel less information, just providing a full signature with the&lt;br/&gt;full taproot public key.&lt;br/&gt;  - If it’s tight, you have to provide two keys and then use the BIP 86&lt;br/&gt;tweak to check that it’s a 2-of-2 multisig.&lt;br/&gt;- Should we fully bind to the script, or just allow any taproot output?&lt;br/&gt;  - Don’t see why we’d want additional overhead.&lt;br/&gt;  - Any taproot output can be a channel - let people experiment.&lt;br/&gt;  - We shouldn’t have cared in the first place, so it doesn’t matter what&lt;br/&gt;it’s bound to.&lt;br/&gt;  - It’s just there for anti-DOS, just need to prove that you can sign.&lt;br/&gt;- Let every taproot output be a lightning channel, amen.&lt;br/&gt;- We’re going to decouple:&lt;br/&gt;  - You still need a UTXO but it doesn’t matter what it looks like.&lt;br/&gt;  - This also allows other channel types in future.&lt;br/&gt;  - We send:&lt;br/&gt;     - UTXO: unspent and in the UTXO set&lt;br/&gt;     - Two node pubkeys&lt;br/&gt;     - One signature&lt;br/&gt;- How much do we care about amount binding?&lt;br/&gt;  - Today it is exact.&lt;br/&gt;     - People use it for capacity graphs.&lt;br/&gt;     - Graph go up.&lt;br/&gt;     - We can watch the chain for spends when we know which UTXO to watch&lt;br/&gt;per-channel.&lt;br/&gt;  - Is there an impact on pathfinding if we over-advertize?&lt;br/&gt;     - We use capacity to pathfind.&lt;br/&gt;     - What’s the worst case if people lie? We don’t use them.&lt;br/&gt;  - If we’ve already agreed that this can be a UTXO that isn’t a channel,&lt;br/&gt;then it shouldn’t matter.&lt;br/&gt;  - If you allow value magnification, we can use a single UTXO to claim for&lt;br/&gt;multiple channels. Even in the most naive version (say 5x), you’re only&lt;br/&gt;revealing 20% of your UTXOs.&lt;br/&gt;  - How much leverage can we allow? The only limit is denial of service.&lt;br/&gt;  - There’s the potential for a market for UTXOs.&lt;br/&gt;- There’s a privacy trade-off:&lt;br/&gt;  - If you one-to-one map them, then there’s no privacy gain.&lt;br/&gt;  - Do we know that you get substantial privacy?&lt;br/&gt;     - Even if you have two UTXOs and two channels, those UTXOs are now not&lt;br/&gt;linked (because you can just use the first one to advertise).&lt;br/&gt;     - This is only assuming that somebody implements it/ infrastructure is&lt;br/&gt;built out.&lt;br/&gt;     - People could create more elaborate things over time, even if&lt;br/&gt;implementations do the “dumb” way.&lt;br/&gt;- Gossip 1.5 (ie, with amount binding) fits in the current flow, V2 (ie,&lt;br/&gt;without amount binding) has a very different scope.&lt;br/&gt;  - It’s a big step, and you don’t truly know until you implement it.&lt;br/&gt;  - What about things like: a very large node and a very small node, whose&lt;br/&gt;announced UTXO do you use?&lt;br/&gt;- We decided not to put UTXOs in node announcement, so we’d put it in&lt;br/&gt;channel announcement:&lt;br/&gt;  - Sometimes there’s a UTXO, sometimes there isn’t.&lt;br/&gt;  - You look at a node’s previous channels to see if they still have&lt;br/&gt;“quota”.&lt;br/&gt;  - If you don’t have “quota” left, you have to include a signature TLV.&lt;br/&gt;- With the goal of publicly announcing taproot channels, 1.5 gets us there&lt;br/&gt;and is a much smaller code change.&lt;br/&gt;- We’ve talked alot about capacity for pathfinding, but we haven’t really&lt;br/&gt;touched on control valves like max HTLC:&lt;br/&gt;  - Currently we don’t use these valves to tune our pathfinding, people&lt;br/&gt;don’t use it.&lt;br/&gt;  - If we get better here, we won’t need capacity.&lt;br/&gt;  - This value is already &amp;lt; 50% anyway.&lt;br/&gt;- If we don’t un-bind amounts now, when will we do it?&lt;br/&gt;  - It’s always a lower priority and everyone is busy.&lt;br/&gt;  - If we allow overcommitting by some factor now, it’s not unrealistic&lt;br/&gt;that it will allow some degree of privacy.&lt;br/&gt;  - Between these features, we have opened the door to leasing UTXOs:&lt;br/&gt;     - Before we do more over-commitment, let’s see if anybody uses it?&lt;br/&gt;- We add channel capacity to the channel announcement with a feature bit:&lt;br/&gt;  - If we turn the feature off, we are on-to-one mapped.&lt;br/&gt;  - But a node can’t use the upgraded version until everyone is upgraded?&lt;br/&gt;     - Our current “get everyone upgraded” cycle is 18 months (or a CVE).&lt;br/&gt;     - If you’re upgrading to 2x multiplier, nobody on 1x will accept that&lt;br/&gt;gossip.&lt;br/&gt;     - People will not pay for privacy (via lost revenue of people not&lt;br/&gt;seeing their gossip).&lt;br/&gt;     - This is additive to defeating chain analysis.&lt;br/&gt;     - Private UTXO management is already complicated, we don’t know the&lt;br/&gt;ideal that we’re working towards.&lt;br/&gt;- What about if we just set it to 2 today?&lt;br/&gt;  - Is 2 qualitatively better than 1 (without script binding) today?&lt;br/&gt;  - Will a marketplace magically emerge if we allow over-commitment?&lt;br/&gt;- We don’t know the implications of setting a global multiplier for routing&lt;br/&gt;or denial of service, and we don’t have a clear view of what privacy would&lt;br/&gt;look like (other than “some” improvement).&lt;br/&gt;- We agree that adding a multiplier doesn’t break the network.&lt;br/&gt;  - People with a lower value will see a subnet when we upgrade.&lt;br/&gt;- We’re going to go with gossip “1.75”:&lt;br/&gt;  - Bind to amount but not script.&lt;br/&gt;  - We include a TLV cut out that paves the way to overcommitment.&lt;br/&gt;&lt;br/&gt;### Multi-Sig Channel Parties&lt;br/&gt;- There are a few paths we could take to get multi-sig for one channel&lt;br/&gt;party:&lt;br/&gt;  - Script: just do it on the script level for the UTXO, but it’s heavy&lt;br/&gt;handed.&lt;br/&gt;  - FROSTy: you end up having to do a bunch of things around fault&lt;br/&gt;tolerance which require a more intense setup. You also may not want the&lt;br/&gt;shachain to be known by all of the parties in the setup (we have an ugly&lt;br/&gt;solution for this, we think).&lt;br/&gt;  - Recursive musig:&lt;br/&gt;- Context: you have one key in the party, but you actually want it to be&lt;br/&gt;multiple keys under the hood. You don’t want any single party to know the&lt;br/&gt;revocation secrets, so you have to each have a part and combine them.&lt;br/&gt;- Ugliest solution: just create distinct values and store them.&lt;br/&gt;- Less ugly solution uses multiple shachains:&lt;br/&gt;  - Right now we have a shachan, and we reveal two leaves of it.&lt;br/&gt;  - You have 8 shachains, and you XOR them all together.&lt;br/&gt;     - Why do we need 8? That’ll serve a 5-of-7.&lt;br/&gt;     - Maybe we need 21? 5 choose 7, we’re not sure.&lt;br/&gt;  - How does this work with K-of-N?&lt;br/&gt;     - Each party has a piece, and you can always combine them in different&lt;br/&gt;combinations (of K pieces) to get to the secret you’re using.&lt;br/&gt;&lt;br/&gt;### PTLCs&lt;br/&gt;- We can do PTLCs in two ways:&lt;br/&gt;  - Regular musig&lt;br/&gt;  - Adaptor signatures&lt;br/&gt;- Do they work with trampoline as defined today?&lt;br/&gt;  - The sender picks all the blinding factors today, so it’s fine.&lt;br/&gt;- There’s a paper called: splitting locally while routing&lt;br/&gt;interdimensionally:&lt;br/&gt;  - You can let intermediate nodes do splitting because they know all the&lt;br/&gt;local values.&lt;br/&gt;  - Then can generate new blinding factors and split out to the next node.&lt;br/&gt;  - Adaptor signatures could possibly be combined for PTLCs that get fanned&lt;br/&gt;out then combined.&lt;br/&gt;- There are a few options for redundant overpayment (ie, “stuckless”&lt;br/&gt;payments):&lt;br/&gt;  - Boomerang:&lt;br/&gt;     - Preimages are coefficients of a polynomial, and you commit to the&lt;br/&gt;polynomial itself.&lt;br/&gt;     - If you have a degree P polynomial and you take P&#43;1 shares, then you&lt;br/&gt;can claim in the other direction.&lt;br/&gt;     - Quite complex.&lt;br/&gt;     - You have to agree on the number of splits in advance.&lt;br/&gt;  - Spear:&lt;br/&gt;     - H2TLC: there are two payment hashes per-HTLC, one if from the sender&lt;br/&gt;and one is from the invoice.&lt;br/&gt;     - When you send a payment, the sender only reveals the right number of&lt;br/&gt;sender preimages.&lt;br/&gt;     - This also gives us HTLC acknowledgement, which is nice.&lt;br/&gt;     - You can concurrently split, and then spray and pray.&lt;br/&gt;     - Interaction is required to get preimages.&lt;br/&gt;- Do we want to add redundant overpayment with PTLCs?&lt;br/&gt;  - We’ll introduce a communication requirement.&lt;br/&gt;  - Do we need to decide that before we do PTLCs?&lt;br/&gt;     - Can we go for the simplest possible option first and then add it?&lt;br/&gt;     - For spear, yes - the intermediate nodes don’t know that it’s two&lt;br/&gt;hashes.&lt;br/&gt;     - We could build them out without thinking about overpayment, and then&lt;br/&gt;mix in a sender secret so that we can claim a subset.&lt;br/&gt;  - We’ll have more round trips, but you also have the ability to ACK HTLCs&lt;br/&gt;that have arrived.&lt;br/&gt;  - Spray and pray uses the same about as you would with our current “send&lt;br/&gt;/ wait / send”, it’s just concurrently not serially.&lt;br/&gt;- Is it a problem that HLTCs that aren’t settled don’t pay fees?&lt;br/&gt;  - You’re paying the fastest routes.&lt;br/&gt;  - Even if it’s random, you still get a constant factor of what we should&lt;br/&gt;have gotten otherwise.&lt;br/&gt;- It makes sense to use onion messages if it’s available to us.&lt;br/&gt;- Are we getting payment acknowledgement? Seems so!&lt;br/&gt;&lt;br/&gt;## Day Two&lt;br/&gt;&lt;br/&gt;### Hybrid Approach to Channel Jamming&lt;br/&gt;- We’ve been talking about jamming for 8 years, back and forth on the&lt;br/&gt;mailing list.&lt;br/&gt;- We’d like to find a way to move forward so that we can get something&lt;br/&gt;done.&lt;br/&gt;- Generally when we think about jamming, there are three “classes” of&lt;br/&gt;mitigations:&lt;br/&gt;  - Monetary: unconditional fees, implemented in various ways.&lt;br/&gt;  - Reputation: locally assessed (global is terrible)&lt;br/&gt;  - Scarce Resources: POW, stake, tokens.&lt;br/&gt;- The problem is that none of these solutions work in isolation.&lt;br/&gt;  - Monetary: the cost that will deter an attacker is unreasonable for an&lt;br/&gt;honest user, and the cost that is reasonable for an honest user is too low&lt;br/&gt;for an attacker.&lt;br/&gt;  - Reputation: any system needs to define some threshold that is&lt;br/&gt;considered good behavior, and an attacker can aim to fall just under it.&lt;br/&gt;Eg: if you need a payment to resolve in 1 minute, you can fall just under&lt;br/&gt;that bar.&lt;br/&gt;  - Scarce resources: like with monetary, pricing doesn’t work out.&lt;br/&gt;     - Paper: proof of work doesn’t work for email spam, as an example.&lt;br/&gt;     - Since scarce resources can be purchased, they could be considered a&lt;br/&gt;subset of monetary.&lt;br/&gt;- There is no silver bullet for jamming mitigation.&lt;br/&gt;- Combination of unconditional fees and reputation:&lt;br/&gt;  - Good behavior grants access to more resources, bad behavior loses it.&lt;br/&gt;  - If you want to fall just below that threshold, we close the gap with&lt;br/&gt;unconditional fees.&lt;br/&gt;- Looking a these three classes implemented in isolation, are there any&lt;br/&gt;unresolved questions that people have - “what about this”?&lt;br/&gt;  - Doesn’t POW get you around the cold start problem in reputation where&lt;br/&gt;if you want to put money in to quickly bootstrap you can?&lt;br/&gt;     - Since POW can be rented, it’s essentially a monetary solution - just&lt;br/&gt;extra steps.&lt;br/&gt;     - We run into the same pricing issues.&lt;br/&gt;- Why these combinations?&lt;br/&gt;  - Since scarce resources are essentially monetary, we think that&lt;br/&gt;unconditional fees are the simplest possible monetary solution.&lt;br/&gt;- Unconditional Fees:&lt;br/&gt;  - As a sender, you’re building a route and losing money if it doesn’t go&lt;br/&gt;through?&lt;br/&gt;     - Yes, but they only need to be trivially small compared to success&lt;br/&gt;case fee budgets.&lt;br/&gt;     - You can also eventually succeed so long as you retry enough, even if&lt;br/&gt;failure rates are very high.&lt;br/&gt;  - How do you know that these fees will be small? The market could decide&lt;br/&gt;otherwise.&lt;br/&gt;     - Routing nodes still need to be competitive. If you put an&lt;br/&gt;unconditional fee of 100x the success case, senders will choose to not send&lt;br/&gt;through you because you have no incentive to forward.&lt;br/&gt;     - We could also add an in-protocol limit or sender-side advisory.&lt;br/&gt;  - With unconditional fees, a fast jamming attack is very clearly paid for.&lt;br/&gt;- Reputation:&lt;br/&gt;  - The easiest way to jam somebody today is to send a bunch of HTLCs&lt;br/&gt;through them and hold them for two weeks. We’re focusing on reputation to&lt;br/&gt;begin with, because in this case we can quite easily identify that people&lt;br/&gt;are doing something wrong (at the extremes).&lt;br/&gt;  - If you have a reputation score that blows up on failed attempts,&lt;br/&gt;doesn’t that fix it without upfront fees?&lt;br/&gt;     - We have to allow some natural rate of failure in the network.&lt;br/&gt;     - An attacker can still aim to fall just below that failure threshold&lt;br/&gt;and go through multiple channels to attack an individual channel.&lt;br/&gt;     - THere isn’t any way to set a bar that an attacker can’t fall just&lt;br/&gt;beneath.&lt;br/&gt;     - Isn’t this the same for reputation? We have a suggestion for&lt;br/&gt;reputation but all of them fail because they can be gamed below the bar.&lt;br/&gt;  - If reputation matches the regular operation of nodes on the network,&lt;br/&gt;you will naturally build reputation up over time.&lt;br/&gt;     - If we do not match reputation accumulation to what normal nodes do,&lt;br/&gt;then an attacker can take some other action to get more reputation than the&lt;br/&gt;rest of the network. We don’t want attackers to be able to get ahead of&lt;br/&gt;regular nodes.&lt;br/&gt;     - Let’s say you get one point for success and one for failure, a&lt;br/&gt;normal node will always have bad reputation. An attacker could then send 1&lt;br/&gt;say payments all day long, pay a fee for it and gain reputation.&lt;br/&gt;- Can you define jamming? Is it stuck HTLCs or a lot of 1 sat HTLCS&lt;br/&gt;spamming up your DB?&lt;br/&gt;  - Jamming is holding HTLCs to or streaming constant failed HTLCs to&lt;br/&gt;prevent a channel from operating.&lt;br/&gt;  - This can be achieved with slots or liquidity.&lt;br/&gt;- Does the system still work if users are playing with reputation?&lt;br/&gt;  - In the steady state, it doesn’t really matter whether a node has a good&lt;br/&gt;reputation or not.&lt;br/&gt;  - If users start to set reputation in a way that doesn’t reflect normal&lt;br/&gt;operation of the network, it will only affect their ability to route when&lt;br/&gt;under attack.&lt;br/&gt;- Isn’t reputation monetary as well, as you can buy a whole node?&lt;br/&gt;  - There is a connection, and yes in the extreme case you can buy an&lt;br/&gt;entire identity.&lt;br/&gt;  - Even if you do this, the resource bucketing doesn’t give you a “golden&lt;br/&gt;ticket” to consume all slots/liquidity with good reputation, so you’re&lt;br/&gt;still limited in what you can do.&lt;br/&gt;- Can we learn anything from research elsewhere / the way things are done&lt;br/&gt;on the internet?&lt;br/&gt;  - A lot of our confidence that these solutions don’t work in isolation is&lt;br/&gt;based on previous work looking at spam on the internet.&lt;br/&gt;  - Lightning is also unique because it is a monetary network - we have&lt;br/&gt;money built in, so we have different tools to use.&lt;br/&gt;- To me, it seems like if the scarce resource that we’re trying to allocate&lt;br/&gt;is HTLC slots and upfront fees you can pay me upfront fees for the worst&lt;br/&gt;case (say two weeks) and then if it settles if 5 seconds you give it back?&lt;br/&gt;  - The dream solution is to only pay for the amount of time that a HTLC is&lt;br/&gt;held in flight.&lt;br/&gt;  - The problem here is that there’s no way to prove time when things go&lt;br/&gt;wrong, and any solution without a universal clock will fall back on&lt;br/&gt;cooperation which breaks down in the case of an attack.&lt;br/&gt;  - No honest user will be willing to pay the price for the worst case,&lt;br/&gt;which gets us back to the pricing issue.&lt;br/&gt;  - There’s also an incentives issue when the “rent” we pay for these two&lt;br/&gt;weeks worst case is more than the forwarding fee, so a router may be&lt;br/&gt;incentivized to just hang on to that amount and bank it.&lt;br/&gt;  - We’ve talked about forwards and backwards fees extensively on the&lt;br/&gt;mailing list:&lt;br/&gt;     - They’re not large enough to be enforceable, so somebody always has&lt;br/&gt;to give the money back off chain.&lt;br/&gt;     - This means that we rely on cooperation for this refund.&lt;br/&gt;     - The complexity of this type of system is very high, and we start to&lt;br/&gt;open up new “non-cooperation” concerns - can we be attacked using this&lt;br/&gt;mechanism itself?&lt;br/&gt;     - Doesn’t an attacker need to be directly connected to you to steal in&lt;br/&gt;the non-cooperative case?&lt;br/&gt;     - At the end of the day, somebody ends up getting robbed when we can’t&lt;br/&gt;pull the money from the source (attacker).&lt;br/&gt;- Does everybody feel resolved on the statement that we need to take this&lt;br/&gt;hybrid approach to clamp down on jamming? Are there any “what about&lt;br/&gt;solution X” questions left for anyone? Nothing came up.&lt;br/&gt;&lt;br/&gt;### Reputation for Channel Jamming&lt;br/&gt;- Resource bucketing allows us to limit the number of slots and amount of&lt;br/&gt;liquidity that are available for nodes that do not have good reputation.&lt;br/&gt;  - No reputation system is perfect, and we will always have nodes that&lt;br/&gt;have low-to-no activity, or are new to the network that we can’t form&lt;br/&gt;reputation scores for.&lt;br/&gt;  - It would be a terrible outcome for lightning to just drop these HTLCs,&lt;br/&gt;so we reserve some portion of resources for them.&lt;br/&gt;- We have two buckets: protected and general (split 50/50 for the purposes&lt;br/&gt;of explanation, but we’ll find more intelligent numbers with further&lt;br/&gt;research):&lt;br/&gt;  - In the normal operation of the network, it doesn’t matter if you get&lt;br/&gt;into the protected slots. When everyone is using the network as usual,&lt;br/&gt;things clear out quickly so the general bucket won’t fill up.&lt;br/&gt;  - When the network comes under attack, an attacker will fill up slots and&lt;br/&gt;liquidity in the general bucket. When this happens, only nodes with good&lt;br/&gt;reputation will be able to use the protected slots, other HTLCs will be&lt;br/&gt;dropped.&lt;br/&gt;  - During an attack, nodes that don’t have a good reputation will&lt;br/&gt;experience lower quality of service - we’ll gradually degrade.&lt;br/&gt;- What do you mean by the steady state?&lt;br/&gt;  - Nobody is doing anything malicious, payments are clearing out as usual&lt;br/&gt;- not sitting on the channel using all 483 slots.&lt;br/&gt;- We decide which bucket the HTLC goes into using two signals:&lt;br/&gt;  - Reputation: whether the upstream node had good reputation with our&lt;br/&gt;local node.&lt;br/&gt;  - Endorsement: whether the upstream node has indicated that the HTLC is&lt;br/&gt;expected to be honest (0 if uncertain, 1 if expected to be honest).&lt;br/&gt;  - If reputation &amp;amp;&amp;amp; endorsement, then we’ll allow the HTLC into protected&lt;br/&gt;slots and forward the HTLC on with endorsed=1.&lt;br/&gt;  - We need reputation to add a local viewpoint to this endorsement signal&lt;br/&gt;- otherwise we can just trivially be jammed if we just copy what the&lt;br/&gt;incoming peer said.&lt;br/&gt;  - We need endorsement to be able to propagate this signal over multiple&lt;br/&gt;hops - once it drops, it’s dropped for good.&lt;br/&gt;  - There’s a privacy questions for when senders set endorsed:&lt;br/&gt;     - You can flip a coin or set the endorsed field for your payments at&lt;br/&gt;the same proportion as you endorse forwards.&lt;br/&gt;- We think about reputation in terms of the maximum amount of damage that&lt;br/&gt;can be done by abusing it:&lt;br/&gt;  - Longest CLTV that we allow in the future from current height 2016&lt;br/&gt;blocks (~2 weeks): this it the longest that we can be slow jammed.&lt;br/&gt;  - Total route length ~27 hops: this is the largest amplifying factor an&lt;br/&gt;attacker can have.&lt;br/&gt;- We use the two week period to calculate the node’s total routing revenue,&lt;br/&gt;this is what we have to lose if we are jammed.&lt;br/&gt;- We then look at a longer period, 10x the two week period to see what the&lt;br/&gt;peer has forwarded us over that longer period.&lt;br/&gt;- If they have forwarded us more over that longer period than what we have&lt;br/&gt;to loose in the shorter period, then they have good reputation.&lt;br/&gt;- This is the damage that is observable to us - there are values outside of&lt;br/&gt;the protocol that are also affected by jamming:&lt;br/&gt;  - Business reliability, joy of running a node, etc&lt;br/&gt;  - We contend that these values are inherently unmeasurable to protocol&lt;br/&gt;devs:&lt;br/&gt;     - End users can’t easily put a value on them.&lt;br/&gt;     - If we try to approximate them, users will likely just run the&lt;br/&gt;defaults.&lt;br/&gt;- One of the simplest attacks we can expect is an “about turn” where an&lt;br/&gt;attacker behaves perfectly and then attacks:&lt;br/&gt;  - So, once you have good reputation we can’t just give you full access to&lt;br/&gt;protected slots.&lt;br/&gt;- We want to reward behavior that we consider to be honest, so we consider&lt;br/&gt;“effective” HTLC fees - the fee value that a HTLC has given us relative to&lt;br/&gt;how long it took to resolve:&lt;br/&gt;  - Resolution period: the amount of time that a HTLC can reasonably take&lt;br/&gt;to resolve - based on MPP timeout / 1 minute.&lt;br/&gt;  - We calculate opportunity cost for every minute after the first&lt;br/&gt;“allowed” minute as the fees that we could have earned with that&lt;br/&gt;liquidity/slot.&lt;br/&gt;  - Reputation is only negatively affected if you endorsed the HTLC.&lt;br/&gt;  - If you did not endorse, then you only gain reputation for fast success&lt;br/&gt;(allowing bootstrapping).&lt;br/&gt;- When do I get access to protected slots?&lt;br/&gt;  - When you get good reputation, you can use protected slots for your&lt;br/&gt;endorsed HTLCs but there is a cap on the number of in flight HLTCs that are&lt;br/&gt;allowed.&lt;br/&gt;  - We treat every HLTC as if it will resolve with the worst possible&lt;br/&gt;outcome, and temporarily dock reputation until it resolves:&lt;br/&gt;     - In the good case, it resolves quickly and you get your next HLTC&lt;br/&gt;endorsed.&lt;br/&gt;     - In the bad case, you don’t get any more HTLCs endorsed and you&lt;br/&gt;reputation remains docked once it resolves (slowly).&lt;br/&gt;- Wouldn’t a decaying average be easier to implement, rather than a sliding&lt;br/&gt;window?&lt;br/&gt;  - If you’re going to use large windows, then a day here or there doesn’t&lt;br/&gt;matter so much.&lt;br/&gt;- Have you thought about how to make this more visible to node operators?&lt;br/&gt;  - In the steady state we don’t expect this to have any impact on routing&lt;br/&gt;operations, so they’ll only need a high level view.&lt;br/&gt;- Can you elaborate on slots vs liquidity for these buckets?&lt;br/&gt;  - Since we have a proportional fee for HTLCs, this indirectly represents&lt;br/&gt;liquidity: larger HTLCs will have larger fees so will be more “expensive”&lt;br/&gt;to get endorsed.&lt;br/&gt;- Where do we go from here?&lt;br/&gt;  - We would like to dry run with an experimental endorsement field, and&lt;br/&gt;ask volunteers to gather data for us.&lt;br/&gt;  - Are there any objections to an experimental TLV?&lt;br/&gt;     - No.&lt;br/&gt;     - We could also test multiple endorsement signals / algorithms in&lt;br/&gt;parallel.&lt;br/&gt;- In your simulations, have you looked at the ability to segment off&lt;br/&gt;attacks as they happen? To see how quickly an attacker&amp;#39;s reputation drops&lt;br/&gt;off, and that you have a protected path?&lt;br/&gt;  - Not yet, but plan to.&lt;br/&gt;- Do any of these assumptions change with trampoline? Don’t think it’s&lt;br/&gt;related.&lt;br/&gt;- Your reputation is at stake when you endorse, when do you decide to&lt;br/&gt;endorse my own payments?&lt;br/&gt;  - You do the things you were already doing to figure out a good route.&lt;br/&gt;Paths that you think have good liquidity, and have had success with in the&lt;br/&gt;past.&lt;br/&gt;- What about redundant overpayment, some of your HTLCs are bound to fail?&lt;br/&gt;  - Provided that they fail fast, it shouldn’t be a problem.&lt;br/&gt;- Is it possible that the case where general slots are perpetually filled&lt;br/&gt;by attackers becomes the steady state? And we can’t tell the difference&lt;br/&gt;between a regular user and attacker.&lt;br/&gt;  - This is where unconditional fees come in, if somebody wants to&lt;br/&gt;perpetually fill up the general bucket they have to pay for it.&lt;br/&gt;- Is there anything we’d like to see that will help us have move confidence&lt;br/&gt;here?&lt;br/&gt;  - What do you think is missing from the information presented?&lt;br/&gt;     - We can simulate the steady state / create synthetic data, but can’t&lt;br/&gt;simulate every attack. Would like to spend more time thinking through the&lt;br/&gt;ways this could possibly be abused.&lt;br/&gt;  - Would it help to run this on signet? Or scaling lightning?&lt;br/&gt;     - Its a little easier to produce various profiles of activity on&lt;br/&gt;regtest[.&lt;br/&gt;&lt;br/&gt;### Simplified Commitments&lt;br/&gt;- Simplified commitments makes our state machine easier to think about.&lt;br/&gt;  - Advertise option_simplified_commitment: once both peers upgrade, we can&lt;br/&gt;just use it.&lt;br/&gt;  - Simplify our state machine before we make any more changes to it.&lt;br/&gt;- Right now Alice and Bob can have changes in flight at the same time:&lt;br/&gt;  - Impossible to debug, though technically optimal.&lt;br/&gt;  - Everyone is afraid of touching the state machine.&lt;br/&gt;- We can simplify this by introducing turn taking:&lt;br/&gt;  - First turn is taken by the lower pubkey.&lt;br/&gt;  - Alice: update / commit.&lt;br/&gt;  - Bob: revoke and ack.&lt;br/&gt;  - If alice wants to go when it’s bob’s turn, she can just send a message.&lt;br/&gt;  - Bob can ignore it, or yield and accept it.&lt;br/&gt;  - This has been implemented in CLN for LNSymmetry&lt;br/&gt;- It’s less code to not have the ignore message, but for real performance&lt;br/&gt;we’ll want it. Don’t want to suck up all of that latency.&lt;br/&gt;- The easiest way is to re-establish is to upgrade on re-establish.&lt;br/&gt;  - If it wasn’t somebody’s turn, you can just do lowest pubkey.&lt;br/&gt;  - If it was somebody’s turn, you can just resume it.&lt;br/&gt;- We could also add REVOKE and NACK:&lt;br/&gt;  - Right now we have no way to refuse updates.&lt;br/&gt;  - Why do we want a NACK?&lt;br/&gt;     - You currently have to express to the other side what they can put in&lt;br/&gt;your channel because you can’t handle it if they give you something you&lt;br/&gt;don&amp;#39;t’ like (eg, a HTLC below min_htlc).&lt;br/&gt;     - You can likely force a break by trying to send things that aren&amp;#39;t&lt;br/&gt;allowed, which is a robustness issue.&lt;br/&gt;     - We just force close when we get things we don’t allow.&lt;br/&gt;     - Could possibly trigger force closes.&lt;br/&gt;- There’s an older proposal called fastball where you send a HTLC and&lt;br/&gt;advise that you’re going to fail it.&lt;br/&gt;  - If Alice gets it, she can reply with UNADD.&lt;br/&gt;  - If you don’t get it in time,you just go through the regular cycle.&lt;br/&gt;- When you get commitment signed, you could NACK it. This could mean you’re&lt;br/&gt;failing the whole commitment, or just a few HTLCs.&lt;br/&gt;  - You can’t fail a HTLC when you’ve sent commitment signed, so you need a&lt;br/&gt;new cycle to clear it out.&lt;br/&gt;  - What NACK says is: I’ve ignored all of your updates and I’m progressing&lt;br/&gt;to the next commitment.&lt;br/&gt;- Revoke and NACK is followed by commitment signed where you clear out all&lt;br/&gt;the bad HTLCs, ending that set of updates.&lt;br/&gt;- You have to NACk and then wait for another commitment signature, signing&lt;br/&gt;for the same revocation number.&lt;br/&gt;- Bob never has to hold a HTLC that he doesn&amp;#39;t want from Alice on his&lt;br/&gt;commitment.&lt;br/&gt;- This is bad for latency, good for robustness.&lt;br/&gt;  - Alice can send whatever she wants, and Bob has a way to reject it.&lt;br/&gt;  - There are a whole lot of protocol violations that Alice can force a&lt;br/&gt;force close with, now they can be NACKed.&lt;br/&gt;- This is good news for remote signers where policy has been violate&lt;br/&gt;because we have cases where policy has been violated and our only way right&lt;br/&gt;now is the close the channel.&lt;br/&gt;- You still want Alice to know Bob’s limits so that you can avoid endless&lt;br/&gt;invalid HTLCs.&lt;br/&gt;- Simplified commitment allows us to do things more easily in the protocol.&lt;br/&gt;  - When we specced this all out, we didn’t foresee that update fee would&lt;br/&gt;be so complicated, with this we know update fee will be correct.&lt;br/&gt; - If we don’t do this, we have to change update fee?&lt;br/&gt;     - Sender of the HTLC adds fee.&lt;br/&gt;     - Or fixed fee.&lt;br/&gt;- Even if we have zero fees, don’t we still have HTLC dust problems?&lt;br/&gt;  - You can have a bit on update add that says the HTLC is dust.&lt;br/&gt;  - You can’t be totally fee agnostic because you have to be able to&lt;br/&gt;understand when to trim HLTCs.&lt;br/&gt;- Even update fee aside, shouldn’t things just be simpler?&lt;br/&gt;- Would a turn based protocol have implications for musig nonces?&lt;br/&gt;  - If you’re taking a turn, it’s a session.&lt;br/&gt;  - You’d need to have different nonces for different sessions.&lt;br/&gt;- We should probably do this before we make another major change, it&lt;br/&gt;simplifies things.&lt;br/&gt;- Upgrade on re-establish is pretty neat because you can just tell them&lt;br/&gt;what type you’d like.&lt;br/&gt;  - This worked very well for CLN getting rid of static remote.&lt;br/&gt;- What about parameter exchange?&lt;br/&gt;  - There’s a version of splice that allows you to add new inputs and&lt;br/&gt;outputs.&lt;br/&gt;  - Splice no splice which means that you can only make a new commitment&lt;br/&gt;transaction, no on-chain work.&lt;br/&gt;  - Seems like you can get something like dynamic commitments with this,&lt;br/&gt;and it’s a subset of splicing.&lt;br/&gt;&lt;br/&gt;## Day Three&lt;br/&gt;&lt;br/&gt;### Meta Spec Process&lt;br/&gt;- Do we want to re-evaluate the concept of a “living document”?&lt;br/&gt;  - It’s only going to get longer.&lt;br/&gt;  - As we continue to update, we have two options:&lt;br/&gt;     - Remove old text and replace entirely.&lt;br/&gt;     - Do an extension and then one day replace.&lt;br/&gt;- If implementing from scratch, what would you want to use?&lt;br/&gt;  - Nobody is currently doing this.&lt;br/&gt;  - By the time they finished, everything would have move.&lt;br/&gt;- The protocol isn’t actually that modular:&lt;br/&gt;  - Except for untouched BOLT-08, which can be read in isolation.&lt;br/&gt;  - Other things have tentacles.&lt;br/&gt;     - We should endeavor for things to be as modular as possible.&lt;br/&gt;- Back in Adelaide we have a version with a set of features.&lt;br/&gt;  - We have not re-visited that discussion.&lt;br/&gt;  - Is it possible for us to come up with versions and hold ourselves&lt;br/&gt;accountable to them?&lt;br/&gt;  - If we’re going to start having different ideas of what lightning looks&lt;br/&gt;like, versioning helps.&lt;br/&gt;  - Versioning is not tied one-to-one to the protocol:&lt;br/&gt;     - Features make it less clean because you have a grab bag of features&lt;br/&gt;on top of any “base” version we decide on.&lt;br/&gt;     - Does a version imply that we’re implementing in lock step?&lt;br/&gt;  - If we do extraction, remove and cleanup, we could say that we’re on&lt;br/&gt;version X with features A/B/C.&lt;br/&gt;- How confident are we that we can pull things out? Only things that are&lt;br/&gt;brand new will be easy to do this with.&lt;br/&gt;- Keeping context in your head is hard, and jumping between documents&lt;br/&gt;breaks up thought.&lt;br/&gt;  - Should we fully copy the current document and copy it?&lt;br/&gt;  - Not everything is a rewrite, some things are optional.&lt;br/&gt;- What’s our design goal?&lt;br/&gt;  - To be able to more easily speak about compatibility.&lt;br/&gt;  - To have a readable document for implementation.&lt;br/&gt;- A single living document works when we were all making a unified push,&lt;br/&gt;now it makes less sense:&lt;br/&gt;  - You can’t be compliant “by commit” because things are implemented in&lt;br/&gt;different orders.&lt;br/&gt;  - We can’t fix that with extensions, they’re hard to keep up to date?&lt;br/&gt;     - RFCs work like this, they have replacement ones.&lt;br/&gt;- BOLT 9 can act as a control bolt because it defines features.&lt;br/&gt;- Extensions seem helpful:&lt;br/&gt;  - Can contain more rationale.&lt;br/&gt;  - You can have spaghetti and ravioli code, these could be raviolo&lt;br/&gt;extensions.&lt;br/&gt;  - If everything is an extension BOLT with minimal references, we avoid&lt;br/&gt;the if-else-ey structure we have right now.&lt;br/&gt;- For small things, we can just throw out the old stuff.&lt;br/&gt;- If it were possible to modularize and have working groups, that would be&lt;br/&gt;great but it seems like we’d tread on each other’s toes.&lt;br/&gt;- We must avoid scenarios like vfmanprint:&lt;br/&gt;  - The return value says “vfprintf returns -1 on error”&lt;br/&gt;  - The next sentence says “this was true until version 2”&lt;br/&gt;  - But nobody reads the next sentence.&lt;br/&gt;- Cleanup PRs won’t be looked at, and need to be maintained as new stuff&lt;br/&gt;gets in.&lt;br/&gt;- Eg: legacy onion - we just looked at network use and removed when it was&lt;br/&gt;unused:&lt;br/&gt;  - Rip out how you generate them.&lt;br/&gt;  - Rip out how you handle them.&lt;br/&gt;- One of the issues with deleting old text is that existing software that&lt;br/&gt;delete the old text is annoying when you run into interop issues on the old&lt;br/&gt;spec version.&lt;br/&gt;  - If there are real things to deal with on the network, we must keep them.&lt;br/&gt;  - We must reference old commits so that people at least know what was&lt;br/&gt;there and can do git archeology to find out what it used to be.&lt;br/&gt;- We can remove some things today!&lt;br/&gt;  - Static remote&lt;br/&gt;  - Non-zero fee anchors&lt;br/&gt;  - ANYSEGWIT is default (/compulsory)&lt;br/&gt;  - Payment secrets / basic MPP.&lt;br/&gt;- Should we have regular cleanups?&lt;br/&gt;  - Even if we do, they need review.&lt;br/&gt;- For now, let’s do wholesale replacement to avoid cleanup.&lt;br/&gt;- The proposals folder is nice to know what’s touched by what changes.&lt;br/&gt;- Rationale sections need improvement: sometimes they’re detailed,&lt;br/&gt;sometimes vague.&lt;br/&gt;- Once a feature becomes compulsory on the network we can possibly ignore&lt;br/&gt;it.&lt;br/&gt;- What about things that are neither bolts nor blips - like inbound fees?&lt;br/&gt;  - Why does it need to be merged anywhere?&lt;br/&gt;  - If it’s an implementation experiment, we can merge it once we’re&lt;br/&gt;convinced it works.&lt;br/&gt;  - If we reach a stage where we all agree it should be universally done,&lt;br/&gt;then it should be a bolt.&lt;br/&gt;     - This is a BLIP to BOLT path.&lt;br/&gt;- Communication:&lt;br/&gt;  - We’re not really using IRC anymore - bring it back!&lt;br/&gt;  - We need a canonical medium, recommit to lightning-dev.&lt;br/&gt;&lt;br/&gt;### Async Payments/ Trampoline&lt;br/&gt;- Blinded payments are a nice improvement for trampoline because you don’t&lt;br/&gt;know where the recipient is.&lt;br/&gt;- The high level idea is:&lt;br/&gt;  - Light nodes only see a small part of the network that they are close&lt;br/&gt;to.&lt;br/&gt;  - Recipients only give a few trampolines in the network that they can be&lt;br/&gt;reached via.&lt;br/&gt;  - In the onion for the first trampoline, there will be an onion for the&lt;br/&gt;second trampoline.&lt;br/&gt;  - You just need to give a trampoline a blinded path and they can do the&lt;br/&gt;rest.&lt;br/&gt;- If you only have one trampoline, they can probably make a good guess&lt;br/&gt;where the payment came from (it’s in the reachable neighborhood).&lt;br/&gt;- Is there a new sync mode for trampoline gossip?&lt;br/&gt;  - We’d now need radius-based gossip rather than block based.&lt;br/&gt;  - The trust version is just getting this from a LSP.&lt;br/&gt;  - In cold bootstrap, you’re probably going to open a channel so you ask&lt;br/&gt;them for gossip.&lt;br/&gt;- Can you split MPP over trampoline? Yes.&lt;br/&gt;- Routing nodes can learn more about the network because they make their&lt;br/&gt;own attempts.&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230719/ea8a0ec2/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230719/ea8a0ec2/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-07-21T12:47:43Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs96nxzjpesm4zwjysm3ffk7n8v6lsphch58yk6h77ct5sm0hjgx3qzyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcunf8es</id>
    
      <title type="html">📅 Original date posted:2023-01-30 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs96nxzjpesm4zwjysm3ffk7n8v6lsphch58yk6h77ct5sm0hjgx3qzyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcunf8es" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs86y8vpvh5ksacdrlm6yfsryxv7y0r8629fv3lfw4knvdzu2et2zg2nk7d7&#39;&gt;nevent1q…k7d7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-01-30&lt;br/&gt;🗒️ Summary of this message: The Lightning Network community resumed their fortnightly channel jamming mitigation calls for 2023, discussing upgrade mechanisms and upfront fees.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi list,&lt;br/&gt;&lt;br/&gt;On Monday last week we resumed our fortnightly channel jamming&lt;br/&gt;mitigation calls for 2023.&lt;br/&gt;&lt;br/&gt;Details for the next call:&lt;br/&gt;* Monday 02/06 @ 18:00 UTC&lt;br/&gt;* &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;* Agenda: &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/2&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/2&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;# Meeting Summary&lt;br/&gt;This email attempts to summarize the discussion, but is of course&lt;br/&gt;subject to my errors and opinions so the full transcript is available&lt;br/&gt;at [1]. It is (imperfectly) AI generated, so please reach out to myself&lt;br/&gt;or Clara if you&amp;#39;d like clarification for a specific section.&lt;br/&gt;&lt;br/&gt;1. Upgrade Mechanisms&lt;br/&gt;The first topic of discussion was around how we would go about&lt;br/&gt;upgrading the network to support an anti-jamming mitigation. Most&lt;br/&gt;solutions share the following characteristics:&lt;br/&gt;  * They will likely require a network wide upgrade: when a sender&lt;br/&gt;    makes a payment, the full path will need to understand the new&lt;br/&gt;    feature bit for it to be used.&lt;br/&gt;  * Sending nodes are unlikely to be incentivised to upgrade to&lt;br/&gt;    support a channel jamming mitigation, as jamming mitigations incur&lt;br/&gt;    additional cost (be it in the form of upfront fees, tokens or some&lt;br/&gt;    other mechanism).&lt;br/&gt;  * Routing nodes have no way of knowing whether a payment comes from&lt;br/&gt;    a node that is not upgraded, or simply doesn&amp;#39;t want to pay the&lt;br/&gt;    additional cost introduced by a jamming mitigation.&lt;br/&gt;&lt;br/&gt;It was generally agreed that the network is still in an early enough&lt;br/&gt;stage that it is fair for relaying nodes to initially upgrade but not&lt;br/&gt;enforce the feature, and later look at forwarding traffic to determine&lt;br/&gt;whether it is appropriate to require the feature. This will require&lt;br/&gt;sending nodes to opt-in to the new feature before the network can&lt;br/&gt;widely enforce it, as no rational routing node will require a feature&lt;br/&gt;which would reduce its ability to serve un-upgraded traffic (unless&lt;br/&gt;under attack, which is not the case at present).&lt;br/&gt;&lt;br/&gt;A note was also made that wallets tend to upgrade less frequently, in&lt;br/&gt;part because some providers run forked versions of LN implementations,&lt;br/&gt;so this horizon may be quite long. It was emphasized that this type of&lt;br/&gt;network upgrade would require input from wallets, designers and&lt;br/&gt;application developers anyway, so hopefully by the time we look to&lt;br/&gt;deploy a change there is rough consensus among the Lightning community&lt;br/&gt;already.&lt;br/&gt;&lt;br/&gt;2. Upfront Fees&lt;br/&gt;Next, we discussed the draft proposal for upfront fees [2] that&lt;br/&gt;implements the first of a two-part jamming mitigation described in [3].&lt;br/&gt;As it stands, the PR describes the simplest possible way to introduce&lt;br/&gt;upfront fees to the protocol:&lt;br/&gt;  * Upfront fees are expressed as a ppm of a channel&amp;#39;s success-case&lt;br/&gt;    fees, and charged on the outgoing link of a route.&lt;br/&gt;  * Nodes can advertise custom upfront fee rates if desired, but to&lt;br/&gt;    save gossip bandwidth we assume a network-wide default of 1%.&lt;br/&gt;  * Upfront fees accumulate along the route (as htlc payment amounts&lt;br/&gt;    do), and are simply pushed to the `to_remote` balance on&lt;br/&gt;    `update_add_htlc`.&lt;br/&gt;  * Final hop nodes advertise an upfront fee policy in bolt 11 invoices&lt;br/&gt;    (or bolt 12 blinded routes) which is sufficiently padded to&lt;br/&gt;    obfuscate their location in the route.&lt;br/&gt;&lt;br/&gt;The interaction between upfront fees and possible future protocol&lt;br/&gt;changes such as inbound fees and negative fees was briefly discussed,&lt;br/&gt;specifically the case where a node sets low (or negative) fees to&lt;br/&gt;attract traffic then fails payments to accumulate upfront fees. As is,&lt;br/&gt;all implementations’ algorithms optimize for factors other than fees -&lt;br/&gt;specifically avoiding a node once it&amp;#39;s produced failures - and we&lt;br/&gt;suspect that careful sender-side behavior will mitigate this risk.&lt;br/&gt;However, it was also acknowledged that a node that attempts this attack&lt;br/&gt;may be able to fool multiple individual senders and still be able to&lt;br/&gt;accumulate some fees.&lt;br/&gt;&lt;br/&gt;We then discussed the shortcomings of the &amp;#34;simplest possible&amp;#34; upfront&lt;br/&gt;fees in [2], specifically focused on the following scenario where&lt;br/&gt;nodes receive 1% of their success-case fees as an upfront payment:&lt;br/&gt;  * Alice is sending a payment to Dave, who is a popular sink node in&lt;br/&gt;    the network.&lt;br/&gt;  * Bob -&amp;gt; Carol has low/default routing policy: 1000 msat success&lt;br/&gt;    case / 10 msat upfront fee&lt;br/&gt;  * Carol -&amp;gt; Dave has high fees: 400,000 msat success case / 4000 msat&lt;br/&gt;    upfront fee&lt;br/&gt;  * Dave advertises no success case fee (is recipient) / 100 msat of&lt;br/&gt;    upfront fee chosen for his invoice.&lt;br/&gt;&lt;br/&gt;Alice ------ Bob ------ Carol ------ Dave&lt;br/&gt;&lt;br/&gt;Since we need to source all of these funds from the sender (Alice), the&lt;br/&gt;forwarding of funds is as follows:&lt;br/&gt;  * Alice pushes 4110 msat to Bob.&lt;br/&gt;  * Bob _should_ push 4100 msat to Carol, claiming his 10 msat upfront&lt;br/&gt;    fee.&lt;br/&gt;  * Carol _should_ push 100 msat to Dave, claiming her 4000 msat&lt;br/&gt;    upfront fee.&lt;br/&gt;&lt;br/&gt;However, Bob has no real incentive to forward the HTLC to Carol and&lt;br/&gt;push her the 4100 msat because that value is more than the fees he&amp;#39;ll&lt;br/&gt;earn from successfully forwarding and settling the HTLC (10 msat&lt;br/&gt;upfront fees &#43; 1000 msat success case fees). It&amp;#39;s worth noting that&lt;br/&gt;this type of fee differential already exists in the network today - I&lt;br/&gt;got these example numbers by looking at the fee rates of the Loop&lt;br/&gt;node&amp;#39;s peers [4].&lt;br/&gt;&lt;br/&gt;There were a few points discussed around this issue:&lt;br/&gt;  * Whether we should look into a more complicated approach that&lt;br/&gt;    includes a &amp;#34;proof of forward&amp;#34; secret in the next node&amp;#39;s onion which&lt;br/&gt;    must be supplied to claim the upfront fee.&lt;br/&gt;  * Discussion about whether these order of magnitude fee differences&lt;br/&gt;    will exist in an efficient market (differing opinions).&lt;br/&gt;  * Whether Bob _would_ steal the upfront fee by dropping the payment,&lt;br/&gt;    as it&amp;#39;ll impact nodes&amp;#39; desire to route through them in future.&lt;br/&gt;  * Is there a way to deliver upfront fees to nodes along the route&lt;br/&gt;    *without* them adding up along the route (other than the naive&lt;br/&gt;    version of sending each hop a payment, which comes with its own&lt;br/&gt;    problems)? Seems not, but bright ideas are wanted and welcome!&lt;br/&gt;  * That nodes will decide where they fall in the trade-off of setting&lt;br/&gt;    upfront fees to cover their opportunity cost for high routing fees&lt;br/&gt;    and market pressure to keep these fees low for the sake of&lt;br/&gt;    remaining competitive.&lt;br/&gt;&lt;br/&gt;A few people mentioned the desire to keep an upfront fee solution as&lt;br/&gt;simple as possible, but generally it seemed that a solution where the&lt;br/&gt;accumulated upfront fees at any point along a route exceed any single&lt;br/&gt;hop&amp;#39;s expected success case fees is unacceptable because incentives&lt;br/&gt;are misaligned (even if we can properly attribute errors with [5]).&lt;br/&gt;&lt;br/&gt;We touched briefly on a few &amp;#34;proof of forwarding&amp;#34; solutions for&lt;br/&gt;upfront fees:&lt;br/&gt;  * Using a locking mechanism that relies on a secret that is provided&lt;br/&gt;    by the next node&amp;#39;s onion.&lt;br/&gt;  * A taproot tree for all HTLCs where each leaf has a subset of HTLCs,&lt;br/&gt;    and fees could be incorporated here (summary note: apparently some&lt;br/&gt;    work has been done here, but I couldn&amp;#39;t find the link).&lt;br/&gt;  * If we&amp;#39;re confident that a more complicated solution will solve many&lt;br/&gt;    problems, then we should pursue them, otherwise a simple solution&lt;br/&gt;    is possibly a _good enough_ first step.&lt;br/&gt;&lt;br/&gt;There was some discussion about how we want to go about addressing&lt;br/&gt;spamming in the network:&lt;br/&gt;  * Is it good enough to deploy something today that just charges a&lt;br/&gt;    simple, capped upfront fee (eg 1 sat per hop) that solves jamming&lt;br/&gt;    for the current state of the network and allows us to learn&lt;br/&gt;    something then iterate?&lt;br/&gt;  * Should our first attempt at solving this issue be for a future&lt;br/&gt;    steady state where nodes have significant traffic and nodes face&lt;br/&gt;    real opportunity cost (in the form of lost revenue) if they are&lt;br/&gt;    targeted by a jamming attack?&lt;br/&gt;&lt;br/&gt;3. Circuit Breaker Update&lt;br/&gt;  * Circuit breaker has a UI now, and some issues are being opened in&lt;br/&gt;    the repo so people have at minimum gone through the effort to spin&lt;br/&gt;    it up.&lt;br/&gt;  * It&amp;#39;s still pretty manual, but it does provide node operators with&lt;br/&gt;    information about the payment failures on their nodes (not easily&lt;br/&gt;    surfaced in many LN UIs).&lt;br/&gt;  * Hoping to get insights into stuck HTLCs and spam HTLCs so that we&lt;br/&gt;    can learn from real life experience.&lt;br/&gt;  * Circuit breaker is generally pushing in the same direction as the&lt;br/&gt;    reputation scheme in [3], just a more manual one. We could&lt;br/&gt;    possibly use it to visualize the endorsement system in [3] before&lt;br/&gt;    enforcing it.&lt;br/&gt;  * While circuit breaker isn&amp;#39;t necessarily *the* solution to solving&lt;br/&gt;    jamming on LN, it provides us with some data points and a&lt;br/&gt;    practical way for individual operators to address spamming of&lt;br/&gt;    their nodes.&lt;br/&gt;&lt;br/&gt;3. Tokens Update&lt;br/&gt;Since our last discussion an architecture document was added to the&lt;br/&gt;proposal [6], details in the mailing list post [7]. The main goal is&lt;br/&gt;to try to dissociate the people paying the fees from those gaining the&lt;br/&gt;benefits from the credentials, so that credentials can be paid by a&lt;br/&gt;LSP (for example).&lt;br/&gt;&lt;br/&gt;4. Reputation discussions in LSP Specification&lt;br/&gt;Some attendees have been working on a reputation system for the LSP&lt;br/&gt;specification group [8]. This system is intended to provide standard&lt;br/&gt;metrics about what makes a node good/bad to connect to in the context&lt;br/&gt;of a decentralized marketplace. While this work looks at the problem&lt;br/&gt;from a different perspective, there&amp;#39;s a possibility to consolidate&lt;br/&gt;the efforts. It seems particularly useful in the anti-jamming case&lt;br/&gt;where a node has newly connected to you, and needs a &amp;#34;start state&amp;#34;&lt;br/&gt;reputation score. The idea of defining what qualifies as good&lt;br/&gt;behavior in the Lightning Network is useful across the board. The&lt;br/&gt;LSP specification group also has bi-weekly calls, and welcomes&lt;br/&gt;additional participants!&lt;br/&gt;&lt;br/&gt;5. Call Cadence&lt;br/&gt;Attendees agreed to continue with calls every two weeks. General&lt;br/&gt;consensus was that we would aim for a 30 minute meeting with the&lt;br/&gt;option to extend to an hour if discussion warrants it.&lt;br/&gt;&lt;br/&gt;# What&amp;#39;s next&lt;br/&gt;Thanks to everyone who attended last week&amp;#39;s meeting, we hope to see&lt;br/&gt;more folks in the next one!&lt;br/&gt;&lt;br/&gt;There&amp;#39;s a lot to discuss - brave readers who made it all the way to&lt;br/&gt;the bottom of this email will notice a fair number of question marks&lt;br/&gt;scattered about - and we&amp;#39;re going to continue to break the problem&lt;br/&gt;down into smaller parts to discuss in the hope of making progress.&lt;br/&gt;&lt;br/&gt;Any change to the Lightning Network that aims to address channel&lt;br/&gt;jamming attacks will be a significant (but necessary) change to the&lt;br/&gt;protocol, and it&amp;#39;s going to need input from many different&lt;br/&gt;stakeholders. Please reach out here or in private&lt;br/&gt;(carla at chaincode.com / clara at chaincode.com) if you have any questions&lt;br/&gt;/ concerns / comments!&lt;br/&gt;&lt;br/&gt;Cheers until next time,&lt;br/&gt;Carla and Clara&lt;br/&gt;(Yes, our names are confusing. No, you won&amp;#39;t get used to it)&lt;br/&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://github.com/ClaraShk/LNJamming/blob/main/meeting-transcripts/23-01-23-transcript.md&#34;&gt;https://github.com/ClaraShk/LNJamming/blob/main/meeting-transcripts/23-01-23-transcript.md&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1052&#34;&gt;https://github.com/lightning/bolts/pull/1052&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://eprint.iacr.org/2022/1454.pdf&#34;&gt;https://eprint.iacr.org/2022/1454.pdf&lt;/a&gt;&lt;br/&gt;[4]&lt;br/&gt;&lt;a href=&#34;https://mempool.space/lightning/node/021c97a90a411ff2b10dc2a8e32de2f29d2fa49d41bfbb52bd416e460db0747d0d&#34;&gt;https://mempool.space/lightning/node/021c97a90a411ff2b10dc2a8e32de2f29d2fa49d41bfbb52bd416e460db0747d0d&lt;/a&gt;&lt;br/&gt;[5] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1044&#34;&gt;https://github.com/lightning/bolts/pull/1044&lt;/a&gt;&lt;br/&gt;[6] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1043&#34;&gt;https://github.com/lightning/bolts/pull/1043&lt;/a&gt;&lt;br/&gt;[8] &lt;a href=&#34;https://github.com/BitcoinAndLightningLayerSpecs/lsp/issues/12&#34;&gt;https://github.com/BitcoinAndLightningLayerSpecs/lsp/issues/12&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230130/95a70748/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230130/95a70748/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T13:12:34Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0m5dwft0pufzyz8wedmd7wlrm2gxryqgsdr5sywrcqhwml224mxczyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcurx04h</id>
    
      <title type="html">📅 Original date posted:2023-05-16 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0m5dwft0pufzyz8wedmd7wlrm2gxryqgsdr5sywrcqhwml224mxczyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcurx04h" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyuh745xljnqd9a6439z83rxtdzserhr3langle3556f0kzn4aj3sww3dc8&#39;&gt;nevent1q…3dc8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-16&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;Pulling together a few conversation threads here. I’ve also updated&lt;br/&gt;the draft spec PR [1] with a full write up of the reputation scheme&lt;br/&gt;we’re proposing to help clarify open questions.&lt;br/&gt;&lt;br/&gt;TL;DR&lt;br/&gt;1. Reputation is tracked locally for each of a node’s peers, there&lt;br/&gt;  is *no gossip component*.&lt;br/&gt;2. During a jamming attack, the less active edges of the network will&lt;br/&gt;  experience gradually degraded quality of service, but they will be&lt;br/&gt;  unaffected in times of peace.&lt;br/&gt;3. Reputation is slow and expensive to build (accumulated through&lt;br/&gt;  payment of fees) and fast to degrade, so sudden changes in behavior&lt;br/&gt;  are short-lived.&lt;br/&gt;4. Good reputation is always examined relative to a node’s recent&lt;br/&gt;  routing activity, so reputation gained cheaply in the past during&lt;br/&gt;  low-activity periods can’t be exploited in busier times.&lt;br/&gt;&lt;br/&gt;Re [2]&lt;br/&gt;&amp;gt; I&amp;#39;d be very interested in how many repeat interactions nodes get from&lt;br/&gt;individual senders, since that also tells us how much use we can get&lt;br/&gt;out of local-only reputation based systems, and I wouldn&amp;#39;t be&lt;br/&gt;surprised if, for large routing nodes, we have sufficient data for&lt;br/&gt;them to make an informed decision, while the edges may be more&lt;br/&gt;vulnerable, but they&amp;#39;d also be used by way fewer senders, and the&lt;br/&gt;impact of an attack would also be proportionally smaller.&lt;br/&gt;&lt;br/&gt;I’m unclear on what you mean by “individual senders” here? In our&lt;br/&gt;scheme, nodes only track local reputation for their direct peers so&lt;br/&gt;what matters is their history with all HTLCs a peer has forwarded to&lt;br/&gt;them (not whether they come from repeat senders).&lt;br/&gt;&lt;br/&gt;It’s true that nodes that forward fewer HTLCs are less likely to be&lt;br/&gt;able to build a good reputation with very active routing nodes. In the&lt;br/&gt;regular operation of the network, this should have low to no impact on&lt;br/&gt;their activity - they don’t require much from their peers anyway.&lt;br/&gt;During an attack, small and low activity nodes will temporarily be in&lt;br/&gt;competition for large routing nodes’ scarce liquidity and slots, but&lt;br/&gt;will still be able to interact with similar nodes where they have&lt;br/&gt;better chances of building a good reputation.&lt;br/&gt;&lt;br/&gt;Re [3]&lt;br/&gt;&amp;gt; I think with some implementation like cln we can write an extension&lt;br/&gt;&amp;gt; an deploy  in some nodes, I need to go deeper into it but I can help&lt;br/&gt;&amp;gt; with this. But I would love to discuss how I can help with some&lt;br/&gt;&amp;gt; implementation details.&lt;br/&gt;&lt;br/&gt;An experimental data gathering mechanism for CLN would be great! Seems&lt;br/&gt;like lnmetrics would be a good home for it - I’ll follow up with you&lt;br/&gt;when we start working on data collection.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Carla &#43; Clara&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1071&#34;&gt;https://github.com/lightning/bolts/pull/1071&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-May/003944.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-May/003944.html&lt;/a&gt;&lt;br/&gt;[3]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-May/003949.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-May/003949.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;On Wed, May 10, 2023 at 7:58 AM Christian Decker &amp;lt;decker.christian at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; this is an intrinsic issue with reputation systems, and the main&lt;br/&gt;&amp;gt; reason I&amp;#39;m sceptical w.r.t. their usefulness in lightning.&lt;br/&gt;&amp;gt; Fundamentally any reputation system bases their expectations for the&lt;br/&gt;&amp;gt; future on experiences they made in the past, and they are thus always&lt;br/&gt;&amp;gt; susceptible to sudden behavioral changes (going rogue from a prior&lt;br/&gt;&amp;gt; clean record) and whitewashing attacks (switching identity, abusing&lt;br/&gt;&amp;gt; any builtin bootstrapping method for new users to gain a good or&lt;br/&gt;&amp;gt; neutral reputation before turning rogue repeatedly).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This gets compounded as soon as we start gossiping about reputations,&lt;br/&gt;&amp;gt; since now our decisions are no longer based just on information we can&lt;br/&gt;&amp;gt; witness ourselves, or at least verify its correctness, and as such an&lt;br/&gt;&amp;gt; attacker can most likely &amp;#34;earn&amp;#34; a positive reputation in some other&lt;br/&gt;&amp;gt; part of the world, and then turn around and attack the nodes that&lt;br/&gt;&amp;gt; trusted the reputation shared from those other parts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d be very interested in how many repeat interactions nodes get from&lt;br/&gt;&amp;gt; individual senders, since that also tells us how much use we can get&lt;br/&gt;&amp;gt; out of local-only reputation based systems, and I wouldn&amp;#39;t be&lt;br/&gt;&amp;gt; surprised if, for large routing nodes, we have sufficient data for&lt;br/&gt;&amp;gt; them to make an informed decision, while the edges may be more&lt;br/&gt;&amp;gt; vulnerable, but they&amp;#39;d also be used by way fewer senders, and the&lt;br/&gt;&amp;gt; impact of an attack would also be proportionally smaller.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Christian&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, May 8, 2023 at 10:26 PM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi *,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; more expressive value is required.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think the HTLC endorsement scheme as proposed is still suffering from&lt;br/&gt;&amp;gt; a vulnerability as local reputation can be built up during periods of low&lt;br/&gt;&amp;gt; routing fees, endorsement gained and then abused during periods of high&lt;br/&gt;&amp;gt; routing fees. Therefore, it sounds to me this scheme should aim for some&lt;br/&gt;&amp;gt; reputational transitivity between incoming traffic and outgoing traffic.&lt;br/&gt;&amp;gt; Namely, the acquisition cost of the local reputation should be equal to the&lt;br/&gt;&amp;gt; max timevalue damage that one can inflict on a routing node channel&lt;br/&gt;&amp;gt; accessible from its local counterparty granting this high-level of&lt;br/&gt;&amp;gt; reputation.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I don&amp;#39;t know if this can be fixed by ensuring permanent link-level&lt;br/&gt;&amp;gt; &amp;#34;gossip&amp;#34; where counterparties along a payment path expose their reputation&lt;br/&gt;&amp;gt; heuristics to guarantee this transitivity, or it&amp;#39;s a fundamental issue with&lt;br/&gt;&amp;gt; a point-to-point approach like HTLC endorsement.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Opened an issue on the repository to converge on a threat model:&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/pull/13&#34;&gt;https://github.com/ClaraShk/LNJamming/pull/13&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I still think building data gathering infrastructure for Lightning is&lt;br/&gt;&amp;gt; valuable as ultimately any jamming mitigation will have to adapt its&lt;br/&gt;&amp;gt; upfront fees or reputation acquisition cost in function of HTLC traffic and&lt;br/&gt;&amp;gt; market forces.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Looking forward to giving an update on Staking Credentials [0], an&lt;br/&gt;&amp;gt; end-to-end approach to mitigate channel jamming.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Best,&lt;br/&gt;&amp;gt; &amp;gt; Antoine&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [0]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Le dim. 30 avr. 2023 à 03:57, Carla Kirk-Cohen &amp;lt;kirkcohenc at gmail.com&amp;gt; a&lt;br/&gt;&amp;gt; écrit :&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Some updates on channel jamming!&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; # Next Call&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Monday 01 May @ 15:00 UTC&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Agenda: &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/12&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/12&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; # Data Gathering&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; During these weekly calls, we&amp;#39;ve come to agreement that we would like&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; to gather data about the use of HTLC endorsement and local reputation&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; tracking for jamming mitigation. A reminder of the full scheme is&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; included at the end of this email, and covered more verbosely in [1].&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; We have a few goals in mind:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Observe the effect of endorsement in the steady state with&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;   logging-only implementation.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Gather real-world data for use in future simulation work.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Experiment with different algorithms for tracking local reputation.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; The minimal changes required to add HTLC endorsement are outlined in&lt;br/&gt;&amp;gt; [2].&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; more expressive value is required.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; With this infrastructure in place, we can start to experiment with&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; various local reputation schemes and data gathering, possibly even&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; externally to LN implementations in projects like circuitbreaker [3].&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; We&amp;#39;d be interested to hear whether there&amp;#39;s any appetite to deploy using&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; an experimental TLV value?&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; # Reputation Scheme&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Each node locally tracks the reputation of its direct neighbors.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Each node allocates, per its risk tolerance:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;   - A number of slots reserved for endorsed HTLCs from high reputation&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;     peers.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;   - A portion of liquidity reserved for endorsed HTLCs from high&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;     reputation peers.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Forwarding of HTLCs:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;   - If a HTLC is endorsed by a high reputation peer, it is forwarded&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;     as usual with endorsed = 1.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;   - Otherwise, it is forwarded with endorsed = 0 if there are slots and&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;     liquidity available for unknown HTLCs.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Endorsement and reputation are proposed as the first step in a two part&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; scheme for mitigating channel jamming:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Reputation for slow jams which are easily detected as misbehavior.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; - Unconditional fees for quick jams that are difficult to detect, as&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;   they can always fall under a target threshold.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Looking forward to discussing further in the upcoming call!&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Carla and Clara&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; [1] &lt;a href=&#34;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&#34;&gt;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; [2] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1071&#34;&gt;https://github.com/lightning/bolts/pull/1071&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/lightningequipment/circuitbreaker&#34;&gt;https://github.com/lightningequipment/circuitbreaker&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230516/90159528/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230516/90159528/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T13:08:51Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdpuew82c86c8mft5h50zuezctknw27q9tfs096nllkac0rjut28szyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcj8xhda</id>
    
      <title type="html">📅 Original date posted:2023-02-19 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdpuew82c86c8mft5h50zuezctknw27q9tfs096nllkac0rjut28szyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcj8xhda" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsggmzph42lswlndtsl48re789fquh098me5nmt6zduyv345tyme2c0wqmp8&#39;&gt;nevent1q…qmp8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-19&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi List,&lt;br/&gt;&lt;br/&gt;A reminder that we&amp;#39;ve got another jamming call coming up tomorrow.&lt;br/&gt;&lt;br/&gt;Monday 20 Feb&lt;br/&gt;19:00 UTC&lt;br/&gt;&lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;We&amp;#39;ll be talking about local reputation scoring.&lt;br/&gt;Feel free to add additional agenda items here:&lt;br/&gt;&lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/4&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/4&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Carla and Clara&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230219/5b1741e1/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230219/5b1741e1/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T13:08:12Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqqtd24edjl5pa9u7kzecu98l469y5fa2zlvxldj9y6k3rdxevhdszyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcl7cthh</id>
    
      <title type="html">📅 Original date posted:2023-02-08 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqqtd24edjl5pa9u7kzecu98l469y5fa2zlvxldj9y6k3rdxevhdszyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcl7cthh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswd2dq0pj0m2wzt5xmpavh3p72xtf86xw8xsfp5qxt7ltlhr57ths5chtnx&#39;&gt;nevent1q…htnx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-08&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi list,&lt;br/&gt;&lt;br/&gt;Unfortunately we had some technical issues with the recording for&lt;br/&gt;Monday&amp;#39;s call so we&amp;#39;re going to have to rely on my memory (a severely&lt;br/&gt;corrupted data store). Thankfully, Clara jotted down some notes as well,&lt;br/&gt;but please chime in if you attended and we&amp;#39;ve missed something out!&lt;br/&gt;&lt;br/&gt;Details for next call:&lt;br/&gt;* Monday 20 February&lt;br/&gt;* 18:00 UTC (possibly 19:00, be confirmed in a follow up email)&lt;br/&gt;* &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;* Agenda: &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/3&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/3&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;# Meeting Summary&lt;br/&gt;&lt;br/&gt;1. Proof of Forwarding&lt;br/&gt;We started the call with a discussion of the various &amp;#34;proof of&lt;br/&gt;forwarding&amp;#34; schemes that have been kicked around this mailing list&lt;br/&gt;in the past.&lt;br/&gt;&lt;br/&gt;Working of the assumption that upfront fees must always be sourced&lt;br/&gt;from the sender, we ran into similar issues around accumulated fees&lt;br/&gt;and differential rates even in the case where we have some proof of&lt;br/&gt;forward, because nodes can still choose to collaborate to &amp;#34;forward&amp;#34;&lt;br/&gt;a payment.&lt;br/&gt;&lt;br/&gt;Given the following topology and conditions:&lt;br/&gt;Alice ------ Bob ------ Carol ------ Dave ----- Evelyn&lt;br/&gt;&lt;br/&gt;* Alice is sending a payment to Evenlyn, a popular sink on the network.&lt;br/&gt;* Evenlyn has zero final-hop upfront fees (for simplicity&amp;#39;s sake).&lt;br/&gt;* Bob and Carol are malicious actors, each charging 10 msat upfront.&lt;br/&gt;* Dave is an honest node with 4000 msat upfront fees (which is a rational&lt;br/&gt;  upfront fee for a channel to a sink node that would have high success&lt;br/&gt;  case fees).&lt;br/&gt;&lt;br/&gt;Using a proof of forward scheme where Alice places a secret in the&lt;br/&gt;_next_ node&amp;#39;s onion which is required to claim upfront fees:&lt;br/&gt;* Bob may claim 4020 msat in upfront fees with a secret from Carol&lt;br/&gt;* Carol may claim 4010 msat in upfront fees with a secret from Dave&lt;br/&gt;* Dave may claim 4000 msat in upfront fees with a secret from Evelyn&lt;br/&gt;&lt;br/&gt;In the honest case, this nets out to 10 msat for Bob, 10 msat for&lt;br/&gt;Carol, and 4000 msat for Dave. In the dishonest case, Carol can&lt;br/&gt;disclose the forwarding secret to Bob, allowing them to claim the&lt;br/&gt;accumulated 4020 sat, then fail the payment anyway.&lt;br/&gt;&lt;br/&gt;We also spoke about the case where the downstream peer refuses to give&lt;br/&gt;up the secret, but this breakdown in cooperation is likely remedied by&lt;br/&gt;closing your channel. We didn&amp;#39;t consider the case where upfront fees&lt;br/&gt;do not accumulate along the route, because this exposes us to a whole&lt;br/&gt;lot of (even worse) draining attacks.&lt;br/&gt;&lt;br/&gt;We once again discussed the complexity of this nature of jamming&lt;br/&gt;mitigation, how practical it would be to implement it and whether it&lt;br/&gt;is worthwhile pursuing if it will be an imperfect solution to upfront&lt;br/&gt;fee theft.&lt;br/&gt;&lt;br/&gt;2. Upfront Fees &#43; Attributable Errors&lt;br/&gt;The next point of discussion was the combination of upfront fees with&lt;br/&gt;attributable errors [1] to allow senders to more severely punish&lt;br/&gt;nodes that choose to steal upfront fees rather than forward the HTLC&lt;br/&gt;(due to the incentive issues noted in [2] when there are large fee&lt;br/&gt;differentials across the route).&lt;br/&gt;&lt;br/&gt;This led to a discussion about how effectively senders can enforce&lt;br/&gt;good upfront fee behavior - a question that remains open. We discussed:&lt;br/&gt;- Strict punishment of nodes that fail payments with upfront fees.&lt;br/&gt;- Sender side protections against selection of routes with incentive&lt;br/&gt;  incompatible upfront fees.&lt;br/&gt;- The suboptimal, yet doable, solution of starting with an upper bound&lt;br/&gt;  on upfront fees. This has the drawback of not properly compensating&lt;br/&gt;  nodes that have a legitimate claim to high upfront fees because they&lt;br/&gt;  face high opportunity cost.&lt;br/&gt;&lt;br/&gt;3. Experimentation with Circuit Breaker&lt;br/&gt;We discussed the possibility of using circuit breaker[3] in the context&lt;br/&gt;of local reputation (or HTLC endorsement) in two different ways:&lt;br/&gt;(a) To begin surfacing the type of information that end users would&lt;br/&gt;require to decide to endorse a payment, and possibly automating&lt;br/&gt;that decision making.&lt;br/&gt;(b) In conjunction with an experimental TLV to add binary HTLC&lt;br/&gt;endorsement to update_add_htlc, though it was noted that this&lt;br/&gt;would require wider spread adoption of circuit breaker, because&lt;br/&gt;nodes that do not have it installed would not include the TLV on&lt;br/&gt;forwarding. This would also require LND changes to surface TLVs&lt;br/&gt;included with update_add_htlc on the interceptor API.&lt;br/&gt;&lt;br/&gt;As always, thank you to all that attended and hope to see ya&amp;#39;ll in the&lt;br/&gt;next one!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Carla &#43; Clara&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1044&#34;&gt;https://github.com/lightning/bolts/pull/1044&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-January/003834.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-January/003834.html&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/lightningequipment/circuitbreaker&#34;&gt;https://github.com/lightningequipment/circuitbreaker&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230208/c383d310/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230208/c383d310/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T13:08:02Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst94pfldjpl3ht5pcq6kv7pkhr4cvq9gny9v5qt3dwrdd7k364wrszyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcff5u6r</id>
    
      <title type="html">📅 Original date posted:2021-07-28 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst94pfldjpl3ht5pcq6kv7pkhr4cvq9gny9v5qt3dwrdd7k364wrszyrcm3pkks7md70vl9hsl3t98srvcf9w900s4229vnpa8k4qekchwcff5u6r" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq9nj5mvsy23u7frqj6u5ldv9yrdasxntrx2nzem68fuqmx5htshsdgceg0&#39;&gt;nevent1q…ceg0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-28&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rusty,&lt;br/&gt;&lt;br/&gt;Thanks for taking a look!&lt;br/&gt;&lt;br/&gt;I like the idea of being able to reference a specific message/field&lt;br/&gt;that your node finds problematic. Definitely makes the job simpler&lt;br/&gt;than trying to define every error evar.&lt;br/&gt;&lt;br/&gt;&amp;gt; erroneous_message is the message we&amp;#39;re complaining about (including&lt;br/&gt;2-byte type), which may be truncated (but must be at least 2 bytes)&lt;br/&gt;&lt;br/&gt;Do you think this could be reduced to just the 2-byte message type?&lt;br/&gt;If the reason for including the whole message is so that the error&lt;br/&gt;recipient can match it to the original message, we could possibly just&lt;br/&gt;include the field that we had a problem with as another TLV? That way&lt;br/&gt;we save on having to resend the whole message, and guarantee that we&amp;#39;d&lt;br/&gt;be delivering the problematic field value (it could be cut off if we&lt;br/&gt;truncate the message).&lt;br/&gt;&lt;br/&gt;With this approach, there&amp;#39;s a chance that we can&amp;#39;t match errors back&lt;br/&gt;to their original message if the same channel sends the same message&lt;br/&gt;with the same incorrect field more than once, but I don&amp;#39;t see much&lt;br/&gt;practical need to exactly match error to original message in this case,&lt;br/&gt;since we know which field is broken.&lt;br/&gt;&lt;br/&gt;&amp;gt; (We should similarly add this TLV to warnings?)&lt;br/&gt;&lt;br/&gt;Sounds like a good idea to me!&lt;br/&gt;&lt;br/&gt;&amp;gt; But it&amp;#39;s worth noting that with the exception of timeouts, these are&lt;br/&gt;all expressible in form &amp;#34;problem is this message, this field&amp;#34;. Perhaps&lt;br/&gt;its worth having a special TLV case for timeouts in the message?&lt;br/&gt;&lt;br/&gt;If we&amp;#39;re confident that the only error that we&amp;#39;re going to need that&lt;br/&gt;doesn&amp;#39;t follow the &amp;#34;problem/message&amp;#34; structure is timeouts, then a&lt;br/&gt;`timeout` tlv sounds reasonable. If we&amp;#39;re also going to add these&lt;br/&gt;fields to warning messages, I&amp;#39;m wondering whether it could be useful&lt;br/&gt;to define an `error_code` enum, where `timeout` is one of the cases?&lt;br/&gt;Perhaps overkill if we&amp;#39;re certain that the only value will ever be&lt;br/&gt;`timeout`.&lt;br/&gt;&lt;br/&gt;Putting that all together, an update on your proposed solution:&lt;br/&gt;1. `tlv_stream`: `error_tlvs`&lt;br/&gt;2. types:&lt;br/&gt;    1. type: 1 (`erroneous_msgtype`)&lt;br/&gt;    2. data:&lt;br/&gt;        * [`u16`:`type`]&lt;br/&gt;    1. type: 3 (`erroneous_fieldnum`)&lt;br/&gt;    2. data:&lt;br/&gt;        * [`tu64`:`fieldnum`]&lt;br/&gt;    1. type: 5 (`suggested_value`)&lt;br/&gt;    2. data:&lt;br/&gt;        * [`...*byte`:`value`]&lt;br/&gt;    1. type: 7 (`erroneous_value`)&lt;br/&gt;    2. data:&lt;br/&gt;        * [`...*byte`:`value`]&lt;br/&gt;    1. type: 9 (`error_code`)&lt;br/&gt;    2. data:&lt;br/&gt;        * [`u16`:`code`]&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;  - Carla&lt;br/&gt;&lt;br/&gt;On Wed, Jul 7, 2021 at 2:36 AM Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Carla Kirk-Cohen &amp;lt;kirkcohenc at gmail.com&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi Carla,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         I apologize for not responding to this earlier, but it was&lt;br/&gt;&amp;gt; raised again in the recent spec meeting&lt;br/&gt;&amp;gt; (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lightningd.github.io/meetings/ln_spec_meeting/2021/ln_spec_meeting.2021-07-05-20.06.log.html&#34;&gt;https://lightningd.github.io/meetings/ln_spec_meeting/2021/ln_spec_meeting.2021-07-05-20.06.log.html&lt;/a&gt;&lt;br/&gt;&amp;gt; ).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I love the idea of more specific error codes, BTW!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Feedback interleaved:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Since we shouldn’t have non-ascii values in the error string itself,&lt;br/&gt;&amp;gt; &amp;gt; this can most easily be achieved by adding TLV fields after the&lt;br/&gt;&amp;gt; &amp;gt; data field. In terms of supporting nodes that have not upgraded,&lt;br/&gt;&amp;gt; &amp;gt; we could either include the error code in the data field to cover&lt;br/&gt;&amp;gt; &amp;gt; our bases, or introduce a feature bit so that we know whether&lt;br/&gt;&amp;gt; &amp;gt; to backfill the data field. This gives upgraded nodes an improved&lt;br/&gt;&amp;gt; &amp;gt; quality of life, while leaving older nodes unaffected.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Older nodes should definitely ignore extra fields; it&amp;#39;s in the spec and&lt;br/&gt;&amp;gt; we&amp;#39;ve relied on this to extend messages in the past, so this part is&lt;br/&gt;&amp;gt; easy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Technically, all defined types are now assumed to have an optional TLV&lt;br/&gt;&amp;gt; appended, since f068dd0d (Bolt 1: Specify that extensions to existing&lt;br/&gt;&amp;gt; messages must use TLV (#754)).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; While we can’t enumerate every possible error, there are quite&lt;br/&gt;&amp;gt; &amp;gt; a few cases in the spec where we can introduce explicit error&lt;br/&gt;&amp;gt; &amp;gt; codes. For the sake of the skim-readers, I’ve left that list at&lt;br/&gt;&amp;gt; &amp;gt; the end of the email.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Taking the example of our node receiving an invalid signature for&lt;br/&gt;&amp;gt; &amp;gt; a htlc, a new error would look like this:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think this is both too much, and not enough.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Too much:&lt;br/&gt;&amp;gt; - Many of these errors are &amp;#34;your implementation is broken&amp;#34;, which is&lt;br/&gt;&amp;gt;   really not something actionable by the recipient.&lt;br/&gt;&amp;gt; - A lot of work to fill in all these error cases, which will (because&lt;br/&gt;&amp;gt;   they&amp;#39;re usually impossible) will be untested and broken.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Not enough:&lt;br/&gt;&amp;gt; - Look at the proposal for channel_types, where you would object to the&lt;br/&gt;&amp;gt;   channel_type if you don&amp;#39;t like it.  This would be grouped under&lt;br/&gt;&amp;gt;   &amp;#34;Funding params unacceptable&amp;#34;, which is actually 99% of errors at this&lt;br/&gt;&amp;gt;   point and does not say what the problem is with specificity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I took a different approach with onion messages[1], where you (optionally)&lt;br/&gt;&amp;gt; specify the field number, even an optional suggested value:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     1. type: 1 (`erroneous_field`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`tu64`:`tlv_fieldnum`]&lt;br/&gt;&amp;gt;     1. type: 3 (`suggested_value`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`...*byte`:`value`]&lt;br/&gt;&amp;gt;     1. type: 5 (`error`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`...*utf8`:`msg`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In our case, we need to refer to which message (if any) caused the&lt;br/&gt;&amp;gt; error, and we have non-tlv fields, so it can&amp;#39;t simply use the tlv field&lt;br/&gt;&amp;gt; number.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here&amp;#39;s my straw proposal:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. `tlv_stream`: `error_tlvs`&lt;br/&gt;&amp;gt; 2. types:&lt;br/&gt;&amp;gt;     1. type: 1 (`erroneous_message`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`...*byte`:`message`]&lt;br/&gt;&amp;gt;     1. type: 3 (`erroneous_fieldnum`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`tu64`:`fieldnum`]&lt;br/&gt;&amp;gt;     1. type: 5 (`suggested_value`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`...*byte`:`value`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; erroneous_message is the message we&amp;#39;re complaining about (including&lt;br/&gt;&amp;gt; 2-byte type), which may be truncated (but must be at least 2 bytes).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; fieldnum is either the 0-based field number (for fixed fields), or the&lt;br/&gt;&amp;gt; number of fixed fields &#43; the tlv type (for tlv fields).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; suggested_value is the optional value if we have an idea if what we&lt;br/&gt;&amp;gt; expected / prefer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This new kind of error provides us with an error code that tells us&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; exactly what has gone wrong, and metadata pointing to the htlc&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; with an invalid sig. This information can be logged, or stored in a&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; more permanent error store to help diagnose issues in the future.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Right now, the spec is pretty strict on error handling [13], indicating&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; that senders/recipients of errors `MUST` fail the channel referenced&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; in the error.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This isn’t very practical, and I believe that the majority&lt;br/&gt;&amp;gt; &amp;gt; of the impls don’t abide by this instruction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This was inevitable eventually, but c-lightning deliberately treated&lt;br/&gt;&amp;gt; errors as fatal for a long time so people would *notice* and *report*&lt;br/&gt;&amp;gt; these issues.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To be fair, *LND* didn&amp;#39;t treat them as fatal.  As so naturally your&lt;br/&gt;&amp;gt; engineers didn&amp;#39;t *think* of them as a big deal (and testing didn&amp;#39;t show&lt;br/&gt;&amp;gt; it up), so it would send errors for cases which it clearly didn&amp;#39;t want&lt;br/&gt;&amp;gt; to close the channel (e.g. peer too slow to respond!).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hence this PR, which makes these less fatal, and adds warning support:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         &lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/834&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/834&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (We should similarly add this TLV to warnings?)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Candidates for error codes:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The vast majority of these are &amp;#34;contact your developer, peer says we did&lt;br/&gt;&amp;gt; something illegal&amp;#34;.  Which is always nice to have more information&lt;br/&gt;&amp;gt; about, but not critital.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The exceptions are:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Funding Process:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Funding process timeout [2]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Fees out of range [3]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Funding tx spent [11]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Funding params unacceptable (eg, channel too small)&lt;br/&gt;&amp;gt; ...&lt;br/&gt;&amp;gt; &amp;gt; Channel State Machine:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * HTLC timeout [4]&lt;br/&gt;&amp;gt; ...&lt;br/&gt;&amp;gt; &amp;gt; Fee Updates&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Update fee to low/high [9]&lt;br/&gt;&amp;gt; ...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And BTW this one is misguided:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Feature bit required&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If Alice says a feature bit is even (compulsory), and Bob doesn&amp;#39;t offer&lt;br/&gt;&amp;gt; it, that&amp;#39;s on Bob!  Alice&amp;#39;s behavior here is undefined: she may do a&lt;br/&gt;&amp;gt; courtesy message to Bob, but she may also *assume* it&amp;#39;s agreed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But it&amp;#39;s worth noting that with the exception of timeouts, these are all&lt;br/&gt;&amp;gt; expressable in form &amp;#34;problem is this message, this field&amp;#34;.  Perhaps it&amp;#39;s&lt;br/&gt;&amp;gt; worth having a special TLV case for timeouts in the message?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for starting this ball rolling!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/759&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/759&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210728/4b5ba70c/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210728/4b5ba70c/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:40:34Z</updated>
  </entry>

</feed>