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

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1aslmpzentw224n3s6yccru4dq2qdlx7rfudfnqevfck637cjt6esswfqmx.rss" />
  <link href="https://nostr.ae/npub1aslmpzentw224n3s6yccru4dq2qdlx7rfudfnqevfck637cjt6esswfqmx" />
  <id>https://nostr.ae/npub1aslmpzentw224n3s6yccru4dq2qdlx7rfudfnqevfck637cjt6esswfqmx</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqs0y84axnfcwg0s70acgydskvm8kt5hf6gqdupghu33atphzy58drczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txlxt2nn</id>
    
      <title type="html">📅 Original date posted:2023-06-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0y84axnfcwg0s70acgydskvm8kt5hf6gqdupghu33atphzy58drczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txlxt2nn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0azlmcrr6xdzr4p3cypgc0ljkmw7fnvu95cq263wt0zpnsd6wjwqh8nsew&#39;&gt;nevent1q…nsew&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-03&lt;br/&gt;🗒️ Summary of this message: A discussion on the incentive compatibility of a malleated wtxid with annex data stuffed to max transaction size, and the possibility of reviving a proposal to limit the annex.&lt;br/&gt;📝 Original message:&lt;br/&gt;On Sat, Jun 3, 2023 at 2:43 PM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; No in this case the txid is identical. Only the wtxid is malleated, with&lt;br/&gt;&amp;gt; annex data stuffed to max transaction size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This doesn&amp;#39;t sound incentive compatible? While gathering context, I did&lt;br/&gt;find &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/24007&#34;&gt;https://github.com/bitcoin/bitcoin/pull/24007&lt;/a&gt;. Apparently closed&lt;br/&gt;because of a lack of use case. But perhaps the desire to not limit the&lt;br/&gt;annex can revive that proposal?&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&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/bitcoin-dev/attachments/20230603/a01c286a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230603/a01c286a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T20:19:53&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxvyqlvxv0dwvqq2znf9gluvgagw33lc9g73dwdv9su8gz2xgzsgczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx6vggzz</id>
    
      <title type="html">📅 Original date posted:2023-06-08 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxvyqlvxv0dwvqq2znf9gluvgagw33lc9g73dwdv9su8gz2xgzsgczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx6vggzz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0y84axnfcwg0s70acgydskvm8kt5hf6gqdupghu33atphzy58drc8n23ea&#39;&gt;nevent1q…23ea&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-08&lt;br/&gt;🗒️ Summary of this message: Proposal suggests defining any annex starting with &amp;#39;0&amp;#39; as free-form, allowing immediate utilization and future flexibility while preserving possibility of transitioning to structured format.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;In the proposal below, any annex that begins with `0x00` is defined as&lt;br/&gt;free-form. This isn&amp;#39;t the most efficient format though because there is&lt;br/&gt;always one byte lost on signalling. In a future where unstructured annex&lt;br/&gt;data turns out to be the predominant use case, this may be relevant. Also&lt;br/&gt;for very short annexes, the lost byte may weigh relatively heavy.&lt;br/&gt;&lt;br/&gt;Without sacrificing future extensions to structured annex data, one could&lt;br/&gt;also store the annex data as is except for the case where the data starts&lt;br/&gt;with `0x21` (or any other &amp;#39;uncommon&amp;#39; byte). If the data starts with `0x21`,&lt;br/&gt;this byte needs to be repeated first and then followed by the remainder of&lt;br/&gt;the data.&lt;br/&gt;&lt;br/&gt;Examples:&lt;br/&gt;&lt;br/&gt;Data: [01 02 03]&lt;br/&gt;Encoding [01 02 03]&lt;br/&gt;&lt;br/&gt;Data: [21 22 23]&lt;br/&gt;Encoding: [21 21 22 23]&lt;br/&gt;&lt;br/&gt;The prefixes [21 (not 21)] are available for future upgrades.&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;On Fri, Jun 2, 2023 at 5:00 PM Joost Jager &amp;lt;joost.jager at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As it stands, the taproot annex is consensus valid but non-standard. The&lt;br/&gt;&amp;gt; conversations around standardization seem to be leaning towards the&lt;br/&gt;&amp;gt; adoption of a flexible Type-Length-Value (TLV) format [1]. There&amp;#39;s no doubt&lt;br/&gt;&amp;gt; that this approach has considerable potential. However, settling on an&lt;br/&gt;&amp;gt; exact format may require a significant amount of time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the interim, the benefits of making the annex available in a&lt;br/&gt;&amp;gt; non-structured form are both evident and immediate. By allowing developers&lt;br/&gt;&amp;gt; to utilize the taproot annex without delay, we can take advantage of its&lt;br/&gt;&amp;gt; features today, without the need to wait for the finalization of a more&lt;br/&gt;&amp;gt; lengthy standardization process.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With this in view, I am proposing that we define any annex that begins&lt;br/&gt;&amp;gt; with &amp;#39;0&amp;#39; as free-form, without any additional constraints. This strategy&lt;br/&gt;&amp;gt; offers several distinct benefits:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Immediate utilization: This opens the door for developers to make use of&lt;br/&gt;&amp;gt; the taproot annex for a variety of applications straight away, thus&lt;br/&gt;&amp;gt; eliminating the need to wait for the implementation of TLV or any other&lt;br/&gt;&amp;gt; structured format.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Future flexibility: Assigning &amp;#39;0&amp;#39;-beginning annexes as free-form keeps our&lt;br/&gt;&amp;gt; options open for future developments and structure improvements. As we&lt;br/&gt;&amp;gt; forge ahead in determining the best way to standardize the annex, this&lt;br/&gt;&amp;gt; strategy ensures we do not limit ourselves by setting its structure in&lt;br/&gt;&amp;gt; stone prematurely.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Chainspace efficiency: Non-structured data may require fewer bytes&lt;br/&gt;&amp;gt; compared to a probable TLV format, which would necessitate the encoding of&lt;br/&gt;&amp;gt; length even when there&amp;#39;s only a single field.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In conclusion, adopting this approach will immediately broaden the&lt;br/&gt;&amp;gt; utilization scope of the taproot annex while preserving the possibility of&lt;br/&gt;&amp;gt; transitioning to a more structured format in the future. I believe this is&lt;br/&gt;&amp;gt; a pragmatic and efficient route, one that can yield substantial benefits in&lt;br/&gt;&amp;gt; both the short and long term.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Joost&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1381&#34;&gt;https://github.com/bitcoin/bips/pull/1381&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/bitcoin-dev/attachments/20230608/9422bb77/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230608/9422bb77/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T20:19:53&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2edqckklxz0652fe5xe95tl8au20qw5ztsthsa25e95zsgdcg6hgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx8ssg87</id>
    
      <title type="html">📅 Original date posted:2023-06-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2edqckklxz0652fe5xe95tl8au20qw5ztsthsa25e95zsgdcg6hgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx8ssg87" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg9tz6k4477549qkqdwwum9tyufhz79d09808jxvnuqe48y5v968cmylptt&#39;&gt;nevent1q…lptt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-03&lt;br/&gt;🗒️ Summary of this message: Bitcoin developers discuss the removal of the need for a commitment transaction, enabling data inclusion within a single transaction.&lt;br/&gt;📝 Original message:&lt;br/&gt;On Sat, Jun 3, 2023 at 9:49 AM Joost Jager &amp;lt;joost.jager at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; The removal of the need for a commitment transaction also enables the&lt;br/&gt;&amp;gt; inclusion of data within a single transaction that relies on its own&lt;br/&gt;&amp;gt; transaction identifier (txid). This is possible because the txid&lt;br/&gt;&amp;gt; calculation does not incorporate the annex, where the data would be housed.&lt;br/&gt;&amp;gt; This feature can be beneficial in scenarios that require the emulation of&lt;br/&gt;&amp;gt; covenants through the use of presigned transactions involving an ephemeral&lt;br/&gt;&amp;gt; signer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think this avoidance of a circular reference is also why LN-Symmetry uses&lt;br/&gt;the annex?&lt;br/&gt;&lt;br/&gt;Joost&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/bitcoin-dev/attachments/20230603/defc2cc7/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230603/defc2cc7/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T20:19:52&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyr75sq6gckh9awrcqh35e6rhkys9se4t7nv6hfs87q24e7mglxfszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txtaknqr</id>
    
      <title type="html">📅 Original date posted:2023-06-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyr75sq6gckh9awrcqh35e6rhkys9se4t7nv6hfs87q24e7mglxfszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txtaknqr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsddcpm6kh33vv4ym9h6akwck8v953amx5suc25a75zj3y4nghwwmgfwaa73&#39;&gt;nevent1q…aa73&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-03&lt;br/&gt;🗒️ Summary of this message: A potential issue with transaction replacement in Bitcoin could mislead developers into thinking their transactions are immune to replacement. This occurs when a counter-party submits a strictly worse transaction for miners by bloating its weight, not adding fees. Mitigation methods are available.&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Depending on policy to mitigate this annex malleability vector could&lt;br/&gt;&amp;gt; mislead developers into believing their transactions are immune to&lt;br/&gt;&amp;gt; replacement, when in fact they might not be.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The issue I&amp;#39;m talking about is where someone&amp;#39;s transaction is denied entry&lt;br/&gt;&amp;gt; into the mempool entirely because a counter-party decided to put in a&lt;br/&gt;&amp;gt; strictly worse transaction for miners by bloating the weight of it, not&lt;br/&gt;&amp;gt; adding fees. A strictly worse &amp;#34;API&amp;#34; for paying miners for no gain seems&lt;br/&gt;&amp;gt; like a bad trade to me, especially when there are reasonable methods for&lt;br/&gt;&amp;gt; mitigating this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Just to expand this, an example would be a transaction with inputs A&amp;#39; and&lt;br/&gt;B&amp;#39; signed by two parties A and B. A has a fully signed transaction in&lt;br/&gt;hands, but can&amp;#39;t publish it because B created and published an alternative&lt;br/&gt;version of it with a large annex for input B&amp;#39;. Wouldn&amp;#39;t miners just accept&lt;br/&gt;A&amp;#39;s version because it&amp;#39;s fee rate is higher? I am looking at this case&lt;br/&gt;assuming the user has a direct connection to a miner, ignoring any&lt;br/&gt;potential concerns related to p2p transport.&lt;br/&gt;&lt;br/&gt;Joost&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/bitcoin-dev/attachments/20230603/08c8c4df/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230603/08c8c4df/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T20:19:52&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg9tz6k4477549qkqdwwum9tyufhz79d09808jxvnuqe48y5v968czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txn2rqdh</id>
    
      <title type="html">📅 Original date posted:2023-06-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg9tz6k4477549qkqdwwum9tyufhz79d09808jxvnuqe48y5v968czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txn2rqdh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8vrxma07gdhapa6jj0yh3pecstm5rrcym8gak5d2z5c8gjrj5qfsa3md53&#39;&gt;nevent1q…md53&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-03&lt;br/&gt;🗒️ Summary of this message: Taproot&amp;#39;s annex feature eliminates the need for a commit transaction, allowing for the inclusion of data within a single transaction, benefiting scenarios that require the emulation of covenants.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi David,&lt;br/&gt;&lt;br/&gt;On Sat, Jun 3, 2023 at 3:08 AM David A. Harding &amp;lt;dave at dtrt.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Out of curiosity, what features and benefits are available today?  I&lt;br/&gt;&amp;gt; know Greg Sanders wants to use annex data with LN-Symmetry[1], but&lt;br/&gt;&amp;gt; that&amp;#39;s dependent on a soft fork of SIGHASH_ANYPREVOUT.  I also heard you&lt;br/&gt;&amp;gt; mention that it could allow putting arbitrary data into a witness&lt;br/&gt;&amp;gt; without having to commit to that data beforehand, but that would only&lt;br/&gt;&amp;gt; increase the efficiency of witness stuffing like ordinal inscriptions by&lt;br/&gt;&amp;gt; only 0.4% (~2 bytes saved per 520 bytes pushed) and it&amp;#39;d still be&lt;br/&gt;&amp;gt; required to create an output in order to spend it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Indeed, there&amp;#39;s a minor efficiency gain in the reveal transaction witness,&lt;br/&gt;but I think the real advantage is that it eliminates the need to publish&lt;br/&gt;and pay for the commit transaction in the first place. Any spend of a&lt;br/&gt;taproot UTXO can be supplemented with arbitrary data in just a single&lt;br/&gt;transaction.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Is there some other way to use the annex today that would be beneficial&lt;br/&gt;&amp;gt; to users of Bitcoin?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The removal of the need for a commitment transaction also enables the&lt;br/&gt;inclusion of data within a single transaction that relies on its own&lt;br/&gt;transaction identifier (txid). This is possible because the txid&lt;br/&gt;calculation does not incorporate the annex, where the data would be housed.&lt;br/&gt;This feature can be beneficial in scenarios that require the emulation of&lt;br/&gt;covenants through the use of presigned transactions involving an ephemeral&lt;br/&gt;signer.&lt;br/&gt;&lt;br/&gt;For instance, one can establish a time-locked vault using 2-of-2 multisig&lt;br/&gt;presigned transactions in which one of the signers is ephemeral [1]. After&lt;br/&gt;signing, the private key is discarded, leaving only the signature. To&lt;br/&gt;ensure the signature is never lost, it can be stored as a backup in the&lt;br/&gt;annex of the transaction that the presigned transaction spends. Such an&lt;br/&gt;operation would not be possible with a commit/reveal inscription.&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/LedgerHQ/app-bitcoin-new/issues/153&#34;&gt;https://github.com/LedgerHQ/app-bitcoin-new/issues/153&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/bitcoin-dev/attachments/20230603/76c769ae/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230603/76c769ae/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T20:19:51&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyntyzkg5v9yfzkh7lj6yrpfvmdmvth3d9ste0p6l0hxl0ul5vmaqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx5phqgy</id>
    
      <title type="html">📅 Original date posted:2023-06-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyntyzkg5v9yfzkh7lj6yrpfvmdmvth3d9ste0p6l0hxl0ul5vmaqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx5phqgy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgfft6djaz6pkda5veld8vy2x62ef0fzaxwcmeqfm7a477pk5l4dgfvheg7&#39;&gt;nevent1q…heg7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-03&lt;br/&gt;🗒️ Summary of this message: The issue with BIP341/342 signature hashes not covering other inputs&amp;#39; annex fields in a coinjoin scenario could lead to griefing. Solutions such as making annex usage opt-in or imposing size limitations may not align with economic incentives and could mislead developers into believing their transactions are immune to replacement.&lt;br/&gt;📝 Original message:&lt;br/&gt;HI Greg,&lt;br/&gt;&lt;br/&gt;On Sat, Jun 3, 2023 at 3:14 AM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Attempting to summarize the linked PR:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think the biggest remaining issue to this kind of idea, which is why I&lt;br/&gt;&amp;gt; didn&amp;#39;t propose it for mainnet,&lt;br/&gt;&amp;gt; is the fact that BIP341/342 signature hashes do not cover *other* inputs&amp;#39;&lt;br/&gt;&amp;gt; annex fields, which we&lt;br/&gt;&amp;gt; briefly discussed here&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin-inquisition/bitcoin/pull/22#discussion_r1143382264&#34;&gt;https://github.com/bitcoin-inquisition/bitcoin/pull/22#discussion_r1143382264&lt;/a&gt;&lt;br/&gt;&amp;gt; .&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This means that in a coinjoin like scenario, even if the other joining&lt;br/&gt;&amp;gt; parties prove they don&amp;#39;t have any&lt;br/&gt;&amp;gt; crazy script paths, a malicious party can make the signed transaction into&lt;br/&gt;&amp;gt; a maximum sized transaction&lt;br/&gt;&amp;gt; package, causing griefing. The mitigation in the PR I linked was to limit&lt;br/&gt;&amp;gt; it to 126 bytes, basically punting&lt;br/&gt;&amp;gt; on the problem by making the grief vector small. Another solution could be&lt;br/&gt;&amp;gt; to make annex usage &amp;#34;opt-in&amp;#34;&lt;br/&gt;&amp;gt; by requiring all inputs to commit to an annex to be relay-standard. In&lt;br/&gt;&amp;gt; this case, you&amp;#39;ve opted into a possible&lt;br/&gt;&amp;gt; vector, but at least current usage patterns wouldn&amp;#39;t be unduly affected.&lt;br/&gt;&amp;gt; For those who opt-in, perhaps the first&lt;br/&gt;&amp;gt; order of business would be to have a field that limits the total&lt;br/&gt;&amp;gt; transaction weight, by policy only?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some logs related to that here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/instagibbs/7406931d953fd96fea28f85be50fc7bb&#34;&gt;https://gist.github.com/instagibbs/7406931d953fd96fea28f85be50fc7bb&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Related discussion on possible BIP118 modifications to mitigate this in&lt;br/&gt;&amp;gt; tapscript-spending circumstances:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin-inquisition/bitcoin/issues/19&#34;&gt;https://github.com/bitcoin-inquisition/bitcoin/issues/19&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;While solutions such as making annex usage opt-in or imposing size&lt;br/&gt;limitations may initially appear effective, they may also inadvertently&lt;br/&gt;foster a false sense of security, as they lack alignment with economic&lt;br/&gt;incentives.&lt;br/&gt;&lt;br/&gt;Relying solely on policy enforcement merely transfers responsibility to the&lt;br/&gt;miners, without necessarily aligning their incentives with the broader&lt;br/&gt;network health. This situation is reminiscent of the challenges encountered&lt;br/&gt;with opt-in rbf. Despite signaling for non-replaceability, miners began&lt;br/&gt;accepting replacements probably due to the enticing higher fee incentives.&lt;br/&gt;At least that&amp;#39;s how I picked up this development. Businesses that relied on&lt;br/&gt;zero-confirmation payments were unexpectedly affected, leading to&lt;br/&gt;undesirable outcomes.&lt;br/&gt;&lt;br/&gt;While we can define policy rules, miners will ultimately operate in a&lt;br/&gt;manner that maximizes their profits. Consequently, if a miner identifies an&lt;br/&gt;opportunity to bolster their fees by replacing an annex transaction,&lt;br/&gt;they&amp;#39;re likely to seize it, regardless of any policy rules. This might not&lt;br/&gt;be readily apparent currently with a limited number of pools dominating&lt;br/&gt;block production, but it is my hope that mining will be more decentralized&lt;br/&gt;in the future.&lt;br/&gt;&lt;br/&gt;Depending on policy to mitigate this annex malleability vector could&lt;br/&gt;mislead developers into believing their transactions are immune to&lt;br/&gt;replacement, when in fact they might not be. This potential misalignment&lt;br/&gt;could result in developers and businesses constructing systems based on&lt;br/&gt;assumptions that could be compromised in the future, mirroring the&lt;br/&gt;situation that unfolded with zero-confirmation payments and rbf.&lt;br/&gt;&lt;br/&gt;It may thus be more prudent to permit the utilization of the annex without&lt;br/&gt;restrictions, inform developers of its inherent risks, and acknowledge that&lt;br/&gt;Bitcoin, in its present state, might not be ideally suited for certain&lt;br/&gt;types of applications?&lt;br/&gt;&lt;br/&gt;Joost&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/bitcoin-dev/attachments/20230603/4b064f42/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230603/4b064f42/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T20:19:51&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstm2w0794wnlj5zuwcs2fqfujqqk9mpmae25dc8rnt3axg2kjnhyszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txt6mll9</id>
    
      <title type="html">📅 Original date posted:2023-06-05 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstm2w0794wnlj5zuwcs2fqfujqqk9mpmae25dc8rnt3axg2kjnhyszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txt6mll9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx36j6qyz60fyjmn5hxc4sh4nt7qx6cydl9p6dla2u6ucmdu67sfg4jenkj&#39;&gt;nevent1q…enkj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-05&lt;br/&gt;🗒️ Summary of this message: The author suggests using out-of-band relay as a more efficient way to get transaction packages to miners while p2p package relay is under development.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;Before starting, I would like to state that I do not necessarily support&lt;br/&gt;the implementation of the idea I&amp;#39;m about to present, but I think it&amp;#39;s worth&lt;br/&gt;mentioning as it might inspire different use cases or provoke some debate.&lt;br/&gt;I believe that out-of-band relay is a more preferable and efficient way to&lt;br/&gt;get transaction packages to miners while p2p package relay is under&lt;br/&gt;development.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s consider the situation where we have a parent transaction A that pays&lt;br/&gt;0 sat/b (for example a lightning commitment transaction), and a fee bumping&lt;br/&gt;child transaction B. These transactions currently cannot reach miners.&lt;br/&gt;&lt;br/&gt;We can, however, conceive a workaround. Let&amp;#39;s introduce a third transaction&lt;br/&gt;C, crafted to contain the raw transactions A and B in a taproot annex. A&lt;br/&gt;commit/reveal style inscription could also be used instead, but I think it&lt;br/&gt;would be more complicated and less efficient.&lt;br/&gt;&lt;br/&gt;To ensure propagation, transaction C would pay sufficient fees. Also it&lt;br/&gt;would use at least one of the same fee contributing inputs as transaction&lt;br/&gt;B, but obviously not any inputs from A.&lt;br/&gt;&lt;br/&gt;Miners, upon receiving transaction C, could detect the embedded&lt;br/&gt;transactions A and B in the annex and immediately submit them to their&lt;br/&gt;mempool as a transaction package. This transaction package (A&#43;B) would then&lt;br/&gt;replace transaction C and could be included in a block for mining.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s of course important to ensure that the combined package of A&#43;B is more&lt;br/&gt;attractive to miners than the C transaction. The extra weight of the&lt;br/&gt;embedded transactions in C helps with this. Also it is worth noting that&lt;br/&gt;the fees for C will never be paid because it has been replaced. Thus there&lt;br/&gt;are no extra costs for using this package relay scheme, unless perhaps the&lt;br/&gt;weight of A&#43;B is very low and B needs to pay a higher fee rate than&lt;br/&gt;necessary to ensure replacement of C.&lt;br/&gt;&lt;br/&gt;If not all miners adopt this incentive-compatible replacement, there&amp;#39;s a&lt;br/&gt;chance transaction C ends up being mined. This is likely less probable if&lt;br/&gt;the fee rate for C is kept to a minimum. If transaction C is indeed mined,&lt;br/&gt;the operation can be retried with a modified B and C, though the fees paid&lt;br/&gt;for the initial transaction C would be forfeited.&lt;br/&gt;&lt;br/&gt;Joost&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/bitcoin-dev/attachments/20230605/0468684e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230605/0468684e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-15T02:33:40&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspdpppqx2eq4kknu75vq0a9qmh9ztx5ks6wpj6gv7g47y20p5kkzqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txs3hq7u</id>
    
      <title type="html">📅 Original date posted:2023-02-15 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspdpppqx2eq4kknu75vq0a9qmh9ztx5ks6wpj6gv7g47y20p5kkzqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txs3hq7u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspn7z9vevwqjhxm7nn2cd6565m5lxrrt8uhl7vrpuuvafsey4x08s9uddpq&#39;&gt;nevent1q…ddpq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-15&lt;br/&gt;🗒️ Summary of this message: Lightning network performance depends on the type of payment flows, with fast payment being favored for end-users and cheap fees for remittance payments. Adding latency as a criteria for pathfinding construction and using forward-error-correction code on top of MPP are potential solutions. More liquidity may be used by routing nodes to serve tailored HTLC requests, but this should be rewarded by higher routing fees. Careful policy rules design and upgradeability are necessary to prevent higher fees for end-users.&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think the performance question depends on the type of payment flows&lt;br/&gt;&amp;gt; considered. If you&amp;#39;re an&lt;br/&gt;&amp;gt; end-user sending a payment to your local Starbucks for coffee, here fast&lt;br/&gt;&amp;gt; payment sounds the end-goal.&lt;br/&gt;&amp;gt; If you&amp;#39;re doing remittance payment, cheap fees might be favored, and in&lt;br/&gt;&amp;gt; function of those flows you&amp;#39;re&lt;br/&gt;&amp;gt; probably not going to select the same &amp;#34;performant&amp;#34; routing nodes. I think&lt;br/&gt;&amp;gt; adding latency as a criteria for&lt;br/&gt;&amp;gt; pathfinding construction has already been mentioned in the past for LDK&lt;br/&gt;&amp;gt; [0].&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;My hopes are that eventually lightning nodes can run so efficient that in&lt;br/&gt;practice there is no real trade-off anymore between cost and speed. But of&lt;br/&gt;course hard to say how that&amp;#39;s going to play out. I am all for adding&lt;br/&gt;latency as an input to pathfinding. Attributable errors should help with&lt;br/&gt;that too.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Or there is the direction to build forward-error-correction code on top of&lt;br/&gt;&amp;gt; MPP, like in traditional&lt;br/&gt;&amp;gt; networking [1]. The rough idea, you send more payment shards than the&lt;br/&gt;&amp;gt; requested sum, and then&lt;br/&gt;&amp;gt; you reveal the payment secrets to the receiver after an onion&lt;br/&gt;&amp;gt; interactivity round to finalize payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This is not very different from payment pre-probing is it? So try a larger&lt;br/&gt;set of possible routes simultaneously and when one proves to be open, send&lt;br/&gt;the real payment across that route. Of course a balance may have shifted in&lt;br/&gt;the mean time, but seems unlikely enough to prevent the approach from being&lt;br/&gt;usable. The obvious downside is that the user needs more total liquidity to&lt;br/&gt;have multiple htlcs outstanding at the same time. Nevertheless an&lt;br/&gt;interesting way to reduce payment latency.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; At the end of the day, we add more signal channels between HTLC senders&lt;br/&gt;&amp;gt; and the routing&lt;br/&gt;&amp;gt; nodes offering capital liquidity, if the signal mechanisms are efficient,&lt;br/&gt;&amp;gt; I think they should lead&lt;br/&gt;&amp;gt; to better allocation of the capital. So yes, I think more liquidity might&lt;br/&gt;&amp;gt; be used by routing nodes&lt;br/&gt;&amp;gt; to serve finely tailored HTLC requests by senders, however this liquidity&lt;br/&gt;&amp;gt; should be rewarded&lt;br/&gt;&amp;gt; by higher routing fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This is indeed part of the idea. By signalling HA, you may not only attract&lt;br/&gt;more traffic, but also be able to command a higher fee.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I think if we have lessons to learn on policy rules design and deployment&lt;br/&gt;&amp;gt; on the base-layer&lt;br/&gt;&amp;gt; (the full-rbf saga), it&amp;#39;s to be careful in the initial set of rules, and&lt;br/&gt;&amp;gt; how we ensure smooth&lt;br/&gt;&amp;gt; upgradeability, from one version to another. Otherwise the re-deployment&lt;br/&gt;&amp;gt; cost towards&lt;br/&gt;&amp;gt; the new version might incentive the old routing node to stay on the&lt;br/&gt;&amp;gt; non-optimal versions,&lt;br/&gt;&amp;gt; and as we have historical buckets in routing algorithms, or preference for&lt;br/&gt;&amp;gt; older channels,&lt;br/&gt;&amp;gt; this might lead the end-user to pay higher fees, than they could access to.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I see the parallel, but also it seems that we have this situation already&lt;br/&gt;today on lightning. Senders apply penalties and routing nodes need to make&lt;br/&gt;assumptions about how they are penalised. Perhaps more explicit signalling&lt;br/&gt;can actually help to reduce the degree of uncertainty as to how a routing&lt;br/&gt;nodes is supposed to perform to keep senders happy?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; This is where the open question lies to me - &amp;#34;highly available&amp;#34; can be&lt;br/&gt;&amp;gt; defined with multiple&lt;br/&gt;&amp;gt; senses, like fault-tolerance, latency processing, equilibrated liquidity.&lt;br/&gt;&amp;gt; And a routing node might&lt;br/&gt;&amp;gt; not be able to optimize its architecture for the same end-goal (e.g more&lt;br/&gt;&amp;gt; watchtower on remote&lt;br/&gt;&amp;gt; host probably increases the latency processing).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, good point. So maybe a few more bits to signal what a sender may&lt;br/&gt;expect from a channel exactly?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; Without shadow channels, it is impossible to guarantee liquidity up to&lt;br/&gt;&amp;gt; the channel capacity. It might make sense for senders to only assume high&lt;br/&gt;&amp;gt; &amp;gt; availability for amounts up to `htlc_maximum_msat`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As a note, I think &amp;#34;senders assumption&amp;#34; should be well-documented,&lt;br/&gt;&amp;gt; otherwise there will be&lt;br/&gt;&amp;gt; performance discrepancies between node implementations or even versions.&lt;br/&gt;&amp;gt; E.g, an upgraded&lt;br/&gt;&amp;gt; sender penalizing a node for the lack of shadow/parallel channels&lt;br/&gt;&amp;gt; fulfilling HTLC amounts up to&lt;br/&gt;&amp;gt; `htlc_maximum_msat`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Well documented, or maybe even explicit in the name of the feature bit. For&lt;br/&gt;example `htlc_max_guaranteed`.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I think signal availability should be explicit rather than implicit. Even&lt;br/&gt;&amp;gt; if it&amp;#39;s coming with more&lt;br/&gt;&amp;gt; gossip bandwidth data consumed. I would say for bandwidth performance&lt;br/&gt;&amp;gt; management, relying&lt;br/&gt;&amp;gt; on new gossip messages, where they can be filtered in function of the&lt;br/&gt;&amp;gt; level of services required&lt;br/&gt;&amp;gt; is interesting.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;In terms of implementation, I think this kind of signalling is easier as an&lt;br/&gt;extension of `channel_update`, but it can probably work as a separate&lt;br/&gt;message too.&lt;br/&gt;&lt;br/&gt;Joost&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/20230215/c17c1304/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230215/c17c1304/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:43&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsy2fhh2zuyxlhvmkz0y9gdpmt50s3gkx4rfmfvuy94tclpmfzhv5gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txx5lpxv</id>
    
      <title type="html">📅 Original date posted:2023-02-15 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsy2fhh2zuyxlhvmkz0y9gdpmt50s3gkx4rfmfvuy94tclpmfzhv5gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txx5lpxv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrnwjcvtcsmxz38jrnk5tlv3j40q5c6dymcux3p9teeuz4x9zq7kcww5w2x&#39;&gt;nevent1q…5w2x&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-15&lt;br/&gt;🗒️ Summary of this message: Running a high availability channel on the Lightning Network requires maintaining outbound liquidity by opening new channels, rebalancing, or swapping in. Publicly visible data may not be representative of the network as a whole.&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But how do you decide to set it without a credit relationship? Do I&lt;br/&gt;&amp;gt; measure my channel and set the&lt;br/&gt;&amp;gt;&lt;br/&gt;bit because the channel is &amp;#34;usually&amp;#34; (at what threshold?) saturating in the&lt;br/&gt;&amp;gt; inbound direction? What&lt;br/&gt;&amp;gt; happens if this changes for an hour and I get unlucky? Did I just screw&lt;br/&gt;&amp;gt; myself?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As a node setting the flag, you&amp;#39;ll have to make sure you open new channels,&lt;br/&gt;rebalance or swap-in in time to maintain outbound liquidity. That&amp;#39;s part of&lt;br/&gt;the game of running an HA channel.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; How can you be sure about this? This isn&amp;#39;t publicly visible data.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sure it is! &lt;a href=&#34;https://river.com/learn/files/river-lightning-report.pdf&#34;&gt;https://river.com/learn/files/river-lightning-report.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Some operators publish data, but are the experiences of one of the most&lt;br/&gt;well connected (custodial) nodes representative for the network as a whole&lt;br/&gt;when evaluating payment success rates? In the end you can&amp;#39;t know what&amp;#39;s&lt;br/&gt;happening on the lightning network.&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/20230215/1fb6f297/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230215/1fb6f297/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs02ec0z3t2ym8z4qqn33sxmgkxehh9n04v7nfk58yljlg8scs47mqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txnxwrjn</id>
    
      <title type="html">📅 Original date posted:2023-02-14 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs02ec0z3t2ym8z4qqn33sxmgkxehh9n04v7nfk58yljlg8scs47mqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txnxwrjn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspwxzh06yqxdyz3pdma8qej2z3ezuuwj3pf9ujyq3wsd55nx97ejqtz40f2&#39;&gt;nevent1q…40f2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-14&lt;br/&gt;🗒️ Summary of this message: The Lightning Network should not create two classes of nodes based on availability, according to a post on the Lightning-dev mailing list. The post argued that communicating reliability up front would not work, and penalising nodes after the fact would be ineffective. The author also said relying on third-party information to track reliability would be problematic. Instead, the post suggested using high-availability signalling to make local reliability tracking more efficient.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Christian,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; And after all this rambling, let&amp;#39;s get back to the topic at hand: I&lt;br/&gt;&amp;gt; don&amp;#39;t think enshrining the differences of availability in the protocol,&lt;br/&gt;&amp;gt; thus creating two classes of nodes, is a desirable&lt;br/&gt;&amp;gt; feature.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Yes so to be clear, the HA signaling is not on the node level but on the&lt;br/&gt;channel level. So each node can decide per channel whether they want to&lt;br/&gt;potentially attract additional traffic at the cost of severe penalties (or&lt;br/&gt;avoidance if you want to use a different wording) if the channel can&amp;#39;t be&lt;br/&gt;used. They can still maintain a set of less reliable channels along side.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Communicating up-front that I intend to be reliable does&lt;br/&gt;&amp;gt; nothing, and penalizing after the fact isn&amp;#39;t worth much due to the&lt;br/&gt;&amp;gt; repeat interactions issue.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I think it is currently quite common for pathfinders to try another channel&lt;br/&gt;of the same node for the payment at hand. Or re-attempt the same channel&lt;br/&gt;for a future payment to the same destination. I understand the repeat&lt;br/&gt;interactions issue, but not sure about the extent to which it applies to&lt;br/&gt;lightning in practice. A think a common pattern for payments in general is&lt;br/&gt;to pay to the same destinations repeatedly, for example for a daily coffee.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; It&amp;#39;d be even worse if now we had to rely on a&lt;br/&gt;&amp;gt; third party to aggregate and track the reliability, in order to get&lt;br/&gt;&amp;gt; enough repeat interactions to build a good model of their liquidity,&lt;br/&gt;&amp;gt; since we&amp;#39;re now back in the hearsay world, and the third party can feed&lt;br/&gt;&amp;gt; us wrong information to maximize their profits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, using 3rd party info seems difficult. As mentioned in my reply to&lt;br/&gt;Matt, the idea of HA signaling is to make local reliability tracking more&lt;br/&gt;efficient so that it becomes less likely that senders need to rely on&lt;br/&gt;external aggregators for their view on the network.&lt;br/&gt;&lt;br/&gt;Joost&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/20230214/a7f355e6/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230214/a7f355e6/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:40&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqmq8g2dkqgg9an772qyy94lz7j5jkaxk4jn500v3eksfl32gr37czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txnz3sst</id>
    
      <title type="html">📅 Original date posted:2023-02-14 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqmq8g2dkqgg9an772qyy94lz7j5jkaxk4jn500v3eksfl32gr37czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txnz3sst" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs02ec0z3t2ym8z4qqn33sxmgkxehh9n04v7nfk58yljlg8scs47mq5ecp2u&#39;&gt;nevent1q…cp2u&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-14&lt;br/&gt;🗒️ Summary of this message: The Lightning Network should not be built out of high reliability nodes to avoid centralization pressure, according to a developer. Nodes should measure the network and route over paths that are reliable for what they want, robustly over an unreliable network.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Matt,&lt;br/&gt;&lt;br/&gt;If nodes start aggressively preferring routes through nodes that reliably&lt;br/&gt;&amp;gt; route payments (which I believe lnd already does, in effect, to some large&lt;br/&gt;&amp;gt; extent), they should do so by measurement, not signaling.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The signaling is intended as a way to make measurement more efficient. If a&lt;br/&gt;node signals that a particular channel is HA and it fails, no other&lt;br/&gt;measurements on that same node need to be taken by the sender. They can&lt;br/&gt;skip the node altogether for a longer period of time.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; In practice, many channels on the network are “high availability” today,&lt;br/&gt;&amp;gt; but only in one direction (I.e. they aren’t regularly spliced/rebalanced&lt;br/&gt;&amp;gt; and are regularly unbalanced). A node strongly preferring a high payment&lt;br/&gt;&amp;gt; success rate *should* prefer such a channel, but in your scheme would not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This shouldn&amp;#39;t be a problem, because the HA signaling is also directional.&lt;br/&gt;Each end can decide independently on whether to add the flag for a&lt;br/&gt;particular channel.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; This ignores the myriad of “at what threshold do you signal HA” issues,&lt;br/&gt;&amp;gt; which likely make such a signal DOA, anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think this is a product of sender preference for HA channels and the&lt;br/&gt;severity of the penalty if an HA channel fails. Given this, routing nodes&lt;br/&gt;will need to decide whether they can offer a service level that increases&lt;br/&gt;their routing revenue overall if they would signal HA. It is indeed&lt;br/&gt;dynamic, but I think the market is able to work it out.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Finally, I’m very dismayed at this direction in thinking on how ln should&lt;br/&gt;&amp;gt; work - nodes should be measuring the network and routing over paths that it&lt;br/&gt;&amp;gt; thinks are reliable for what it wants, *robustly over an unreliable&lt;br/&gt;&amp;gt; network*. We should absolutely not be expecting the lightning network to be&lt;br/&gt;&amp;gt; built out of high reliability nodes, that creates strong centralization&lt;br/&gt;&amp;gt; pressure. To truly meet a “high availability” threshold, realistically,&lt;br/&gt;&amp;gt; you’d need to be able to JIT 0conf splice-in, which would drive lightning&lt;br/&gt;&amp;gt; to actually being a credit network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Different people can have different opinions about how ln should work, that&lt;br/&gt;is fine. I see a trade-off between the reliability of the network and the&lt;br/&gt;barrier of entry, and I don&amp;#39;t think the optimum is on one of the ends of&lt;br/&gt;the scale.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; With reasonable volume, lightning today is very reliable and relatively&lt;br/&gt;&amp;gt; fast, with few retries required. I don’t think we need to change anything&lt;br/&gt;&amp;gt; to fix it. :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;How can you be sure about this? This isn&amp;#39;t publicly visible data.&lt;br/&gt;&lt;br/&gt;Joost&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/20230214/da656e7a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230214/da656e7a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:40&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0j3mw22z594qenk99z8xg0jn50dhknu6gnp6g9yjd2ywdsl5v87czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txn6pdwq</id>
    
      <title type="html">📅 Original date posted:2023-02-13 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0j3mw22z594qenk99z8xg0jn50dhknu6gnp6g9yjd2ywdsl5v87czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txn6pdwq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsf8vwj8r724c2ra29wt4hemhzc9hcetuepgc3hjkwwkz5r8kmcfcqde4n9v&#39;&gt;nevent1q…4n9v&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-13&lt;br/&gt;🗒️ Summary of this message: The Lightning Network may require routing nodes to operate flawlessly or face penalties, to ensure competitiveness with centralized payment systems. A proposed solution is to extend the `channel_update` field with a new bit to signal `highly_available` channels, allowing payers to prefer them during pathfinding, but with a stronger penalty for failure. This creates an opportunity for routing nodes to attract more traffic but also comes with the responsibility to deliver.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;For a long time I&amp;#39;ve held the expectation that eventually payers on the&lt;br/&gt;lightning network will become very strict about node performance. That they&lt;br/&gt;will require a routing node to operate flawlessly or else apply a hefty&lt;br/&gt;penalty such as completely avoiding the node for an extended period of time&lt;br/&gt;- multiple weeks. The consequence of this is that routing nodes would need&lt;br/&gt;to manage their liquidity meticulously because every failure potentially&lt;br/&gt;has a large impact on future routing revenue.&lt;br/&gt;&lt;br/&gt;I think movement in this direction is important to guarantee&lt;br/&gt;competitiveness with centralised payment systems and their (at least&lt;br/&gt;theoretical) ability to process a payment in the blink of an eye. A&lt;br/&gt;lightning wallet trying multiple paths to find one that works doesn&amp;#39;t help&lt;br/&gt;with this.&lt;br/&gt;&lt;br/&gt;A common argument against strict penalisation is that it would lead to less&lt;br/&gt;efficient use of capital. Routing nodes would need to maintain pools of&lt;br/&gt;liquidity to guarantee successes all the time. My opinion on this is that&lt;br/&gt;lightning is already enormously capital efficient at scale and that it is&lt;br/&gt;worth sacrificing a slight part of that efficiency to also achieve the&lt;br/&gt;lowest possible latency.&lt;br/&gt;&lt;br/&gt;This brings me to the actual subject of this post. Assuming strict&lt;br/&gt;penalisation is good, it may still not be ideal to flip the switch from one&lt;br/&gt;day to the other. Routing nodes may not offer the required level of service&lt;br/&gt;yet, causing senders to end up with no nodes to choose from.&lt;br/&gt;&lt;br/&gt;One option is to gradually increase the strength of the penalties, so that&lt;br/&gt;routing nodes are given time to adapt to the new standards. This does&lt;br/&gt;require everyone to move along and leaves no space for cheap routing nodes&lt;br/&gt;with less leeway in terms of liquidity.&lt;br/&gt;&lt;br/&gt;Therefore I am proposing another way to go about it: extend the&lt;br/&gt;`channel_update` field `channel_flags` with a new bit that the sender can&lt;br/&gt;use to signal `highly_available`.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s then up to payers to decide how to interpret this flag. One way could&lt;br/&gt;be to prefer `highly_available` channels during pathfinding. But if the&lt;br/&gt;routing node then returns a failure, a much stronger than normal penalty&lt;br/&gt;will be applied. For routing nodes this creates an opportunity to attract&lt;br/&gt;more traffic by marking some channels as `highly_available`, but it also&lt;br/&gt;comes with the responsibility to deliver.&lt;br/&gt;&lt;br/&gt;Without shadow channels, it is impossible to guarantee liquidity up to the&lt;br/&gt;channel capacity. It might make sense for senders to only assume high&lt;br/&gt;availability for amounts up to `htlc_maximum_msat`.&lt;br/&gt;&lt;br/&gt;A variation on this scheme that requires no extension of `channel_update`&lt;br/&gt;is to signal availability implicitly through routing fees. So the more&lt;br/&gt;expensive a channel is, the stronger the penalty that is applied on failure&lt;br/&gt;will be. It seems less ideal though, because it could disincentivize cheap&lt;br/&gt;but reliable channels on high traffic links.&lt;br/&gt;&lt;br/&gt;The effort required to implement some form of a `highly_available` flag&lt;br/&gt;seem limited and it may help to get payment success rates up. Interested to&lt;br/&gt;hear your thoughts.&lt;br/&gt;&lt;br/&gt;Joost&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/20230213/adf0c913/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230213/adf0c913/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:38&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9y0vs4elp00al2szj8mzvjwl6zpj536yh5mlfsmfj4kgfkcks3pczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txautlu7</id>
    
      <title type="html">📅 Original date posted:2023-02-14 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9y0vs4elp00al2szj8mzvjwl6zpj536yh5mlfsmfj4kgfkcks3pczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txautlu7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs95pd9vwllq42glyp4yxt2htxwtcl88ltyeat9v5z8tt4hqr8hryckzq4nn&#39;&gt;nevent1q…q4nn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-14&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Matt,&lt;br/&gt;&lt;br/&gt;If nodes start aggressively preferring routes through nodes that reliably&lt;br/&gt;&amp;gt; route payments (which I believe lnd already does, in effect, to some large&lt;br/&gt;&amp;gt; extent), they should do so by measurement, not signaling.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The signaling is intended as a way to make measurement more efficient. If a&lt;br/&gt;node signals that a particular channel is HA and it fails, no other&lt;br/&gt;measurements on that same node need to be taken by the sender. They can&lt;br/&gt;skip the node altogether for a longer period of time.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; In practice, many channels on the network are “high availability” today,&lt;br/&gt;&amp;gt; but only in one direction (I.e. they aren’t regularly spliced/rebalanced&lt;br/&gt;&amp;gt; and are regularly unbalanced). A node strongly preferring a high payment&lt;br/&gt;&amp;gt; success rate *should* prefer such a channel, but in your scheme would not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This shouldn&amp;#39;t be a problem, because the HA signaling is also directional.&lt;br/&gt;Each end can decide independently on whether to add the flag for a&lt;br/&gt;particular channel.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; This ignores the myriad of “at what threshold do you signal HA” issues,&lt;br/&gt;&amp;gt; which likely make such a signal DOA, anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think this is a product of sender preference for HA channels and the&lt;br/&gt;severity of the penalty if an HA channel fails. Given this, routing nodes&lt;br/&gt;will need to decide whether they can offer a service level that increases&lt;br/&gt;their routing revenue overall if they would signal HA. It is indeed&lt;br/&gt;dynamic, but I think the market is able to work it out.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Finally, I’m very dismayed at this direction in thinking on how ln should&lt;br/&gt;&amp;gt; work - nodes should be measuring the network and routing over paths that it&lt;br/&gt;&amp;gt; thinks are reliable for what it wants, *robustly over an unreliable&lt;br/&gt;&amp;gt; network*. We should absolutely not be expecting the lightning network to be&lt;br/&gt;&amp;gt; built out of high reliability nodes, that creates strong centralization&lt;br/&gt;&amp;gt; pressure. To truly meet a “high availability” threshold, realistically,&lt;br/&gt;&amp;gt; you’d need to be able to JIT 0conf splice-in, which would drive lightning&lt;br/&gt;&amp;gt; to actually being a credit network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Different people can have different opinions about how ln should work, that&lt;br/&gt;is fine. I see a trade-off between the reliability of the network and the&lt;br/&gt;barrier of entry, and I don&amp;#39;t think the optimum is on one of the ends of&lt;br/&gt;the scale.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; With reasonable volume, lightning today is very reliable and relatively&lt;br/&gt;&amp;gt; fast, with few retries required. I don’t think we need to change anything&lt;br/&gt;&amp;gt; to fix it. :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;How can you be sure about this? This isn&amp;#39;t publicly visible data.&lt;br/&gt;&lt;br/&gt;Joost&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/20230214/da656e7a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230214/da656e7a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:08:06&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2uu639paxwxp45nac8478js74zgn29lwmh7ysg8fzew0w37u22pgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txz8rhfc</id>
    
      <title type="html">📅 Original date posted:2023-02-13 📝 Original message: Hi, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2uu639paxwxp45nac8478js74zgn29lwmh7ysg8fzew0w37u22pgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txz8rhfc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0ez5fff8g647kkwe03l7e8f7xd9hnm3e3t9ws7quxjkd0m5h0xssgw7c44&#39;&gt;nevent1q…7c44&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;For a long time I&amp;#39;ve held the expectation that eventually payers on the&lt;br/&gt;lightning network will become very strict about node performance. That they&lt;br/&gt;will require a routing node to operate flawlessly or else apply a hefty&lt;br/&gt;penalty such as completely avoiding the node for an extended period of time&lt;br/&gt;- multiple weeks. The consequence of this is that routing nodes would need&lt;br/&gt;to manage their liquidity meticulously because every failure potentially&lt;br/&gt;has a large impact on future routing revenue.&lt;br/&gt;&lt;br/&gt;I think movement in this direction is important to guarantee&lt;br/&gt;competitiveness with centralised payment systems and their (at least&lt;br/&gt;theoretical) ability to process a payment in the blink of an eye. A&lt;br/&gt;lightning wallet trying multiple paths to find one that works doesn&amp;#39;t help&lt;br/&gt;with this.&lt;br/&gt;&lt;br/&gt;A common argument against strict penalisation is that it would lead to less&lt;br/&gt;efficient use of capital. Routing nodes would need to maintain pools of&lt;br/&gt;liquidity to guarantee successes all the time. My opinion on this is that&lt;br/&gt;lightning is already enormously capital efficient at scale and that it is&lt;br/&gt;worth sacrificing a slight part of that efficiency to also achieve the&lt;br/&gt;lowest possible latency.&lt;br/&gt;&lt;br/&gt;This brings me to the actual subject of this post. Assuming strict&lt;br/&gt;penalisation is good, it may still not be ideal to flip the switch from one&lt;br/&gt;day to the other. Routing nodes may not offer the required level of service&lt;br/&gt;yet, causing senders to end up with no nodes to choose from.&lt;br/&gt;&lt;br/&gt;One option is to gradually increase the strength of the penalties, so that&lt;br/&gt;routing nodes are given time to adapt to the new standards. This does&lt;br/&gt;require everyone to move along and leaves no space for cheap routing nodes&lt;br/&gt;with less leeway in terms of liquidity.&lt;br/&gt;&lt;br/&gt;Therefore I am proposing another way to go about it: extend the&lt;br/&gt;`channel_update` field `channel_flags` with a new bit that the sender can&lt;br/&gt;use to signal `highly_available`.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s then up to payers to decide how to interpret this flag. One way could&lt;br/&gt;be to prefer `highly_available` channels during pathfinding. But if the&lt;br/&gt;routing node then returns a failure, a much stronger than normal penalty&lt;br/&gt;will be applied. For routing nodes this creates an opportunity to attract&lt;br/&gt;more traffic by marking some channels as `highly_available`, but it also&lt;br/&gt;comes with the responsibility to deliver.&lt;br/&gt;&lt;br/&gt;Without shadow channels, it is impossible to guarantee liquidity up to the&lt;br/&gt;channel capacity. It might make sense for senders to only assume high&lt;br/&gt;availability for amounts up to `htlc_maximum_msat`.&lt;br/&gt;&lt;br/&gt;A variation on this scheme that requires no extension of `channel_update`&lt;br/&gt;is to signal availability implicitly through routing fees. So the more&lt;br/&gt;expensive a channel is, the stronger the penalty that is applied on failure&lt;br/&gt;will be. It seems less ideal though, because it could disincentivize cheap&lt;br/&gt;but reliable channels on high traffic links.&lt;br/&gt;&lt;br/&gt;The effort required to implement some form of a `highly_available` flag&lt;br/&gt;seem limited and it may help to get payment success rates up. Interested to&lt;br/&gt;hear your thoughts.&lt;br/&gt;&lt;br/&gt;Joost&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/20230213/adf0c913/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230213/adf0c913/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:08:03&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstz3skshcyrygtfjnqnvx323sp9h68wgms4njjv6cd8tvxkaacvegzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txc6gjv7</id>
    
      <title type="html">📅 Original date posted:2022-10-19 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstz3skshcyrygtfjnqnvx323sp9h68wgms4njjv6cd8tvxkaacvegzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txc6gjv7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8u7kdtjgqn540xjs7j27uaegmd3u2juqchcjll3v7dd0gu0d6hwg05zqqj&#39;&gt;nevent1q…zqqj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-19&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi list,&lt;br/&gt;&lt;br/&gt;I wanted to get back to a long-standing issue in Lightning: gaps in error&lt;br/&gt;attribution. I&amp;#39;ve posted about this before back in 2019 [1].&lt;br/&gt;&lt;br/&gt;Error attribution is important to properly penalize nodes after a payment&lt;br/&gt;failure occurs. The goal of the penalty is to give the next attempt a&lt;br/&gt;better chance at succeeding. In the happy failure flow, the sender is able&lt;br/&gt;to determine the origin of the failure and penalizes a single node or pair&lt;br/&gt;of nodes.&lt;br/&gt;&lt;br/&gt;Unfortunately it is possible for nodes on the route to hide themselves. If&lt;br/&gt;they return random data as the failure message, the sender won&amp;#39;t know where&lt;br/&gt;the failure happened. Some senders then penalize all nodes that were part&lt;br/&gt;of the route [4][5]. This may exclude perfectly reliable nodes from being&lt;br/&gt;used for future payments. Other senders penalize no nodes at all [6][7],&lt;br/&gt;which allows the offending node to keep the disruption going.&lt;br/&gt;&lt;br/&gt;A special case of this is a final node sending back random data. Senders&lt;br/&gt;that penalize all nodes will keep looking for alternative routes. But&lt;br/&gt;because each alternative route still ends with that same final node, the&lt;br/&gt;sender will ultimately penalize all of its peers and possibly a lot of the&lt;br/&gt;rest of the network too.&lt;br/&gt;&lt;br/&gt;I can think of various reasons for exploiting this weakness. One is just&lt;br/&gt;plain grievance for whatever reason. Another one is to attract more traffic&lt;br/&gt;by getting competing routing nodes penalized. Or the goal could be to&lt;br/&gt;sufficiently mess up reputation tracking of a specific sender node to make&lt;br/&gt;it hard for that node to make further payments.&lt;br/&gt;&lt;br/&gt;Related to this are delays in the path. A node can delay propagating back a&lt;br/&gt;failure message and the sender won&amp;#39;t be able to determine which node did&lt;br/&gt;it.&lt;br/&gt;&lt;br/&gt;The link at the top of this post [1] describes a way to address both&lt;br/&gt;unreadable failure messages as well as delays by letting each node on the&lt;br/&gt;route append a timestamp and hmac to the failure message. The great&lt;br/&gt;challenge is to do this in such a way that nodes don’t learn their position&lt;br/&gt;in the path.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m revisiting this idea, and have prototyped various ways to implement it.&lt;br/&gt;In the remainder of this post, I will describe the variant that I thought&lt;br/&gt;works best (so far).&lt;br/&gt;&lt;br/&gt;# Failure message format&lt;br/&gt;&lt;br/&gt;The basic idea of the new format is to let each node (not just the error&lt;br/&gt;source) commit to the failure message when it passes it back by adding an&lt;br/&gt;hmac. The sender verifies all hmacs upon receipt of the failure message.&lt;br/&gt;This makes it impossible for any of the nodes to modify the failure message&lt;br/&gt;without revealing that they might have played a part in the modification.&lt;br/&gt;It won’t be possible for the sender to pinpoint an exact node, because&lt;br/&gt;either end of a communication channel may have modified the message.&lt;br/&gt;Pinpointing a pair of nodes however is good enough, and is commonly done&lt;br/&gt;for regular onion failures too.&lt;br/&gt;&lt;br/&gt;On the highest level, the new failure message consists of three parts:&lt;br/&gt;&lt;br/&gt;`message` (var len) | `payloads` (fixed len) | `hmacs` (fixed len)&lt;br/&gt;&lt;br/&gt;* `message` is the standard onion failure message as described in [2], but&lt;br/&gt;without the hmac. The hmac is now part of `hmacs` and doesn&amp;#39;t need to be&lt;br/&gt;repeated.&lt;br/&gt;&lt;br/&gt;* `payloads` is a fixed length array that contains space for each node&lt;br/&gt;(`hop_payload`) on the route to add data to return to the sender. Ideally&lt;br/&gt;the contents and size of `hop_payload` is signaled so that future&lt;br/&gt;extensions don’t require all nodes to upgrade. For now, we’ll assume the&lt;br/&gt;following 9-byte format:&lt;br/&gt;&lt;br/&gt;  `is_final` (1 byte) | `duration` (8 bytes)&lt;br/&gt;&lt;br/&gt;  `is_final` indicates whether this node is the failure source. The sender&lt;br/&gt;uses `is_final` to determine when to stop the decryption/verification&lt;br/&gt;process.&lt;br/&gt;&lt;br/&gt;  `duration` is the time in milliseconds that the node held the htlc. By&lt;br/&gt;observing the series of reported durations, the sender is able to pinpoint&lt;br/&gt;a delay down to a pair of nodes.&lt;br/&gt;&lt;br/&gt;  The `hop_payload` is repeated 27 times (the maximum route length).&lt;br/&gt;&lt;br/&gt;  Every hop shifts `payloads` 9 bytes to the right and puts its own&lt;br/&gt;`hop_payload` in the 9 left-most bytes.&lt;br/&gt;&lt;br/&gt;* `hmacs` is a fixed length array where nodes add their hmacs as the&lt;br/&gt;failure message travels back to the sender.&lt;br/&gt;&lt;br/&gt;  To keep things simple, I&amp;#39;ll describe the format as if the maximum route&lt;br/&gt;length was only three hops (instead of 27):&lt;br/&gt;&lt;br/&gt;  `hmac_0_2` | `hmac_0_1`| `hmac_0_0`| `hmac_1_1`| `hmac_1_0`| `hmac_2_0`&lt;br/&gt;&lt;br/&gt;  Because nodes don&amp;#39;t know their position in the path, it&amp;#39;s unclear to them&lt;br/&gt;what part of the failure message they are supposed to include in the hmac.&lt;br/&gt;They can&amp;#39;t just include everything, because if part of that data is deleted&lt;br/&gt;later (to keep the message size fixed) it opens up the possibility for&lt;br/&gt;nodes to blame others.&lt;br/&gt;&lt;br/&gt;  The solution here is to provide hmacs for all possible positions. The&lt;br/&gt;last node that updated `hmacs` added `hmac_0_2`, `hmac_0_1` and `hmac_0_0`&lt;br/&gt;to the block. Each hmac corresponds to a presumed position in the path,&lt;br/&gt;where `hmac_0_2` is for the longest path (2 downstream hops) and `hmac_0_0`&lt;br/&gt;for the shortest (node is the error source).&lt;br/&gt;&lt;br/&gt;  `hmac_x_y` is the hmac added by node x (counted from the node that is&lt;br/&gt;currently handling the failure message) assuming that this node is y hops&lt;br/&gt;away from the final node.&lt;br/&gt;&lt;br/&gt;Before an hop adds its hmacs, it first deletes some of the previous hmacs.&lt;br/&gt;This keeps the failure message at a fixed length. The removed hmacs are the&lt;br/&gt;ones that cannot be useful anymore. If node 0 adds itself, the former node&lt;br/&gt;0 (now node 1) cannot be at the first position anymore. The former node 1&lt;br/&gt;(now node 2) cannot be at the second position anymore. The former node 2&lt;br/&gt;cannot be the source of the error anymore and isn’t represented in the&lt;br/&gt;failure message any longer. The corresponding hmacs (the now non-existent&lt;br/&gt;`hmac_0_2`, `hmac_1_1` and `hmac_2_0`) are deleted by node 0.&lt;br/&gt;&lt;br/&gt;Deleting the useless data reduces the number of hmacs (and roughly the&lt;br/&gt;total failure message size) to half.&lt;br/&gt;&lt;br/&gt;The delete operation transform the fields above to:&lt;br/&gt;&lt;br/&gt;&amp;lt;empty&amp;gt; | &amp;lt;empty&amp;gt; | &amp;lt;empty&amp;gt; | `hmac_0_1`| `hmac_0_0`| `hmac_1_0`&lt;br/&gt;&lt;br/&gt;The exact data that is included in each hmac is:&lt;br/&gt;  * `message`&lt;br/&gt;  * the node’s own `hop_payload` and a set of downstream `hop_payload`s,&lt;br/&gt;depending on assumed position&lt;br/&gt;  * a set of downstream node hmacs, depending on assumed position&lt;br/&gt;&lt;br/&gt;For example `hmac_0_1` is based on:&lt;br/&gt;&lt;br/&gt;`message` | `hop_payload[0]` | `hop_payload[1]` | `hmac_1_0`&lt;br/&gt;&lt;br/&gt;If the node that is currently handling the failure message is one hop away&lt;br/&gt;from the final node, it needs to cover its own `hop_payload[0]`, the final&lt;br/&gt;node `hop_payload[1]` and the final node hmac `hmac_1_0`.&lt;br/&gt;&lt;br/&gt;A longer path is committed to in `hmac_0_2`:&lt;br/&gt;&lt;br/&gt;`message` | `hop_payload[0]` | `hop_payload[1]` | `hop_payload[2]` |&lt;br/&gt;`hmac_1_1` | `hmac_2_0`&lt;br/&gt;&lt;br/&gt;The current node is two hops away from the final node. It needs to cover&lt;br/&gt;its own `hop_payload[0]` as well as `hop_payload[1]` and `hop_payload[2]`&lt;br/&gt;for the next and final hops. Additionally it covers the next hop `hmac_1_1`&lt;br/&gt;and final hop `hmac_2_0`, which correspond to the positions of those nodes&lt;br/&gt;in the path that is assumed for `hmac_0_2`.&lt;br/&gt;&lt;br/&gt;With this information, the sender is able to verify the longest chain of&lt;br/&gt;hmacs until it encounters a `hop_payload` with `is_final` set.&lt;br/&gt;&lt;br/&gt;If any of the nodes messes with any byte in the failure message, the sender&lt;br/&gt;is always able to determine a pair of nodes that the offending node is part&lt;br/&gt;of. This statement can be verified through reasoning, but to be sure I also&lt;br/&gt;tested it with code. I’ve simulated a malicious node that modifies a byte&lt;br/&gt;of the failure message at index x and observed the error source as&lt;br/&gt;determined by the sender. For every x, the sender reports the same correct&lt;br/&gt;pair.&lt;br/&gt;&lt;br/&gt;# Size&lt;br/&gt;&lt;br/&gt;The obvious downside of the scheme above is the size. Given a maximum of 27&lt;br/&gt;hops, the `hmacs` block contains 27&#43;26&#43;25&#43;...&#43;1=378 hmacs of 32 bytes each.&lt;br/&gt;This makes for a total size of 12 KB.&lt;br/&gt;&lt;br/&gt;It could be the case though that it is not possible to devise a more&lt;br/&gt;compact scheme that also preserves the existing privacy guarantees. I know&lt;br/&gt;that smart people have spent time on this problem, but nonetheless no&lt;br/&gt;better solution has come up in the past years. A proof of its non-existence&lt;br/&gt;would be interesting for sure.&lt;br/&gt;&lt;br/&gt;I personally think the size increase is justified to fix this vulnerability&lt;br/&gt;in Lightning. Also if failures are expected to become more rare going&lt;br/&gt;forward, size becomes less relevant to the overall operation of the network.&lt;br/&gt;&lt;br/&gt;Another option is to reduce the maximum number of hops. It is questionable&lt;br/&gt;whether 27 hops are really needed in practice, and such long routes also&lt;br/&gt;contribute to latency and capital lock up. If for example the new failure&lt;br/&gt;message could only be used with routes up to 10 hops, the total number of&lt;br/&gt;hmacs would drop from 378 to 55. This makes for a total message size of&lt;br/&gt;about 2 KB.&lt;br/&gt;&lt;br/&gt;# Signaling&lt;br/&gt;&lt;br/&gt;For backwards compatibility nodes need to know what algorithm they should&lt;br/&gt;run to generate or transform the failure message. This can be signaled by&lt;br/&gt;the sender via a tlv onion field. A failure message format signaling&lt;br/&gt;mechanism is also discussed in the context of long failure messages [3].&lt;br/&gt;The failure message described in this post could be just another version.&lt;br/&gt;&lt;br/&gt;Additionally, intermediate nodes need to advertise their capability to&lt;br/&gt;transform the new format through a feature bit.&lt;br/&gt;&lt;br/&gt;# Delayed successes&lt;br/&gt;&lt;br/&gt;It’s not just failures that can be delayed. Successes can too. In that&lt;br/&gt;case, there is no failure message to improve. It could be an option to add&lt;br/&gt;the same `payloads` and `hmacs` blocks to the `update_fulfill_htlc` message.&lt;br/&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2019-June/002015.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2019-June/002015.html&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://github.com/lightning/bolts/blob/master/04-onion-routing.md#returning-errors&#34;&gt;https://github.com/lightning/bolts/blob/master/04-onion-routing.md#returning-errors&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1021&#34;&gt;https://github.com/lightning/bolts/pull/1021&lt;/a&gt;&lt;br/&gt;[4]&lt;br/&gt;&lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/4fbd608b734f348d7e79fbfc7feaecc5c6c33a90/routing/result_interpretation.go#L419&#34;&gt;https://github.com/lightningnetwork/lnd/blob/4fbd608b734f348d7e79fbfc7feaecc5c6c33a90/routing/result_interpretation.go#L419&lt;/a&gt;&lt;br/&gt;[5]&lt;br/&gt;&lt;a href=&#34;https://github.com/ACINQ/eclair/blob/a0433aa0c027c9be618c5afe18e7f91642a7f372/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentEvents.scala#L221&#34;&gt;https://github.com/ACINQ/eclair/blob/a0433aa0c027c9be618c5afe18e7f91642a7f372/eclair-core/src/main/scala/fr/acinq/eclair/payment/PaymentEvents.scala#L221&lt;/a&gt;&lt;br/&gt;[6]&lt;br/&gt;&lt;a href=&#34;https://github.com/ElementsProject/lightning/blob/62bfed9a8df8731be44ba4e86afb08a5d28a4442/plugins/libplugin-pay.c#L1461&#34;&gt;https://github.com/ElementsProject/lightning/blob/62bfed9a8df8731be44ba4e86afb08a5d28a4442/plugins/libplugin-pay.c#L1461&lt;/a&gt;&lt;br/&gt;[7]&lt;br/&gt;&lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/blob/e61f3a238a70cbac87209e223b7c396108a49b97/lightning-invoice/src/payment.rs#L682&#34;&gt;https://github.com/lightningdevkit/rust-lightning/blob/e61f3a238a70cbac87209e223b7c396108a49b97/lightning-invoice/src/payment.rs#L682&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/20221019/759cba0c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221019/759cba0c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:06&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2w0pq6wmzv5wqclr9k89xd4ljcmrsm48f03p8e9aftd4ktaanqzszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx7el67d</id>
    
      <title type="html">📅 Original date posted:2022-07-10 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2w0pq6wmzv5wqclr9k89xd4ljcmrsm48f03p8e9aftd4ktaanqzszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx7el67d" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp3am0krhhs7zmyrdzah4tgy5w2a6asxzkpu5fgh3lyr0d80n5tvq8gk4ge&#39;&gt;nevent1q…k4ge&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-10&lt;br/&gt;📝 Original message:&lt;br/&gt;On Thu, Jun 30, 2022 at 4:19 AM Matt Corallo &amp;lt;lf-lists at mattcorallo.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Better yet, as Val points out, requiring a channel to relay onion messages&lt;br/&gt;&amp;gt; puts a very real,&lt;br/&gt;&amp;gt; nontrivial (in a world of msats) cost to getting an onion messaging&lt;br/&gt;&amp;gt; channel. Better yet, with&lt;br/&gt;&amp;gt; backpressure ability to DoS onion message links isn&amp;#39;t denominated in&lt;br/&gt;&amp;gt; number of messages, but instead&lt;br/&gt;&amp;gt; in number of channels you are able to create, making the backpressure&lt;br/&gt;&amp;gt; system equivalent to today&amp;#39;s&lt;br/&gt;&amp;gt; HTLC DoS considerations, whereas explicit payment allows an attacker to&lt;br/&gt;&amp;gt; pay much less to break the&lt;br/&gt;&amp;gt; system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It can also be considered a bad thing that DoS ability is not based on a&lt;br/&gt;number of messages. It means that for the one time cost of channel&lt;br/&gt;open/close, the attacker can generate spam forever if they stay right below&lt;br/&gt;the rate limit.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Ultimately, paying suffers from the standard PoW-for-spam issue - you&lt;br/&gt;&amp;gt; cannot assign a reasonable&lt;br/&gt;&amp;gt; cost that an attacker cares about without impacting the system&amp;#39;s usability&lt;br/&gt;&amp;gt; due to said cost. Indeed,&lt;br/&gt;&amp;gt; making it expensive enough to mount a months-long DDoS without impacting&lt;br/&gt;&amp;gt; legitimate users be pretty&lt;br/&gt;&amp;gt; easy - at 1msat per relay of a 1366 byte onion message you can only&lt;br/&gt;&amp;gt; saturate an average home users&amp;#39;&lt;br/&gt;&amp;gt; 30Mbps connection for 30 minutes before you rack up a dollar in costs, but&lt;br/&gt;&amp;gt; if your concern is&lt;br/&gt;&amp;gt; whether someone can reasonably trivially take out the network for minutes&lt;br/&gt;&amp;gt; at a time to make it have&lt;br/&gt;&amp;gt; perceptibly high failure rates, no reasonable cost scheme will work. Quite&lt;br/&gt;&amp;gt; the opposite - the only&lt;br/&gt;&amp;gt; reasonable way to respond is to respond to a spike in traffic while&lt;br/&gt;&amp;gt; maintaining QoS is to rate-limit&lt;br/&gt;&amp;gt; by inbound edge!&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Suppose the attacker has enough channels to hit the rate limit on an&lt;br/&gt;important connection some hops away from themselves. They can then sustain&lt;br/&gt;that attack indefinitely, assuming that they stay below the rate limit on&lt;br/&gt;the routes towards the target connection. What will the response be in that&lt;br/&gt;case? Will node operators work together to try to trace back to the source&lt;br/&gt;and take down the attacker? That requires operators to know each other.&lt;br/&gt;&lt;br/&gt;Maybe this is a difference between lightning network and the internet that&lt;br/&gt;is relevant for this discussion. That routers on the internet know each&lt;br/&gt;other and have physical links between them, where as in lightning ties can&lt;br/&gt;be much looser.&lt;br/&gt;&lt;br/&gt;Joost&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/20220710/d7fe084e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220710/d7fe084e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:06:37&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst2y5s3dewtukhqsuks2u9uvr24ayhmtguw4p0y2k6xmqcvraep8czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txts5mn8</id>
    
      <title type="html">📅 Original date posted:2022-07-01 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst2y5s3dewtukhqsuks2u9uvr24ayhmtguw4p0y2k6xmqcvraep8czyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txts5mn8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszpakrlrl4jqvfe2jhyq2xsqulpvrus2tf9g2p24ykaqn2pdn0cscs84amd&#39;&gt;nevent1q…4amd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-01&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Path-finding algorithms that are currently in use generally don’t support&lt;br/&gt;&amp;gt; negative fees. But in this case, the sum of inbound and outbound fees is&lt;br/&gt;&amp;gt; still positive and therefore not a problem. If routing nodes set their&lt;br/&gt;&amp;gt; policies accidentally or intentionally so that the sum of fees turns out&lt;br/&gt;&amp;gt; negative, senders can just round up to zero and find a path as normal.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Correction to this:&lt;br/&gt;&lt;br/&gt;The sum of inbound and outbound are not the fees set by one single routing&lt;br/&gt;node. When path-finding considers a candidate hop, this adds the outbound&lt;br/&gt;fee of the &amp;#34;from&amp;#34; node and the inbound fee of the &amp;#34;to&amp;#34; node. Because those&lt;br/&gt;nodes don&amp;#39;t necessarily coordinate fees, it may happen more often that the&lt;br/&gt;fee goes negative. Rounding up to zero is still a quick fix and better than&lt;br/&gt;ignoring inbound fees completely.&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/20220701/632a50ce/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220701/632a50ce/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:06:31&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrhvts2gach7y950482hw58pyhdl8wdknyepave92u8le5dphwagczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txt9grhs</id>
    
      <title type="html">📅 Original date posted:2022-07-01 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrhvts2gach7y950482hw58pyhdl8wdknyepave92u8le5dphwagczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txt9grhs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2upxkle2lweju8cjm7w7dc47hz7q87q7tl0gqarmdwxfs3d5agtcpcse54&#39;&gt;nevent1q…se54&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-01&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Bastien,&lt;br/&gt;&lt;br/&gt;I vaguely remembered that the idea of inbound fees had been discussed&lt;br/&gt;before. Before writing my post, I scanned through old ML posts and bolts&lt;br/&gt;issues but couldn&amp;#39;t find the discussion. Maybe it was part of a different&lt;br/&gt;but related email or a bolts pr?&lt;br/&gt;&lt;br/&gt;With regards to your objections, isn&amp;#39;t it the case that it is always&lt;br/&gt;possible to DoS your peer by just rejecting any forward that comes in from&lt;br/&gt;them? Or indirectly affecting them negatively by setting high fees on all&lt;br/&gt;outbound channels? To me it seems that there is nothing to lose by adding&lt;br/&gt;inbound fees.&lt;br/&gt;&lt;br/&gt;My thinking is that if I accept an incoming htlc, my local balance&lt;br/&gt;increases on that incoming channel. My money gets locked up in a channel&lt;br/&gt;that may or may not be interesting to me. Wouldn&amp;#39;t it be fair to be&lt;br/&gt;compensated for that?&lt;br/&gt;&lt;br/&gt;Any thoughts from routing node operators would be welcome too (or links to&lt;br/&gt;previous threads).&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;On Fri, Jul 1, 2022 at 1:19 PM Bastien TEINTURIER &amp;lt;bastien at acinq.fr&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Joost,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As I&amp;#39;ve already stated every time this has been previously discussed, I&lt;br/&gt;&amp;gt; believe&lt;br/&gt;&amp;gt; this doesn&amp;#39;t make any sense. The funds that are on the other side of the&lt;br/&gt;&amp;gt; channel belong to your peer, not you, so they&amp;#39;re free to use it however&lt;br/&gt;&amp;gt; they&lt;br/&gt;&amp;gt; want. If you&amp;#39;re not happy with the way your peer is managing their fees,&lt;br/&gt;&amp;gt; then&lt;br/&gt;&amp;gt; don&amp;#39;t open channels to them and let the network decide whether you&amp;#39;re&lt;br/&gt;&amp;gt; right or&lt;br/&gt;&amp;gt; not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Moreover, you shouldn&amp;#39;t care at all. If all the funds are on your peer&amp;#39;s&lt;br/&gt;&amp;gt; side,&lt;br/&gt;&amp;gt; this isn&amp;#39;t your problem, you used up all the money that was yours. As long&lt;br/&gt;&amp;gt; as&lt;br/&gt;&amp;gt; the channel is open, this is free inbound liquidity for you, so you&amp;#39;re even&lt;br/&gt;&amp;gt; benefiting from this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If Alice could set fees for Bob&amp;#39;s side of the channel, Alice could&lt;br/&gt;&amp;gt; arbitrarily&lt;br/&gt;&amp;gt; DoS Bob&amp;#39;s payments by setting a high fee. This is just one example of the&lt;br/&gt;&amp;gt; many&lt;br/&gt;&amp;gt; ways this idea completely breaks the routing incentives.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Bastien&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Le ven. 1 juil. 2022 à 13:10, Joost Jager &amp;lt;joost.jager at gmail.com&amp;gt; a&lt;br/&gt;&amp;gt; écrit :&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Path-finding algorithms that are currently in use generally don’t support&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; negative fees. But in this case, the sum of inbound and outbound fees is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; still positive and therefore not a problem. If routing nodes set their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; policies accidentally or intentionally so that the sum of fees turns out&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; negative, senders can just round up to zero and find a path as normal.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Correction to this:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The sum of inbound and outbound are not the fees set by one single&lt;br/&gt;&amp;gt;&amp;gt; routing node. When path-finding considers a candidate hop, this adds the&lt;br/&gt;&amp;gt;&amp;gt; outbound fee of the &amp;#34;from&amp;#34; node and the inbound fee of the &amp;#34;to&amp;#34; node.&lt;br/&gt;&amp;gt;&amp;gt; Because those nodes don&amp;#39;t necessarily coordinate fees, it may happen more&lt;br/&gt;&amp;gt;&amp;gt; often that the fee goes negative. Rounding up to zero is still a quick fix&lt;br/&gt;&amp;gt;&amp;gt; and better than ignoring inbound fees completely.&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;&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/20220701/5b33a7c3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220701/5b33a7c3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:06:31&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszpakrlrl4jqvfe2jhyq2xsqulpvrus2tf9g2p24ykaqn2pdn0csczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txvt0eac</id>
    
      <title type="html">📅 Original date posted:2022-07-01 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszpakrlrl4jqvfe2jhyq2xsqulpvrus2tf9g2p24ykaqn2pdn0csczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txvt0eac" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp4xaqrc3jr4ngrmq67yqd52tjsznunu945kfd2a9lc7jl3ufaduglljxj5&#39;&gt;nevent1q…jxj5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-01&lt;br/&gt;📝 Original message:&lt;br/&gt;Currently routing nodes on the lightning network charge fees based on a&lt;br/&gt;policy that pertains to the outgoing channel only.&lt;br/&gt;&lt;br/&gt;Several mentions have been made by routing node operators that this limits&lt;br/&gt;the control that they can exert over the flow of traffic. The movement of&lt;br/&gt;funds on all of the incoming channels is free of charge, which does not&lt;br/&gt;match the reality of not all inbound liquidity being equal.&lt;br/&gt;&lt;br/&gt;One option to fix this is to add two additional fields to the&lt;br/&gt;`channel_update` message:&lt;br/&gt;* `inbound_fee_base_msat`&lt;br/&gt;* `inbound_fee_proportional_millionths`&lt;br/&gt;&lt;br/&gt;With the previously introduced tlv message extensions, it should be&lt;br/&gt;possible to let these fields propagate throughout the network without any&lt;br/&gt;upgrades required.&lt;br/&gt;&lt;br/&gt;Senders must pay each routing node the sum of its advertised inbound and&lt;br/&gt;outbound fee for the channels used:&lt;br/&gt;&lt;br/&gt;outbound_fee(amt_to_fwd) &#43; inbound_fee(amt_to_fwd &#43;&lt;br/&gt;outbound_fee(amt_to_fwd))&lt;br/&gt;&lt;br/&gt;So the inbound_fee is calculated based on the actual balance change in the&lt;br/&gt;incoming channel. This includes the amount to forward as well as the&lt;br/&gt;outbound fee.&lt;br/&gt;&lt;br/&gt;An important characteristic of any solution that is to be deployed in an&lt;br/&gt;existing network, is that it is backwards compatible. If routing nodes&lt;br/&gt;start to require inbound fees, every sender that hasn’t upgraded their node&lt;br/&gt;software will no longer be able to use that routing node. The routing node&lt;br/&gt;will miss out on routing fees.&lt;br/&gt;&lt;br/&gt;One mitigation is to charge zero inbound fees until a sufficiently large&lt;br/&gt;portion of the senders has upgraded. It may be unclear though when this is&lt;br/&gt;the case, and will likely take a significant amount of time. A test could&lt;br/&gt;be to temporarily charge a minimal inbound fee, and watch for a reduction&lt;br/&gt;in traffic and increase in `fee_insufficient` failures returned. If there&lt;br/&gt;is little or no effect, then most senders have probably upgraded.&lt;br/&gt;&lt;br/&gt;Another way to go about this is to set negative inbound fees during the&lt;br/&gt;transitory phase. It is effectively a discount for using specific inbound&lt;br/&gt;channels. So a routing node that charges 10 sats for forwarding today, may&lt;br/&gt;in the future increase that to 13 sats and set the inbound fee to -3 sats.&lt;br/&gt;&lt;br/&gt;Senders ignoring inbound fees will overpay (13 sats whereas 10 sats would&lt;br/&gt;have been sufficient), but are still able to use the routing node. The&lt;br/&gt;routing node may see a reduction in traffic though because it effectively&lt;br/&gt;increased its fee for older senders only. But inbound fees could be&lt;br/&gt;increased (decreased really because they are negative) gradually while&lt;br/&gt;monitoring for fee over-payments. Over-payments are indicative of senders&lt;br/&gt;ignoring the inbound fee discount.&lt;br/&gt;&lt;br/&gt;Path-finding algorithms that are currently in use generally don’t support&lt;br/&gt;negative fees. But in this case, the sum of inbound and outbound fees is&lt;br/&gt;still positive and therefore not a problem. If routing nodes set their&lt;br/&gt;policies accidentally or intentionally so that the sum of fees turns out&lt;br/&gt;negative, senders can just round up to zero and find a path as normal.&lt;br/&gt;&lt;br/&gt;Overall I think this can be a relatively compact change that may ultimately&lt;br/&gt;lead to better capital placement on the network and lower routing fees.&lt;br/&gt;&lt;br/&gt;Looking for feedback on the idea from both lightning devs and routing node&lt;br/&gt;operators.&lt;br/&gt;&lt;br/&gt;Joost&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/20220701/c0768856/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220701/c0768856/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:06:30&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdpzs3s7y9cgsk6sag48t3rxy8qkephhcu5shnjw0z8cdflf4qnfgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txjgkqam</id>
    
      <title type="html">📅 Original date posted:2022-02-15 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdpzs3s7y9cgsk6sag48t3rxy8qkephhcu5shnjw0z8cdflf4qnfgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txjgkqam" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstk26pr64h6z5560ckfgdm07c24vfsmtpkxd59xha24sx8mq53f6g5acgfz&#39;&gt;nevent1q…cgfz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-15&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rusty,&lt;br/&gt;&lt;br/&gt;Nice to see the proposal in more concrete terms. Few questions:&lt;br/&gt;&lt;br/&gt;- The total proved utxo value (not counting any utxos which are spent)&lt;br/&gt;&amp;gt;   is multiplied by 10 to give the &amp;#34;announcable_channel_capacity&amp;#34; for that&lt;br/&gt;&amp;gt; node.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Could this work as a dynamic value too, similar to the minimum relay fee on&lt;br/&gt;L1?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. `tlv_stream`: `channel_update_v2_tlvs`&lt;br/&gt;&amp;gt;&lt;br/&gt;2. types:&lt;br/&gt;&amp;gt;     1. type: 4 (`capacity`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`tu64`:`satoshis`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;What does capacity mean exactly outside the context of a real channel? Will&lt;br/&gt;this be reduced to that maximum htlc amount that the nodes want to route,&lt;br/&gt;to save as much of the announceable budget as possible?&lt;br/&gt;&lt;br/&gt;It is also the question of whether 10 x 10k channels should weigh as much&lt;br/&gt;on the budget as a 1 x 100k channel. A spammer may be able to do more harm&lt;br/&gt;with multiple smaller channels because there is more for the sender&amp;#39;s&lt;br/&gt;pathfinding algorithms to explore. Maybe it doesn&amp;#39;t matter as long as there&lt;br/&gt;is some mechanism to discourage spam.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;     1. type: 5 (`cost`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;        * [`u16`:`cltv_expiry_delta`]&lt;br/&gt;&amp;gt;        * [`u32`:`fee_proportional_millionths`]&lt;br/&gt;&amp;gt;        * [`tu32`:`fee_base_msat`]&lt;br/&gt;&amp;gt;     1. type: 6 (`min_msat`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;         * [`tu64`:`min_htlc_sats`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - `channel_id_and_claimant` is a 31-bit per-node channel_id which can be&lt;br/&gt;&amp;gt;   used in onion_messages, and a one bit stolen for the `claim` flag.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;If you&amp;#39;d increase the budget multiplier from 10 to 20, couldn&amp;#39;t this be&lt;br/&gt;simplified to always applying the cost to both nodes?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; - A channel is not considered to exist until both peers have sent a&lt;br/&gt;&amp;gt;   channel_update_v2, at least one of which must set the `claim` flag.&lt;br/&gt;&amp;gt; - If a node sets `claim`, the capacity of the channel is subtracted from&lt;br/&gt;&amp;gt;   the remaining announcable_channel_capacity for that node (minimum&lt;br/&gt;&amp;gt;   10,000 sats).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Same question about magic value and whether it can be dynamic.&lt;br/&gt;&lt;br/&gt;Joost&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/20220215/1c100bd3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220215/1c100bd3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:05:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9zmsflqerv6jt4v0mxdzkt26xfftvzxjl3atvvm2wgprtt4xapgczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txyc4jfs</id>
    
      <title type="html">📅 Original date posted:2021-11-15 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9zmsflqerv6jt4v0mxdzkt26xfftvzxjl3atvvm2wgprtt4xapgczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txyc4jfs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs233mkcl95wuzhk3jw6lanav48v6k7e97pmgaeflfwt48vmzjpdfckx7rgp&#39;&gt;nevent1q…7rgp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-11-15&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rene,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; First I am happy that you also agree that reliability can and should be&lt;br/&gt;&amp;gt; expressed as a probability as discussed in [0].&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Probability based routing is not new to me. I&amp;#39;ve implemented a form of that&lt;br/&gt;in lnd in march 2019: &lt;a href=&#34;https://github.com/lightningnetwork/lnd/pull/2802&#34;&gt;https://github.com/lightningnetwork/lnd/pull/2802&lt;/a&gt;,&lt;br/&gt;followed by several rounds of refinement.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; The problem that you address is that of feature engineering[1]. Which&lt;br/&gt;&amp;gt; consists of two (or even more) steps:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.) Feature selection: That means in payment delivery we will compute a&lt;br/&gt;&amp;gt; min cost flow [2] with a chosen cost function (historically people used&lt;br/&gt;&amp;gt; dijkstra seach for single paths with the cost function representing the&lt;br/&gt;&amp;gt; weights on the edges of the graph -which is what most folks currently still&lt;br/&gt;&amp;gt; do). While [2] and I personally agree with you that the cost function&lt;br/&gt;&amp;gt; should be a combination the two features fees and reliability (as in&lt;br/&gt;&amp;gt; successprobability) Matt Corallo righfully pointed out [3] that other&lt;br/&gt;&amp;gt; features might be chosen in the future to deliver more optimal results. For&lt;br/&gt;&amp;gt; example implementations currently often use CLTV as a feature (which I&lt;br/&gt;&amp;gt; honestly find horrible) and I am currently investigating if one could add&lt;br/&gt;&amp;gt; latency of channels or - for known IP addresses - either the geo distance&lt;br/&gt;&amp;gt; or IP distance.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I am aware that there are more candidate features, but my question is&lt;br/&gt;specifically about the ones that I mentioned.&lt;br/&gt;&lt;br/&gt;2.) Combining features: This is the question that you are asking. Often&lt;br/&gt;&amp;gt; people use a linear weighted sum to combine features. This is what often&lt;br/&gt;&amp;gt; happens implicitly in neural networks. While this is often good enough and&lt;br/&gt;&amp;gt; while it is often practical to either learn the weights or give users a&lt;br/&gt;&amp;gt; choice there are many situation where the weighted linear sum does not work&lt;br/&gt;&amp;gt; well with the selected features. An example for the weighted sum is the&lt;br/&gt;&amp;gt; risk-factor in c-lightning that could have been used to decide if one&lt;br/&gt;&amp;gt; wanted the dijkstra seach to either optimize for CLTV delta or for paid&lt;br/&gt;&amp;gt; routing fees. Also in our paper [2] in which we discuss the same two&lt;br/&gt;&amp;gt; features that you mentioned we explain how a linear sum of two features can&lt;br/&gt;&amp;gt; be optimal due to the lagrangian bounding principle. However in practice&lt;br/&gt;&amp;gt; (of machine learning) it has been shown that using the harmonic mean [4]&lt;br/&gt;&amp;gt; between features often works very well without the necessity to learn a&lt;br/&gt;&amp;gt; weight / parameter. This has for example been done when c-lightnign&lt;br/&gt;&amp;gt; recently switched to probabilistic path finding [5]. In this thread you&lt;br/&gt;&amp;gt; find a long discussion and evaluation how the harmonic mean outperformed&lt;br/&gt;&amp;gt; the linear sum.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Obviously features can be combined in a multitude of ways, but I am looking&lt;br/&gt;for something that is anchored to some kind of understandable starting&lt;br/&gt;point. What I did in lnd is to work with so called &amp;#39;payment attempt cost&amp;#39;.&lt;br/&gt;A virtual satoshi amount that represents the cost of a failed attempt. If&lt;br/&gt;you put a high price on failed attempts, pathfinding will tend towards more&lt;br/&gt;reliable routes even if they require a higher fee. To me, the idea of&lt;br/&gt;putting a (virtual) cost on a payment attempt is tangible and ideally the&lt;br/&gt;math should follow from that. I don&amp;#39;t want zero parameters, because I think&lt;br/&gt;that ultimately the fee/reliability trade-off is up to the user to decide&lt;br/&gt;on.&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&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/20211115/0be67f54/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211115/0be67f54/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspanlhwh5vn7l94uen288d3wf5gypyzr028cnqjlfgaltf3julk0qzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txxxx0lf</id>
    
      <title type="html">📅 Original date posted:2021-11-15 📝 Original message: In ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspanlhwh5vn7l94uen288d3wf5gypyzr028cnqjlfgaltf3julk0qzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txxxx0lf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs072cz754khu46gnadqs8t6p9prj7vv8a8hzegyt3tjyegqyfgnzg6rdgyu&#39;&gt;nevent1q…dgyu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-11-15&lt;br/&gt;📝 Original message:&lt;br/&gt;In Lightning pathfinding the two main variables to optimize for are routing&lt;br/&gt;fee and reliability. Routing fee is concrete. It is the sat amount that is&lt;br/&gt;paid when a payment succeeds. Reliability is a property of a route that can&lt;br/&gt;be expressed as a probability. The probability that a route will be&lt;br/&gt;successful.&lt;br/&gt;&lt;br/&gt;During pathfinding, route options are compared against each other. So for&lt;br/&gt;example:&lt;br/&gt;&lt;br/&gt;Route A: fee 10 sat, success probability 50%&lt;br/&gt;Route B: fee 20 sat, success probability 80%&lt;br/&gt;&lt;br/&gt;Which one is the better route? That depends on user preference. A patient&lt;br/&gt;user will probably go for route A in the hope of saving on fees whereas for&lt;br/&gt;a time-sensitive payment route B looks better.&lt;br/&gt;&lt;br/&gt;It would be great to offer this trade-off to the user in a simple way.&lt;br/&gt;Preferably a single [0, 1] value that controls the selection process. At 0,&lt;br/&gt;the route is only optimized for fees and probabilities are ignored&lt;br/&gt;completely. At 1, the route is only optimized for reliability and fees are&lt;br/&gt;ignored completely.&lt;br/&gt;&lt;br/&gt;But how to choose between the routes A and B for a value somewhere in&lt;br/&gt;between 0 and 1? For example 0.5 - perfect balance between reliability and&lt;br/&gt;fee. But what does that mean exactly?&lt;br/&gt;&lt;br/&gt;Anyone got an idea on how to approach this best? I am looking for a simple&lt;br/&gt;formula to decide between routes, preferably with a reasonably sound&lt;br/&gt;probability-theoretical basis (whatever that means).&lt;br/&gt;&lt;br/&gt;Joost&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/20211115/fffa5edd/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211115/fffa5edd/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:23&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvlp0j38dwwey0zsapk96y5my352lclgxxkgada5qrdmpnrkjjymczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txmu63mp</id>
    
      <title type="html">📅 Original date posted:2021-10-21 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvlp0j38dwwey0zsapk96y5my352lclgxxkgada5qrdmpnrkjjymczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txmu63mp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrcuwxsn8rrs8m05hl50cuswajr84dyp6mdr6lx8cq25la5t00cqq3khpzu&#39;&gt;nevent1q…hpzu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-21&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;If it is a multipart and we have the preimage, wait for all the parts to&lt;br/&gt;arrive, then say yes to all of them.&lt;br/&gt;&lt;br/&gt;Without actual reservations made in the channels, is this going to work?&lt;br/&gt;For example: a 10M payment and a route that contains a channel with only 5M&lt;br/&gt;balance. The sender&amp;#39;s multi-path algorithm will try to split and send the&lt;br/&gt;first 5M. Then they&amp;#39;ll do the second 5M, but because there is no actual&lt;br/&gt;reservation, the second 5M seems to be passing alright through the&lt;br/&gt;bottleneck channel too. When the payment is then executed, it will fail.&lt;br/&gt;&lt;br/&gt;Or do nodes keep track of all the unresolved probes and deduct the total&lt;br/&gt;amount from the available balance? Of course only for the available balance&lt;br/&gt;for probes. When a real htlc comes through, outstanding probes are ignored.&lt;br/&gt;Although the problem with that could be that someone can spam you with&lt;br/&gt;probes so that your available &amp;#39;probe&amp;#39; balance is zero and you&amp;#39;ll receive no&lt;br/&gt;real traffic anymore.&lt;br/&gt;&lt;br/&gt;Perhaps an alternative is to let senders attach a random identifier to a&lt;br/&gt;probe. For multi-part probes, each probe will carry the same identifier.&lt;br/&gt;Routing nodes will deduct the outstanding probe amounts from the available&lt;br/&gt;balance, but only for probes within the same group (same id). That way each&lt;br/&gt;probe(group) is isolated from everything else that is going on.&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;On Wed, Sep 29, 2021 at 5:40 AM ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While discussing something tangentially related with aj, I wondered this:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Why do we shoot an HTLC first and then ask the question &amp;#34;can you&lt;br/&gt;&amp;gt; actually resolve this?&amp;#34; later?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Why not something like this instead?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * For a payer:&lt;br/&gt;&amp;gt;   * Generate a path.&lt;br/&gt;&amp;gt;   * Ask first hop if it can resolve an HTLC with those specs (passing the&lt;br/&gt;&amp;gt; encrypted onion).&lt;br/&gt;&amp;gt;   * If first hop says &amp;#34;yes&amp;#34;, actually do the `update_add_htlc` dance.&lt;br/&gt;&amp;gt;     Otherwise try again.&lt;br/&gt;&amp;gt; * For a forwarder:&lt;br/&gt;&amp;gt;   * If anybody asks &amp;#34;can you resolve this path&amp;#34; (getting an encrypted&lt;br/&gt;&amp;gt; onion):&lt;br/&gt;&amp;gt;     * Decrypt one layer to learn the next hop.&lt;br/&gt;&amp;gt;     * Check if the next hop is alive and we have the capacity towards it,&lt;br/&gt;&amp;gt; if not, answer no.&lt;br/&gt;&amp;gt;     * Ask next hop if it can resolve the next onion layer.&lt;br/&gt;&amp;gt;     * Return the response from the next hop.&lt;br/&gt;&amp;gt; * For a payee:&lt;br/&gt;&amp;gt;   * If anybody asks &amp;#34;can you resolve this path&amp;#34;:&lt;br/&gt;&amp;gt;     * If it is not a multipart and we have the preimage, say yes.&lt;br/&gt;&amp;gt;     * If it is a multipart and we have the preimage, wait for all the&lt;br/&gt;&amp;gt; parts to arrive, then say yes to all of them.&lt;br/&gt;&amp;gt;     * Otherwise say no.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Now, the most obvious reason against this, that comes to mind, is that&lt;br/&gt;&amp;gt; this is a potential DoS vector.&lt;br/&gt;&amp;gt; Random node can trigger a lot of network activity by asking random stuff&lt;br/&gt;&amp;gt; of random nodes.&lt;br/&gt;&amp;gt; Asking the question is free, after all.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, we should note that sending *actual* HTLCs is a similar DoS&lt;br/&gt;&amp;gt; vector **today**.&lt;br/&gt;&amp;gt; This is still &amp;#34;free&amp;#34; in that the asker has no need to pay fees for failed&lt;br/&gt;&amp;gt; HTLCs; they just lose the opportunity cost of the amount being locked up in&lt;br/&gt;&amp;gt; the HTLCs.&lt;br/&gt;&amp;gt; And presumably the opportunity cost is low since Lightning forwarding&lt;br/&gt;&amp;gt; earnings are so tiny.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One way to mitigate against this is to make generating an onion costly but&lt;br/&gt;&amp;gt; validating and decrypting it cheap.&lt;br/&gt;&amp;gt; We could use an encryption scheme that is more computationally expensive&lt;br/&gt;&amp;gt; to encrypt but cheap to decrypt, for example.&lt;br/&gt;&amp;gt; Or we could require proof-of-work on the onion: each unwrapped onion&lt;br/&gt;&amp;gt; layer, when hashed, has to have a hash that is less than some threshold&lt;br/&gt;&amp;gt; (this scales according to the number of hops in the onion, as well).&lt;br/&gt;&amp;gt; Ultimate askers need to grind the shared secret until the onion layer hash&lt;br/&gt;&amp;gt; achieves the target.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Obviously just because you asked a few milliseconds ago if a path is&lt;br/&gt;&amp;gt; viable does not mean that the path *remains* viable right now when you&lt;br/&gt;&amp;gt; actually send out an HTLC, but presumably that risk is now lessened.&lt;br/&gt;&amp;gt; Unexpected shutdowns or loss of connectivity has to appear in a smaller&lt;br/&gt;&amp;gt; and shorter time frame to negatively affect intermediate nodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Another thought is: Does the forwarding node have an incentive to lie?&lt;br/&gt;&amp;gt; Suppose the next hop is alive but the forwarding node has insufficient&lt;br/&gt;&amp;gt; capacity towards the next hop.&lt;br/&gt;&amp;gt; Then the forwarding node can lie and claim it can still resolve the HTLC,&lt;br/&gt;&amp;gt; in the hope that a few milliseconds later, when the actual HTLC arrives,&lt;br/&gt;&amp;gt; the capacity towards the next hop has changed.&lt;br/&gt;&amp;gt; Thus, even if the capacity now is insufficient, the forwarding node has an&lt;br/&gt;&amp;gt; incentive to lie and claim sufficient capacity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Against the above, we can mitigate this by accepting &amp;#34;no&amp;#34; from *any* node&lt;br/&gt;&amp;gt; along the path, but only accepting &amp;#34;yes&amp;#34; from the actual payee.&lt;br/&gt;&amp;gt; We already have a mechanism where any node along a route can report a&lt;br/&gt;&amp;gt; forwarding or other payment error, and the sender is able to identify which&lt;br/&gt;&amp;gt; node along the path raised it.&lt;br/&gt;&amp;gt; Thus, the payer can identify which node along the route responded with a&lt;br/&gt;&amp;gt; &amp;#34;yes&amp;#34;, and check that it definitely reached the payee.&lt;br/&gt;&amp;gt; Presumably, when a node receives a question, it checks if the asking node&lt;br/&gt;&amp;gt; has sufficient capacity towards it first, and if not, fails the channel&lt;br/&gt;&amp;gt; between them, since obviously the asking node is not behaving according to&lt;br/&gt;&amp;gt; protocol and is buggy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Now, this can be used to probe capacities, for free, but again --- we&lt;br/&gt;&amp;gt; already *have* probing capacities, for free, today, by just using random&lt;br/&gt;&amp;gt; hashes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Why is this advantageous at all?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One reason for doing this is that it improves payment latency.&lt;br/&gt;&amp;gt; Some paths *will* fail, because there is no single consistent view of the&lt;br/&gt;&amp;gt; network and its capacity (which is impossible due to others also possibly&lt;br/&gt;&amp;gt; sending out via the same forwarding nodes you are using, and besides, even&lt;br/&gt;&amp;gt; if such a view could be made to exist, it would be dangerously&lt;br/&gt;&amp;gt; anti-privacy).&lt;br/&gt;&amp;gt; This mechanism does not require that intermediate nodes respond with a&lt;br/&gt;&amp;gt; signature and wait for a replied signature *before* they forward the onion&lt;br/&gt;&amp;gt; to the next hop; when they are *just* asking, there is no HTLC involved, no&lt;br/&gt;&amp;gt; updates to the channel state, and the question can be forwarded as soon as&lt;br/&gt;&amp;gt; we can check locally.&lt;br/&gt;&amp;gt; Further, in the current mechanism where we shoot HTLCs first and ask&lt;br/&gt;&amp;gt; questions later, failures also require 1.5 roundtrips due to sharing&lt;br/&gt;&amp;gt; signatures; with the &amp;#34;just ask first&amp;#34; phase there is no need for round&lt;br/&gt;&amp;gt; trips to respond to questions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Basically, we replace multiple round trips per hop in case of a failure&lt;br/&gt;&amp;gt; along a route, with a single large round trip from the payer to the failure&lt;br/&gt;&amp;gt; point.&lt;br/&gt;&amp;gt; In case of a success we just add more latency, but as we move to more&lt;br/&gt;&amp;gt; multipath payments, perhaps it becomes more advantageous, since the&lt;br/&gt;&amp;gt; probability of a particular sub-path failing is now higher?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; More importantly, by allowing to ask first, we reduce the probability that&lt;br/&gt;&amp;gt; HTLCs made in good faith --- i.e. those that are fully intended to reach a&lt;br/&gt;&amp;gt; destination and be resolved --- it may now be more palatable to charge for&lt;br/&gt;&amp;gt; failing actual HTLCs.&lt;br/&gt;&amp;gt; Since we expect that HTLC failures due to a node or channel failing along&lt;br/&gt;&amp;gt; the way is lessened compared to today, because the sender *asks* first&lt;br/&gt;&amp;gt; before *shooting* the HTLC, then the effect of charging for failing&lt;br/&gt;&amp;gt; *actual* HTLCs is lessened, possibly to a more acceptable level.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So, to lightning-dev --- is this a decent idea at all?&lt;br/&gt;&amp;gt; Note that in particular this is something that requires a whole-network&lt;br/&gt;&amp;gt; upgrade, as intermediate nodes have to upgrade as well.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&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/20211021/aac2de10/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211021/aac2de10/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:20&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0qqlmecqv36t3ha57lrmaar9gw3mtmlz02ejjvtg50y7var55vlczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txkp943e</id>
    
      <title type="html">📅 Original date posted:2021-10-21 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0qqlmecqv36t3ha57lrmaar9gw3mtmlz02ejjvtg50y7var55vlczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txkp943e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy4jcd96n3r84k8zvq98zg8lae90zc4tnzeh7tpmztyn5lrkk7cpcnqrfmd&#39;&gt;nevent1q…rfmd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-21&lt;br/&gt;📝 Original message:&lt;br/&gt;On Thu, Oct 21, 2021 at 12:00 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Joost,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A potential downside of a dedicated probe message is that it could be&lt;br/&gt;&amp;gt; used for free messaging on lightning by including additional data in the&lt;br/&gt;&amp;gt; payload for the recipient. Free messaging is already possible today via&lt;br/&gt;&amp;gt; htlcs, but a probe message would lower the cost to do so because the sender&lt;br/&gt;&amp;gt; doesn&amp;#39;t need to lock up liquidity for it. This probably increases the spam&lt;br/&gt;&amp;gt; potential. I am wondering if it is possible to design the probe message so&lt;br/&gt;&amp;gt; that it is useless for anything other than probing. I guess it is hard&lt;br/&gt;&amp;gt; because it would still have that obfuscated 1300 bytes block with the&lt;br/&gt;&amp;gt; remaining part of the route in it and nodes can&amp;#39;t see whether there is&lt;br/&gt;&amp;gt; other meaningful data at the end.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the probe, the onion max size does not *need* to be 1300, we could&lt;br/&gt;&amp;gt; reduce the size to make it less useable for *remote* messaging.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, maybe it can be reduced a bit. But if we want to support 27 hops like&lt;br/&gt;we do for payments, there will be quite some space left for messaging on&lt;br/&gt;real routes which are mostly much shorter.&lt;br/&gt;&lt;br/&gt;Joost&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/20211021/ac8545c8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211021/ac8545c8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:19&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8yuw7sa6sftjlfd507xaq7u0wnsxd6hcy3wrxmqv26rduttz67qqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txwc4zzk</id>
    
      <title type="html">📅 Original date posted:2021-10-21 📝 Original message: A ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8yuw7sa6sftjlfd507xaq7u0wnsxd6hcy3wrxmqv26rduttz67qqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txwc4zzk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdase8w2cuh04j3fgh4sdqf720g6t0m7j4sxkqqm2wermpsgmspgsp0cycv&#39;&gt;nevent1q…cycv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-21&lt;br/&gt;📝 Original message:&lt;br/&gt;A potential downside of a dedicated probe message is that it could be used&lt;br/&gt;for free messaging on lightning by including additional data in the payload&lt;br/&gt;for the recipient. Free messaging is already possible today via htlcs, but&lt;br/&gt;a probe message would lower the cost to do so because the sender doesn&amp;#39;t&lt;br/&gt;need to lock up liquidity for it. This probably increases the spam&lt;br/&gt;potential. I am wondering if it is possible to design the probe message so&lt;br/&gt;that it is useless for anything other than probing. I guess it is hard&lt;br/&gt;because it would still have that obfuscated 1300 bytes block with the&lt;br/&gt;remaining part of the route in it and nodes can&amp;#39;t see whether there is&lt;br/&gt;other meaningful data at the end.&lt;br/&gt;&lt;br/&gt;On Thu, Oct 14, 2021 at 9:48 AM Joost Jager &amp;lt;joost.jager at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; A practice that is widely applied by lightning wallets is to probe routes&lt;br/&gt;&amp;gt; with an unknown payment hash before making the actual payment. Probing&lt;br/&gt;&amp;gt; yields an accurate routing fee that can be shown to the user before&lt;br/&gt;&amp;gt; execution of the payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The downside of this style of probing is that for a short period of time,&lt;br/&gt;&amp;gt; liquidity is locked up. Not just the sender&amp;#39;s liquidity, but also liquidity&lt;br/&gt;&amp;gt; of nodes along the route. And if the probe gets stuck for whatever reason,&lt;br/&gt;&amp;gt; that short period may become longer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But does this lock up serve a purpose at all? Suppose there would be a&lt;br/&gt;&amp;gt; liquidity probing protocol message similar to `update_add_htlc`&lt;br/&gt;&amp;gt; (`probe_htlc`?) that would skip the whole channel update machinery and is&lt;br/&gt;&amp;gt; only forwarded to the next hop if the link would be able to carry the htlc.&lt;br/&gt;&amp;gt; Won&amp;#39;t this work as well as the current probing without the downsides? Nodes&lt;br/&gt;&amp;gt; can obviously reject these probes because they are distinguishable from&lt;br/&gt;&amp;gt; real payments (contrary to unknown hash probing where everything looks the&lt;br/&gt;&amp;gt; same). However if they do so, senders won&amp;#39;t use that route and the routing&lt;br/&gt;&amp;gt; node misses out on routing fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Another problem of the lightning network is its susceptibility to channel&lt;br/&gt;&amp;gt; jamming. Multiple options have been proposed (see also&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/t-bast/lightning-docs/blob/master/spam-prevention.md&#34;&gt;https://github.com/t-bast/lightning-docs/blob/master/spam-prevention.md&lt;/a&gt;),&lt;br/&gt;&amp;gt; but they all come with downsides.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Personally I incline towards solutions that involve deterring the attacker&lt;br/&gt;&amp;gt; by making them pay actual satoshis. Lightning itself is payment system and&lt;br/&gt;&amp;gt; it seems that paying for the payments is a natural solution to the problem.&lt;br/&gt;&amp;gt; Several iterations of this idea have been proposed. One of my own that&lt;br/&gt;&amp;gt; builds on an earlier idea by t-bast is described in&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-February/002958.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-February/002958.html&lt;/a&gt;&lt;br/&gt;&amp;gt; .&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The main criticism that this proposal has received is that it deteriorates&lt;br/&gt;&amp;gt; the user experience for honest users when multiple payment routes need to&lt;br/&gt;&amp;gt; be attempted. Every attempt will have a cost, so the user will see its&lt;br/&gt;&amp;gt; balance going down by only just trying to make the payment. How bad this is&lt;br/&gt;&amp;gt; depends on the attempt failure rate. I expect this rate to become really&lt;br/&gt;&amp;gt; low as the network matures and senders hold routing nodes to high&lt;br/&gt;&amp;gt; standards. Others however think otherwise and consider a series of failed&lt;br/&gt;&amp;gt; attempts part of a healthy system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Custodial wallets could probably just swallow the cost for failures. They&lt;br/&gt;&amp;gt; typically use one pathfinding system for all their users and are therefore&lt;br/&gt;&amp;gt; able to collect a lot of information on routing node performance. This is&lt;br/&gt;&amp;gt; likely to decrease the payment failure rate to an acceptably low level.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For non-custodial nodes, this may be different. They have to map out the&lt;br/&gt;&amp;gt; good routing nodes  all by themselves and this exploration will bear a cost.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So how would things work out with a combination of both of the proposals&lt;br/&gt;&amp;gt; described in this mail? First we make probing free (free as in no liquidity&lt;br/&gt;&amp;gt; locked up) and then we&amp;#39;ll require senders to pay for failed payment&lt;br/&gt;&amp;gt; attempts too. Failed payment attempts after a successful probe should be&lt;br/&gt;&amp;gt; extremely rate, so doesn&amp;#39;t this fix the ux issue with upfront fees?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Joost&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/20211021/2730142c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211021/2730142c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:19&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdase8w2cuh04j3fgh4sdqf720g6t0m7j4sxkqqm2wermpsgmspgszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txt3uvrd</id>
    
      <title type="html">📅 Original date posted:2021-10-15 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdase8w2cuh04j3fgh4sdqf720g6t0m7j4sxkqqm2wermpsgmspgszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txt3uvrd" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv7qhvvyjzqsfhs0hm8xycyfh5wwkt4qupst038t0g82z238p4yvsjghnru&#39;&gt;nevent1q…hnru&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-15&lt;br/&gt;📝 Original message:&lt;br/&gt;On Fri, Oct 15, 2021 at 4:21 PM Owen Gunden &amp;lt;ogunden at phauna.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Thu, Oct 14, 2021 at 09:48:27AM &#43;0200, Joost Jager wrote:&lt;br/&gt;&amp;gt; &amp;gt; So how would things work out with a combination of both of the&lt;br/&gt;&amp;gt; &amp;gt; proposals described in this mail? First we make probing free (free as&lt;br/&gt;&amp;gt; &amp;gt; in no liquidity locked up) and then we&amp;#39;ll require senders to pay for&lt;br/&gt;&amp;gt; &amp;gt; failed payment attempts too. Failed payment attempts after a&lt;br/&gt;&amp;gt; &amp;gt; successful probe should be extremely rate, so doesn&amp;#39;t this fix the ux&lt;br/&gt;&amp;gt; &amp;gt; issue with upfront fees?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Why couldn&amp;#39;t a malicious routing node (or group of colluding routing&lt;br/&gt;&amp;gt; nodes) succeed the probe and then fail the payment in order to collect&lt;br/&gt;&amp;gt; the failed payment fee?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes they could, but senders should be really suspicious when this happens.&lt;br/&gt;It could happen occasionally because balances may have shifted in between&lt;br/&gt;probe and payment. But if it keeps happening they may want to ban this&lt;br/&gt;routing node for a long time. This may disincentivize the routing node&lt;br/&gt;enough to respond honestly to probes.&lt;br/&gt;&lt;br/&gt;Joost&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/20211015/a7713880/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211015/a7713880/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8dk3xsnwu8atwm9t6t7xr69fr4sqxlgadg5kud8v6dkp5v3gndaszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx664chz</id>
    
      <title type="html">📅 Original date posted:2021-10-19 📝 Original message: There ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8dk3xsnwu8atwm9t6t7xr69fr4sqxlgadg5kud8v6dkp5v3gndaszyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx664chz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg9muyh53qkqpx48q8cdmtxdg94gsh2dtp6ntrxmlhgdzhtqzdqdgm3rcsy&#39;&gt;nevent1q…rcsy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-19&lt;br/&gt;📝 Original message:&lt;br/&gt;There could be some corners where the incentives may not work out 100%, but&lt;br/&gt;I doubt that any routing node would bother exploiting this. Especially&lt;br/&gt;because there could always be that reputation scheme at the sender side&lt;br/&gt;which may cost the routing node a lot more in lost routing fees than the&lt;br/&gt;marginal gain from the upfront payment.&lt;br/&gt;&lt;br/&gt;Another option is that nodes that don&amp;#39;t care to be secretive about their&lt;br/&gt;channel balances could include the actual balance in a probe failed&lt;br/&gt;message. Related: &lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/695&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/695&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Overall it seems that htlc-less probes are an improvement to what we&lt;br/&gt;currently have. Immediate advantages include a reduction of the load on&lt;br/&gt;nodes by cutting out the channel update machinery, better ux (faster&lt;br/&gt;probes) and no locked up liquidity. On the longer term it opens up the&lt;br/&gt;option to charge for failed payments so that we finally have an answer to&lt;br/&gt;channel jamming.&lt;br/&gt;&lt;br/&gt;ZmnSCPxj, as first person to propose the idea (I think?), would you be&lt;br/&gt;interested in opening a draft PR on the spec repository that outlines the&lt;br/&gt;new message(s) that we&amp;#39;d need and continue detailing from there?&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;On Sat, Oct 16, 2021 at 12:51 AM ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Owen,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; C now notes that B is lying, but is faced with the dilemma:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;#34;I could either say &amp;#39;no&amp;#39; because I can plainly see that B is lying, or&lt;br/&gt;&amp;gt; &amp;gt; I could say &amp;#39;yes&amp;#39; and get some free sats from the failed payment (or&lt;br/&gt;&amp;gt; &amp;gt; via the hope of a successful payment from a capacity increase in the&lt;br/&gt;&amp;gt; &amp;gt; intervening milliseconds).&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that if B cannot forward an HTLC to C later, then C cannot have a&lt;br/&gt;&amp;gt; failed payment and thus cannot earn any money from the upfront payment&lt;br/&gt;&amp;gt; scheme; thus, at least that part of the incentive is impossible.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand, there is still a positive incentive for continuing the&lt;br/&gt;&amp;gt; lie --- later, maybe the capacity becomes OK and C could earn both the&lt;br/&gt;&amp;gt; upfront fee and the success fee.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; So C decides it&amp;#39;s in his interest to keep the lie going. D, the payee,&lt;br/&gt;&amp;gt; &amp;gt; can&amp;#39;t tell that it&amp;#39;s a lie when it reaches her.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If C did want to tattle, it&amp;#39;s important that he be able to do so in a&lt;br/&gt;&amp;gt; &amp;gt; way that blames B instead of himself, otherwise payers will assume&lt;br/&gt;&amp;gt; &amp;gt; (incorrectly, and to C&amp;#39;s detriment) that the liquidity deficit is with C&lt;br/&gt;&amp;gt; &amp;gt; rather than B.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That is certainly quite possible to do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&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/20211019/dd316d31/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211019/dd316d31/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs85z7n76rzs4k765d3xxm04g36hrnqkmll3fl5lu74e9hajnh62jczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx3nj772</id>
    
      <title type="html">📅 Original date posted:2021-10-15 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs85z7n76rzs4k765d3xxm04g36hrnqkmll3fl5lu74e9hajnh62jczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx3nj772" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsru3u3w22fdmspaqwwt39n0emu8ygk4dx4wednqe26xyzsmk38xuq2hp307&#39;&gt;nevent1q…p307&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-15&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Thu, Oct 14, 2021 at 09:48:27AM &#43;0200, Joost Jager wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; So how would things work out with a combination of both of the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; proposals described in this mail? First we make probing free (free as&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; in no liquidity locked up) and then we&amp;#39;ll require senders to pay for&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; failed payment attempts too. Failed payment attempts after a&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; successful probe should be extremely rate, so doesn&amp;#39;t this fix the ux&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; issue with upfront fees?&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Why couldn&amp;#39;t a malicious routing node (or group of colluding routing&lt;br/&gt;&amp;gt; &amp;gt; nodes) succeed the probe and then fail the payment in order to collect&lt;br/&gt;&amp;gt; &amp;gt; the failed payment fee?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good observation!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I propose substantially the same thing here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-September/003256.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-September/003256.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I totally missed that thread, but it is indeed the same thing including the&lt;br/&gt;notion that it may make upfront payments palatable! Contains some great&lt;br/&gt;additional ideas too.&lt;br/&gt;&lt;br/&gt;Joost&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/20211015/342fb320/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211015/342fb320/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvqwfykmat438s30nd5ymgq045ezd97w0me44g7m3mzp34ttufzzczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txy98pz6</id>
    
      <title type="html">📅 Original date posted:2021-10-14 📝 Original message: A ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvqwfykmat438s30nd5ymgq045ezd97w0me44g7m3mzp34ttufzzczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txy98pz6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgpx3cvz5muc23j97kq287sjga0djh5jy8rduz9h58v4jn96dn80szkq7q0&#39;&gt;nevent1q…q7q0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-14&lt;br/&gt;📝 Original message:&lt;br/&gt;A practice that is widely applied by lightning wallets is to probe routes&lt;br/&gt;with an unknown payment hash before making the actual payment. Probing&lt;br/&gt;yields an accurate routing fee that can be shown to the user before&lt;br/&gt;execution of the payment.&lt;br/&gt;&lt;br/&gt;The downside of this style of probing is that for a short period of time,&lt;br/&gt;liquidity is locked up. Not just the sender&amp;#39;s liquidity, but also liquidity&lt;br/&gt;of nodes along the route. And if the probe gets stuck for whatever reason,&lt;br/&gt;that short period may become longer.&lt;br/&gt;&lt;br/&gt;But does this lock up serve a purpose at all? Suppose there would be a&lt;br/&gt;liquidity probing protocol message similar to `update_add_htlc`&lt;br/&gt;(`probe_htlc`?) that would skip the whole channel update machinery and is&lt;br/&gt;only forwarded to the next hop if the link would be able to carry the htlc.&lt;br/&gt;Won&amp;#39;t this work as well as the current probing without the downsides? Nodes&lt;br/&gt;can obviously reject these probes because they are distinguishable from&lt;br/&gt;real payments (contrary to unknown hash probing where everything looks the&lt;br/&gt;same). However if they do so, senders won&amp;#39;t use that route and the routing&lt;br/&gt;node misses out on routing fees.&lt;br/&gt;&lt;br/&gt;Another problem of the lightning network is its susceptibility to channel&lt;br/&gt;jamming. Multiple options have been proposed (see also&lt;br/&gt;&lt;a href=&#34;https://github.com/t-bast/lightning-docs/blob/master/spam-prevention.md&#34;&gt;https://github.com/t-bast/lightning-docs/blob/master/spam-prevention.md&lt;/a&gt;),&lt;br/&gt;but they all come with downsides.&lt;br/&gt;&lt;br/&gt;Personally I incline towards solutions that involve deterring the attacker&lt;br/&gt;by making them pay actual satoshis. Lightning itself is payment system and&lt;br/&gt;it seems that paying for the payments is a natural solution to the problem.&lt;br/&gt;Several iterations of this idea have been proposed. One of my own that&lt;br/&gt;builds on an earlier idea by t-bast is described in&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-February/002958.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-February/002958.html&lt;/a&gt;&lt;br/&gt;.&lt;br/&gt;&lt;br/&gt;The main criticism that this proposal has received is that it deteriorates&lt;br/&gt;the user experience for honest users when multiple payment routes need to&lt;br/&gt;be attempted. Every attempt will have a cost, so the user will see its&lt;br/&gt;balance going down by only just trying to make the payment. How bad this is&lt;br/&gt;depends on the attempt failure rate. I expect this rate to become really&lt;br/&gt;low as the network matures and senders hold routing nodes to high&lt;br/&gt;standards. Others however think otherwise and consider a series of failed&lt;br/&gt;attempts part of a healthy system.&lt;br/&gt;&lt;br/&gt;Custodial wallets could probably just swallow the cost for failures. They&lt;br/&gt;typically use one pathfinding system for all their users and are therefore&lt;br/&gt;able to collect a lot of information on routing node performance. This is&lt;br/&gt;likely to decrease the payment failure rate to an acceptably low level.&lt;br/&gt;&lt;br/&gt;For non-custodial nodes, this may be different. They have to map out the&lt;br/&gt;good routing nodes  all by themselves and this exploration will bear a cost.&lt;br/&gt;&lt;br/&gt;So how would things work out with a combination of both of the proposals&lt;br/&gt;described in this mail? First we make probing free (free as in no liquidity&lt;br/&gt;locked up) and then we&amp;#39;ll require senders to pay for failed payment&lt;br/&gt;attempts too. Failed payment attempts after a successful probe should be&lt;br/&gt;extremely rate, so doesn&amp;#39;t this fix the ux issue with upfront fees?&lt;br/&gt;&lt;br/&gt;Joost&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/20211014/04750627/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211014/04750627/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:16&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspdqmfj9hdujcmc9rm7xvm5p879p55s4hjm7zuztk3u4gzj8ry37gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txw9868e</id>
    
      <title type="html">📅 Original date posted:2021-09-21 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspdqmfj9hdujcmc9rm7xvm5p879p55s4hjm7zuztk3u4gzj8ry37gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txw9868e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8ur575tk0wws4tkgnm9mxczwqs7hyly9mlsygvu049f8339f6lrs4um3z5&#39;&gt;nevent1q…m3z5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-09-21&lt;br/&gt;📝 Original message:&lt;br/&gt;On Tue, Sep 21, 2021 at 2:05 PM fiatjaf &amp;lt;fiatjaf at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; What if instead of the payer generating the preimage the payee could&lt;br/&gt;&amp;gt; generate stateless invoices? Basically just use some secret to compute the&lt;br/&gt;&amp;gt; preimage upon receiving the HTLC, for example:&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Maybe my explanation wasn&amp;#39;t clear enough, but this is exactly what I am&lt;br/&gt;proposing. The payee generates a stateless invoice and gives it to the&lt;br/&gt;payer.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. Payer requests an invoice.&lt;br/&gt;&amp;gt; 2. Payee computes hash = sha256(hmac(local_secret, arbitrary_invoice_id)),&lt;br/&gt;&amp;gt; then encodes arbitrary_invoice_id into the invoice somehow.&lt;br/&gt;&amp;gt; 3. Payer sends payment with arbitrary_invoice_id as tlv_record_a.&lt;br/&gt;&amp;gt; 4. Upon receiving the HTLC, payee computes preimage = hmac(local_secret,&lt;br/&gt;&amp;gt; tlv_record_a) and resolves it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;One way to do this that I tried to describe in the initial post is via the&lt;br/&gt;payment_secret. This is already an arbitrary invoice id that is already&lt;br/&gt;sent as a tlv record.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;ve implemented such a scheme on @lntxbot, but it required low level code&lt;br/&gt;&amp;gt; in a c-lightning plugin and a hack with route hints: since TLV payloads&lt;br/&gt;&amp;gt; were not an option (as payers wouldn&amp;#39;t know how to send them) I&amp;#39;ve used a&lt;br/&gt;&amp;gt; &amp;#34;shadow&amp;#34; route hint to a private channel that didn&amp;#39;t exist, so preimage was&lt;br/&gt;&amp;gt; generated on the payee using preimage = hmac(local_secret,&lt;br/&gt;&amp;gt; next_channel_scid).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Clever workaround.&lt;br/&gt;&lt;br/&gt;Joost&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/20210921/8f1a2a53/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210921/8f1a2a53/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:03:49&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxccvs3r5vehyyn40c5es5xf4mzksgmzv9a3dveemr85y6wkzsqdqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txhuzpq7</id>
    
      <title type="html">📅 Original date posted:2021-09-21 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxccvs3r5vehyyn40c5es5xf4mzksgmzv9a3dveemr85y6wkzsqdqzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txhuzpq7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8zyrwcusls66tu3h8mdcgfxmg6lah5f9yhytfvd3k3lhdrnyt65cthkwq3&#39;&gt;nevent1q…kwq3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-09-21&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; preimage = H(node_secret | payment_secret | payment_amount |&lt;br/&gt;&amp;gt; encoded_order_details)&lt;br/&gt;&amp;gt; &amp;gt; invoice_hash = H(preimage)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The sender sends an htlc locked to invoice_hash for payment_amount and&lt;br/&gt;&amp;gt; passes along payment_secret and encoded_order_details in a custom tlv&lt;br/&gt;&amp;gt; record.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; When the recipient receives the htlc, they reconstruct the preimage&lt;br/&gt;&amp;gt; according to the formula above. At this point, all data is available to do&lt;br/&gt;&amp;gt; so. When H(preimage) indeed matches the htlc hash, they can settle the&lt;br/&gt;&amp;gt; payment knowing that this is an order that they committed to earlier.&lt;br/&gt;&amp;gt; Settling could be implemented as a just-in-time inserted invoice to keep&lt;br/&gt;&amp;gt; the diff small.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The preimage is returned to the sender and serves as a proof of payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Does this actually work?&lt;br/&gt;&amp;gt; How does the sender know the `invoice_hash` to lock the HTLC(s) to?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; If the sender does not know the `node_secret` (from its name, I am&lt;br/&gt;&amp;gt; guessing it is a secret known only by the recipient?) then it cannot&lt;br/&gt;&amp;gt; compute `invoice_hash`, the `invoice_hash` has to be somehow learned by the&lt;br/&gt;&amp;gt; sender from the recipient.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;So to be clear: this isn&amp;#39;t a spontaneous payment protocol with&lt;br/&gt;proof-of-payment. The sender will still request an invoice from the&lt;br/&gt;recipient via an ordinary http request (think of a paywall with qr invoice&lt;br/&gt;that is presented when web-browsing to a paid article). That is also how&lt;br/&gt;the sender learns the invoice_hash. It is part of the bolt11 payment&lt;br/&gt;request as it always is.&lt;br/&gt;&lt;br/&gt;The goal of the scheme is to alleviate the recipient from storing the&lt;br/&gt;invoices that they generate.&lt;br/&gt;&lt;br/&gt;Joost&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/20210921/e9fbb17f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210921/e9fbb17f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:03:48&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9k90xq8astzg9ml24a8g05cskxezppdqxw7u5gz9mrea6chpxk3gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txg8yh0c</id>
    
      <title type="html">📅 Original date posted:2021-09-21 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9k90xq8astzg9ml24a8g05cskxezppdqxw7u5gz9mrea6chpxk3gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txg8yh0c" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswfeatxk08c42hckxr632k7h3twzcd64kzyysqzkd0dmv3zhzp95gequtyd&#39;&gt;nevent1q…utyd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-09-21&lt;br/&gt;📝 Original message:&lt;br/&gt;Problem&lt;br/&gt;&lt;br/&gt;One of the qualities of lightning is that it can provide light-weight,&lt;br/&gt;no-login payments with minimal friction. Games, paywalls, podcasts, etc can&lt;br/&gt;immediately present a QR code that is ready for scan and pay.&lt;br/&gt;&lt;br/&gt;Optimistically presenting payment requests does lead to many of those&lt;br/&gt;payment requests going unused. A user visits a news site and decides not to&lt;br/&gt;buy the article. The conventional approach is to create a lightning invoice&lt;br/&gt;on a node and store the invoice together with order details in a database.&lt;br/&gt;If the order then goes unfulfilled, cleaning processes remove the data from&lt;br/&gt;the node and database again.&lt;br/&gt;&lt;br/&gt;The problem with this setup is that it needs protection against unbounded&lt;br/&gt;generation of payment requests. There are solutions for that such as rate&lt;br/&gt;limiting, but wouldn&amp;#39;t it be nice if invoices can be generated without the&lt;br/&gt;need to keep any state at all?&lt;br/&gt;&lt;br/&gt;Stateless invoices&lt;br/&gt;&lt;br/&gt;What would happen if a lightning invoice is only generated and stored&lt;br/&gt;nowhere on the recipient side? To the user, it won&amp;#39;t make a difference.&lt;br/&gt;They would still scan and pay the invoice. When the payment arrives at the&lt;br/&gt;recipient though, two problems arise:&lt;br/&gt;&lt;br/&gt;1. Recipient doesn&amp;#39;t know whom or what the payment is for.&lt;br/&gt;&lt;br/&gt;This can be solved by attaching additional custom tlv records to the htlc.&lt;br/&gt;On the wire, this is all arranged for. The only missing piece is the&lt;br/&gt;ability to specify additional data for that custom tlv record in a bolt11&lt;br/&gt;invoice. One way would be to define a new tagged field for this in which&lt;br/&gt;the recipient can encode the order details.&lt;br/&gt;&lt;br/&gt;An alternative is to use the existing invoice description field and simply&lt;br/&gt;always pass that along with the htlc as a custom tlv record.&lt;br/&gt;&lt;br/&gt;A second alternative that already works today is to use part (for example&lt;br/&gt;16 out of 32 bytes) of the payment_secret (aka payment address) to encode&lt;br/&gt;the order details in. This assumes that the secret is still secret enough&lt;br/&gt;with reduced entropy. Also there may not be enough space for every&lt;br/&gt;application.&lt;br/&gt;&lt;br/&gt;2. Recipient doesn&amp;#39;t know the preimage that is needed to settle the htlc(s).&lt;br/&gt;&lt;br/&gt;One option is to use a keysend payment or AMP payment. In that case, the&lt;br/&gt;sender includes the preimage with the htlc. Unfortunately this doesn&amp;#39;t&lt;br/&gt;provide the sender with a proof of payment that they&amp;#39;d get with a regular&lt;br/&gt;lightning payment.&lt;br/&gt;&lt;br/&gt;An alternative solution is to use a deterministic preimage based on a&lt;br/&gt;(recipient node key-derived) secret, the payment secret and other relevant&lt;br/&gt;properties. This allows the recipient to derive the same preimage twice:&lt;br/&gt;Once when the lightning invoice is generated and again when a payment&lt;br/&gt;arrives.&lt;br/&gt;&lt;br/&gt;It could be something like this:&lt;br/&gt;&lt;br/&gt;payment_secret = random&lt;br/&gt;preimage = H(node_secret | payment_secret | payment_amount |&lt;br/&gt;encoded_order_details)&lt;br/&gt;invoice_hash = H(preimage)&lt;br/&gt;&lt;br/&gt;The sender sends an htlc locked to invoice_hash for payment_amount and&lt;br/&gt;passes along payment_secret and encoded_order_details in a custom tlv&lt;br/&gt;record.&lt;br/&gt;&lt;br/&gt;When the recipient receives the htlc, they reconstruct the preimage&lt;br/&gt;according to the formula above. At this point, all data is available to do&lt;br/&gt;so. When H(preimage) indeed matches the htlc hash, they can settle the&lt;br/&gt;payment knowing that this is an order that they committed to earlier.&lt;br/&gt;Settling could be implemented as a just-in-time inserted invoice to keep&lt;br/&gt;the diff small.&lt;br/&gt;&lt;br/&gt;The preimage is returned to the sender and serves as a proof of payment.&lt;br/&gt;&lt;br/&gt;Resilience&lt;br/&gt;&lt;br/&gt;To me it seems that stateless invoices can be a relatively simple way to&lt;br/&gt;improve the resiliency of systems that deal with lightning invoices.&lt;br/&gt;Unlimited amounts of invoices can be generated without worrying about&lt;br/&gt;storage or memory, no matter if the requests are due to popularity of a&lt;br/&gt;service or a deliberate dos attack.&lt;br/&gt;&lt;br/&gt;Interested to hear your thoughts.&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/20210921/788f449b/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210921/788f449b/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:03:47&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyql74lfggef2gc5r7p0qq3akwgstz7ds3kn7elsnzq9nyrhmap2gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txnhecc8</id>
    
      <title type="html">📅 Original date posted:2020-10-13 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyql74lfggef2gc5r7p0qq3akwgstz7ds3kn7elsnzq9nyrhmap2gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txnhecc8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd4cl0whw68h6ul042ytf4tyrs89ad56gh3nuw95xxrm86fmzf2tq93jetr&#39;&gt;nevent1q…jetr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-13&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If I were LOW-REP, I&amp;#39;d still charge an unknown node a hold fee. I&lt;br/&gt;&amp;gt; &amp;gt; would only waive the hold fee for high-reputation nodes. In that case,&lt;br/&gt;&amp;gt; &amp;gt; the attacker is still paying for the attack. I may be forced to take a&lt;br/&gt;&amp;gt; &amp;gt; small loss on the difference, but at least the larger part of the pain&lt;br/&gt;&amp;gt; &amp;gt; is felt by the attacker. The assumption is that this is sufficient&lt;br/&gt;&amp;gt; &amp;gt; enough to deter the attacker from even trying.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The LOW-REP node being out of pocket is the clue here: if one party&lt;br/&gt;&amp;gt; loses funds, even a tiny bit, another party gains some funds. In this&lt;br/&gt;&amp;gt; case the HIGH-REP node collaborating with the ATTACKER can extract some&lt;br/&gt;&amp;gt; funds from the intermediate node, allowing them to dime their way to all&lt;br/&gt;&amp;gt; of LOW-REP&amp;#39;s funds. If an attack results in even a tiny loss for an&lt;br/&gt;&amp;gt; intermediary and can be repeated, the intermediary&amp;#39;s funds can be&lt;br/&gt;&amp;gt; syphoned by an attacker.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The assumption is that HIGH-REP nodes won&amp;#39;t do this :) LOW-REP will see all&lt;br/&gt;those failed payments and small losses and start to realize that something&lt;br/&gt;strange is happening. I know the proposal isn&amp;#39;t fully trustless, but I&lt;br/&gt;think it can work in practice.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Another attack that is a spin on ZmnSCPxj&amp;#39;s waiting to backpropagate the&lt;br/&gt;&amp;gt; preimage is even worse:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - Attacker node `A` charging hold fees receives HTLC from victim `V`&lt;br/&gt;&amp;gt;  - `A` does not forward the HTLC, but starts charging hold fees&lt;br/&gt;&amp;gt;  - Just before the timeout for the HTLC would force us to settle onchain&lt;br/&gt;&amp;gt;    `A` just removes the HTLC without forwarding it or he can try to&lt;br/&gt;&amp;gt;    forward at the last moment, potentially blaming someone else for its&lt;br/&gt;&amp;gt;    failure to complete&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This results in `A` extracting the maximum hold fee from `V`, without&lt;br/&gt;&amp;gt; the downstream hold fees cutting into their profits. By forwarding as&lt;br/&gt;&amp;gt; late as possible `A` can cause a downstream failure and look innocent,&lt;br/&gt;&amp;gt; and the overall payment has the worst possible outcome: we waited an&lt;br/&gt;&amp;gt; eternity for what turns out to be a failed attempt.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The idea is that an attacker node is untrusted and won&amp;#39;t be able to charge&lt;br/&gt;hold fees.&lt;br/&gt;&lt;br/&gt;- Joost&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/20201013/5b59146c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20201013/5b59146c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:01:11&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9r3ltmavlllle7p8zv8e60q4lrtjf7zuta6k9w4dn82542yaaysgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txtulyry</id>
    
      <title type="html">📅 Original date posted:2020-03-09 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9r3ltmavlllle7p8zv8e60q4lrtjf7zuta6k9w4dn82542yaaysgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txtulyry" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr54xqgvn5c2hhnf6vrfnrmgkx5pves2t89ly3yg2frneuk6u8h6s4thyzh&#39;&gt;nevent1q…hyzh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-09&lt;br/&gt;📝 Original message:&lt;br/&gt;On Thu, Feb 20, 2020 at 4:22 AM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Tue, Feb 18, 2020 at 10:23:29AM &#43;0100, Joost Jager wrote:&lt;br/&gt;&amp;gt; &amp;gt; A different way of mitigating this is to reverse the direction in which&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; bond is paid. So instead of paying to offer an htlc, nodes need to pay to&lt;br/&gt;&amp;gt; &amp;gt; receive an htlc. This sounds counterintuitive, but for the described&lt;br/&gt;&amp;gt; jamming&lt;br/&gt;&amp;gt; &amp;gt; attack there is also an attacker node at the end of the route. The&lt;br/&gt;&amp;gt; attacker&lt;br/&gt;&amp;gt; &amp;gt; still pays.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think this makes a lot of sense. I think the way it would end up working&lt;br/&gt;&amp;gt; is that the further the route extends, the greater the payments are, so:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   A -&amp;gt; B   : B sends A 1msat per minute&lt;br/&gt;&amp;gt;   A -&amp;gt; B -&amp;gt; C : C sends B 2msat per minute, B forwards 1msat/min to A&lt;br/&gt;&amp;gt;   A -&amp;gt; B -&amp;gt; C -&amp;gt; D : D sends C 3 msat, etc&lt;br/&gt;&amp;gt;   A -&amp;gt; B -&amp;gt; C -&amp;gt; D -&amp;gt; E : E sends D 4 msat, etc&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; so each node is receiving &#43;1 msat/minute, except for the last one, who&amp;#39;s&lt;br/&gt;&amp;gt; paying n msat/minute, where n is the number of hops to have gotten up to&lt;br/&gt;&amp;gt; the last one. There&amp;#39;s the obvious privacy issue there, with fairly&lt;br/&gt;&amp;gt; obvious ways to fudge around it, I think.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, that is definitely a good point. Otherwise the attacker can hold the&lt;br/&gt;htlc at the end of the route and pay the hold fee to its predecessor. The&lt;br/&gt;hold fee will propagate  back to the first node (and increase along the&lt;br/&gt;way). The first node is also owned by the attacker. Meaning there again is&lt;br/&gt;no cost for the attacker to jam the channel.&lt;br/&gt;&lt;br/&gt;In the mean time, I&amp;#39;ve been jamming channels on testnet myself. See what&lt;br/&gt;pathfinding changes are needed to do it efficiently and check out the&lt;br/&gt;effect. There was the expected outcome of a channel being jammed for as&lt;br/&gt;long as I wanted. But I also learned something else:&lt;br/&gt;&lt;br/&gt;Traversing a path takes time, especially if the path is optimized for&lt;br/&gt;maximum length and contains loops. In particular when some of the nodes&lt;br/&gt;and/or network connections are slow, the total round-trip from the sender&lt;br/&gt;point of view can get seriously long. Even if the final node immediately&lt;br/&gt;fails the htlc, the nodes at the start of the path still see their outgoing&lt;br/&gt;htlcs being held for quite some time.&lt;br/&gt;&lt;br/&gt;What this means is that the channel jamming attack can also be executed&lt;br/&gt;without the attacker controlling the final node. The attacker can construct&lt;br/&gt;long routes for which it doesn&amp;#39;t matter where they end. Suppose it takes 1&lt;br/&gt;minute for the htlc to be released again on the channel that is targeted&lt;br/&gt;(the round trip from the targeted channel to the final node). The attacker&lt;br/&gt;just needs to launch htlcs at a rate higher than one per minute to&lt;br/&gt;(eventually) saturate the channel. In my experiment, I launched many htlcs&lt;br/&gt;concurrently, which seemed to make the total latency even longer. Probably&lt;br/&gt;because those htlcs then start competing for limited resources at the route&lt;br/&gt;hops.&lt;br/&gt;&lt;br/&gt;This variation does require more action from the attacker. They need to&lt;br/&gt;keep refreshing htlcs that return back to them. Therefore it may be easier&lt;br/&gt;to address this with some form of rate limiting, although that has its own&lt;br/&gt;downsides.&lt;br/&gt;&lt;br/&gt;Joost&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/20200309/d26ea327/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200309/d26ea327/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:59:14&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8uhk7jvuaal29lumgy77n5vqvzucrvnkp4aw4lkdgvcfdqqdp70szyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx2ynsye</id>
    
      <title type="html">📅 Original date posted:2020-02-18 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8uhk7jvuaal29lumgy77n5vqvzucrvnkp4aw4lkdgvcfdqqdp70szyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx2ynsye" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsytnmrkrfdw8rgukkhjq6mymzc7rg20uyvjykpu0a5n5fme8km2ucug5g7g&#39;&gt;nevent1q…5g7g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-18&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;Within our team, we&amp;#39;ve been discussing the subject of preventing&lt;br/&gt;liquidity-consuming spam (aka channel jamming) further. One idea came up&lt;br/&gt;that I think is worth sharing.&lt;br/&gt;&lt;br/&gt;Previous prepay ideas were based on the sender paying something up-front in&lt;br/&gt;case the htlc causes grief on the network. This however leaves the sender&lt;br/&gt;vulnerable to nodes stealing that up-front payment.&lt;br/&gt;&lt;br/&gt;Consider what is probably the worst known channel jamming attack: an&lt;br/&gt;attacker sends minimum sized htlcs to fill up the limited number of&lt;br/&gt;commitment slots of channels along the route. Those htlcs will be held as&lt;br/&gt;long as possible by the receiving node (that is also controlled by the&lt;br/&gt;attacker). The hold time per htlc doesn&amp;#39;t even need to be very long,&lt;br/&gt;because a fresh htlc can be launched to immediately re-occupy a slot after&lt;br/&gt;it opens up again.&lt;br/&gt;&lt;br/&gt;The cost to the network of this attack is mostly dependent on the capacity&lt;br/&gt;of the channels used. The bigger the capacity, the more funds are locked up&lt;br/&gt;if a sufficient number of minimum sized htlcs are pending. The size of the&lt;br/&gt;up-front payment likely needs to be proportional to this cost.&lt;br/&gt;&lt;br/&gt;This means that for small htlcs, the up-front payment requirements may very&lt;br/&gt;well be exceeding the htlc amount and routing fees paid by far. At that&lt;br/&gt;point, a routing node may decide to steal the up-front payment rather than&lt;br/&gt;earn the routing fee in an honest way.&lt;br/&gt;&lt;br/&gt;A different way of mitigating this is to reverse the direction in which the&lt;br/&gt;bond is paid. So instead of paying to offer an htlc, nodes need to pay to&lt;br/&gt;receive an htlc. This sounds counterintuitive, but for the described&lt;br/&gt;jamming attack there is also an attacker node at the end of the route. The&lt;br/&gt;attacker still pays. The advantage is that for legitimate senders, there is&lt;br/&gt;no up-front payment that can be stolen.&lt;br/&gt;&lt;br/&gt;How this would work is that channel peers charge each other for the time&lt;br/&gt;that the other party holds an htlc. So if node A extends an htlc to node B,&lt;br/&gt;node B will pay node A amount x per minute of hold time. If node B doesn&amp;#39;t&lt;br/&gt;pay (doesn&amp;#39;t hold up the contract), A will close the channel. It can be a&lt;br/&gt;running balance between A and B that materializes as a single htlc per&lt;br/&gt;channel on the commitment transaction.&lt;br/&gt;&lt;br/&gt;As long as node B forwards the htlc swiftly to node C, the dfiference (the&lt;br/&gt;actual cost) between what B needs to pay A and what B receives from C will&lt;br/&gt;be tiny. Only when the htlc reaches the attacker node, or any other node on&lt;br/&gt;the network that is (unintentionally) mishaving for some reason, the delta&lt;br/&gt;starts to increase quickly for that node. The cost is borne by the node&lt;br/&gt;that should bear it.&lt;br/&gt;&lt;br/&gt;This would also fix concerns that have been voiced around hodl invoices.&lt;br/&gt;With the reverse bond payment as described above, hodling nodes will pay&lt;br/&gt;for the cost of their actions.&lt;br/&gt;&lt;br/&gt;Many details skipped over, but interested to hear opinions on the viability&lt;br/&gt;of this variation of up-front payments.&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;On Tue, Nov 5, 2019 at 3:25 AM Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         It&amp;#39;s been widely known that we&amp;#39;re going to have to have up-front&lt;br/&gt;&amp;gt; payments for msgs eventually, to avoid Type 2 spam (I think of Type 1&lt;br/&gt;&amp;gt; link-local, Type 2 though multiple nodes, and Type 3 liquidity-using&lt;br/&gt;&amp;gt; spam).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         Since both Offers and Joost&amp;#39;s WhatSat are looking at sending&lt;br/&gt;&amp;gt; messages, it&amp;#39;s time to float actual proposals.  I&amp;#39;ve been trying to come&lt;br/&gt;&amp;gt; up with something for several years now, so thought I&amp;#39;d present the best&lt;br/&gt;&amp;gt; I&amp;#39;ve got in the hope that others can improve on it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. New feature bit, extended messages, etc.&lt;br/&gt;&amp;gt; 2. Adding an HTLC causes a *push* of a number of msat on&lt;br/&gt;&amp;gt;    commitment_signed (new field), and a hash.&lt;br/&gt;&amp;gt; 3. Failing/succeeding an HTLC returns some of those msat, and a count&lt;br/&gt;&amp;gt;    and preimage (new fields).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; How many msat can you take for forwarding?  That depends on you&lt;br/&gt;&amp;gt; presenting a series of preimages (which chain into a final hash given in&lt;br/&gt;&amp;gt; the HTLC add), which you get by decoding the onion.  You get to keep 50&lt;br/&gt;&amp;gt; msat[1] per preimage you present[2].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So, how many preimages does the user have to give to have you forward&lt;br/&gt;&amp;gt; the payment?  That depends.  The base rate is 16 preimages, but subtract&lt;br/&gt;&amp;gt; one for each leading 4 zero bits of the SHA256(blockhash | hmac) of the&lt;br/&gt;&amp;gt; onion.  The blockhash is the hash of the block specified in the onion:&lt;br/&gt;&amp;gt; reject if it&amp;#39;s not in the last 3 blocks[3].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This simply adds some payment noise, while allowing a hashcash style&lt;br/&gt;&amp;gt; tradeoff of sats for work.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The final node gets some variable number of preimages, which adds noise.&lt;br/&gt;&amp;gt; It should take all and subtract from the minimum required invoice amount&lt;br/&gt;&amp;gt; on success, or take some random number on failure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This leaks some forward information, and makes an explicit tradeoff for&lt;br/&gt;&amp;gt; the sender between amount spent and privacy, but it&amp;#39;s the best I&amp;#39;ve been&lt;br/&gt;&amp;gt; able to come up with.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thoughts?&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] If we assume $1 per GB, $10k per BTC and 64k messages, we get about&lt;br/&gt;&amp;gt;     655msat per message.  Flat pricing for simplicity; we&amp;#39;re trying to&lt;br/&gt;&amp;gt;     prevent spam, not create a spam market.&lt;br/&gt;&amp;gt; [2] Actually, a number and a single preimage; you can check this is&lt;br/&gt;&amp;gt;     indeed the n&amp;#39;th preimage.&lt;br/&gt;&amp;gt; [3] This reduces incentive to grind the damn things in advance, though&lt;br/&gt;&amp;gt;     maybe that&amp;#39;s dumb?  We can also use a shorter hash (siphash?), or&lt;br/&gt;&amp;gt;     even truncated SHA256 (128 bits).&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&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/20200218/59b4ba73/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200218/59b4ba73/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:58:56&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9zpjzquhn32qptxacaffq5h8394x4yysl5aektqjqy736gq2mk7gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx9rjgvx</id>
    
      <title type="html">📅 Original date posted:2019-11-07 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9zpjzquhn32qptxacaffq5h8394x4yysl5aektqjqy736gq2mk7gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx9rjgvx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxlg2cjh0qgfrmvvx2cttzzvle22f29y5qms2ewjy8aauldlay67q50g0pj&#39;&gt;nevent1q…g0pj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-07&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Isn&amp;#39;t spam something that can also be addressed by using rate limits for&lt;br/&gt;&amp;gt; &amp;gt; failures? If all relevant nodes on the network employ rate limits, they&lt;br/&gt;&amp;gt; can&lt;br/&gt;&amp;gt; &amp;gt; isolate the spammer and diminish their disruptive abilities.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sure, once the spammer has jammed up the network, he&amp;#39;ll be stopped.  So&lt;br/&gt;&amp;gt; will everyone else.  Conner had a proposal like this which didn&amp;#39;t work,&lt;br/&gt;&amp;gt; IIRC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Do you have ref to this proposal?&lt;br/&gt;&lt;br/&gt;Imagine the following setup: a network of nodes that trust each other (as&lt;br/&gt;far as spam is concerned) applies a 100 htlc/sec rate limit to the channels&lt;br/&gt;between themselves. Channels to untrusted nodes get a rate of only 1&lt;br/&gt;htlc/sec. Assuming the spammer isn&amp;#39;t a trusted node, they can only spam at&lt;br/&gt;1 htlc/s and won&amp;#39;t jam up the network?&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/20191107/f34b9e63/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20191107/f34b9e63/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:57:12&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsx2jwpxzvumpymhkh6ewa0ys4xqe4kshhwc5krqwkzrsxt8h4dyxczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txjhmlfc</id>
    
      <title type="html">📅 Original date posted:2019-10-26 📝 Original message: We ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsx2jwpxzvumpymhkh6ewa0ys4xqe4kshhwc5krqwkzrsxt8h4dyxczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txjhmlfc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs08yz3jyhdwqlw9yf7t0scp6neydmplnm95dajz66pgyqfg4y6ydsa770cj&#39;&gt;nevent1q…70cj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-10-26&lt;br/&gt;📝 Original message:&lt;br/&gt;We started to look at the `push_me` outputs again. Will refer to them as&lt;br/&gt;`anchor` outputs from now on, to prevent confusion with `push_msat` on the&lt;br/&gt;`open_channel` message.&lt;br/&gt;&lt;br/&gt;The cpfp carve-out &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/15681&#34;&gt;https://github.com/bitcoin/bitcoin/pull/15681&lt;/a&gt; has been&lt;br/&gt;merged and for reasons described earlier in this thread, we now need to add&lt;br/&gt;a csv time lock to every non-anchor output on the commitment transaction.&lt;br/&gt;&lt;br/&gt;To realize this, we are currently considering the following changes:&lt;br/&gt;&lt;br/&gt;* Add `to_remote_delay OP_CHECKSEQUENCEVERIFY OP_DROP` to the `to_remote`&lt;br/&gt;output. `to_remote_delay` is the csv delay that the remote party accepted&lt;br/&gt;in the funding flow for their outputs. This not only ensures that the&lt;br/&gt;carve-out works as intended, but also removes the incentive to game the&lt;br/&gt;other party into force-closing. If desired, both parties can still agree to&lt;br/&gt;have different `to_self_delay` values.&lt;br/&gt;&lt;br/&gt;* Add `1 OP_CHECKSEQUENCEVERIFY OP_DROP` to the non-revocation clause of&lt;br/&gt;the HTLC outputs.&lt;br/&gt;&lt;br/&gt;For the anchor outputs we consider:&lt;br/&gt;&lt;br/&gt;* Output type: normal P2WKH. At one point, an additional spending path was&lt;br/&gt;proposed that was unconditional except for a 10 block csv lock. The&lt;br/&gt;intention of this was to prevent utxo set pollution by allowing anyone to&lt;br/&gt;clean up. This however also opens up the possibility for an attacker to&lt;br/&gt;&amp;#39;use up&amp;#39; the cpfp carve-out after those 10 blocks. If the user A is offline&lt;br/&gt;for that period of time, a malicious peer B may already have broadcasted&lt;br/&gt;the commitment tx and pinned down user A&amp;#39;s anchor output with a low fee&lt;br/&gt;child. That way, the commitment tx could still remain unconfirmed while an&lt;br/&gt;important htlc expires.&lt;br/&gt;&lt;br/&gt;* For the keys to use for `to_remote_anchor` and `to_local_anchor`, we’d&lt;br/&gt;like to introduce new addresses that both parties communicate in the&lt;br/&gt;`open_channel` and `accept_channel` messages. We don’t want to reuse the&lt;br/&gt;main commitment output addresses, because those may (at some point) be cold&lt;br/&gt;storage addresses and the cpfp is likely to happen from a hot wallet.&lt;br/&gt;&lt;br/&gt;* Within each version of the commitment transaction, both anchors always&lt;br/&gt;have equal values and are paid for by the initiator. The value of the&lt;br/&gt;anchors is the dust limit that was negotiated in the `open_channel` or&lt;br/&gt;`accept_channel` message of the party that publishes the transaction. It&lt;br/&gt;means that the definitive balance of an endpoint is dependent on which&lt;br/&gt;version of the commitment transaction confirms. This however is nothing&lt;br/&gt;new. In the current commitment format, there are always two or three valid&lt;br/&gt;versions of the commitment transaction (local, remote and sometimes the not&lt;br/&gt;yet revoked previous remote tx) which can have slightly different balances.&lt;br/&gt;For the initiator, it is important to validate the other party&amp;#39;s dust&lt;br/&gt;limit. The initiator pays for it and doesn&amp;#39;t want to give away more free&lt;br/&gt;money than necessary.&lt;br/&gt;&lt;br/&gt;Furthermore, there doesn’t seem to be a compelling reason anymore for&lt;br/&gt;tweaking the keys (new insights into watchtower designs, encrypt by txid).&lt;br/&gt;Therefore we think we can remove them entirely in this new commitment&lt;br/&gt;format and require less channel state data to sweep the outputs.&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Wed, Nov 21, 2018 at 3:17 AM Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m also starting to implement this, to see what I missed!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Original at &lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/513&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/513&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Pasted here for your reading convenience:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Option is sticky; it set at open time, it stays with channel&lt;br/&gt;&amp;gt;   - I didn&amp;#39;t want to have to handle penalty txs on channels which switch&lt;br/&gt;&amp;gt;   - We could, however, upgrade on splice.&lt;br/&gt;&amp;gt; - Feerate is fixed at 253&lt;br/&gt;&amp;gt;   - `feerate_per_kw` is still in open /accept (just ignored): multifund&lt;br/&gt;&amp;gt; may want it.&lt;br/&gt;&amp;gt; - closing tx negotiates *upwards* not *downwards*&lt;br/&gt;&amp;gt;   - Starting from base fee of commitment tx = 282 satoshi.&lt;br/&gt;&amp;gt; - to_remote output is always CSV delayed.&lt;br/&gt;&amp;gt; - pushme outputs are paid for by funder, but only exist if the matching&lt;br/&gt;&amp;gt;   to_local/remote output exists.&lt;br/&gt;&amp;gt; - After 10 blocks, they become anyone-can-spend (they need to see the&lt;br/&gt;&amp;gt;   to-local/remote witness script though).&lt;br/&gt;&amp;gt; - remotepubkey is not rotated.&lt;br/&gt;&amp;gt; - You must spend your pushme output; you may sweep for others.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Signed-off-by: Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; diff --git a/02-peer-protocol.md b/02-peer-protocol.md&lt;br/&gt;&amp;gt; index 7cf9ebf..6ec1155 100644&lt;br/&gt;&amp;gt; --- a/02-peer-protocol.md&lt;br/&gt;&amp;gt; &#43;&#43;&#43; b/02-peer-protocol.md&lt;br/&gt;&amp;gt; @@ -133,7 &#43;133,9 @@ node can offer.&lt;br/&gt;&amp;gt;  (i.e. 1/4 the more normally-used &amp;#39;satoshi per 1000 vbytes&amp;#39;) that this&lt;br/&gt;&amp;gt;  side will pay for commitment and HTLC transactions, as described in&lt;br/&gt;&amp;gt;  [BOLT #3](03-transactions.md#fee-calculation) (this can be adjusted&lt;br/&gt;&amp;gt; -later with an `update_fee` message).&lt;br/&gt;&amp;gt; &#43;later with an `update_fee` message).  Note that if&lt;br/&gt;&amp;gt; &#43;`option_simplified_commitment` is negotiated, this `feerate_per_kw`&lt;br/&gt;&amp;gt; &#43;is treated as 253 for all transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  `to_self_delay` is the number of blocks that the other node&amp;#39;s to-self&lt;br/&gt;&amp;gt;  outputs must be delayed, using `OP_CHECKSEQUENCEVERIFY` delays; this&lt;br/&gt;&amp;gt; @@ -208,7 &#43;210,8 @@ The receiving node MUST fail the channel if:&lt;br/&gt;&amp;gt;    - `push_msat` is greater than `funding_satoshis` * 1000.&lt;br/&gt;&amp;gt;    - `to_self_delay` is unreasonably large.&lt;br/&gt;&amp;gt;    - `max_accepted_htlcs` is greater than 483.&lt;br/&gt;&amp;gt; -  - it considers `feerate_per_kw` too small for timely processing or&lt;br/&gt;&amp;gt; unreasonably large.&lt;br/&gt;&amp;gt; &#43;  - if `option_simplified_commitment` is not negotiated:&lt;br/&gt;&amp;gt; &#43;    - it considers `feerate_per_kw` too small for timely processing or&lt;br/&gt;&amp;gt; unreasonably large.&lt;br/&gt;&amp;gt;    - `funding_pubkey`, `revocation_basepoint`, `htlc_basepoint`,&lt;br/&gt;&amp;gt; `payment_basepoint`, or `delayed_payment_basepoint`&lt;br/&gt;&amp;gt;  are not valid DER-encoded compressed secp256k1 pubkeys.&lt;br/&gt;&amp;gt;    - `dust_limit_satoshis` is greater than `channel_reserve_satoshis`.&lt;br/&gt;&amp;gt; @@ -228,7 &#43;231,7 @@ The *channel reserve* is specified by the peer&amp;#39;s&lt;br/&gt;&amp;gt; `channel_reserve_satoshis`: 1%&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The sender can unconditionally give initial funds to the receiver using a&lt;br/&gt;&amp;gt; non-zero `push_msat`, but even in this case we ensure that the funder has&lt;br/&gt;&amp;gt; sufficient remaining funds to pay fees and that one side has some amount it&lt;br/&gt;&amp;gt; can spend (which also implies there is at least one non-dust output). Note&lt;br/&gt;&amp;gt; that, like any other on-chain transaction, this payment is not certain&lt;br/&gt;&amp;gt; until the funding transaction has been confirmed sufficiently (with a&lt;br/&gt;&amp;gt; danger of double-spend until this occurs) and may require a separate method&lt;br/&gt;&amp;gt; to prove payment via on-chain confirmation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -The `feerate_per_kw` is generally only of concern to the sender (who pays&lt;br/&gt;&amp;gt; the fees), but there is also the fee rate paid by HTLC transactions; thus,&lt;br/&gt;&amp;gt; unreasonably large fee rates can also penalize the recipient.&lt;br/&gt;&amp;gt; &#43;The `feerate_per_kw` is generally only of concern to the sender (who pays&lt;br/&gt;&amp;gt; the fees), but there is also the fee rate paid by HTLC transactions; thus,&lt;br/&gt;&amp;gt; unreasonably large fee rates can also penalize the recipient.  It is&lt;br/&gt;&amp;gt; ignored for `option_simplified_commitment`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  Separating the `htlc_basepoint` from the `payment_basepoint` improves&lt;br/&gt;&amp;gt; security: a node needs the secret associated with the `htlc_basepoint` to&lt;br/&gt;&amp;gt; produce HTLC signatures for the protocol, but the secret for the&lt;br/&gt;&amp;gt; `payment_basepoint` can be in cold storage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @@ -340,6 &#43;343,12 @@ This message introduces the `channel_id` to identify&lt;br/&gt;&amp;gt; the channel. It&amp;#39;s derived f&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  #### Requirements&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;Both peers:&lt;br/&gt;&amp;gt; &#43;  - if `option_simplified_commitment` was negotiated:&lt;br/&gt;&amp;gt; &#43;    - `option_simplified_commitment` applies to all commitment and HTLC&lt;br/&gt;&amp;gt; transactions&lt;br/&gt;&amp;gt; &#43;  - otherwise:&lt;br/&gt;&amp;gt; &#43;    - `option_simplified_commitment` does not apply to any commitment or&lt;br/&gt;&amp;gt; HTLC transactions&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  The sender MUST set:&lt;br/&gt;&amp;gt;    - `channel_id` by exclusive-OR of the `funding_txid` and the&lt;br/&gt;&amp;gt; `funding_output_index` from the `funding_created` message.&lt;br/&gt;&amp;gt;    - `signature` to the valid signature, using its `funding_pubkey` for&lt;br/&gt;&amp;gt; the initial commitment transaction, as defined in [BOLT&lt;br/&gt;&amp;gt; #3](03-transactions.md#commitment-transaction).&lt;br/&gt;&amp;gt; @@ -351,6 &#43;360,12 @@ The recipient:&lt;br/&gt;&amp;gt;    - on receipt of a valid `funding_signed`:&lt;br/&gt;&amp;gt;      - SHOULD broadcast the funding transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;#### Rationale&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;We decide on `option_simplified_commitment` at this point when we first&lt;br/&gt;&amp;gt; have to generate the commitment&lt;br/&gt;&amp;gt; &#43;transaction.  Even if a later reconnection does not negotiate this&lt;br/&gt;&amp;gt; parameter, this channel will honor it.&lt;br/&gt;&amp;gt; &#43;This simplifies channel state, particularly penalty transaction handling.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  ### The `funding_locked` Message&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  This message indicates that the funding transaction has reached the&lt;br/&gt;&amp;gt; `minimum_depth` asked for in `accept_channel`. Once both nodes have sent&lt;br/&gt;&amp;gt; this, the channel enters normal operating mode.&lt;br/&gt;&amp;gt; @@ -508,8 &#43;523,11 @@ The funding node:&lt;br/&gt;&amp;gt;      - SHOULD send a `closing_signed` message.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The sending node:&lt;br/&gt;&amp;gt; -  - MUST set `fee_satoshis` less than or equal to the&lt;br/&gt;&amp;gt; - base fee of the final commitment transaction, as calculated in [BOLT&lt;br/&gt;&amp;gt; #3](03-transactions.md#fee-calculation).&lt;br/&gt;&amp;gt; &#43;  - if `option_upfront_shutdown_script` applies to the final commitment&lt;br/&gt;&amp;gt; transaction:&lt;br/&gt;&amp;gt; &#43;    - MUST set `fee_satoshis` greater than or equal to 282.&lt;br/&gt;&amp;gt; &#43;  - otherwise:&lt;br/&gt;&amp;gt; &#43;    - MUST set `fee_satoshis` less than or equal to the&lt;br/&gt;&amp;gt; &#43;      base fee of the final commitment transaction, as calculated in&lt;br/&gt;&amp;gt; [BOLT #3](03-transactions.md#fee-calculation).&lt;br/&gt;&amp;gt;    - SHOULD set the initial `fee_satoshis` according to its&lt;br/&gt;&amp;gt;   estimate of cost of inclusion in a block.&lt;br/&gt;&amp;gt;    - MUST set `signature` to the Bitcoin signature of the close&lt;br/&gt;&amp;gt; @@ -543,9 &#43;561,18 @@ progress is made, even if only by a single satoshi at&lt;br/&gt;&amp;gt; a time. To avoid&lt;br/&gt;&amp;gt;  keeping state and to handle the corner case, where fees have shifted&lt;br/&gt;&amp;gt;  between disconnection and reconnection, negotiation restarts on&lt;br/&gt;&amp;gt; reconnection.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Note there is limited risk if the closing transaction is&lt;br/&gt;&amp;gt; -delayed, but it will be broadcast very soon; so there is usually no&lt;br/&gt;&amp;gt; -reason to pay a premium for rapid processing.&lt;br/&gt;&amp;gt; &#43;In the `option_simplified_commitment` case, the fees on the commitment&lt;br/&gt;&amp;gt; &#43;transaction itself are minimal (it is assumed that a child transaction&lt;br/&gt;&amp;gt; will&lt;br/&gt;&amp;gt; &#43;supply additional fee incentive), so that forms a floor for negotiation.&lt;br/&gt;&amp;gt; &#43;[BOLT #3](03-transactions.md#fee-calculation), gives 282 satoshis (1116&lt;br/&gt;&amp;gt; &#43;weight, 254 `feerate_per_kw`).&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;Otherwise, the commitment transaction usually pays a premium fee, so that&lt;br/&gt;&amp;gt; &#43;forms a ceiling.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;Note there is limited risk if the closing transaction is delayed, but it&lt;br/&gt;&amp;gt; will&lt;br/&gt;&amp;gt; &#43;be broadcast very soon; so there is usually no reason to pay a premium for&lt;br/&gt;&amp;gt; &#43;rapid processing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ## Normal Operation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @@ -763,7 &#43;790,10 @@ is destined, is described in [BOLT&lt;br/&gt;&amp;gt; #4](04-onion-routing.md).&lt;br/&gt;&amp;gt;  A sending node:&lt;br/&gt;&amp;gt;    - MUST NOT offer `amount_msat` it cannot pay for in the&lt;br/&gt;&amp;gt;  remote commitment transaction at the current `feerate_per_kw` (see&lt;br/&gt;&amp;gt; &amp;#34;Updating&lt;br/&gt;&amp;gt; -Fees&amp;#34;) while maintaining its channel reserve.&lt;br/&gt;&amp;gt; &#43;Fees&amp;#34;) while maintaining its channel reserve&lt;br/&gt;&amp;gt; &#43;  - if `option_simplified_commitment` applies to this commitment&lt;br/&gt;&amp;gt; transaction and the sending&lt;br/&gt;&amp;gt; &#43;    node is the funder:&lt;br/&gt;&amp;gt; &#43;    - MUST be able to additionally pay for `to_local_pushme` and&lt;br/&gt;&amp;gt; `to_remote_pushme` above its reserve.&lt;br/&gt;&amp;gt;    - MUST offer `amount_msat` greater than 0.&lt;br/&gt;&amp;gt;    - MUST NOT offer `amount_msat` below the receiving node&amp;#39;s&lt;br/&gt;&amp;gt; `htlc_minimum_msat`&lt;br/&gt;&amp;gt;    - MUST set `cltv_expiry` less than 500000000.&lt;br/&gt;&amp;gt; @@ -782,7 &#43;812,7 @@ Fees&amp;#34;) while maintaining its channel reserve.&lt;br/&gt;&amp;gt;  A receiving node:&lt;br/&gt;&amp;gt;    - receiving an `amount_msat` equal to 0, OR less than its own&lt;br/&gt;&amp;gt; `htlc_minimum_msat`:&lt;br/&gt;&amp;gt;      - SHOULD fail the channel.&lt;br/&gt;&amp;gt; -  - receiving an `amount_msat` that the sending node cannot afford at the&lt;br/&gt;&amp;gt; current `feerate_per_kw` (while maintaining its channel reserve):&lt;br/&gt;&amp;gt; &#43;  - receiving an `amount_msat` that the sending node cannot afford at the&lt;br/&gt;&amp;gt; current `feerate_per_kw` (while maintaining its channel reserve and any&lt;br/&gt;&amp;gt; `to_local_pushme` and `to_remote_pushme` fees):&lt;br/&gt;&amp;gt;      - SHOULD fail the channel.&lt;br/&gt;&amp;gt;    - if a sending node adds more than its `max_accepted_htlcs` HTLCs to&lt;br/&gt;&amp;gt;      its local commitment transaction, OR adds more than its&lt;br/&gt;&amp;gt; `max_htlc_value_in_flight_msat` worth of offered HTLCs to its local&lt;br/&gt;&amp;gt; commitment transaction:&lt;br/&gt;&amp;gt; @@ -997,6 &#43;1027,11 @@ A node:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ### Updating Fees: `update_fee`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;If `option_simplified_commitment` applies to the commitment transaction,&lt;br/&gt;&amp;gt; &#43;`update_fee` is never used: the `feerate_per_kw` is always considered&lt;br/&gt;&amp;gt; 253, but&lt;br/&gt;&amp;gt; &#43;the funder also pays 2000 satoshi for the `to_local_pushme` and&lt;br/&gt;&amp;gt; &#43;`to_remote_pushme` outputs.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  An `update_fee` message is sent by the node which is paying the&lt;br/&gt;&amp;gt;  Bitcoin fee. Like any update, it&amp;#39;s first committed to the receiver&amp;#39;s&lt;br/&gt;&amp;gt;  commitment transaction and then (once acknowledged) committed to the&lt;br/&gt;&amp;gt; @@ -1020,13 &#43;1055,19 @@ given in [BOLT&lt;br/&gt;&amp;gt; #3](03-transactions.md#fee-calculation).&lt;br/&gt;&amp;gt;  #### Requirements&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The node _responsible_ for paying the Bitcoin fee:&lt;br/&gt;&amp;gt; -  - SHOULD send `update_fee` to ensure the current fee rate is sufficient&lt;br/&gt;&amp;gt; (by a&lt;br/&gt;&amp;gt; &#43;  - if `option_simplified_commitment` applies to the commitment&lt;br/&gt;&amp;gt; transaction:&lt;br/&gt;&amp;gt; &#43;    - MUST NOT send `update_fee`.&lt;br/&gt;&amp;gt; &#43;  - otherwise:&lt;br/&gt;&amp;gt; &#43;    - SHOULD send `update_fee` to ensure the current fee rate is&lt;br/&gt;&amp;gt; sufficient (by a&lt;br/&gt;&amp;gt;        significant margin) for timely processing of the commitment&lt;br/&gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The node _not responsible_ for paying the Bitcoin fee:&lt;br/&gt;&amp;gt;    - MUST NOT send `update_fee`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  A receiving node:&lt;br/&gt;&amp;gt; &#43;  - if `option_simplified_commitment` applies to the commitment&lt;br/&gt;&amp;gt; transaction:&lt;br/&gt;&amp;gt; &#43;    - SHOULD fail the channel.&lt;br/&gt;&amp;gt; &#43;       - MUST NOT update the `feerate_per_kw`.&lt;br/&gt;&amp;gt;    - if the `update_fee` is too low for timely processing, OR is&lt;br/&gt;&amp;gt; unreasonably large:&lt;br/&gt;&amp;gt;      - SHOULD fail the channel.&lt;br/&gt;&amp;gt;    - if the sender is not responsible for paying the Bitcoin fee:&lt;br/&gt;&amp;gt; @@ -1038,7 &#43;1079,12 @@ A receiving node:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  #### Rationale&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Bitcoin fees are required for unilateral closes to be effective —&lt;br/&gt;&amp;gt; &#43;Fee adjustments are unnecessary for `option_simplified_commitment` which&lt;br/&gt;&amp;gt; &#43;relies on &amp;#34;pushme&amp;#34; outputs and a child transaction which will provide&lt;br/&gt;&amp;gt; &#43;additional fee incentive which can be calculated at the time it is spent,&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; &#43;replaced by higher-fee children if required.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;Without this option, bitcoin fees are required for unilateral closes to&lt;br/&gt;&amp;gt; be effective —&lt;br/&gt;&amp;gt;  particularly since there is no general method for the broadcasting node&lt;br/&gt;&amp;gt; to use&lt;br/&gt;&amp;gt;  child-pays-for-parent to increase its effective fee.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; diff --git a/03-transactions.md b/03-transactions.md&lt;br/&gt;&amp;gt; index e769961..440bd0d 100644&lt;br/&gt;&amp;gt; --- a/03-transactions.md&lt;br/&gt;&amp;gt; &#43;&#43;&#43; b/03-transactions.md&lt;br/&gt;&amp;gt; @@ -82,6 &#43;82,8 @@ To allow an opportunity for penalty transactions, in&lt;br/&gt;&amp;gt; case of a revoked commitmen&lt;br/&gt;&amp;gt;  The reason for the separate transaction stage for HTLC outputs is so that&lt;br/&gt;&amp;gt; HTLCs can timeout or be fulfilled even though they are within the&lt;br/&gt;&amp;gt; `to_self_delay` delay.&lt;br/&gt;&amp;gt;  Otherwise, the required minimum timeout on HTLCs is lengthened by this&lt;br/&gt;&amp;gt; delay, causing longer timeouts for HTLCs traversing the network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;If `option_simplified_commitment` applies to the commitment transaction,&lt;br/&gt;&amp;gt; then the `to_self_delay` used for all transactions is the greater of the&lt;br/&gt;&amp;gt; `to_self_delay` sent by each peer.  Otherwise, each peer sends the&lt;br/&gt;&amp;gt; `to_self_delay` to be used for the other peer&amp;#39;s commitment amd HTLC&lt;br/&gt;&amp;gt; transactions.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  The amounts for each output MUST be rounded down to whole satoshis. If&lt;br/&gt;&amp;gt; this amount, minus the fees for the HTLC transaction, is less than the&lt;br/&gt;&amp;gt; `dust_limit_satoshis` set by the owner of the commitment transaction, the&lt;br/&gt;&amp;gt; output MUST NOT be produced (thus the funds add to fees).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  #### `to_local` Output&lt;br/&gt;&amp;gt; @@ -109,7 &#43;111,40 @@ If a revoked commitment transaction is published, the&lt;br/&gt;&amp;gt; other party can spend this&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  #### `to_remote` Output&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -This output sends funds to the other peer and thus is a simple P2WPKH to&lt;br/&gt;&amp;gt; `remotepubkey`.&lt;br/&gt;&amp;gt; &#43;This output sends funds to the other peer, thus is not encumbered by a&lt;br/&gt;&amp;gt; &#43;revocation private key.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;If `option_simplified_commitment` applies to the commitment transaction,&lt;br/&gt;&amp;gt; the `to_remote` output is delayed similarly to the `to_local` output, and&lt;br/&gt;&amp;gt; is to a fixed key:&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;        `to_self_delay`&lt;br/&gt;&amp;gt; &#43;        OP_CSV&lt;br/&gt;&amp;gt; &#43;        OP_DROP&lt;br/&gt;&amp;gt; &#43;        &amp;lt;remote_pubkey&amp;gt;&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;The output is spent by a transaction with `nSequence` field set to&lt;br/&gt;&amp;gt; `to_self_delay` (which can only be valid after that duration has passed)&lt;br/&gt;&amp;gt; and witness:&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;    &amp;lt;remote_sig&amp;gt;&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;Otherwise, this output is a simple P2WPKH to `remotepubkey`.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;#### `to_local_pushme` and `to_remote_pushme` Output&lt;br/&gt;&amp;gt; (option_simplified_commitment)&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;This output can be spent by the local and remote nodes respectivey to&lt;br/&gt;&amp;gt; provide incentive to mine the transaction, using child-pays-for-parent.&lt;br/&gt;&amp;gt; They are only added if the `to_local` and `to_remote` outputs exist,&lt;br/&gt;&amp;gt; respectively.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;    OP_DEPTH&lt;br/&gt;&amp;gt; &#43;    OP_IF&lt;br/&gt;&amp;gt; &#43;        &amp;lt;pubkey&amp;gt; OP_CHECKSIG&lt;br/&gt;&amp;gt; &#43;    OP_ELSE&lt;br/&gt;&amp;gt; &#43;        10 OP_CSV&lt;br/&gt;&amp;gt; &#43;    OP_ENDIF&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;The `&amp;lt;pubkey&amp;gt;` is `&amp;lt;local_delayedpubkey&amp;gt;` to `to_local_pushme` and&lt;br/&gt;&amp;gt; &#43;`&amp;lt;remote_delayedpubkey&amp;gt;` for `to_remote_pushme`.  The output amount is&lt;br/&gt;&amp;gt; &#43;1000 satoshi, to encourage spending of the output.  Once the&lt;br/&gt;&amp;gt; &#43;`remote_pubkey` is revealed (by spending the `to_local` output) and&lt;br/&gt;&amp;gt; &#43;the commitment transaction is 10 blocks deep, anyone can spend it.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  #### Offered HTLC Outputs&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @@ -294,6 &#43;329,9 @@ The fee calculation for both commitment transactions&lt;br/&gt;&amp;gt; and HTLC&lt;br/&gt;&amp;gt;  transactions is based on the current `feerate_per_kw` and the&lt;br/&gt;&amp;gt;  *expected weight* of the transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;Note that if `option_simplified_commitment` applies to the commitment&lt;br/&gt;&amp;gt; &#43;transaction then `feerate_per_kw` is 253.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  The actual and expected weights vary for several reasons:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Bitcoin uses DER-encoded signatures, which vary in size.&lt;br/&gt;&amp;gt; @@ -306,10 &#43;344,12 @@ Thus, a simplified formula for *expected weight* is&lt;br/&gt;&amp;gt; used, which assumes:&lt;br/&gt;&amp;gt;  * Signatures are 73 bytes long (the maximum length).&lt;br/&gt;&amp;gt;  * There are a small number of outputs (thus 1 byte to count them).&lt;br/&gt;&amp;gt;  * There are always both a `to_local` output and a `to_remote` output.&lt;br/&gt;&amp;gt; &#43;* (if `option_simplified_commitment`) there are always both a&lt;br/&gt;&amp;gt; `to_local_pushme` and `to_remote_pushme` output.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  This yields the following *expected weights* (details of the computation&lt;br/&gt;&amp;gt; in [Appendix A](#appendix-a-expected-weights)):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -    Commitment weight:   724 &#43; 172 * num-untrimmed-htlc-outputs&lt;br/&gt;&amp;gt; &#43;    Commitment weight (no option_simplified_commitment):   724 &#43; 172 *&lt;br/&gt;&amp;gt; num-untrimmed-htlc-outputs&lt;br/&gt;&amp;gt; &#43;    Commitment weight (option_simplified_commitment:  1116 &#43; 172 *&lt;br/&gt;&amp;gt; num-untrimmed-htlc-outputs&lt;br/&gt;&amp;gt;      HTLC-timeout weight: 663&lt;br/&gt;&amp;gt;      HTLC-success weight: 703&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @@ -366,7 &#43;406,7 @@ outputs) is 7140 satoshi. The final fee may be even&lt;br/&gt;&amp;gt; higher if the&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ### Fee Payment&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Base commitment transaction fees are extracted from the funder&amp;#39;s amount;&lt;br/&gt;&amp;gt; if that amount is insufficient, the entire amount of the funder&amp;#39;s output is&lt;br/&gt;&amp;gt; used.&lt;br/&gt;&amp;gt; &#43;Base commitment transaction fees and amounts for `to_local_pushme` and&lt;br/&gt;&amp;gt; `to_remote_pushme` outputs are extracted from the funder&amp;#39;s amount; if that&lt;br/&gt;&amp;gt; amount is insufficient, the entire amount of the funder&amp;#39;s output is used.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  Note that after the fee amount is subtracted from the to-funder output,&lt;br/&gt;&amp;gt;  that output may be below `dust_limit_satoshis`, and thus will also&lt;br/&gt;&amp;gt; @@ -390,23 &#43;430,29 @@ committed HTLCs:&lt;br/&gt;&amp;gt;  2. Calculate the base [commitment transaction fee](#fee-calculation).&lt;br/&gt;&amp;gt;  3. Subtract this base fee from the funder (either `to_local` or&lt;br/&gt;&amp;gt; `to_remote`),&lt;br/&gt;&amp;gt;     with a floor of 0 (see [Fee Payment](#fee-payment)).&lt;br/&gt;&amp;gt; &#43;4. If `option_simplified_commitment` applies to the commitment&lt;br/&gt;&amp;gt; transaction,&lt;br/&gt;&amp;gt; &#43;   subtract 2000 satoshis from the funder (either `to_local` or&lt;br/&gt;&amp;gt; `to_remote`).&lt;br/&gt;&amp;gt;  3. For every offered HTLC, if it is not trimmed, add an&lt;br/&gt;&amp;gt;     [offered HTLC output](#offered-htlc-outputs).&lt;br/&gt;&amp;gt;  4. For every received HTLC, if it is not trimmed, add an&lt;br/&gt;&amp;gt;     [received HTLC output](#received-htlc-outputs).&lt;br/&gt;&amp;gt;  5. If the `to_local` amount is greater or equal to `dust_limit_satoshis`,&lt;br/&gt;&amp;gt;     add a [`to_local` output](#to_local-output).&lt;br/&gt;&amp;gt; &#43;6. If `option_simplified_commitment` applies to the commitment&lt;br/&gt;&amp;gt; transaction,&lt;br/&gt;&amp;gt; &#43;   and `to_local` was added, add `to_local_pushme`.&lt;br/&gt;&amp;gt;  6. If the `to_remote` amount is greater or equal to `dust_limit_satoshis`,&lt;br/&gt;&amp;gt;     add a [`to_remote` output](#to_remote-output).&lt;br/&gt;&amp;gt; &#43;6. If `option_simplified_commitment` applies to the commitment&lt;br/&gt;&amp;gt; transaction,&lt;br/&gt;&amp;gt; &#43;   and `to_remote` was added, add `to_remote_pushme`.&lt;br/&gt;&amp;gt;  7. Sort the outputs into [BIP 69&lt;br/&gt;&amp;gt; order](#transaction-input-and-output-ordering).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  # Keys&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ## Key Derivation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Each commitment transaction uses a unique set of keys: `localpubkey` and&lt;br/&gt;&amp;gt; `remotepubkey`.&lt;br/&gt;&amp;gt; &#43;Each commitment transaction uses a unique `localpubkey`, and a&lt;br/&gt;&amp;gt; `remotepubkey`.&lt;br/&gt;&amp;gt;  The HTLC-success and HTLC-timeout transactions use `local_delayedpubkey`&lt;br/&gt;&amp;gt; and `revocationpubkey`.&lt;br/&gt;&amp;gt; -These are changed for every transaction based on the&lt;br/&gt;&amp;gt; `per_commitment_point`.&lt;br/&gt;&amp;gt; &#43;These are changed for every transaction based on the&lt;br/&gt;&amp;gt; `per_commitment_point`, with the exception of `remotepubkey` if&lt;br/&gt;&amp;gt; `option_simplified_commitment` is negotiated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The reason for key change is so that trustless watching for revoked&lt;br/&gt;&amp;gt;  transactions can be outsourced. Such a _watcher_ should not be able to&lt;br/&gt;&amp;gt; @@ -419,8 &#43;465,9 @@ avoid storage of every commitment transaction, a&lt;br/&gt;&amp;gt; _watcher_ can be given the&lt;br/&gt;&amp;gt;  the scripts required for the penalty transaction; thus, a _watcher_ need&lt;br/&gt;&amp;gt; only be&lt;br/&gt;&amp;gt;  given (and store) the signatures for each penalty input.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Changing the `localpubkey` and `remotepubkey` every time ensures that&lt;br/&gt;&amp;gt; commitment&lt;br/&gt;&amp;gt; -transaction ID cannot be guessed; every commitment transaction uses an ID&lt;br/&gt;&amp;gt; &#43;Changing the `localpubkey` every time ensures that commitment&lt;br/&gt;&amp;gt; &#43;transaction ID cannot be guessed except in the trivial case where there&lt;br/&gt;&amp;gt; is no&lt;br/&gt;&amp;gt; &#43;`to_local` output, as every commitment transaction uses an ID&lt;br/&gt;&amp;gt;  in its output script. Splitting the `local_delayedpubkey`, which is&lt;br/&gt;&amp;gt; required for&lt;br/&gt;&amp;gt;  the penalty transaction, allows it to be shared with the _watcher_ without&lt;br/&gt;&amp;gt;  revealing `localpubkey`; even if both peers use the same _watcher_,&lt;br/&gt;&amp;gt; nothing is revealed.&lt;br/&gt;&amp;gt; @@ -434,14 &#43;481,13 @@ For efficiency, keys are generated from a series of&lt;br/&gt;&amp;gt; per-commitment secrets&lt;br/&gt;&amp;gt;  that are generated from a single seed, which allows the receiver to&lt;br/&gt;&amp;gt; compactly&lt;br/&gt;&amp;gt;  store them (see [below](#efficient-per-commitment-secret-storage)).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -### `localpubkey`, `remotepubkey`, `local_htlcpubkey`,&lt;br/&gt;&amp;gt; `remote_htlcpubkey`, `local_delayedpubkey`, and `remote_delayedpubkey`&lt;br/&gt;&amp;gt; Derivation&lt;br/&gt;&amp;gt; &#43;### `localpubkey``local_htlcpubkey`, `remote_htlcpubkey`,&lt;br/&gt;&amp;gt; `local_delayedpubkey`, and `remote_delayedpubkey` Derivation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  These pubkeys are simply generated by addition from their base points:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         pubkey = basepoint &#43; SHA256(per_commitment_point || basepoint) * G&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -The `localpubkey` uses the local node&amp;#39;s `payment_basepoint`; the&lt;br/&gt;&amp;gt; `remotepubkey`&lt;br/&gt;&amp;gt; -uses the remote node&amp;#39;s `payment_basepoint`; the `local_delayedpubkey`&lt;br/&gt;&amp;gt; &#43;The `localpubkey` uses the local node&amp;#39;s `payment_basepoint`; the&lt;br/&gt;&amp;gt; `local_delayedpubkey`&lt;br/&gt;&amp;gt;  uses the local node&amp;#39;s `delayed_payment_basepoint`; the `local_htlcpubkey`&lt;br/&gt;&amp;gt; uses the&lt;br/&gt;&amp;gt;  local node&amp;#39;s `htlc_basepoint`; and the `remote_delayedpubkey` uses the&lt;br/&gt;&amp;gt; remote&lt;br/&gt;&amp;gt;  node&amp;#39;s `delayed_payment_basepoint`.&lt;br/&gt;&amp;gt; @@ -451,6 &#43;497,17 @@ secrets are known (i.e. the private keys&lt;br/&gt;&amp;gt; corresponding to `localpubkey`, `local_&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      privkey = basepoint_secret &#43; SHA256(per_commitment_point || basepoint)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;### `remotepubkey` Derivation&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;If `option_simplified_commitment` is negotiated the `remotepubkey` is&lt;br/&gt;&amp;gt; simply the remote node&amp;#39;s `payment_basepoint`, otherwise it is calculated as&lt;br/&gt;&amp;gt; above using the remote node&amp;#39;s `payment_basepoint`.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;The simplified derivation means that a node can spend a commitment&lt;br/&gt;&amp;gt; &#43;transaction even if it has lost data and doesn&amp;#39;t know the&lt;br/&gt;&amp;gt; &#43;corresponding `payment_basepoint`.  A watchtower could correlate&lt;br/&gt;&amp;gt; &#43;transactions given to it which only have a `to_remote` output if it&lt;br/&gt;&amp;gt; &#43;sees one of them onchain, but such transactions do not need any&lt;br/&gt;&amp;gt; &#43;enforcement and should not be handed to a watchtower.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  ### `revocationpubkey` Derivation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The `revocationpubkey` is a blinded key: when the local node wishes to&lt;br/&gt;&amp;gt; create a new&lt;br/&gt;&amp;gt; @@ -636,12 &#43;693,22 @@ The *expected weight* of a commitment transaction is&lt;br/&gt;&amp;gt; calculated as follows:&lt;br/&gt;&amp;gt;                 - var_int: 1 byte (pk_script length)&lt;br/&gt;&amp;gt;                 - pk_script (p2wsh): 34 bytes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -       output_paying_to_remote: 31 bytes&lt;br/&gt;&amp;gt; &#43;       output_paying_to_remote (no option_simplified_commitment): 31 bytes&lt;br/&gt;&amp;gt;                 - value: 8 bytes&lt;br/&gt;&amp;gt;                 - var_int: 1 byte (pk_script length)&lt;br/&gt;&amp;gt;                 - pk_script (p2wpkh): 22 bytes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -        htlc_output: 43 bytes&lt;br/&gt;&amp;gt; &#43;       output_paying_to_remote (option_simplified_commitment): 43 bytes&lt;br/&gt;&amp;gt; &#43;               - value: 8 bytes&lt;br/&gt;&amp;gt; &#43;               - var_int: 1 byte (pk_script length)&lt;br/&gt;&amp;gt; &#43;               - pk_script (p2wsh): 34 bytes&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;       output_pushme (option_simplified_commitment): 43 bytes&lt;br/&gt;&amp;gt; &#43;               - value: 8 bytes&lt;br/&gt;&amp;gt; &#43;               - var_int: 1 byte (pk_script length)&lt;br/&gt;&amp;gt; &#43;               - pk_script (p2wsh): 34 bytes&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;    htlc_output: 43 bytes&lt;br/&gt;&amp;gt;                 - value: 8 bytes&lt;br/&gt;&amp;gt;                 - var_int: 1 byte (pk_script length)&lt;br/&gt;&amp;gt;                 - pk_script (p2wsh): 34 bytes&lt;br/&gt;&amp;gt; @@ -650,7 &#43;717,7 @@ The *expected weight* of a commitment transaction is&lt;br/&gt;&amp;gt; calculated as follows:&lt;br/&gt;&amp;gt;                 - flag: 1 byte&lt;br/&gt;&amp;gt;                 - marker: 1 byte&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -        commitment_transaction: 125 &#43; 43 * num-htlc-outputs bytes&lt;br/&gt;&amp;gt; &#43;        commitment_transaction (no option_simplified_commitment): 125 &#43;&lt;br/&gt;&amp;gt; 43 * num-htlc-outputs bytes&lt;br/&gt;&amp;gt;                 - version: 4 bytes&lt;br/&gt;&amp;gt;                 - witness_header &amp;lt;---- part of the witness data&lt;br/&gt;&amp;gt;                 - count_tx_in: 1 byte&lt;br/&gt;&amp;gt; @@ -663,15 &#43;730,32 @@ The *expected weight* of a commitment transaction is&lt;br/&gt;&amp;gt; calculated as follows:&lt;br/&gt;&amp;gt;                         ....htlc_output&amp;#39;s...&lt;br/&gt;&amp;gt;                 - lock_time: 4 bytes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &#43;        commitment_transaction (option_simplified_commitment): 223 &#43; 43 *&lt;br/&gt;&amp;gt; num-htlc-outputs bytes&lt;br/&gt;&amp;gt; &#43;               - version: 4 bytes&lt;br/&gt;&amp;gt; &#43;               - witness_header &amp;lt;---- part of the witness data&lt;br/&gt;&amp;gt; &#43;               - count_tx_in: 1 byte&lt;br/&gt;&amp;gt; &#43;               - tx_in: 41 bytes&lt;br/&gt;&amp;gt; &#43;                       funding_input&lt;br/&gt;&amp;gt; &#43;               - count_tx_out: 1 byte&lt;br/&gt;&amp;gt; &#43;               - tx_out: 172 &#43; 43 * num-htlc-outputs bytes&lt;br/&gt;&amp;gt; &#43;                       output_paying_to_remote,&lt;br/&gt;&amp;gt; &#43;                       output_paying_to_local,&lt;br/&gt;&amp;gt; &#43;                       output_pushme,&lt;br/&gt;&amp;gt; &#43;                       output_pushme,&lt;br/&gt;&amp;gt; &#43;                       ....htlc_output&amp;#39;s...&lt;br/&gt;&amp;gt; &#43;               - lock_time: 4 bytes&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;  Multiplying non-witness data by 4 results in a weight of:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -       // 500 &#43; 172 * num-htlc-outputs weight&lt;br/&gt;&amp;gt; &#43;       // 500 &#43; 172 * num-htlc-outputs weight (no&lt;br/&gt;&amp;gt; option_simplified_commitment)&lt;br/&gt;&amp;gt; &#43;       // 892 &#43; 172 * num-htlc-outputs weight&lt;br/&gt;&amp;gt; (option_simplified_commitment)&lt;br/&gt;&amp;gt;         commitment_transaction_weight = 4 * commitment_transaction&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         // 224 weight&lt;br/&gt;&amp;gt;         witness_weight = witness_header &#43; witness&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -       overall_weight = 500 &#43; 172 * num-htlc-outputs &#43; 224 weight&lt;br/&gt;&amp;gt; &#43;       overall_weight (no option_simplified_commitment) = 500 &#43; 172 *&lt;br/&gt;&amp;gt; num-htlc-outputs &#43; 224 weight&lt;br/&gt;&amp;gt; &#43;       overall_weight (option_simplified_commitment) = 892 &#43; 172 *&lt;br/&gt;&amp;gt; num-htlc-outputs &#43; 224 weight&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ## Expected Weight of HTLC-timeout and HTLC-success Transactions&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; diff --git a/05-onchain.md b/05-onchain.md&lt;br/&gt;&amp;gt; index 231c209..c5fb5e1 100644&lt;br/&gt;&amp;gt; --- a/05-onchain.md&lt;br/&gt;&amp;gt; &#43;&#43;&#43; b/05-onchain.md&lt;br/&gt;&amp;gt; @@ -89,21 &#43;89,29 @@ trigger any action.&lt;br/&gt;&amp;gt;  # Commitment Transaction&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  The local and remote nodes each hold a *commitment transaction*. Each of&lt;br/&gt;&amp;gt; these&lt;br/&gt;&amp;gt; -commitment transactions has four types of outputs:&lt;br/&gt;&amp;gt; &#43;commitment transactions has six types of outputs:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  1. _local node&amp;#39;s main output_: Zero or one output, to pay to the *local&lt;br/&gt;&amp;gt; node&amp;#39;s*&lt;br/&gt;&amp;gt; -commitment pubkey.&lt;br/&gt;&amp;gt; &#43;delayed pubkey.&lt;br/&gt;&amp;gt;  2. _remote node&amp;#39;s main output_: Zero or one output, to pay to the *remote&lt;br/&gt;&amp;gt; node&amp;#39;s*&lt;br/&gt;&amp;gt; -commitment pubkey.&lt;br/&gt;&amp;gt; &#43;pubkey.&lt;br/&gt;&amp;gt; &#43;1. _local node&amp;#39;s push output_: Zero or one output, to pay to the *local&lt;br/&gt;&amp;gt; node&amp;#39;s*&lt;br/&gt;&amp;gt; &#43;delayed pubkey.&lt;br/&gt;&amp;gt; &#43;2. _remote node&amp;#39;s push output_: Zero or one output, to pay to the *remote&lt;br/&gt;&amp;gt; node&amp;#39;s*&lt;br/&gt;&amp;gt; &#43;pubkey.&lt;br/&gt;&amp;gt;  3. _local node&amp;#39;s offered HTLCs_: Zero or more pending payments (*HTLCs*),&lt;br/&gt;&amp;gt; to pay&lt;br/&gt;&amp;gt;  the *remote node* in return for a payment preimage.&lt;br/&gt;&amp;gt;  4. _remote node&amp;#39;s offered HTLCs_: Zero or more pending payments&lt;br/&gt;&amp;gt; (*HTLCs*), to&lt;br/&gt;&amp;gt;  pay the *local node* in return for a payment preimage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  To incentivize the local and remote nodes to cooperate, an&lt;br/&gt;&amp;gt; `OP_CHECKSEQUENCEVERIFY`&lt;br/&gt;&amp;gt; -relative timeout encumbers the *local node&amp;#39;s outputs* (in the *local&lt;br/&gt;&amp;gt; node&amp;#39;s&lt;br/&gt;&amp;gt; &#43;relative timeout encumbers some outputs: the *local node&amp;#39;s outputs* (in&lt;br/&gt;&amp;gt; the *local node&amp;#39;s&lt;br/&gt;&amp;gt;  commitment transaction*) and the *remote node&amp;#39;s outputs* (in the *remote&lt;br/&gt;&amp;gt; node&amp;#39;s&lt;br/&gt;&amp;gt; -commitment transaction*). So for example, if the local node publishes its&lt;br/&gt;&amp;gt; &#43;commitment transaction*). If `option_simplified_commitment` applies&lt;br/&gt;&amp;gt; &#43;to the commitment transaction, then the *to_remote* output of each&lt;br/&gt;&amp;gt; commitment is&lt;br/&gt;&amp;gt; &#43;identically encumbered, for fairness.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;Without `option_simplified_commitment`, if the local node publishes its&lt;br/&gt;&amp;gt;  commitment transaction, it will have to wait to claim its own funds,&lt;br/&gt;&amp;gt;  whereas the remote node will have immediate access to its own funds. As a&lt;br/&gt;&amp;gt;  consequence, the two commitment transactions are not identical, but they&lt;br/&gt;&amp;gt; are&lt;br/&gt;&amp;gt; @@ -140,6 &#43;148,11 @@ A node:&lt;br/&gt;&amp;gt;        - otherwise:&lt;br/&gt;&amp;gt;          - MUST use the *last commitment transaction*, for which it has a&lt;br/&gt;&amp;gt;          signature, to perform a *unilateral close*.&lt;br/&gt;&amp;gt; &#43;      - MUST spend any `to_local_pushme` output, providing sufficient&lt;br/&gt;&amp;gt; fees as incentive to include the commitment transaction in a block&lt;br/&gt;&amp;gt; &#43;           - SHOULD use [replace-by-fee](&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki&lt;/a&gt;) or other&lt;br/&gt;&amp;gt; mechanism on the spending transaction if it proves insufficient for timely&lt;br/&gt;&amp;gt; inclusion in a block.&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;A node:&lt;br/&gt;&amp;gt; &#43;  - MAY monitor the blockchain for unspent `to_local_pushme` and&lt;br/&gt;&amp;gt; `to_remote_pushme` outputs and try to spend them after 10 confirmations.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ## Rationale&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @@ -154,7 &#43;167,8 @@ need not consume resources monitoring the channel&lt;br/&gt;&amp;gt; state.&lt;br/&gt;&amp;gt;  There exists a bias towards preferring mutual closes over unilateral&lt;br/&gt;&amp;gt; closes,&lt;br/&gt;&amp;gt;  because outputs of the former are unencumbered by a delay and are directly&lt;br/&gt;&amp;gt;  spendable by wallets. In addition, mutual close fees tend to be less&lt;br/&gt;&amp;gt; exaggerated&lt;br/&gt;&amp;gt; -than those of commitment transactions. So, the only reason not to use the&lt;br/&gt;&amp;gt; &#43;than those of commitment transactions (or in the case of&lt;br/&gt;&amp;gt; `option_simplified_commitment`,&lt;br/&gt;&amp;gt; &#43;the commitment transaction may require a child transaction to cause it to&lt;br/&gt;&amp;gt; be mined). So, the only reason not to use the&lt;br/&gt;&amp;gt;  signature from `closing_signed` would be if the fee offered was too small&lt;br/&gt;&amp;gt; for&lt;br/&gt;&amp;gt;  it to be processed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; diff --git a/09-features.md b/09-features.md&lt;br/&gt;&amp;gt; index d06fcff..caea38b 100644&lt;br/&gt;&amp;gt; --- a/09-features.md&lt;br/&gt;&amp;gt; &#43;&#43;&#43; b/09-features.md&lt;br/&gt;&amp;gt; @@ -26,6 &#43;26,7 @@ These flags may only be used in the `init` message:&lt;br/&gt;&amp;gt;  | 3  | `initial_routing_sync` | Indicates that the sending node needs a&lt;br/&gt;&amp;gt; complete routing information dump | [BOLT&lt;br/&gt;&amp;gt; #7](07-routing-gossip.md#initial-sync) |&lt;br/&gt;&amp;gt;  | 4/5  | `option_upfront_shutdown_script` | Commits to a shutdown&lt;br/&gt;&amp;gt; scriptpubkey when opening channel | [BOLT&lt;br/&gt;&amp;gt; #2](02-peer-protocol.md#the-open_channel-message) |&lt;br/&gt;&amp;gt;  | 6/7  | `gossip_queries`           | More sophisticated gossip control |&lt;br/&gt;&amp;gt; [BOLT #7](07-routing-gossip.md#query-messages) |&lt;br/&gt;&amp;gt; &#43;| 8/9  | `option_simplified_commitment`           | Simplified commitment&lt;br/&gt;&amp;gt; transactions | [BOLT #3](03-transactions.md) |&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ## Assigned `globalfeatures` flags&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&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/20191026/fe4f49f3/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20191026/fe4f49f3/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:56:52&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdwnaamctzqzdqsejjuua8pddwjh27ek32tmdrxq23y6mxrkd5saczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txpkd6sn</id>
    
      <title type="html">📅 Original date posted:2019-06-12 📝 Original message: Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdwnaamctzqzdqsejjuua8pddwjh27ek32tmdrxq23y6mxrkd5saczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txpkd6sn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp5k57ecs4q6uxa279sjw8xxqdu3v9svf3kuzvhgcd390f55dncls3xffv2&#39;&gt;nevent1q…ffv2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-12&lt;br/&gt;📝 Original message:&lt;br/&gt;Hello list,&lt;br/&gt;&lt;br/&gt;In Lightning, the reliability of payments is dependent on the reliability&lt;br/&gt;of the chosen route. Information about previous payment attempts helps to&lt;br/&gt;select better routes and improve the payment experience. Therefore&lt;br/&gt;implementations usually track the past performance of nodes and channels.&lt;br/&gt;This can be as simple as a black list that contains previously failed&lt;br/&gt;channels.&lt;br/&gt;&lt;br/&gt;In order for this mechanism to be most effective, it is important to know&lt;br/&gt;which node is to blame for a non-ideal payment attempt.&lt;br/&gt;&lt;br/&gt;Non-ideal payment attempts are not only failed payment attempts (either&lt;br/&gt;instantly failed or after a delay), but also successful payments for which&lt;br/&gt;it took a long time to receive the `htlc_fulfill` message.&lt;br/&gt;&lt;br/&gt;For non-ideal payment attempts, we are currently not always able to&lt;br/&gt;determine the node that should be penalized. In particular:&lt;br/&gt;* If an attempt takes long to complete (settle or fail), we have no&lt;br/&gt;information that points us to the source of the delay.&lt;br/&gt;* Nodes can return a corrupt failure message. When this message arrives at&lt;br/&gt;the sender after a number of encryption rounds, the sender is no longer&lt;br/&gt;able to pinpoint the node that failed the payment.&lt;br/&gt;&lt;br/&gt;A potential solution is to change the failure message such that every hop&lt;br/&gt;along the backward path adds an hmac to the message (currently only the&lt;br/&gt;error source authenticates the message). This allows the source of a&lt;br/&gt;corruption to be narrowed down to a pair of nodes, which is enough to&lt;br/&gt;properly apply a penalty.&lt;br/&gt;&lt;br/&gt;In addition to that, all hops could add two timestamps to the failure&lt;br/&gt;message: the htlc add time and the htlc fail time. Using this information,&lt;br/&gt;the sender of the payment can identify the source of the delay down to,&lt;br/&gt;again, a pair of nodes. Those timestamps could be added to the settle&lt;br/&gt;message as well, to also allow diagnostics on slow settled payments.&lt;br/&gt;&lt;br/&gt;The challenge here is to design the failure message format in such a way&lt;br/&gt;that hops cannot learn their position in the path. Just appending&lt;br/&gt;timestamps and hmacs to a variable length message would reveal the distance&lt;br/&gt;between a node and the error source.&lt;br/&gt;&lt;br/&gt;A fixed length message in which hops shift some previous (unused) data out&lt;br/&gt;from the message to create space to add their own data does not seem to&lt;br/&gt;work. What happens is that the earlier nodes calculate their hmac over data&lt;br/&gt;that is shifted out and cannot be recovered anymore by the sender. The&lt;br/&gt;sender has no way to verify the hmac in that case. Regenerating the shifted&lt;br/&gt;out data (similar to deterministic padding on the forward path) isn&amp;#39;t a&lt;br/&gt;solution either, because a node may modify that (unused) data before&lt;br/&gt;passing the message on. This would invalidate all hmacs, denying the sender&lt;br/&gt;from locating the responsible node.&lt;br/&gt;&lt;br/&gt;One space-inefficient solution is to have every hop add hmacs for every&lt;br/&gt;possible (real) message length, but this would require n^2 hmacs in total&lt;br/&gt;(20*20*32 bytes). Half of these could be discarded along the way, but it&lt;br/&gt;would still leave 10*20*32=6.4kb of hmacs.&lt;br/&gt;&lt;br/&gt;Another direction might be to use a variable length message, but have the&lt;br/&gt;error source add a seemingly random length padding. The actual length could&lt;br/&gt;be deterministically derived from the shared secret, so that the erring&lt;br/&gt;node cannot just not add padding. This obfuscates the distance to the error&lt;br/&gt;source somewhat, but still reveals a bit of information. If one knows that&lt;br/&gt;the padding length is somewhere between 0 and 20 blocks worth of bytes, a&lt;br/&gt;message length of say 25 blocks would reveal that the err source is at&lt;br/&gt;least 5 hops away. It could be a fair trade-off though.&lt;br/&gt;&lt;br/&gt;An alternative to all of this is to try to locate bad nodes by probing with&lt;br/&gt;different route lengths and coming from different angles. This will however&lt;br/&gt;require more attempts and more complex processing of the outcomes. There is&lt;br/&gt;also a level of indirectness because not all information is gathered in a&lt;br/&gt;single roundtrip. And in addition to that, a malicious node may somehow act&lt;br/&gt;differently if it manages to recognize the probes.&lt;br/&gt;&lt;br/&gt;I&amp;#39;d be interested to hear your opinions about the importance of being able&lt;br/&gt;to locate bad nodes irrefutably, as well as ideas around the failure&lt;br/&gt;message format.&lt;br/&gt;&lt;br/&gt;Joost&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/20190612/f110fbb1/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20190612/f110fbb1/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:55:07&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsz0lyrwjm72hkq23cmjfgg02txnwqua4skkf98gfrfj6gvnpq8t6gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txdguwl5</id>
    
      <title type="html">📅 Original date posted:2023-06-02 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsz0lyrwjm72hkq23cmjfgg02txnwqua4skkf98gfrfj6gvnpq8t6gzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txdguwl5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstdpn30m5tdsth33wwhmjgmfrsl24zq6gqpstkvx0et7vx24zxpaqvyrtvy&#39;&gt;nevent1q…rtvy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-02&lt;br/&gt;🗒️ Summary of this message: Proposal to make the taproot annex available in a non-structured form by defining any annex that begins with &amp;#39;0&amp;#39; as free-form, allowing immediate utilization and future flexibility.&lt;br/&gt;📝 Original message:Hi,&lt;br/&gt;&lt;br/&gt;As it stands, the taproot annex is consensus valid but non-standard. The&lt;br/&gt;conversations around standardization seem to be leaning towards the&lt;br/&gt;adoption of a flexible Type-Length-Value (TLV) format [1]. There&amp;#39;s no doubt&lt;br/&gt;that this approach has considerable potential. However, settling on an&lt;br/&gt;exact format may require a significant amount of time.&lt;br/&gt;&lt;br/&gt;In the interim, the benefits of making the annex available in a&lt;br/&gt;non-structured form are both evident and immediate. By allowing developers&lt;br/&gt;to utilize the taproot annex without delay, we can take advantage of its&lt;br/&gt;features today, without the need to wait for the finalization of a more&lt;br/&gt;lengthy standardization process.&lt;br/&gt;&lt;br/&gt;With this in view, I am proposing that we define any annex that begins with&lt;br/&gt;&amp;#39;0&amp;#39; as free-form, without any additional constraints. This strategy offers&lt;br/&gt;several distinct benefits:&lt;br/&gt;&lt;br/&gt;Immediate utilization: This opens the door for developers to make use of&lt;br/&gt;the taproot annex for a variety of applications straight away, thus&lt;br/&gt;eliminating the need to wait for the implementation of TLV or any other&lt;br/&gt;structured format.&lt;br/&gt;&lt;br/&gt;Future flexibility: Assigning &amp;#39;0&amp;#39;-beginning annexes as free-form keeps our&lt;br/&gt;options open for future developments and structure improvements. As we&lt;br/&gt;forge ahead in determining the best way to standardize the annex, this&lt;br/&gt;strategy ensures we do not limit ourselves by setting its structure in&lt;br/&gt;stone prematurely.&lt;br/&gt;&lt;br/&gt;Chainspace efficiency: Non-structured data may require fewer bytes compared&lt;br/&gt;to a probable TLV format, which would necessitate the encoding of length&lt;br/&gt;even when there&amp;#39;s only a single field.&lt;br/&gt;&lt;br/&gt;In conclusion, adopting this approach will immediately broaden the&lt;br/&gt;utilization scope of the taproot annex while preserving the possibility of&lt;br/&gt;transitioning to a more structured format in the future. I believe this is&lt;br/&gt;a pragmatic and efficient route, one that can yield substantial benefits in&lt;br/&gt;both the short and long term.&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1381&#34;&gt;https://github.com/bitcoin/bips/pull/1381&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/bitcoin-dev/attachments/20230602/4411b85b/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230602/4411b85b/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:22:06&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs08skrawsgah7qr0x23kfvexxrgtegk8jsu8j53awna7mfrqsgwcgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txet7m80</id>
    
      <title type="html">📅 Original date posted:2023-05-30 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs08skrawsgah7qr0x23kfvexxrgtegk8jsu8j53awna7mfrqsgwcgzyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0txet7m80" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx6mr6g87dvu4f5r3v27cv7x3hvlra57tg2a0q9havlhd99kuhckcdfqg0j&#39;&gt;nevent1q…qg0j&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-30&lt;br/&gt;🗒️ Summary of this message: Block templates and weak blocks can be relayed through a more flexible Nostr relay, improving fee estimation and providing valuable insights for miners and full nodes. This could also be a playground for experimenting with various relay and mining ideas.&lt;br/&gt;📝 Original message:Hi David,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; A block template is an ordered list of raw transactions that can all be&lt;br/&gt;&amp;gt; included in the next block (with some space reserved for a coinbase&lt;br/&gt;&amp;gt; transaction).  A full node can validate those transactions and calculate&lt;br/&gt;&amp;gt; how much fee they pay.  A Nostr relay can simply relay almost[1] any&lt;br/&gt;&amp;gt; template that pays more fees than the previous best template it saw for&lt;br/&gt;&amp;gt; the next block.  That can be more flexible than the current&lt;br/&gt;&amp;gt; implementation of submitblock with package relay which still enforces a&lt;br/&gt;&amp;gt; lot of the rules that helps keep a regular relay node safe from DoS and&lt;br/&gt;&amp;gt; a miner node able to select mineable transactions quickly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Interesting idea! This would also make it easy for external services to try&lt;br/&gt;to do the best possible block building using advanced algorithms. Miners&lt;br/&gt;would just select the best template available from various sources&lt;br/&gt;including nostr.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; A weak block is a block whose header doesn&amp;#39;t quite hash to low enough of&lt;br/&gt;&amp;gt; a value to be included on the chain.  It still takes an extraordinary&lt;br/&gt;&amp;gt; amount of hashrate to produce, so it&amp;#39;s inherently DoS resistant.  If&lt;br/&gt;&amp;gt; miners are producing block that include transactions not seen by typical&lt;br/&gt;&amp;gt; relay nodes, that can reduce the efficiency and effectiveness of BIP152&lt;br/&gt;&amp;gt; compact block relay, which hurts the profitability of miners of custom&lt;br/&gt;&amp;gt; blocks.  To compensate, miners could relay weak blocks through Nostr to&lt;br/&gt;&amp;gt; full nodes and other miners so that they could quickly relay and accept&lt;br/&gt;&amp;gt; complete blocks that later included the same custom transactions.  This&lt;br/&gt;&amp;gt; would also help fee estimation and provide valuable insights to those&lt;br/&gt;&amp;gt; trying to get their transactions included into the next block.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I believe this would be useful right away, wouldn&amp;#39;t it? Looking at&lt;br/&gt;mempool.space&amp;#39;s block audit, there are definitely blocks that have a&lt;br/&gt;&amp;#34;surprising&amp;#34; content and might take long to download.&lt;br/&gt;&lt;br/&gt;The anti-dos measures that you describe for both weak blocks and block&lt;br/&gt;templates seem very robust, but they would require a more intelligent nostr&lt;br/&gt;relay to enforce. Not sure if it is still allowed to call it nostr at that&lt;br/&gt;point. Perhaps it becomes more of a specialised bitcoin relay. btcstr -&lt;br/&gt;&amp;#34;bitcoin stuff transmitted by relays&amp;#34;.&lt;br/&gt;&lt;br/&gt;Regarding size, the block template and weak block could both be sent in&lt;br/&gt;&amp;gt; BIP152 compact block format as a diff against the expected contents of a&lt;br/&gt;&amp;gt; typical node, allowing Alice to send just a small amount of additional&lt;br/&gt;&amp;gt; data for relay over what she&amp;#39;d have to send anyway for each transaction&lt;br/&gt;&amp;gt; in a package.  (Although it&amp;#39;s quite possible that BetterHash or Stratum&lt;br/&gt;&amp;gt; v2 have even better solutions, possibly already implemented.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Sounds like a great way to repurpose what already exists to reduce resource&lt;br/&gt;usage for these additional message types.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; If nothing else, I think Nostr could provide an interesting playground&lt;br/&gt;&amp;gt; for experimenting with various relay and mining ideas we&amp;#39;ve talked about&lt;br/&gt;&amp;gt; for years, so thanks again for working on this!&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think so too! The main question on my mind though is how to actually make&lt;br/&gt;this work. There is a bit of a chicken-egg problem here with users and&lt;br/&gt;miners possibly waiting for each other to adopt.&lt;br/&gt;&lt;br/&gt;Joost&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/bitcoin-dev/attachments/20230530/1f001ed5/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230530/1f001ed5/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:22:01&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsz50zh8vl5w9e7nzpdzhj6rmr0qatmk8vpp0d5e77zm0r08afzepczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx5an9j2</id>
    
      <title type="html">📅 Original date posted:2023-05-23 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsz50zh8vl5w9e7nzpdzhj6rmr0qatmk8vpp0d5e77zm0r08afzepczyrkrlvytxddef2kwxrgnrq0j45pgphumcd834xvr938zm28mzf0tx5an9j2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs077cdnshtfzmnnfhecc8xnmcgc75zhmdnqmwpc38evjayhmcp2sqlmu647&#39;&gt;nevent1q…u647&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-23&lt;br/&gt;🗒️ Summary of this message: A proposed alternative relay mechanism for Bitcoin transactions, called Nostr, could address limitations in the current P2P system and support non-standard transactions. Miners would listen for broadcasted transaction packages and insert them into their local mempool, potentially boosting the system&amp;#39;s resilience and democratizing access to miner mempools. Nostr could also delegate responsibility for dealing with DoS threats to relays and introduce more flexibility in the system. A prototype has been developed and demonstrated in a video.&lt;br/&gt;📝 Original message:Hi,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I write to get your thoughts on an alternative approach for Bitcoin&lt;br/&gt;transaction relay, addressing some of the limitations in the current&lt;br/&gt;peer-to-peer transaction relay system. To the best of my knowledge, the&lt;br/&gt;credit for the original concept goes to Ben Carman. I felt it would be&lt;br/&gt;beneficial to share the idea on this list to garner wider perspectives and&lt;br/&gt;feedback.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The existing peer-to-peer (P2P) transaction relay system comes with a set&lt;br/&gt;of limitations that may negatively impact applications, notably those like&lt;br/&gt;Lightning that make extensive use of pre-signed transactions. A key&lt;br/&gt;limitation lies in the system&amp;#39;s inability to relay transaction packages.&lt;br/&gt;This constraint can lead to HTLCs expiring before being swept, thereby&lt;br/&gt;risking fund losses. In addition, the P2P system falls short in supporting&lt;br/&gt;non-standard transactions, despite an established demand for such&lt;br/&gt;transactions in the marketplace.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Nostr, an open and decentralized network of relays for public and ephemeral&lt;br/&gt;messages between pseudonymous entities, could help address these&lt;br/&gt;shortcomings. With the standards defined in NIP-89 [1], it becomes possible&lt;br/&gt;to broadcast arbitrary Bitcoin transaction packages, overcoming one of the&lt;br/&gt;key hurdles in the current relay system.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;In this proposed alternative relay mechanism, miners would listen for these&lt;br/&gt;broadcasted transaction packages and insert the packages into their local&lt;br/&gt;mempool. They can take advantage of the `submitpackage` RPC, limited to&lt;br/&gt;safe topologies only - specifically child and direct parents, tree only&lt;br/&gt;[2]. This feature could serve as an interim solution for package relay&lt;br/&gt;until it becomes available through the traditional P2P method.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;A notable advantage of this approach is that it delegates the&lt;br/&gt;responsibility of dealing with Denial-of-Service (DoS) threats to the&lt;br/&gt;relays themselves. They could, for example, require a payment to mitigate&lt;br/&gt;such concerns. There are in fact paid nostr relays already in operation.&lt;br/&gt;This partitioning would result in a clear separation between the Bitcoin&lt;br/&gt;transaction layer and DoS protection, introducing more flexibility in the&lt;br/&gt;system and potentially boosting its resilience.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Implementing Nostr as a relay mechanism also has the potential to&lt;br/&gt;democratize access to miner mempools, thus leveling the playing field in&lt;br/&gt;the Bitcoin network. In the current state, those with direct connections or&lt;br/&gt;certain privileges can more readily submit transactions to miners, perhaps&lt;br/&gt;even through means as informal as email.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I have been working on a prototype of this concept (based on [3]) and have&lt;br/&gt;captured its workings in a demonstration video [4].&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Joost&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/nostr-protocol/nips/pull/476&#34;&gt;https://github.com/nostr-protocol/nips/pull/476&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/27609#issuecomment-1544414801&#34;&gt;https://github.com/bitcoin/bitcoin/pull/27609#issuecomment-1544414801&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/benthecarman/nostr-tx-broadcast&#34;&gt;https://github.com/benthecarman/nostr-tx-broadcast&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://twitter.com/joostjgr/status/1658487013237211155&#34;&gt;https://twitter.com/joostjgr/status/1658487013237211155&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/bitcoin-dev/attachments/20230523/6866548f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230523/6866548f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:22:00&#43;02:00</updated>
  </entry>

</feed>