<?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/npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd.rss" />
  <link href="https://nostr.ae/npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd" />
  <id>https://nostr.ae/npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqsv0ghgu50qgw0sgznusqjghx90thv4wqd2vh4lplqzuyt3lzey3kszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zz65f8q</id>
    
      <title type="html">📅 Original date posted:2023-10-17 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv0ghgu50qgw0sgznusqjghx90thv4wqd2vh4lplqzuyt3lzey3kszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zz65f8q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq7mwlfy4d92ucamqlf568wqd59x0gmhd4dlypen9vqns7zpnf4sgw9wsd9&#39;&gt;nevent1q…wsd9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-10-17&lt;br/&gt;🗒️ Summary of this message: At block height 100, node B forces the B-C channel onchain because the B-C HTLC timelock has expired without node C claiming it. However, the onchain feerates have risen and the transactions do not confirm. At block height 144, node A drops the A-B channel onchain and is able to recover the HTLC funds. Node C then broadcasts an HTLC-success transaction with high feerates that replaces the HTLC-timeout transaction, allowing C to get the value of the HTLC. Node B is no longer able to use the knowledge of the preimage.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Zeeman,&lt;br/&gt;&lt;br/&gt;&amp;gt; At block height 100, `B` notices the `B-&amp;gt;C` HTLC timelock is expired&lt;br/&gt;without `C` having claimed it, so `B` forces the `B====C` channel onchain.&lt;br/&gt;&amp;gt; However, onchain feerates have risen and the commitment transaction and&lt;br/&gt;HTLC-timeout transaction do not confirm.&lt;br/&gt;&lt;br/&gt;This is not that the HTLC-timeout does not confirm. It is replaced in&lt;br/&gt;cycles by C&amp;#39;s HTLC-preimage which is still valid after `B-&amp;gt;C` HTLC timelock&lt;br/&gt;has expired. And this HTLC-preimage is subsequently replaced itself.&lt;br/&gt;&lt;br/&gt;See the test here:&lt;br/&gt;&lt;a href=&#34;https://github.com/ariard/bitcoin/commit/19d61fa8cf22a5050b51c4005603f43d72f1efcf&#34;&gt;https://github.com/ariard/bitcoin/commit/19d61fa8cf22a5050b51c4005603f43d72f1efcf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; At block height 144, `B` is still not able to claim the `A-&amp;gt;B` HTLC, so&lt;br/&gt;`A` drops the `A====B` channel onchain.&lt;br/&gt;&amp;gt; As the fees are up-to-date, this confirms immediately and `A` is able to&lt;br/&gt;recover the HTLC funds.&lt;br/&gt;&amp;gt; However, the feerates of the `B====C` pre-signed transactions remain at&lt;br/&gt;the old, uncompetitive feerates.&lt;br/&gt;&lt;br/&gt;This is correct that A tries to recover the HTLC funds on the `A===B`&lt;br/&gt;channel.&lt;br/&gt;&lt;br/&gt;However, there is no need to consider the fee rates nor mempool congestion&lt;br/&gt;as the exploit lays on the replacement mechanism itself (in simple&lt;br/&gt;scenario).&lt;br/&gt;&lt;br/&gt;&amp;gt; At this point, `C` broadcasts an HTLC-success transaction with high&lt;br/&gt;feerates that CPFPs the commitment tx.&lt;br/&gt;&amp;gt; However, it replaces the HTLC-timeout transaction, which is at the old,&lt;br/&gt;low feerate.&lt;br/&gt;&amp;gt; `C` is thus able to get the value of the HTLC, but `B` is now no longer&lt;br/&gt;able to use the knowledge of the preimage, as its own incoming HTLC was&lt;br/&gt;already confirmed as claimed by `A`.&lt;br/&gt;&lt;br/&gt;This is correct that `C` broadcasts an HTLC-success transaction at block&lt;br/&gt;height 144.&lt;br/&gt;&lt;br/&gt;However `C` broadcasts this high feerate transaction at _every block_&lt;br/&gt;between blocks 100 and 144 to replace B&amp;#39;s HTLC-timeout transaction.&lt;br/&gt;&lt;br/&gt;&amp;gt; Let me also explain to non-Lightning experts why HTLC-timeout is&lt;br/&gt;presigned in this case and why `B` cannot feebump it.&lt;br/&gt;&lt;br/&gt;Note `B` can feebump the HTLC-timeout for anchor output channels thanks to&lt;br/&gt;sighash_single | anyonecanpay on C&amp;#39;s signature.&lt;br/&gt;&lt;br/&gt;Le mar. 17 oct. 2023 à 11:34, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Antoine et al.,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let me try to rephrase the core of the attack.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There exists these nodes on the LN (letters `A`, `B`, and `C` are nodes,&lt;br/&gt;&amp;gt; `==` are channels):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     A ===== B ===== C&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; `A` routes `A-&amp;gt;B-&amp;gt;C`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The timelocks, for example, could be:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    A-&amp;gt;B timeelock = 144&lt;br/&gt;&amp;gt;    B-&amp;gt;C timelock = 100&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The above satisfies the LN BOLT requirements, as long as `B` has a&lt;br/&gt;&amp;gt; `cltv_expiry_delta` of 44 or lower.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After `B` forwards the HTLC `B-&amp;gt;C`, C suddenly goes offline, and all the&lt;br/&gt;&amp;gt; signed transactions --- commitment transaction and HTLC-timeout&lt;br/&gt;&amp;gt; transactions --- are &amp;#34;stuck&amp;#34; at the feerate at the time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At block height 100, `B` notices the `B-&amp;gt;C` HTLC timelock is expired&lt;br/&gt;&amp;gt; without `C` having claimed it, so `B` forces the `B====C` channel onchain.&lt;br/&gt;&amp;gt; However, onchain feerates have risen and the commitment transaction and&lt;br/&gt;&amp;gt; HTLC-timeout transaction do not confirm.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the mean time, `A` is still online with `B` and updates the onchain&lt;br/&gt;&amp;gt; fees of the `A====B` channel pre-signed transactions (commitment tx and&lt;br/&gt;&amp;gt; HTLC-timeout tx) to the latest.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At block height 144, `B` is still not able to claim the `A-&amp;gt;B` HTLC, so&lt;br/&gt;&amp;gt; `A` drops the `A====B` channel onchain.&lt;br/&gt;&amp;gt; As the fees are up-to-date, this confirms immediately and `A` is able to&lt;br/&gt;&amp;gt; recover the HTLC funds.&lt;br/&gt;&amp;gt; However, the feerates of the `B====C` pre-signed transactions remain at&lt;br/&gt;&amp;gt; the old, uncompetitive feerates.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At this point, `C` broadcasts an HTLC-success transaction with high&lt;br/&gt;&amp;gt; feerates that CPFPs the commitment tx.&lt;br/&gt;&amp;gt; However, it replaces the HTLC-timeout transaction, which is at the old,&lt;br/&gt;&amp;gt; low feerate.&lt;br/&gt;&amp;gt; `C` is thus able to get the value of the HTLC, but `B` is now no longer&lt;br/&gt;&amp;gt; able to use the knowledge of the preimage, as its own incoming HTLC was&lt;br/&gt;&amp;gt; already confirmed as claimed by `A`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is the above restatement accurate?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ----&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let me also explain to non-Lightning experts why HTLC-timeout is presigned&lt;br/&gt;&amp;gt; in this case and why `B` cannot feebump it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the Poon-Dryja mechanism, the HTLCs are &amp;#34;infected&amp;#34; by the Poon-Dryja&lt;br/&gt;&amp;gt; penalty case, and are not plain HTLCs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A plain HTLC offerred by `B` to `C` would look like this:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     (B &amp;amp;&amp;amp; OP_CLTV) || (C &amp;amp;&amp;amp; OP_HASH160)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, on the commitment transaction held by `B`, it would be infected&lt;br/&gt;&amp;gt; by the penalty case in this way:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     (B &amp;amp;&amp;amp; C &amp;amp;&amp;amp; OP_CLTV) || (C &amp;amp;&amp;amp; OP_HASH160) || (C &amp;amp;&amp;amp; revocation)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are two changes:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * The addition of a revocation branch `C &amp;amp;&amp;amp; revocation`.&lt;br/&gt;&amp;gt; * The branch claimable by `B` in the &amp;#34;plain&amp;#34; HTLC (`B &amp;amp;&amp;amp; OP_CLTV`) also&lt;br/&gt;&amp;gt; includes `C`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; These are necessary in case `B` tries to cheat and this HTLC is on an old,&lt;br/&gt;&amp;gt; revoked transaction.&lt;br/&gt;&amp;gt; If the revoked transaction is *really* old, the `OP_CLTV` would already&lt;br/&gt;&amp;gt; impose a timelock far in the past.&lt;br/&gt;&amp;gt; This means that a plain `B &amp;amp;&amp;amp; OP_CLTV` branch can be claimed by `B` if it&lt;br/&gt;&amp;gt; retained this very old revoked transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To prevent that, `C` is added to the `B &amp;amp;&amp;amp; OP_CLTV` branch.&lt;br/&gt;&amp;gt; We also introduce an HTLC-timeout transaction, which spends the `B &amp;amp;&amp;amp; C &amp;amp;&amp;amp;&lt;br/&gt;&amp;gt; OP_CLTV` branch, and outputs to:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     (B &amp;amp;&amp;amp; OP_CSV) || (C &amp;amp;&amp;amp; revocation)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, even if `B` held onto a very old revoked commitment transaction and&lt;br/&gt;&amp;gt; attempts to spend the timelock branch (because the `OP_CLTV` is for an old&lt;br/&gt;&amp;gt; blockheight), it still has to contend with a new output with a *relative*&lt;br/&gt;&amp;gt; timelock.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unfortunately, this means that the HTLC-timeout transaction is pre-signed,&lt;br/&gt;&amp;gt; and has a specific feerate.&lt;br/&gt;&amp;gt; In order to change the feerate, both `B` and `C` have to agree to re-sign&lt;br/&gt;&amp;gt; the HTLC-timeout transaction at the higher feerate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, the HTLC-success transaction in this case spends the plain `(C &amp;amp;&amp;amp;&lt;br/&gt;&amp;gt; OP_HASH160)` branch, which only involves `C`.&lt;br/&gt;&amp;gt; This allows `C` to feebump the HTLC-success transaction arbitrarily even&lt;br/&gt;&amp;gt; if `B` does not cooperate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While anchor outputs can be added to the HTLC-timeout transaction as well,&lt;br/&gt;&amp;gt; `C` has a greater advantage here due to being able to RBF the HTLC-timeout&lt;br/&gt;&amp;gt; out of the way (1 transaction), while `B` has to get both HTLC-timeout and&lt;br/&gt;&amp;gt; a CPFP-RBF of the anchor output of the HTLC-timeout transaction (2&lt;br/&gt;&amp;gt; transactions).&lt;br/&gt;&amp;gt; `C` thus requires a smaller fee to achieve a particular feerate due to&lt;br/&gt;&amp;gt; having to push a smaller number of bytes compared to `B`.&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;-------------- 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/20231017/e68491ea/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20231017/e68491ea/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-10-18T15:02:08&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9wsd56uge8engxk0ekys4tp3raw6xzemwzrz3xwmgwqcm7xmgpfgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zuf2d7q</id>
    
      <title type="html">📅 Original date posted:2023-10-16 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9wsd56uge8engxk0ekys4tp3raw6xzemwzrz3xwmgwqcm7xmgpfgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zuf2d7q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr9rmczvly2hpwtcewshekzmpg5mx4falg9xsxnptveywtqtzxq5cw4sk67&#39;&gt;nevent1q…sk67&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-10-16&lt;br/&gt;🗒️ Summary of this message: Cross-posting mempool issues have exposed lightning channels to the risk of loss of funds, potentially affecting other multi-party bitcoin applications. Mitigations have been implemented, but their effectiveness against advanced replacement cycling attacks is still uncertain.&lt;br/&gt;📝 Original message:&lt;br/&gt;(cross-posting mempool issues identified are exposing lightning chan to&lt;br/&gt;loss of funds risks, other multi-party bitcoin apps might be affected)&lt;br/&gt;&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;End of last year (December 2022), amid technical discussions on eltoo&lt;br/&gt;payment channels and incentives compatibility of the mempool anti-DoS&lt;br/&gt;rules, a new transaction-relay jamming attack affecting lightning channels&lt;br/&gt;was discovered.&lt;br/&gt;&lt;br/&gt;After careful analysis, it turns out this attack is practical and&lt;br/&gt;immediately exposed lightning routing hops carrying HTLC traffic to loss of&lt;br/&gt;funds security risks, both legacy and anchor output channels. A potential&lt;br/&gt;exploitation plausibly happening even without network mempools congestion.&lt;br/&gt;&lt;br/&gt;Mitigations have been designed, implemented and deployed by all major&lt;br/&gt;lightning implementations during the last months.&lt;br/&gt;&lt;br/&gt;Please find attached the release numbers, where the mitigations should be&lt;br/&gt;present:&lt;br/&gt;- LDK: v0.0.118 - CVE-2023 -40231&lt;br/&gt;- Eclair: v0.9.0 - CVE-2023-40232&lt;br/&gt;- LND: v.0.17.0-beta - CVE-2023-40233&lt;br/&gt;- Core-Lightning: v.23.08.01 - CVE-2023-40234&lt;br/&gt;&lt;br/&gt;While neither replacement cycling attacks have been observed or reported in&lt;br/&gt;the wild since the last ~10 months or experimented in real-world conditions&lt;br/&gt;on bitcoin mainet, functional test is available exercising the affected&lt;br/&gt;lightning channel against bitcoin core mempool (26.0 release cycle).&lt;br/&gt;&lt;br/&gt;It is understood that a simple replacement cycling attack does not demand&lt;br/&gt;privileged capabilities from an attacker (e.g no low-hashrate power) and&lt;br/&gt;only access to basic bitcoin and lightning software. Yet I still think&lt;br/&gt;executing such an attack successfully requests a fair amount of bitcoin&lt;br/&gt;technical know-how and decent preparation.&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding of those issues, it is yet to be determined if the&lt;br/&gt;mitigations deployed are robust enough in face of advanced replacement&lt;br/&gt;cycling attackers, especially ones able to combine different classes of&lt;br/&gt;transaction-relay jamming such as pinnings or vetted with more privileged&lt;br/&gt;capabilities.&lt;br/&gt;&lt;br/&gt;Please find a list of potential affected bitcoin applications in this full&lt;br/&gt;disclosure report using bitcoin script timelocks or multi-party&lt;br/&gt;transactions, albeit no immediate security risk exposure as severe as the&lt;br/&gt;ones affecting lightning has been identified. Only cursory review of&lt;br/&gt;non-lightning applications has been conducted so far.&lt;br/&gt;&lt;br/&gt;There is a paper published summarizing replacement cycling attacks on the&lt;br/&gt;lightning network:&lt;br/&gt;&lt;a href=&#34;https://github.com/ariard/mempool-research/blob/2023-10-replacement-paper/replacement-cycling.pdf&#34;&gt;https://github.com/ariard/mempool-research/blob/2023-10-replacement-paper/replacement-cycling.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt; ## Problem&lt;br/&gt;&lt;br/&gt;A lightning node allows HTLCs forwarding (in bolt3&amp;#39;s parlance accepted HTLC&lt;br/&gt;on incoming link and offered HTLC on outgoing link) should settle the&lt;br/&gt;outgoing state with either a success or timeout before the incoming state&lt;br/&gt;timelock becomes final and an asymmetric defavorable settlement might&lt;br/&gt;happen (cf &amp;#34;Flood &amp;amp; Loot: A Systematic Attack on The Lightning Network&amp;#34;&lt;br/&gt;section 2.3 for a classical exposition of this lightning security property).&lt;br/&gt;&lt;br/&gt;Failure to satisfy this settlement requirement exposes a forwarding hop to&lt;br/&gt;a loss of fund risk where the offered HTLC is spent by the outgoing link&lt;br/&gt;counterparty&amp;#39;s HTLC-preimage and the accepted HTLC is spent by the incoming&lt;br/&gt;link counterparty&amp;#39;s HTLC-timeout.&lt;br/&gt;&lt;br/&gt;The specification mandates the incoming HTLC expiration timelock to be&lt;br/&gt;spaced out by an interval of `cltv_expiry_delta` from the outgoing HTLC&lt;br/&gt;expiration timelock, this exact interval value being an implementation and&lt;br/&gt;node policy setting. As a minimal value, the specification recommends 34&lt;br/&gt;blocks of interval. If the timelock expiration I of the inbound HTLC is&lt;br/&gt;equal to 100 from chain tip, the timelock expiration O of the outbound HTLC&lt;br/&gt;must be equal to 66 blocks from chain tip, giving a reasonable buffer of&lt;br/&gt;reaction to the lightning forwarding node.&lt;br/&gt;&lt;br/&gt;In the lack of cooperative off-chain settlement of the HTLC on the outgoing&lt;br/&gt;link negotiated with the counterparty (either `update_fulfill_htlc` or&lt;br/&gt;`update_fail_htlc`) when O is reached, the lightning node should broadcast&lt;br/&gt;its commitment transaction. Once the commitment is confirmed (if anchor and&lt;br/&gt;the 1 CSV encumbrance is present), the lightning node broadcasts and&lt;br/&gt;confirms its HTLC-timeout before I height is reached.&lt;br/&gt;&lt;br/&gt;Here enter a replacement cycling attack. A malicious channel counterparty&lt;br/&gt;can broadcast its HTLC-preimage transaction with a higher absolute fee and&lt;br/&gt;higher feerate than the honest HTLC-timeout of the victim lightning node&lt;br/&gt;and triggers a replacement. Both for legacy and anchor output channels, a&lt;br/&gt;HTLC-preimage on a counterparty commitment transaction is malleable, i.e&lt;br/&gt;additional inputs or outputs can be added. The HTLC-preimage spends an&lt;br/&gt;unconfirmed and unrelated to the channel parent transaction M and conflicts&lt;br/&gt;its child.&lt;br/&gt;&lt;br/&gt;As the HTLC-preimage spends an unconfirmed input that was already included&lt;br/&gt;in the unconfirmed and unrelated child transaction (rule 2), pays an&lt;br/&gt;absolute higher fee of at least the sum paid by the HTLC-timeout and child&lt;br/&gt;transaction (rule 3) and the HTLC-preimage feerate is greater than all&lt;br/&gt;directly conflicting transactions (rule 6), the replacement is accepted.&lt;br/&gt;The honest HTLC-timeout is evicted out of the mempool.&lt;br/&gt;&lt;br/&gt;In an ulterior move, the malicious counterparty can replace the parent&lt;br/&gt;transaction itself with another candidate N satisfying the replacement&lt;br/&gt;rules, triggering the eviction of the malicious HTLC-preimage from the&lt;br/&gt;mempool as it was a child of the parent T.&lt;br/&gt;&lt;br/&gt;There is no spending candidate of the offered HTLC output for the current&lt;br/&gt;block laying in network mempools.&lt;br/&gt;&lt;br/&gt;This replacement cycling tricks can be repeated for each rebroadcast&lt;br/&gt;attempt of the HTLC-timeout by the honest lightning node until expiration&lt;br/&gt;of the inbound HTLC timelock I. Once this height is reached a HTLC-timeout&lt;br/&gt;is broadcast by the counterparty&amp;#39;s on the incoming link in collusion with&lt;br/&gt;the one on the outgoing link broadcasting its own HTLC-preimage.&lt;br/&gt;&lt;br/&gt;The honest Lightning node has been &amp;#34;double-spent&amp;#34; in its HTLC forwarding.&lt;br/&gt;&lt;br/&gt;As a notable factor impacting the success of the attack, a lightning node&amp;#39;s&lt;br/&gt;honest HTLC-timeout might be included in the block template of the miner&lt;br/&gt;winning the block race and therefore realizes a spent of the offered&lt;br/&gt;output. In practice, a replacement cycling attack might over-connect to&lt;br/&gt;miners&amp;#39; mempools and public reachable nodes to succeed in a fast eviction&lt;br/&gt;of the HTLC-timeout by its HTLC-preimage. As this latter transaction can&lt;br/&gt;come with a better ancestor-score, it should be picked up on the flight by&lt;br/&gt;economically competitive miners.&lt;br/&gt;&lt;br/&gt;A functional test exercising a simple replacement cycling of a HTLC&lt;br/&gt;transaction on bitcoin core mempool is available:&lt;br/&gt;&lt;a href=&#34;https://github.com/ariard/bitcoin/commits/2023-test-mempool&#34;&gt;https://github.com/ariard/bitcoin/commits/2023-test-mempool&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;## Deployed LN mitigations&lt;br/&gt;&lt;br/&gt;Aggressive rebroadcasting: As the replacement cycling attacker benefits&lt;br/&gt;from the HTLC-timeout being usually broadcast by lightning nodes only once&lt;br/&gt;every block, or less the replacement cycling malicious transactions paid&lt;br/&gt;only equal the sum of the absolute fees paid by the HTLC, adjusted with the&lt;br/&gt;replacement penalty. Rebroadcasting randomly and multiple times before the&lt;br/&gt;next block increases the absolute fee cost for the attacker.&lt;br/&gt;&lt;br/&gt;Implemented and deployed by Eclair, Core-Lightning, LND and LDK .&lt;br/&gt;&lt;br/&gt;Local-mempool preimage monitoring: As the replacement cycling attacker in a&lt;br/&gt;simple setup broadcast the HTLC-preimage to all the network mempools, the&lt;br/&gt;honest lightning node is able to catch on the flight the unconfirmed&lt;br/&gt;HTLC-preimage, before its subsequent mempool replacement. The preimage can&lt;br/&gt;be extracted from the second-stage HTLC-preimage and used to fetch the&lt;br/&gt;off-chain inbound HTLC with a cooperative message or go on-chain with it to&lt;br/&gt;claim the accepted HTLC output.&lt;br/&gt;&lt;br/&gt;Implemented and deployed by Eclair and LND.&lt;br/&gt;&lt;br/&gt;CLTV Expiry Delta: With every jammed block comes an absolute fee cost paid&lt;br/&gt;by the attacker, a risk of the HTLC-preimage being detected or discovered&lt;br/&gt;by the honest lightning node, or the HTLC-timeout to slip in a winning&lt;br/&gt;block template. Bumping the default CLTV delta hardens the odds of success&lt;br/&gt;of a simple replacement cycling attack.&lt;br/&gt;&lt;br/&gt;Default setting: Eclair 144, Core-Lightning 34, LND 80 and LDK 72.&lt;br/&gt;&lt;br/&gt;## Affected Bitcoin Protocols and Applications&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding the following list of Bitcoin protocols and&lt;br/&gt;applications could be affected by new denial-of-service vectors under some&lt;br/&gt;level of network mempools congestion. Neither tests or advanced review of&lt;br/&gt;specifications (when available) has been conducted for each of them:&lt;br/&gt;- on-chain DLCs&lt;br/&gt;- coinjoins&lt;br/&gt;- payjoins&lt;br/&gt;- wallets with time-sensitive paths&lt;br/&gt;- peerswap and submarine swaps&lt;br/&gt;- batch payouts&lt;br/&gt;- transaction &amp;#34;accelerators&amp;#34;&lt;br/&gt;&lt;br/&gt;Inviting their developers, maintainers and operators to investigate how&lt;br/&gt;replacement cycling attacks might disrupt their in-mempool chain of&lt;br/&gt;transactions, or fee-bumping flows at the shortest delay. Simple flows and&lt;br/&gt;non-multi-party transactions should not be affected to the best of my&lt;br/&gt;understanding.&lt;br/&gt;&lt;br/&gt;## Open Problems: Package Malleability&lt;br/&gt;&lt;br/&gt;Pinning attacks have been known for years as a practical vector to&lt;br/&gt;compromise lightning channels funds safety, under different scenarios (cf.&lt;br/&gt;current bip331&amp;#39;s motivation section). Mitigations at the mempool level have&lt;br/&gt;been designed, discussed and are under implementation by the community&lt;br/&gt;(ancestor package relay &#43; nverrsion=3 policy). Ideally, they should&lt;br/&gt;constraint a pinning attacker to always attach a high feerate package&lt;br/&gt;(commitment &#43; CPFP) to replace the honest package, or allow a honest&lt;br/&gt;lightning node to overbid a malicious pinning package and get its&lt;br/&gt;time-sensitive transaction optimistically included in the chain.&lt;br/&gt;&lt;br/&gt;Replacement cycling attack seem to offer a new way to neutralize the design&lt;br/&gt;goals of package relay and its companion nversion=3 policy, where an&lt;br/&gt;attacker package RBF a honest package out of the mempool to subsequently&lt;br/&gt;double-spend its own high-fee child with a transaction unrelated to the&lt;br/&gt;channel. As the remaining commitment transaction is pre-signed with a&lt;br/&gt;minimal relay fee, it can be evicted out of the mempool.&lt;br/&gt;&lt;br/&gt;A functional test exercising a simple replacement cycling of a lightning&lt;br/&gt;channel commitment transaction on top of the nversion=3 code branch is&lt;br/&gt;available:&lt;br/&gt;&lt;a href=&#34;https://github.com/ariard/bitcoin/commits/2023-10-test-mempool-2&#34;&gt;https://github.com/ariard/bitcoin/commits/2023-10-test-mempool-2&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;## Discovery&lt;br/&gt;&lt;br/&gt;In 2018, the issue of static fees for pre-signed lightning transactions is&lt;br/&gt;made more widely known, the carve-out exemption in mempool rules to&lt;br/&gt;mitigate in-mempool package limits pinning and the anchor output pattern&lt;br/&gt;are proposed.&lt;br/&gt;&lt;br/&gt;In 2019, bitcoin core 0.19 is released with carve-out support. Continued&lt;br/&gt;discussion of the anchor output pattern as a dynamic fee-bumping method.&lt;br/&gt;&lt;br/&gt;In 2020, draft of anchor output submitted to the bolts. Initial finding of&lt;br/&gt;economic pinning against lightning commitment and second-stage HTLC&lt;br/&gt;transactions. Subsequent discussions of a preimage-overlay network or&lt;br/&gt;package-relay as mitigations. Public call made to inquiry more on potential&lt;br/&gt;other transaction-relay jamming attacks affecting lightning.&lt;br/&gt;&lt;br/&gt;In 2021, initial work in bitcoin core 22.0 of package acceptance. Continued&lt;br/&gt;discussion of the pinning attacks and shortcomings of current mempool rules&lt;br/&gt;during community-wide online workshops. Later the year, in light of all&lt;br/&gt;issues for bitcoin second-layers, a proposal is made about killing the&lt;br/&gt;mempool.&lt;br/&gt;&lt;br/&gt;In 2022, bip proposed for package relay and new proposed v3 policy design&lt;br/&gt;proposed for a review and implementation. Mempoolfullrbf is supported in&lt;br/&gt;bitcoin core 24.0 and conceptual questions about alignment of mempool rules&lt;br/&gt;w.r.t miners incentives are investigated.&lt;br/&gt;&lt;br/&gt;Along this year 2022, eltoo lightning channels design are discussed,&lt;br/&gt;implemented and reviewed. In this context and after discussions on mempool&lt;br/&gt;anti-DoS rules, I discovered this new replacement cycling attack was&lt;br/&gt;affecting deployed lightning channels and immediately reported the finding&lt;br/&gt;to some bitcoin core developers and lightning maintainers.&lt;br/&gt;&lt;br/&gt;## Timeline&lt;br/&gt;&lt;br/&gt;- 2022-12-16: Report of the finding to Suhas Daftuar, Anthony Towns, Greg&lt;br/&gt;Sanders and Gloria Zhao&lt;br/&gt;- 2022-12-16: Report to LN maintainers: Rusty Russell, Bastien Teinturier,&lt;br/&gt;Matt Corallo and Olaoluwa Osuntunkun&lt;br/&gt;- 2022-12-23: Sharing to Eugene Siegel (LND)&lt;br/&gt;- 2022-12-24: Sharing to James O&amp;#39;Beirne and Antoine Poinsot (non-lightning&lt;br/&gt;potential affected projects)&lt;br/&gt;- 2022-01-14: Sharing to Gleb Naumenko (miners incentives and cross-layers&lt;br/&gt;issuers) and initial proposal of an early public disclosure&lt;br/&gt;- 2022-01-19: Collection of analysis if other second-layers and multi-party&lt;br/&gt;applications affected. LN mitigations development starts.&lt;br/&gt;- 2023-05-04: Sharing to Wilmer Paulino (LDK)&lt;br/&gt;- 2023-06-20: LN mitigations implemented and progressively released. Week&lt;br/&gt;of the 16 october proposed for full disclosure.&lt;br/&gt;- 2023-08-10: CVEs assigned by MITRE&lt;br/&gt;- 2023-10-05: Pre-disclosure of LN CVEs numbers and replacement cycling&lt;br/&gt;attack existence to security at bitcoincore.org.&lt;br/&gt;- 2023-10-16: Full disclosure of CVE-2023-40231 / CVE-2023-40232 /&lt;br/&gt;CVE-2023-40233 / CVE-2023-40234 and replacement cycling attacks&lt;br/&gt;&lt;br/&gt;## Conclusion&lt;br/&gt;&lt;br/&gt;Despite the line of mitigations adopted and deployed by current major&lt;br/&gt;lightning implementations, I believe replacement cycling attacks are still&lt;br/&gt;practical for advanced attackers. Beyond this new attack might come as a&lt;br/&gt;way to partially or completely defeat some of the pinning mitigations which&lt;br/&gt;have been working for years as a community.&lt;br/&gt;&lt;br/&gt;As of today, it is uncertain to me if lightning is not affected by a more&lt;br/&gt;severe long-term package malleability critical security issue under current&lt;br/&gt;consensus rules, and if any other time-sensitive multi-party protocol,&lt;br/&gt;designed or deployed isn&amp;#39;t de facto affected too (loss of funds or denial&lt;br/&gt;of service).&lt;br/&gt;&lt;br/&gt;Assuming analysis on package malleability is correct, it is unclear to me&lt;br/&gt;if it can be corrected by changes in replacement / eviction rules or&lt;br/&gt;mempool chain of transactions processing strategy. Inviting my technical&lt;br/&gt;peers and the bitcoin community to look more on this issue, including to&lt;br/&gt;dissent. I&amp;#39;ll be the first one pleased if I&amp;#39;m fundamentally wrong on those&lt;br/&gt;issues, or if any element has not been weighted with the adequate technical&lt;br/&gt;accuracy it deserves.&lt;br/&gt;&lt;br/&gt;Do not trust, verify. All mistakes and opinions are my own.&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&amp;#34;meet with Triumph and Disaster. And treat those two impostors just the&lt;br/&gt;same&amp;#34; - K.&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/20231016/6e4e649f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20231016/6e4e649f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-10-18T15:02:08&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsz6cent45n3xlkf84y70nsxc2v0axntyelluyrrwk2ugvyx0wnkrczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zw8m9pw</id>
    
      <title type="html">📅 Original date posted:2023-10-17 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsz6cent45n3xlkf84y70nsxc2v0axntyelluyrrwk2ugvyx0wnkrczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zw8m9pw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv0ghgu50qgw0sgznusqjghx90thv4wqd2vh4lplqzuyt3lzey3ksjt78cc&#39;&gt;nevent1q…78cc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-10-17&lt;br/&gt;🗒️ Summary of this message: No pinning attacks have been observed on the mainnet. Monitoring mempool logs can help detect suspicious behavior. Feebumping could be considered as a mitigation strategy.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Ziggie,&lt;br/&gt;&lt;br/&gt;&amp;gt; thanks for this detailed explanation. This class of pinning attacks sound&lt;br/&gt;not too unlikely especially if the attacker targets channels with high&lt;br/&gt;capacity and very loose channel policies (allowing the full htlc&lt;br/&gt;&amp;gt; amount to be the channel capacity). Could you add more details about the&lt;br/&gt;attack you observed on mainnet ? How did you monitor the chain, are the&lt;br/&gt;some tools available I can run in parallel to my&lt;br/&gt;&amp;gt; lightning software to record this kind of suspicious behaviour (which did&lt;br/&gt;you use)?&lt;br/&gt;&lt;br/&gt;Just to give a clarification no _such_ attack has been observed on mainnet,&lt;br/&gt;since I and other LN maintainers have been aware of this issue. If there is&lt;br/&gt;a confusion on the disclosure mail thanks to point to it, I&amp;#39;ll correct it.&lt;br/&gt;&lt;br/&gt;We discussed privately to experiment a demo attack in restrained dev&lt;br/&gt;circles, like we have done in the past for some LN sec issues. We have&lt;br/&gt;conducted one so far, multiple scenarios to look at.&lt;br/&gt;&lt;br/&gt;I confirm the risk of exposure if an attacker targets channels with high&lt;br/&gt;capacity and loose channel policies. Note there is no way to configure the&lt;br/&gt;cap for the total value of outbound HTLC in-flight, which is the flow&lt;br/&gt;affected.&lt;br/&gt;&lt;br/&gt;If you would like to observe the existence of such an attack happening,&lt;br/&gt;look at your mempool logs and the amount of HTLC output being&lt;br/&gt;systematically conflicted out with the following sequence (HTLC-timeout -&lt;br/&gt;HTLC-preimage - HTLC-timeout - ...).&lt;br/&gt;&lt;br/&gt;As an observation note, this is not akin to a pinning attack, as there is&lt;br/&gt;no &amp;#34;honest&amp;#34; or &amp;#34;malicious&amp;#34; transaction pinned in network mempools. And it&lt;br/&gt;can happen without network mempools congestion.&lt;br/&gt;&lt;br/&gt;&amp;gt; What&amp;#39;s also worth mentioning here is that you do not really have to&lt;br/&gt;control 2 neighbouring nodes to target your victim. If you can cycle the&lt;br/&gt;attack on the tail side and delay the confirmation of the htlc- timeout&lt;br/&gt;covenant the peer at the front (incoming link) of the victim will&lt;br/&gt;force-close the channel and claim his timeout-path in the same way&lt;br/&gt;(canceling back the initial htlc amount to the attackers initial node).&lt;br/&gt;&lt;br/&gt;I think this is a behavior worthy of testing.&lt;br/&gt;&lt;br/&gt;&amp;gt; Apart from that I think one can even introduce some kind of feebumping&lt;br/&gt;race between the victim and the attacker on the tail side of the attack&lt;br/&gt;making the attack even more costly. I think&lt;br/&gt;&amp;gt; currently when lightning nodes see the preimage in the mempool (during&lt;br/&gt;the time where they already can spend the same output with the&lt;br/&gt;timeout-covenant) we are honest and just extract&lt;br/&gt;&amp;gt; the preimage and don&amp;#39;t try to race this tx output.&lt;br/&gt;&lt;br/&gt;Local-mempool preimage monitoring has been implemented by Eclair for years&lt;br/&gt;as a mitigation against old school pinning attacks on second-stage HTLC&lt;br/&gt;transactions.&lt;br/&gt;&lt;br/&gt;This mechanism has been implemented by LND in the last months, following&lt;br/&gt;the report of replacement cycling attacks. As of today this is not&lt;br/&gt;implemented by Core-Lightning or LDK.&lt;br/&gt;&lt;br/&gt;&amp;gt; So we maybe should start feebumping this output if we end up in this&lt;br/&gt;scenario? If we see the preimage and can also claim this output via the&lt;br/&gt;htlc-timeout path, we should aggressively fee-bump (racing this output) our&lt;br/&gt;htlc-output in addition to grabbing the preimage and claiming it on the&lt;br/&gt;incoming. This is only feasible with anchor channels where we can add fees&lt;br/&gt;to the htlc-covenant. This would make the attack more costly for a peer&lt;br/&gt;when he knows that we use fees up to 50% of the htlc value. When you cycle&lt;br/&gt;this 144 times you will be at a heavy loss trying to steal this htlc.&lt;br/&gt;&lt;br/&gt;This is the &amp;#34;defensive fee mitigation&amp;#34; proposed in the paper. Coming with&lt;br/&gt;some unknown.&lt;br/&gt;&lt;br/&gt;&amp;gt; I would add another mitigation to the list for node runners to restrict&lt;br/&gt;the amount and number of HTLCs  for big channels to unknown peers. It&lt;br/&gt;quickly comes with a loss when the HTLCs the attacker tries to steal are&lt;br/&gt;small.&lt;br/&gt;&lt;br/&gt;See the point above on the lack of way at the spec-level to negotiate cap&lt;br/&gt;on the total value of outbound HTLC in-flight.&lt;br/&gt;&lt;br/&gt;Le mar. 17 oct. 2023 à 08:21, ziggie1984 &amp;lt;ziggie1984 at protonmail.com&amp;gt; a&lt;br/&gt;écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; ## Deployed LN mitigations&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Aggressive rebroadcasting: As the replacement cycling attacker benefits&lt;br/&gt;&amp;gt; from the HTLC-timeout being usually broadcast by lightning nodes only once&lt;br/&gt;&amp;gt; every block, or less the replacement cycling malicious transactions paid&lt;br/&gt;&amp;gt; only equal the sum of the absolute fees paid by the HTLC, adjusted with the&lt;br/&gt;&amp;gt; replacement penalty. Rebroadcasting randomly and multiple times before the&lt;br/&gt;&amp;gt; next block increases the absolute fee cost for the attacker.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Implemented and deployed by Eclair, Core-Lightning, LND and LDK .&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Local-mempool preimage monitoring: As the replacement cycling attacker in&lt;br/&gt;&amp;gt; a simple setup broadcast the HTLC-preimage to all the network mempools, the&lt;br/&gt;&amp;gt; honest lightning node is able to catch on the flight the unconfirmed&lt;br/&gt;&amp;gt; HTLC-preimage, before its subsequent mempool replacement. The preimage can&lt;br/&gt;&amp;gt; be extracted from the second-stage HTLC-preimage and used to fetch the&lt;br/&gt;&amp;gt; off-chain inbound HTLC with a cooperative message or go on-chain with it to&lt;br/&gt;&amp;gt; claim the accepted HTLC output.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; thanks for this detailed explanation. This class of pinning attacks sound&lt;br/&gt;&amp;gt; not too unlikely especially if the attacker targets channels with high&lt;br/&gt;&amp;gt; capacity and very loose channel policies (allowing the full htlc amount to&lt;br/&gt;&amp;gt; be the channel capacity). Could you add more details about the attack you&lt;br/&gt;&amp;gt; observed on mainnet ? How did you monitor the chain, are the some tools&lt;br/&gt;&amp;gt; available I can run in parallel to my lightning software to record this&lt;br/&gt;&amp;gt; kind of suspicious behaviour (which did you use)?&lt;br/&gt;&amp;gt; What&amp;#39;s also worth mentioning here is that you do not really have to&lt;br/&gt;&amp;gt; control 2 neighbouring nodes to target your victim. If you can cycle the&lt;br/&gt;&amp;gt; attack on the tail side and delay the confirmation of the htlc-timeout&lt;br/&gt;&amp;gt; covenant the peer at the front (incoming link) of the victim will&lt;br/&gt;&amp;gt; force-close the channel and claim his timeout-path in the same way&lt;br/&gt;&amp;gt; (canceling back the initial htlc amount to the attackers initial node).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Apart from that I think one can even introduce some kind of feebumping&lt;br/&gt;&amp;gt; race between the victim and the attacker on the tail side of the attack&lt;br/&gt;&amp;gt; making the attack even more costly. I think currently when lightning nodes&lt;br/&gt;&amp;gt; see the preimage in the mempool (during the time where they already can&lt;br/&gt;&amp;gt; spend the same output with the timeout-covenant) we are honest and just&lt;br/&gt;&amp;gt; extract the preimage and don&amp;#39;t try to race this tx output. So we maybe&lt;br/&gt;&amp;gt; should start feebumping this output if we end up in this scenario? If we&lt;br/&gt;&amp;gt; see the preimage and can also claim this output via the htlc-timeout path,&lt;br/&gt;&amp;gt; we should aggressively fee-bump (racing this output) our htlc-output in&lt;br/&gt;&amp;gt; addition to grabbing the preimage and claiming it on the incoming. This is&lt;br/&gt;&amp;gt; only feasible with anchor channels where we can add fees to the&lt;br/&gt;&amp;gt; htlc-covenant. This would make the attack more costly for a peer when he&lt;br/&gt;&amp;gt; knows that we use fees up to 50% of the htlc value. When you cycle this 144&lt;br/&gt;&amp;gt; times you will be at a heavy loss trying to steal this htlc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I would add another mitigation to the list for node runners to restrict&lt;br/&gt;&amp;gt; the amount and number of HTLCs  for big channels to unknown peers. It&lt;br/&gt;&amp;gt; quickly comes with a loss when the HTLCs the attacker tries to steal are&lt;br/&gt;&amp;gt; small.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Kind regards,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ziggie&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt; On Monday, October 16th, 2023 at 18:57, Antoine Riard &amp;lt;&lt;br/&gt;&amp;gt; antoine.riard at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (cross-posting mempool issues identified are exposing lightning chan to&lt;br/&gt;&amp;gt; loss of funds risks, other multi-party bitcoin apps might be affected)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; End of last year (December 2022), amid technical discussions on eltoo&lt;br/&gt;&amp;gt; payment channels and incentives compatibility of the mempool anti-DoS&lt;br/&gt;&amp;gt; rules, a new transaction-relay jamming attack affecting lightning channels&lt;br/&gt;&amp;gt; was discovered.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After careful analysis, it turns out this attack is practical and&lt;br/&gt;&amp;gt; immediately exposed lightning routing hops carrying HTLC traffic to loss of&lt;br/&gt;&amp;gt; funds security risks, both legacy and anchor output channels. A potential&lt;br/&gt;&amp;gt; exploitation plausibly happening even without network mempools congestion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Mitigations have been designed, implemented and deployed by all major&lt;br/&gt;&amp;gt; lightning implementations during the last months.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please find attached the release numbers, where the mitigations should be&lt;br/&gt;&amp;gt; present:&lt;br/&gt;&amp;gt; - LDK: v0.0.118 - CVE-2023 -40231&lt;br/&gt;&amp;gt; - Eclair: v0.9.0 - CVE-2023-40232&lt;br/&gt;&amp;gt; - LND: v.0.17.0-beta - CVE-2023-40233&lt;br/&gt;&amp;gt; - Core-Lightning: v.23.08.01 - CVE-2023-40234&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While neither replacement cycling attacks have been observed or reported&lt;br/&gt;&amp;gt; in the wild since the last ~10 months or experimented in real-world&lt;br/&gt;&amp;gt; conditions on bitcoin mainet, functional test is available exercising the&lt;br/&gt;&amp;gt; affected lightning channel against bitcoin core mempool (26.0 release&lt;br/&gt;&amp;gt; cycle).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is understood that a simple replacement cycling attack does not demand&lt;br/&gt;&amp;gt; privileged capabilities from an attacker (e.g no low-hashrate power) and&lt;br/&gt;&amp;gt; only access to basic bitcoin and lightning software. Yet I still think&lt;br/&gt;&amp;gt; executing such an attack successfully requests a fair amount of bitcoin&lt;br/&gt;&amp;gt; technical know-how and decent preparation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; From my understanding of those issues, it is yet to be determined if the&lt;br/&gt;&amp;gt; mitigations deployed are robust enough in face of advanced replacement&lt;br/&gt;&amp;gt; cycling attackers, especially ones able to combine different classes of&lt;br/&gt;&amp;gt; transaction-relay jamming such as pinnings or vetted with more privileged&lt;br/&gt;&amp;gt; capabilities.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please find a list of potential affected bitcoin applications in this full&lt;br/&gt;&amp;gt; disclosure report using bitcoin script timelocks or multi-party&lt;br/&gt;&amp;gt; transactions, albeit no immediate security risk exposure as severe as the&lt;br/&gt;&amp;gt; ones affecting lightning has been identified. Only cursory review of&lt;br/&gt;&amp;gt; non-lightning applications has been conducted so far.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is a paper published summarizing replacement cycling attacks on the&lt;br/&gt;&amp;gt; lightning network:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/ariard/mempool-research/blob/2023-10-replacement-paper/replacement-cycling.pdf&#34;&gt;https://github.com/ariard/mempool-research/blob/2023-10-replacement-paper/replacement-cycling.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Problem&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A lightning node allows HTLCs forwarding (in bolt3&amp;#39;s parlance accepted&lt;br/&gt;&amp;gt; HTLC on incoming link and offered HTLC on outgoing link) should settle the&lt;br/&gt;&amp;gt; outgoing state with either a success or timeout before the incoming state&lt;br/&gt;&amp;gt; timelock becomes final and an asymmetric defavorable settlement might&lt;br/&gt;&amp;gt; happen (cf &amp;#34;Flood &amp;amp; Loot: A Systematic Attack on The Lightning Network&amp;#34;&lt;br/&gt;&amp;gt; section 2.3 for a classical exposition of this lightning security property).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Failure to satisfy this settlement requirement exposes a forwarding hop to&lt;br/&gt;&amp;gt; a loss of fund risk where the offered HTLC is spent by the outgoing link&lt;br/&gt;&amp;gt; counterparty&amp;#39;s HTLC-preimage and the accepted HTLC is spent by the incoming&lt;br/&gt;&amp;gt; link counterparty&amp;#39;s HTLC-timeout.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The specification mandates the incoming HTLC expiration timelock to be&lt;br/&gt;&amp;gt; spaced out by an interval of `cltv_expiry_delta` from the outgoing HTLC&lt;br/&gt;&amp;gt; expiration timelock, this exact interval value being an implementation and&lt;br/&gt;&amp;gt; node policy setting. As a minimal value, the specification recommends 34&lt;br/&gt;&amp;gt; blocks of interval. If the timelock expiration I of the inbound HTLC is&lt;br/&gt;&amp;gt; equal to 100 from chain tip, the timelock expiration O of the outbound HTLC&lt;br/&gt;&amp;gt; must be equal to 66 blocks from chain tip, giving a reasonable buffer of&lt;br/&gt;&amp;gt; reaction to the lightning forwarding node.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the lack of cooperative off-chain settlement of the HTLC on the&lt;br/&gt;&amp;gt; outgoing link negotiated with the counterparty (either&lt;br/&gt;&amp;gt; `update_fulfill_htlc` or `update_fail_htlc`) when O is reached, the&lt;br/&gt;&amp;gt; lightning node should broadcast its commitment transaction. Once the&lt;br/&gt;&amp;gt; commitment is confirmed (if anchor and the 1 CSV encumbrance is present),&lt;br/&gt;&amp;gt; the lightning node broadcasts and confirms its HTLC-timeout before I height&lt;br/&gt;&amp;gt; is reached.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here enter a replacement cycling attack. A malicious channel counterparty&lt;br/&gt;&amp;gt; can broadcast its HTLC-preimage transaction with a higher absolute fee and&lt;br/&gt;&amp;gt; higher feerate than the honest HTLC-timeout of the victim lightning node&lt;br/&gt;&amp;gt; and triggers a replacement. Both for legacy and anchor output channels, a&lt;br/&gt;&amp;gt; HTLC-preimage on a counterparty commitment transaction is malleable, i.e&lt;br/&gt;&amp;gt; additional inputs or outputs can be added. The HTLC-preimage spends an&lt;br/&gt;&amp;gt; unconfirmed and unrelated to the channel parent transaction M and conflicts&lt;br/&gt;&amp;gt; its child.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As the HTLC-preimage spends an unconfirmed input that was already included&lt;br/&gt;&amp;gt; in the unconfirmed and unrelated child transaction (rule 2), pays an&lt;br/&gt;&amp;gt; absolute higher fee of at least the sum paid by the HTLC-timeout and child&lt;br/&gt;&amp;gt; transaction (rule 3) and the HTLC-preimage feerate is greater than all&lt;br/&gt;&amp;gt; directly conflicting transactions (rule 6), the replacement is accepted.&lt;br/&gt;&amp;gt; The honest HTLC-timeout is evicted out of the mempool.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In an ulterior move, the malicious counterparty can replace the parent&lt;br/&gt;&amp;gt; transaction itself with another candidate N satisfying the replacement&lt;br/&gt;&amp;gt; rules, triggering the eviction of the malicious HTLC-preimage from the&lt;br/&gt;&amp;gt; mempool as it was a child of the parent T.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is no spending candidate of the offered HTLC output for the current&lt;br/&gt;&amp;gt; block laying in network mempools.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This replacement cycling tricks can be repeated for each rebroadcast&lt;br/&gt;&amp;gt; attempt of the HTLC-timeout by the honest lightning node until expiration&lt;br/&gt;&amp;gt; of the inbound HTLC timelock I. Once this height is reached a HTLC-timeout&lt;br/&gt;&amp;gt; is broadcast by the counterparty&amp;#39;s on the incoming link in collusion with&lt;br/&gt;&amp;gt; the one on the outgoing link broadcasting its own HTLC-preimage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The honest Lightning node has been &amp;#34;double-spent&amp;#34; in its HTLC forwarding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As a notable factor impacting the success of the attack, a lightning&lt;br/&gt;&amp;gt; node&amp;#39;s honest HTLC-timeout might be included in the block template of the&lt;br/&gt;&amp;gt; miner winning the block race and therefore realizes a spent of the offered&lt;br/&gt;&amp;gt; output. In practice, a replacement cycling attack might over-connect to&lt;br/&gt;&amp;gt; miners&amp;#39; mempools and public reachable nodes to succeed in a fast eviction&lt;br/&gt;&amp;gt; of the HTLC-timeout by its HTLC-preimage. As this latter transaction can&lt;br/&gt;&amp;gt; come with a better ancestor-score, it should be picked up on the flight by&lt;br/&gt;&amp;gt; economically competitive miners.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A functional test exercising a simple replacement cycling of a HTLC&lt;br/&gt;&amp;gt; transaction on bitcoin core mempool is available:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/ariard/bitcoin/commits/2023-test-mempool&#34;&gt;https://github.com/ariard/bitcoin/commits/2023-test-mempool&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Deployed LN mitigations&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Aggressive rebroadcasting: As the replacement cycling attacker benefits&lt;br/&gt;&amp;gt; from the HTLC-timeout being usually broadcast by lightning nodes only once&lt;br/&gt;&amp;gt; every block, or less the replacement cycling malicious transactions paid&lt;br/&gt;&amp;gt; only equal the sum of the absolute fees paid by the HTLC, adjusted with the&lt;br/&gt;&amp;gt; replacement penalty. Rebroadcasting randomly and multiple times before the&lt;br/&gt;&amp;gt; next block increases the absolute fee cost for the attacker.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Implemented and deployed by Eclair, Core-Lightning, LND and LDK .&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Local-mempool preimage monitoring: As the replacement cycling attacker in&lt;br/&gt;&amp;gt; a simple setup broadcast the HTLC-preimage to all the network mempools, the&lt;br/&gt;&amp;gt; honest lightning node is able to catch on the flight the unconfirmed&lt;br/&gt;&amp;gt; HTLC-preimage, before its subsequent mempool replacement. The preimage can&lt;br/&gt;&amp;gt; be extracted from the second-stage HTLC-preimage and used to fetch the&lt;br/&gt;&amp;gt; off-chain inbound HTLC with a cooperative message or go on-chain with it to&lt;br/&gt;&amp;gt; claim the accepted HTLC output.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Implemented and deployed by Eclair and LND.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; CLTV Expiry Delta: With every jammed block comes an absolute fee cost paid&lt;br/&gt;&amp;gt; by the attacker, a risk of the HTLC-preimage being detected or discovered&lt;br/&gt;&amp;gt; by the honest lightning node, or the HTLC-timeout to slip in a winning&lt;br/&gt;&amp;gt; block template. Bumping the default CLTV delta hardens the odds of success&lt;br/&gt;&amp;gt; of a simple replacement cycling attack.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Default setting: Eclair 144, Core-Lightning 34, LND 80 and LDK 72.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Affected Bitcoin Protocols and Applications&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; From my understanding the following list of Bitcoin protocols and&lt;br/&gt;&amp;gt; applications could be affected by new denial-of-service vectors under some&lt;br/&gt;&amp;gt; level of network mempools congestion. Neither tests or advanced review of&lt;br/&gt;&amp;gt; specifications (when available) has been conducted for each of them:&lt;br/&gt;&amp;gt; - on-chain DLCs&lt;br/&gt;&amp;gt; - coinjoins&lt;br/&gt;&amp;gt; - payjoins&lt;br/&gt;&amp;gt; - wallets with time-sensitive paths&lt;br/&gt;&amp;gt; - peerswap and submarine swaps&lt;br/&gt;&amp;gt; - batch payouts&lt;br/&gt;&amp;gt; - transaction &amp;#34;accelerators&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Inviting their developers, maintainers and operators to investigate how&lt;br/&gt;&amp;gt; replacement cycling attacks might disrupt their in-mempool chain of&lt;br/&gt;&amp;gt; transactions, or fee-bumping flows at the shortest delay. Simple flows and&lt;br/&gt;&amp;gt; non-multi-party transactions should not be affected to the best of my&lt;br/&gt;&amp;gt; understanding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Open Problems: Package Malleability&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Pinning attacks have been known for years as a practical vector to&lt;br/&gt;&amp;gt; compromise lightning channels funds safety, under different scenarios (cf.&lt;br/&gt;&amp;gt; current bip331&amp;#39;s motivation section). Mitigations at the mempool level have&lt;br/&gt;&amp;gt; been designed, discussed and are under implementation by the community&lt;br/&gt;&amp;gt; (ancestor package relay &#43; nverrsion=3 policy). Ideally, they should&lt;br/&gt;&amp;gt; constraint a pinning attacker to always attach a high feerate package&lt;br/&gt;&amp;gt; (commitment &#43; CPFP) to replace the honest package, or allow a honest&lt;br/&gt;&amp;gt; lightning node to overbid a malicious pinning package and get its&lt;br/&gt;&amp;gt; time-sensitive transaction optimistically included in the chain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Replacement cycling attack seem to offer a new way to neutralize the&lt;br/&gt;&amp;gt; design goals of package relay and its companion nversion=3 policy, where an&lt;br/&gt;&amp;gt; attacker package RBF a honest package out of the mempool to subsequently&lt;br/&gt;&amp;gt; double-spend its own high-fee child with a transaction unrelated to the&lt;br/&gt;&amp;gt; channel. As the remaining commitment transaction is pre-signed with a&lt;br/&gt;&amp;gt; minimal relay fee, it can be evicted out of the mempool.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A functional test exercising a simple replacement cycling of a lightning&lt;br/&gt;&amp;gt; channel commitment transaction on top of the nversion=3 code branch is&lt;br/&gt;&amp;gt; available:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/ariard/bitcoin/commits/2023-10-test-mempool-2&#34;&gt;https://github.com/ariard/bitcoin/commits/2023-10-test-mempool-2&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Discovery&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In 2018, the issue of static fees for pre-signed lightning transactions is&lt;br/&gt;&amp;gt; made more widely known, the carve-out exemption in mempool rules to&lt;br/&gt;&amp;gt; mitigate in-mempool package limits pinning and the anchor output pattern&lt;br/&gt;&amp;gt; are proposed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In 2019, bitcoin core 0.19 is released with carve-out support. Continued&lt;br/&gt;&amp;gt; discussion of the anchor output pattern as a dynamic fee-bumping method.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In 2020, draft of anchor output submitted to the bolts. Initial finding of&lt;br/&gt;&amp;gt; economic pinning against lightning commitment and second-stage HTLC&lt;br/&gt;&amp;gt; transactions. Subsequent discussions of a preimage-overlay network or&lt;br/&gt;&amp;gt; package-relay as mitigations. Public call made to inquiry more on potential&lt;br/&gt;&amp;gt; other transaction-relay jamming attacks affecting lightning.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In 2021, initial work in bitcoin core 22.0 of package acceptance.&lt;br/&gt;&amp;gt; Continued discussion of the pinning attacks and shortcomings of current&lt;br/&gt;&amp;gt; mempool rules during community-wide online workshops. Later the year, in&lt;br/&gt;&amp;gt; light of all issues for bitcoin second-layers, a proposal is made about&lt;br/&gt;&amp;gt; killing the mempool.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In 2022, bip proposed for package relay and new proposed v3 policy design&lt;br/&gt;&amp;gt; proposed for a review and implementation. Mempoolfullrbf is supported in&lt;br/&gt;&amp;gt; bitcoin core 24.0 and conceptual questions about alignment of mempool rules&lt;br/&gt;&amp;gt; w.r.t miners incentives are investigated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Along this year 2022, eltoo lightning channels design are discussed,&lt;br/&gt;&amp;gt; implemented and reviewed. In this context and after discussions on mempool&lt;br/&gt;&amp;gt; anti-DoS rules, I discovered this new replacement cycling attack was&lt;br/&gt;&amp;gt; affecting deployed lightning channels and immediately reported the finding&lt;br/&gt;&amp;gt; to some bitcoin core developers and lightning maintainers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Timeline&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - 2022-12-16: Report of the finding to Suhas Daftuar, Anthony Towns, Greg&lt;br/&gt;&amp;gt; Sanders and Gloria Zhao&lt;br/&gt;&amp;gt; - 2022-12-16: Report to LN maintainers: Rusty Russell, Bastien Teinturier,&lt;br/&gt;&amp;gt; Matt Corallo and Olaoluwa Osuntunkun&lt;br/&gt;&amp;gt; - 2022-12-23: Sharing to Eugene Siegel (LND)&lt;br/&gt;&amp;gt; - 2022-12-24: Sharing to James O&amp;#39;Beirne and Antoine Poinsot (non-lightning&lt;br/&gt;&amp;gt; potential affected projects)&lt;br/&gt;&amp;gt; - 2022-01-14: Sharing to Gleb Naumenko (miners incentives and cross-layers&lt;br/&gt;&amp;gt; issuers) and initial proposal of an early public disclosure&lt;br/&gt;&amp;gt; - 2022-01-19: Collection of analysis if other second-layers and&lt;br/&gt;&amp;gt; multi-party applications affected. LN mitigations development starts.&lt;br/&gt;&amp;gt; - 2023-05-04: Sharing to Wilmer Paulino (LDK)&lt;br/&gt;&amp;gt; - 2023-06-20: LN mitigations implemented and progressively released. Week&lt;br/&gt;&amp;gt; of the 16 october proposed for full disclosure.&lt;br/&gt;&amp;gt; - 2023-08-10: CVEs assigned by MITRE&lt;br/&gt;&amp;gt; - 2023-10-05: Pre-disclosure of LN CVEs numbers and replacement cycling&lt;br/&gt;&amp;gt; attack existence to security at bitcoincore.org.&lt;br/&gt;&amp;gt; - 2023-10-16: Full disclosure of CVE-2023-40231 / CVE-2023-40232 /&lt;br/&gt;&amp;gt; CVE-2023-40233 / CVE-2023-40234 and replacement cycling attacks&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Conclusion&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Despite the line of mitigations adopted and deployed by current major&lt;br/&gt;&amp;gt; lightning implementations, I believe replacement cycling attacks are still&lt;br/&gt;&amp;gt; practical for advanced attackers. Beyond this new attack might come as a&lt;br/&gt;&amp;gt; way to partially or completely defeat some of the pinning mitigations which&lt;br/&gt;&amp;gt; have been working for years as a community.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As of today, it is uncertain to me if lightning is not affected by a more&lt;br/&gt;&amp;gt; severe long-term package malleability critical security issue under current&lt;br/&gt;&amp;gt; consensus rules, and if any other time-sensitive multi-party protocol,&lt;br/&gt;&amp;gt; designed or deployed isn&amp;#39;t de facto affected too (loss of funds or denial&lt;br/&gt;&amp;gt; of service).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Assuming analysis on package malleability is correct, it is unclear to me&lt;br/&gt;&amp;gt; if it can be corrected by changes in replacement / eviction rules or&lt;br/&gt;&amp;gt; mempool chain of transactions processing strategy. Inviting my technical&lt;br/&gt;&amp;gt; peers and the bitcoin community to look more on this issue, including to&lt;br/&gt;&amp;gt; dissent. I&amp;#39;ll be the first one pleased if I&amp;#39;m fundamentally wrong on those&lt;br/&gt;&amp;gt; issues, or if any element has not been weighted with the adequate technical&lt;br/&gt;&amp;gt; accuracy it deserves.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Do not trust, verify. All mistakes and opinions are my own.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;meet with Triumph and Disaster. And treat those two impostors just the&lt;br/&gt;&amp;gt; same&amp;#34; - K.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20231017/9d438d0e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20231017/9d438d0e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-10-18T15:02:08&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswllgflk7crsry732m6fpmy8qjrq7ehvj6r8ph5w7jhlu2cswklfczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zxkwxmj</id>
    
      <title type="html">📅 Original date posted:2023-09-25 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswllgflk7crsry732m6fpmy8qjrq7ehvj6r8ph5w7jhlu2cswklfczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zxkwxmj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8y5067xa3gceg87skte7wcxwnn33stgt3w06cn4xlenjeukzgacqzzthwn&#39;&gt;nevent1q…thwn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-09-25&lt;br/&gt;🗒️ Summary of this message: Payment pools and channel factories face limitations in interactivity, affecting the security of user funds. Proposed solutions include introducing a coordinator or partitioning balances, but these may not be economically practical. A potential solution is to prevent off-chain group equivocation by editing the funding utxo in a way that allows for the registration of new off-chain subgroups. CoinPool&amp;#39;s idea of including user pubkeys and balance amounts in Taproot leaves could be utilized for privacy-preserving payments and contracts.&lt;br/&gt;📝 Original message:&lt;br/&gt;Payment pools and channel factories are afflicted by severe interactivity&lt;br/&gt;constraints worsening with the number of users owning an off-chain balance&lt;br/&gt;in the construction. The security of user funds is paramount on the ability&lt;br/&gt;to withdraw unilaterally from the off-chain construction. As such any&lt;br/&gt;update applied to the off-chain balances requires a signature contribution&lt;br/&gt;from the unanimity of the construction users to ensure this ability is&lt;br/&gt;conserved along updates.&lt;br/&gt;&lt;br/&gt;As soon as one user starts to be offline or irresponsive, the updates of&lt;br/&gt;the off-chain balances must have to be halted and payments progress are&lt;br/&gt;limited among subsets of 2 users sharing a channel. Different people have&lt;br/&gt;proposed solutions to this issue: introducing a coordinator, partitioning&lt;br/&gt;or layering balances in off-chain users subsets. I think all those&lt;br/&gt;solutions have circled around a novel issue introduced, namely equivocation&lt;br/&gt;of off-chain balances at the harm of construction counterparties [0].&lt;br/&gt;&lt;br/&gt;As ZmnSCPxj pointed out recently, one way to mitigate this equivocation&lt;br/&gt;consists in punishing the cheating pre-nominated coordinator on an external&lt;br/&gt;fidelity bond. One can even imagine more trust-mimized and decentralized&lt;br/&gt;fraud proofs to implement this mitigation, removing the need of a&lt;br/&gt;coordinator [1].&lt;br/&gt;&lt;br/&gt;However, I believe punishment equivocation to be game-theory sound should&lt;br/&gt;compensate a defrauded counterparty of the integrity of its lost off-chain&lt;br/&gt;balance. As one cheating counterparty can equivocate in the worst-case&lt;br/&gt;against all the other counterparties in the construction, one fidelity bond&lt;br/&gt;should be equal to ( C - 1 ) * B satoshi amount, where C is the number of&lt;br/&gt;construction counterparty and B the initial off-chain balance of the&lt;br/&gt;cheating counterparty.&lt;br/&gt;&lt;br/&gt;Moreover, I guess it is impossible to know ahead of a partition or&lt;br/&gt;transition who will be the &amp;#34;honest&amp;#34; counterparties from the &amp;#34;dishonest&amp;#34;&lt;br/&gt;ones, therefore this ( C - 1 ) * B-sized fidelity bond must be maintained&lt;br/&gt;by every counterparty in the pool or factory. On this ground, I think this&lt;br/&gt;mitigation and other corrective ones are not economically practical for&lt;br/&gt;large-scale pools among a set of anonymous users.&lt;br/&gt;&lt;br/&gt;I think the best solution to solve the interactivity issue which is&lt;br/&gt;realistic to design is one ruling out off-chain group equivocation in a&lt;br/&gt;prophylactic fashion. The pool or factory funding utxo should be edited in&lt;br/&gt;an efficient way to register new off-chain subgroups, as lack of&lt;br/&gt;interactivity from a subset of counterparties demands it.&lt;br/&gt;&lt;br/&gt;With CoinPool, there is already this idea of including a user pubkey and&lt;br/&gt;balance amount to each leaf composing the Taproot tree while preserving the&lt;br/&gt;key-path spend in case of unanimity in the user group. Taproot leaves can&lt;br/&gt;be effectively regarded as off-chain user accounts available to realize&lt;br/&gt;privacy-preserving payments and contracts.&lt;br/&gt;&lt;br/&gt;I think one (new ?) idea can be to introduce taproot leaves &amp;#34;cut-through&amp;#34;&lt;br/&gt;spends where multiple leaves are updated with a single witness,&lt;br/&gt;interactively composed by the owners of the spent leaves. This spend sends&lt;br/&gt;back the leaves amount to a new single leaf, aggregating the amounts and&lt;br/&gt;user pubkeys. The user leaves not participating in this &amp;#34;cut-through&amp;#34; are&lt;br/&gt;inherited with full integrity in the new version of the Taproot tree, at&lt;br/&gt;the gain of no interactivity from their side.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say you have a CoinPool funded and initially set with Alice, Bob,&lt;br/&gt;Caroll, Dave and Eve. Each pool participant has a leaf L.x committing to an&lt;br/&gt;amount A.x and user pubkey P.x, where x is the user name owning a leaf.&lt;br/&gt;&lt;br/&gt;Bob and Eve are deemed to be offline by the Alice, Caroll and Dave subset&lt;br/&gt;(the ACD group).&lt;br/&gt;&lt;br/&gt;The ACD group composes a cut-through spend of L.a &#43; L.c &#43; L.d. This spends&lt;br/&gt;generates a new leaf L.(acd) leaf committing to amount A.(acd) and P.(acd).&lt;br/&gt;&lt;br/&gt;Amount A.(acd) = A.a &#43; A.c &#43; A.d and pubkey P.(acd) = P.a &#43; P.c &#43; P.d.&lt;br/&gt;&lt;br/&gt;Bob&amp;#39;s leaf L.b and Eve&amp;#39;s leaf L.e are left unmodified.&lt;br/&gt;&lt;br/&gt;The ACD group generates a new Taproot tree T&amp;#39; = L.(acd) &#43; L.b &#43; L.e, where&lt;br/&gt;the key-path K spend including the original unanimity of pool&lt;br/&gt;counterparties is left unmodified.&lt;br/&gt;&lt;br/&gt;The ACD group can confirm a transaction spending the pool funding utxo to a&lt;br/&gt;new single output committing to the scriptpubkey K &#43; T&amp;#39;.&lt;br/&gt;&lt;br/&gt;&amp;gt;From then, the ACD group can pursue off-chain balance updates among the&lt;br/&gt;subgroup thanks to the new P.(acd) and relying on the known Eltoo&lt;br/&gt;mechanism. There is no possibility for any member of the ACD group to&lt;br/&gt;equivocate with Bob or Eve in a non-observable fashion.&lt;br/&gt;&lt;br/&gt;Once Bob and Eve are online and ready to negotiate an on-chain pool&lt;br/&gt;&amp;#34;refresh&amp;#34; transaction, the conserved key-path spend can be used to&lt;br/&gt;re-equilibrate the Taproot tree, prune out old subgroups unlikely to be&lt;br/&gt;used and provision future subgroups, all with a compact spend based on&lt;br/&gt;signature aggregation.&lt;br/&gt;&lt;br/&gt;Few new Taproot tree update script primitives have been proposed, e.g [2].&lt;br/&gt;Though I think none with the level of flexibility offered to generate&lt;br/&gt;leaves cut-through spends, or even batch of &amp;#34;cut-through&amp;#34; where M subgroups&lt;br/&gt;are willing to spend N leaves to compose P new subgroups fan-out in Q new&lt;br/&gt;outputs, with showing a single on-chain witness. I believe such a&lt;br/&gt;hypothetical primitive can also reduce the chain space consumed in the&lt;br/&gt;occurrence of naive mass pool withdraws at the same time.&lt;br/&gt;&lt;br/&gt;I think this solution to the high-interactivity issue of payment pools and&lt;br/&gt;factories shifts the burden on each individual user to pre-commit fast&lt;br/&gt;Taproot tree traversals, allowing them to compose new pool subgroups as&lt;br/&gt;fluctuations in pool users&amp;#39; level of liveliness demand it. Pool efficiency&lt;br/&gt;becomes the sum of the quality of user prediction on its counterparties&amp;#39;&lt;br/&gt;liveliness during the construction lifetime. Recursive taproot tree spends&lt;br/&gt;or more efficient accumulator than merkle tree sounds ideas to lower the&lt;br/&gt;on-chain witness space consumed by every pool in the average&lt;br/&gt;non-interactive case.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020370.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020370.html&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-August/004043.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-August/004043.html&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019420.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019420.html&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/20230925/77e3936d/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230925/77e3936d/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-10-03T23:44:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfyyru04szncpwxs7txxaxwcnjua687rgsn8rfqfjtae452ys6epgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zsg7c5s</id>
    
      <title type="html">📅 Original date posted:2023-08-14 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfyyru04szncpwxs7txxaxwcnjua687rgsn8rfqfjtae452ys6epgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zsg7c5s" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8gg30nglxww5c0c5st48gp28l67m9p3qluy5u0urqglzhsvyw8jgtz47rh&#39;&gt;nevent1q…47rh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-08-14&lt;br/&gt;🗒️ Summary of this message: The author discusses the potential risks of cross-input inspection in Bitcoin contracts, such as miners bribing contracts to censor transactions. They propose using flags or tags to enable selective introspection of inputs/outputs. The author also mentions the need for more malleability and efficient witness space consumption.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Salvatore,&lt;br/&gt;&lt;br/&gt;&amp;gt; This also allows inspection of other inputs, that was not possible with&lt;br/&gt;the original opcodes.&lt;br/&gt;&lt;br/&gt;I think cross-input inspection (not cross-input signature aggregation which&lt;br/&gt;is different) is opening a pandora box in terms of &amp;#34;malicious&amp;#34; off-chain&lt;br/&gt;contracts than one could design. E.g miners bribing contracts to censor the&lt;br/&gt;confirmation of time-sensitive lightning channel transactions, where the&lt;br/&gt;bribes are paid on the hashrate distribution of miners during the previous&lt;br/&gt;difficulty period, thanks to the coinbase pubkey.&lt;br/&gt;&lt;br/&gt;See &lt;a href=&#34;https://blog.bitmex.com/txwithhold-smart-contracts/&#34;&gt;https://blog.bitmex.com/txwithhold-smart-contracts/&lt;/a&gt; and&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-February/021395.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-February/021395.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I wonder if we might face the dilemma of miners censorship attacks, if we&lt;br/&gt;wish to have more advanced bitcoin contracts, though I think it would be&lt;br/&gt;safe design practice to rule out those types of concerns thanks to smart&lt;br/&gt;bitcoin contracting primitives.&lt;br/&gt;&lt;br/&gt;I think this is a common risk to all second-layers vaults, lightning&lt;br/&gt;channels and payment pools.&lt;br/&gt;&lt;br/&gt;&amp;gt; A flag can disable this behavior&amp;#34;&lt;br/&gt;&lt;br/&gt;More than a binary flag like a matrix could be introduced to encode subset&lt;br/&gt;of introspected inputs /outputs to enable sighash_group-like semantic:&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; There are two defined flags:&lt;br/&gt;&amp;gt; - CCV_FLAG_CHECK_INPUT = 1: if present, &amp;lt;index&amp;gt; refers to an input;&lt;br/&gt;&amp;gt;  otherwise, it refers to an output.&lt;br/&gt;&amp;gt; - CCV_FLAG_IGNORE_OUTPUT_AMOUNT = 2: only defined when _CHECK_INPUT&lt;br/&gt;&amp;gt;  is absent, it disables the deferred checks logic for amounts.&lt;br/&gt;&lt;br/&gt;Or even beyond a matrix, it could be a set of &amp;#34;tags&amp;#34;. There could be a&lt;br/&gt;generalized tag for unstructured data, and another one for bitcoin&lt;br/&gt;transaction / script data types (e.g scriptpubkey, amount, nsequence,&lt;br/&gt;merkle branch) that could be fetched from the taproot annex.&lt;br/&gt;&lt;br/&gt;&amp;gt; After the evaluation of all inputs, it is verified that each output&amp;#39;s&lt;br/&gt;&amp;gt; amount is greater than or equal to the total amount in the bucket&lt;br/&gt;&amp;gt; if that output (validation of the deferred checks).&lt;br/&gt;&lt;br/&gt;At the very least, I think for the payment pool, where you&amp;#39;re fanning-out&lt;br/&gt;satoshis value from a subset of inputs to another subset of outputs, I&lt;br/&gt;think you would need more malleability here.&lt;br/&gt;&lt;br/&gt;&amp;gt; It is unclear if all the special values above will be useful in&lt;br/&gt;&amp;gt; applications; however, as each special case requires very little added&lt;br/&gt;&amp;gt; code, I tried to make the specs as flexible as possible at this time.&lt;br/&gt;&lt;br/&gt;I think this generic framework is interesting for joinpool / coinpool /&lt;br/&gt;payment pool, as you can check that any withdrawal output can be committed&lt;br/&gt;as part of the input scriptpubkey, and spend it on&lt;br/&gt;blessed-with-one-participant-sig script. There is still a big open question&lt;br/&gt;if it&amp;#39;s efficient in terms of witness space consumed.&lt;br/&gt;&lt;br/&gt;That said, I still think you would need at least ANYPREVOUT and more&lt;br/&gt;malleability for the amount transfer validation as laid out above.&lt;br/&gt;&lt;br/&gt;Looking on the `DeferredCheck` framework commit, one obvious low-level&lt;br/&gt;concern is the DoS risk for full-nodes participating in transaction-relay,&lt;br/&gt;and that maybe policy rules should be introduced to keep the worst-CPU&lt;br/&gt;input in the ranges of current transaction spend allowed to propagate on&lt;br/&gt;the network today.&lt;br/&gt;&lt;br/&gt;Thanks for the proposal,&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le dim. 30 juil. 2023 à 22:52, Salvatore Ingala via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have put together a first complete proposal for the core opcodes of&lt;br/&gt;&amp;gt; MATT [1][2].&lt;br/&gt;&amp;gt; The changes make the opcode functionally complete, and the&lt;br/&gt;&amp;gt; implementation is revised and improved.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The code is implemented in the following fork of the&lt;br/&gt;&amp;gt; bitcoin-inquisition repo:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/Merkleize/bitcoin/tree/checkcontractverify&#34;&gt;https://github.com/Merkleize/bitcoin/tree/checkcontractverify&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Therefore, it also includes OP_CHECKTEMPLATEVERIFY, as in a&lt;br/&gt;&amp;gt; previous early demo for vaults [3].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please check out the diff [4] if you are interested in the&lt;br/&gt;&amp;gt; implementation details. It includes some basic functional tests for&lt;br/&gt;&amp;gt; the main cases of the opcode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Changes vs the previous draft&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; These are the changes compared to the initial incomplete proposal:&lt;br/&gt;&amp;gt; - OP_CHECK{IN,OUT}CONTRACTVERIFY are replaced by a single opcode&lt;br/&gt;&amp;gt;   OP_CHECKCONTRACTVERIFY (CCV). An additional `flags` parameter allows&lt;br/&gt;&amp;gt;   to specify if the opcode operates on an input or an output.&lt;br/&gt;&amp;gt;   This also allows inspection of other inputs, that was not possible&lt;br/&gt;&amp;gt;   with the original opcodes.&lt;br/&gt;&amp;gt; - For outputs, the default behavior is to have the following deferred&lt;br/&gt;&amp;gt;   checks mechanism for amounts: all the inputs that have a CCV towards&lt;br/&gt;&amp;gt;   the same output, have their input amounts summed, and that act as a&lt;br/&gt;&amp;gt;   lower bound for that output&amp;#39;s amount.&lt;br/&gt;&amp;gt;   A flag can disable this behavior. [*]&lt;br/&gt;&amp;gt; - A number of special values of the parameters were defined in order&lt;br/&gt;&amp;gt;   to optimize for common cases, and add some implicit introspection.&lt;br/&gt;&amp;gt; - The order of parameters is modified (particularly, &amp;lt;data&amp;gt; is at the&lt;br/&gt;&amp;gt;   bottom of the arguments, as so is more natural when writing Scripts).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Semantics&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The new OP_CHECKCONTRACTVERIFY takes 5 parameters from the stack:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   &amp;lt;data&amp;gt;, &amp;lt;index&amp;gt;, &amp;lt;pk&amp;gt;, &amp;lt;taptree&amp;gt;, &amp;lt;flags&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The core logic of the opcode is as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;Check if the &amp;lt;index&amp;gt;-th input/output&amp;#39;s scriptPubKey is a P2TR&lt;br/&gt;&amp;gt; whose public key is obtained from &amp;lt;pk&amp;gt;, (optionally) tweaked with&lt;br/&gt;&amp;gt; &amp;lt;data&amp;gt;, (optionally) tap-tweaked with &amp;lt;taptree&amp;gt;&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The following are special values of the parameters:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - if &amp;lt;pk&amp;gt; is empty, it is replaced with a fixed NUMS point. [**]&lt;br/&gt;&amp;gt; - if &amp;lt;pk&amp;gt; is -1, it is replaced with the current input&amp;#39;s taproot&lt;br/&gt;&amp;gt;   internal key.&lt;br/&gt;&amp;gt; - if &amp;lt;index&amp;gt; is -1, it is replaced with the current input&amp;#39;s index.&lt;br/&gt;&amp;gt; - if &amp;lt;data&amp;gt; is empty, the data tweak is skipped.&lt;br/&gt;&amp;gt; - if &amp;lt;taptree&amp;gt; is empty, the taptweak is skipped.&lt;br/&gt;&amp;gt; - if &amp;lt;taptree&amp;gt; is -1, it is replaced with the current input&amp;#39;s root&lt;br/&gt;&amp;gt;   of the taproot merkle tree.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are two defined flags:&lt;br/&gt;&amp;gt; - CCV_FLAG_CHECK_INPUT = 1: if present, &amp;lt;index&amp;gt; refers to an input;&lt;br/&gt;&amp;gt;   otherwise, it refers to an output.&lt;br/&gt;&amp;gt; - CCV_FLAG_IGNORE_OUTPUT_AMOUNT = 2: only defined when _CHECK_INPUT&lt;br/&gt;&amp;gt;   is absent, it disables the deferred checks logic for amounts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Finally, if both the flags CCV_FLAG_CHECK_INPUT and&lt;br/&gt;&amp;gt; CCV_FLAG_IGNORE_OUTPUT_AMOUNT are absent:&lt;br/&gt;&amp;gt;   - Add the current input&amp;#39;s amount to the &amp;lt;index&amp;gt;-th output&amp;#39;s bucket.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After the evaluation of all inputs, it is verified that each output&amp;#39;s&lt;br/&gt;&amp;gt; amount is greater than or equal to the total amount in the bucket&lt;br/&gt;&amp;gt; if that output (validation of the deferred checks).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Comment&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is unclear if all the special values above will be useful in&lt;br/&gt;&amp;gt; applications; however, as each special case requires very little added&lt;br/&gt;&amp;gt; code, I tried to make the specs as flexible as possible at this time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With this new opcode, the full generality of MATT (including the fraud&lt;br/&gt;&amp;gt; proofs) can be obtained with just two opcodes: OP_CHECKCONTRACTVERIFY&lt;br/&gt;&amp;gt; and OP_CAT.&lt;br/&gt;&amp;gt; However, additional opcodes (and additional introspection) would&lt;br/&gt;&amp;gt; surely benefit some applications.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I look forward to your comments, and to start drafting a BIP proposal.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Salvatore Ingala&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [*] - Credits go to James O&amp;#39;Beirne for this approach, taken from his&lt;br/&gt;&amp;gt;       OP_VAULT proposal. I cherry-picked the commit containing the&lt;br/&gt;&amp;gt;       Deferred Checks framework.&lt;br/&gt;&amp;gt; [**] - The same NUMS point suggested in BIP-0341 was used.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; References:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] - &lt;a href=&#34;https://merkle.fun/&#34;&gt;https://merkle.fun/&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] -&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-November/021182.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-November/021182.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [3] -&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-April/021588.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-April/021588.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [4] -&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin-inquisition/bitcoin/compare/24.0...Merkleize:bitcoin:checkcontractverify&#34;&gt;https://github.com/bitcoin-inquisition/bitcoin/compare/24.0...Merkleize:bitcoin:checkcontractverify&lt;/a&gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20230814/cef35006/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230814/cef35006/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-08-16T02:45:52&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdvcqetwwcy8unt29naaneh6m2zxcaxnr54akd9dkdnl7tcd4mzdqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zrpjv2u</id>
    
      <title type="html">📅 Original date posted:2023-07-25 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdvcqetwwcy8unt29naaneh6m2zxcaxnr54akd9dkdnl7tcd4mzdqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zrpjv2u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2aa66fneanycnjjffwl85hf5k37xmkzw9tnqvx4hs3v2ahzrlwlsadacuc&#39;&gt;nevent1q…acuc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-25&lt;br/&gt;🗒️ Summary of this message: Proposal to use a tapscript branch instead of MuSig2 signing for unilateral closes in the Lightning Network. Discusses dynamic fees and Bitcoin as a universal clock.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Zeeman,&lt;br/&gt;&lt;br/&gt;&amp;gt; A proposal I made in the Signal group after the summit would be to not&lt;br/&gt;use MuSig2 signing for commitment transactions (== unilateral closes).&lt;br/&gt;&amp;gt; Instead, we add a tapscript branch that is just `&amp;lt;A&amp;gt; OP_CHECKSIGVERIFY&lt;br/&gt;&amp;lt;B&amp;gt; OP_CHECKSIG` and use that for unilateral closes.&lt;br/&gt;&amp;gt; We only sign with MuSig2 on mutual closes, after we have negotiated&lt;br/&gt;closing fees (whether that is the current long closing conversation, or&lt;br/&gt;simplified closing) so that only mutual closes require nonce&lt;br/&gt;&amp;gt; storage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As mutual closes assume continuous connectivity anyway, we can keep&lt;br/&gt;counterparty nonces in volatile RAM and not store nonces in persistent&lt;br/&gt;storage; if a disconnection occurs, we just remove it from&lt;br/&gt;&amp;gt; volatile RAM and restart the mutual close negotiation on reconnection.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is more palatable as even with a very restrictive hardware device&lt;br/&gt;you do not have to store the peer nonce in persistent storage.&lt;br/&gt;&amp;gt; The hope is that mutual closes dominate over unilateral closes.&lt;br/&gt;&lt;br/&gt;Hardware devices with reasonable persistent storage sounds cheaper than the&lt;br/&gt;additional fee-bumping reverse one (locally or a third-party), must&lt;br/&gt;conserve to pay for the probabilistic worst-case `&amp;lt;A&amp;gt; OP_CHECKSIGVERIFY &amp;lt;B&amp;gt;&lt;br/&gt;OP_CHECKSIG` satisfying witness.&lt;br/&gt;&lt;br/&gt;&amp;gt; Conditinoal fees already on the Lightning Network are already dynamic,&lt;br/&gt;with many people (including myself) writing software that measures demand&lt;br/&gt;and changes price accordingly.&lt;br/&gt;&amp;gt; Why would unconditional fees be necessarily static, when there is no&lt;br/&gt;mention of it being static?&lt;br/&gt;&lt;br/&gt;While I&amp;#39;m in sync with you on the Lightning Network being a system driven&lt;br/&gt;by demand and charge price accordingly, some of the recent jamming&lt;br/&gt;mitigation proposals where build on the proposal of &amp;#34;static fees&amp;#34; or&lt;br/&gt;unconditional fees, e.g &lt;a href=&#34;https://eprint.iacr/2022/1454.pdf&#34;&gt;https://eprint.iacr/2022/1454.pdf&lt;/a&gt;. As soon as you&lt;br/&gt;start to think in terms of dynamic fees, you start to have issues w.r.t&lt;br/&gt;gossip convergence delays and rate-limitation of your local unconditional&lt;br/&gt;fees updates.&lt;br/&gt;&lt;br/&gt;&amp;gt; Given a &amp;#34;stereotypical&amp;#34; forwarding node, what is the most likely&lt;br/&gt;subjective valuation?&lt;br/&gt;&amp;gt; If a node is not a stereotypical forwarding node, how does it deviate&lt;br/&gt;from the stereotypical one?&lt;br/&gt;&lt;br/&gt;Answer is a function of your collection of historical forwarding HTLC&lt;br/&gt;traffic and secondary source of information.&lt;br/&gt;Somehow the same as for base-layer fee-estimation, the more consistent your&lt;br/&gt;mempool data-set, the better will be your valuation.&lt;br/&gt;&lt;br/&gt;&amp;gt; The problem is that the Bitcoin clock is much too coarsely grained, with&lt;br/&gt;chain height advances occasionally taking several hours in the so-called&lt;br/&gt;&amp;#34;real world&amp;#34; I have heard much rumor about.&lt;br/&gt;&lt;br/&gt;Sure, I still think Bitcoin as a universal clock is still the most costly&lt;br/&gt;for a Lightning counterparty to game on, if it has to be used as a&lt;br/&gt;mechanism to arbitrate the fees / reputation paid for the in-flight&lt;br/&gt;duration of a HTLC. Even relying on timestamp sounds to offer some margin&lt;br/&gt;of malleation (e.g advance of max 2h, consensus rule) if you have hashrate&lt;br/&gt;capabilities.&lt;br/&gt;&lt;br/&gt;&amp;gt; Would not the halt of the channel progress be considered worthy of a&lt;br/&gt;reputation downgrade by itself?&lt;br/&gt;&lt;br/&gt;That&amp;#39;s an interesting point, rather than halting channel progress being&lt;br/&gt;marked as a strict reputation downgrade, you could negotiate a &amp;#34;grace&lt;br/&gt;delay&amp;#34; during which channel progress must be made forward (to allow for&lt;br/&gt;casualties like software upgrade or connectivity issue).&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 24 juil. 2023 à 09:14, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - For taproot/musig2 we need nonces:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Today we store the commitment signature from the remote party. We&lt;br/&gt;&amp;gt; don’t need to store our own signature - we can sign at time of broadcast.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - To be able to sign you need the verification nonce - you could&lt;br/&gt;&amp;gt; remember it, or you could use a counter:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Counter based:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - We re-use shachain and then just use it to generate nonces.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Start with a seed, derive from that, use it to generate nonces.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - This way you don’t need to remember state, since it can always be&lt;br/&gt;&amp;gt; generated from what you already have.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Why is this safe?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - We never re-use nonces.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - The remote party never sees your partial signature.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - The message always stays the same (the dangerous re-use case is&lt;br/&gt;&amp;gt; using the same nonce for different messages).&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - If we used the same nonce for different messages we could leak our&lt;br/&gt;&amp;gt; key.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - You can combine the sighash &#43; nonce to make it unique - this also&lt;br/&gt;&amp;gt; binds more.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Remote party will only see the full signature on chain, never your&lt;br/&gt;&amp;gt; partial one.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Each party has sign and verify nonces, 4 total.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Co-op close only has 2 because it’s symmetric.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; (I don&amp;#39;t know when mailing list post max size will be reached)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Counter-based nonces versus stateful memorization of them from a user&lt;br/&gt;&amp;gt; perspective depends on the hardware capabilities you have access to.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The taproot schnorr flow could be transparent from the underlying&lt;br/&gt;&amp;gt; signature scheme (FROST, musig2, TAPS in the future maybe).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A proposal I made in the Signal group after the summit would be to not use&lt;br/&gt;&amp;gt; MuSig2 signing for commitment transactions (== unilateral closes).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Instead, we add a tapscript branch that is just `&amp;lt;A&amp;gt; OP_CHECKSIGVERIFY &amp;lt;B&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKSIG` and use that for unilateral closes.&lt;br/&gt;&amp;gt; We only sign with MuSig2 on mutual closes, after we have negotiated&lt;br/&gt;&amp;gt; closing fees (whether that is the current long closing conversation, or&lt;br/&gt;&amp;gt; simplified closing) so that only mutual closes require nonce storage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As mutual closes assume continuous connectivity anyway, we can keep&lt;br/&gt;&amp;gt; counterparty nonces in volatile RAM and not store nonces in persistent&lt;br/&gt;&amp;gt; storage; if a disconnection occurs, we just remove it from volatile RAM and&lt;br/&gt;&amp;gt; restart the mutual close negotiation on reconnection.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is more palatable as even with a very restrictive hardware device you&lt;br/&gt;&amp;gt; do not have to store the peer nonce in persistent storage.&lt;br/&gt;&amp;gt; The hope is that mutual closes dominate over unilateral closes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - We run into the same pricing issues.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Why these combinations?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Since scarce resources are essentially monetary, we think that&lt;br/&gt;&amp;gt; unconditional fees are the simplest possible monetary solution.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Unconditional Fees:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - As a sender, you’re building a route and losing money if it doesn’t&lt;br/&gt;&amp;gt; go through?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Yes, but they only need to be trivially small compared to success&lt;br/&gt;&amp;gt; case fee budgets.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - You can also eventually succeed so long as you retry enough, even if&lt;br/&gt;&amp;gt; failure rates are very high.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - How do you know that these fees will be small? The market could&lt;br/&gt;&amp;gt; decide otherwise.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Static unconditional fees is a limited tool in a world where rational&lt;br/&gt;&amp;gt; economic actors are pricing their liquidity in function of demand.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Conditinoal fees already on the Lightning Network are already dynamic,&lt;br/&gt;&amp;gt; with many people (including myself) writing software that measures demand&lt;br/&gt;&amp;gt; and changes price accordingly.&lt;br/&gt;&amp;gt; Why would unconditional fees be necessarily static, when there is no&lt;br/&gt;&amp;gt; mention of it being static?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - We have to allow some natural rate of failure in the network.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - An attacker can still aim to fall just below that failure threshold&lt;br/&gt;&amp;gt; and go through multiple channels to attack an individual channel.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - THere isn’t any way to set a bar that an attacker can’t fall just&lt;br/&gt;&amp;gt; beneath.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Isn’t this the same for reputation? We have a suggestion for&lt;br/&gt;&amp;gt; reputation but all of them fail because they can be gamed below the bar.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - If reputation matches the regular operation of nodes on the network,&lt;br/&gt;&amp;gt; you will naturally build reputation up over time.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - If we do not match reputation accumulation to what normal nodes do,&lt;br/&gt;&amp;gt; then an attacker can take some other action to get more reputation than the&lt;br/&gt;&amp;gt; rest of the network. We don’t want attackers to be able to get ahead of&lt;br/&gt;&amp;gt; regular nodes.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Let’s say you get one point for success and one for failure, a&lt;br/&gt;&amp;gt; normal node will always have bad reputation. An attacker could then send 1&lt;br/&gt;&amp;gt; say payments all day long, pay a fee for it &amp;gt; and gain reputation.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - Can you define jamming? Is it stuck HTLCs or a lot of 1 sat HTLCS&lt;br/&gt;&amp;gt; spamming up your DB?&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Jamming is an economic notion, as such relying on the subjectivism of&lt;br/&gt;&amp;gt; node appreciation of local ressources.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given a &amp;#34;stereotypical&amp;#34; forwarding node, what is the most likely&lt;br/&gt;&amp;gt; subjective valuation?&lt;br/&gt;&amp;gt; If a node is not a stereotypical forwarding node, how does it deviate from&lt;br/&gt;&amp;gt; the stereotypical one?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - The dream solution is to only pay for the amount of time that a HTLC&lt;br/&gt;&amp;gt; is held in flight.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - The problem here is that there’s no way to prove time when things go&lt;br/&gt;&amp;gt; wrong, and any solution without a universal clock will fall back on&lt;br/&gt;&amp;gt; cooperation which breaks down in the case of &amp;gt; an attack.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; There is a universal clock in Bitcoin called the chain height advances.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The problem is that the Bitcoin clock is much too coarsely grained, with&lt;br/&gt;&amp;gt; chain height advances occasionally taking several hours in the so-called&lt;br/&gt;&amp;gt; &amp;#34;real world&amp;#34; I have heard much rumor about.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - What NACK says is: I’ve ignored all of your updates and I’m&lt;br/&gt;&amp;gt; progressing to the next commitment.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If resource bucketing or link-level liquidity management starts to be&lt;br/&gt;&amp;gt; involved, one can mask behind &amp;#34;NACK&amp;#34; to halt the channel progress, without&lt;br/&gt;&amp;gt; the reputation downgrade. Layer violation issue.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Would not the halt of the channel progress be considered worthy of a&lt;br/&gt;&amp;gt; reputation downgrade by itself?&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;-------------- 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/20230726/4858e570/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230726/4858e570/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-07-27T02:22:34&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdw0jrpcnem9lxgwe0dzyl03sm0saf4yrm07cw49kx8g7w0ug24vczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqykl8e</id>
    
      <title type="html">📅 Original date posted:2023-07-20 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdw0jrpcnem9lxgwe0dzyl03sm0saf4yrm07cw49kx8g7w0ug24vczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqykl8e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgl8e058krt5zemjvwgpgvd6k0aqqpfw4yw47sjw4q6g0e0u2gxhgx5x3lv&#39;&gt;nevent1q…x3lv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-20&lt;br/&gt;🗒️ Summary of this message: The author discusses the development approach for consensus change primitives and mentions the importance of individual judgment for each BOLT. They also highlight the uncertainty surrounding Simplicity for small party channels and suggest exploring formal verification.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Greg,&lt;br/&gt;&lt;br/&gt;I&amp;#39;m very meeting your development approach with regards to starting smalls&lt;br/&gt;about consensus change primitives, and I think taproot has demonstrated&lt;br/&gt;some good historical process, which has good archives about how development&lt;br/&gt;was conducted (e.g the community-wide taproot review of which the Bitcoin&lt;br/&gt;Contracting Primitives WG was built on this experience [0]).&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know about saying that the BOLTs (and its process) should be&lt;br/&gt;authoritative over the running code of implementations. While it&amp;#39;s&lt;br/&gt;definitely a mark of some bar of technical review and inter-compatibility,&lt;br/&gt;I think ultimately each BOLT has to be judged individually on its own&lt;br/&gt;technical merits. And I think we had a bunch of cases in the past when &amp;#34;the&lt;br/&gt;map is not the territory&amp;#34;. Even there are few areas of critical Lightning&lt;br/&gt;operations which are not documented by the BOLTs to the best of my&lt;br/&gt;knowledge (such as fee-bumping and transactions broadcast reactions as it&lt;br/&gt;was for on-chain DLCs [1]).&lt;br/&gt;&lt;br/&gt;Lastly, there is a huge area of uncertainty about the technical fitness of&lt;br/&gt;Simplicity for 2/small party channels. I remember a Russell O&amp;#39;connor&lt;br/&gt;presentation about Simplicity back in Paris (2017 or 2018 ?) and asking him&lt;br/&gt;how it would work in a chain of transactions, while the answer was iirc&lt;br/&gt;&amp;#34;yes it has been designed with this constraint&amp;#34;, it&amp;#39;s a very open question&lt;br/&gt;when you have off-chain states which advances in independence from the&lt;br/&gt;on-chain state between a dynamic number of counterparties (kinda the&lt;br/&gt;interactivity issue for payment pools). Here I guess you would have to come&lt;br/&gt;to a consensus to the model of logic followed for the analysis of such&lt;br/&gt;distributed systems e.g Leslie Lamport&amp;#39;s temporal logic [2]. Additionally,&lt;br/&gt;the theoretical foundations on the Coq prover are still actively studied by&lt;br/&gt;Xavier Leroy at the College de France and some novel insights might be&lt;br/&gt;interesting for using formal verification in terms of Bitcoin consensus&lt;br/&gt;changes development (and I don&amp;#39;t know if all the works and lessons have&lt;br/&gt;been translated from French to English).&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/ajtowns/taproot-review&#34;&gt;https://github.com/ajtowns/taproot-review&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Non-Interactive-Protocol.md&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Non-Interactive-Protocol.md&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://en.wikipedia.org/wiki/Temporal_logic_of_actions&#34;&gt;https://en.wikipedia.org/wiki/Temporal_logic_of_actions&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le mer. 19 juil. 2023 à 21:45, Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hello Keagen,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Most of the complexity of LN cannot be resolved with covenants. Of the&lt;br/&gt;&amp;gt; things that can be simplified in my experience, you&amp;#39;re going to need more&lt;br/&gt;&amp;gt; than CTV to get significant gains. And in the end, channels can only get so&lt;br/&gt;&amp;gt; simple since we have many other BOLTs to deal with. And even then, you&amp;#39;re&lt;br/&gt;&amp;gt; going to have to convince LN spec writers to include such changes, whatever&lt;br/&gt;&amp;gt; they are, then get deployment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Step 1 is finding a primitive that seems interesting. It&amp;#39;s important to&lt;br/&gt;&amp;gt; moderate enthusiasm for any primitive with reality, and probably by being&lt;br/&gt;&amp;gt; concrete by writing specs that use a primitive, and code it up to discover&lt;br/&gt;&amp;gt; what we&amp;#39;re overlooking. We&amp;#39;re always overlooking something! In my humble&lt;br/&gt;&amp;gt; opinion these are step 2 and 3 of gathering mind-share.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As a more productive tact, if we&amp;#39;re thinking beyond 2/small party&lt;br/&gt;&amp;gt; channels, probably better to snap your fingers, pretend we have Simplicity,&lt;br/&gt;&amp;gt; see what we can build, and work backwards from there to see if we can&lt;br/&gt;&amp;gt; accomplish this within the confines of bitcoin script?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Greg&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Jul 19, 2023 at 3:59 PM Keagan McClelland via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thank you for the effort you&amp;#39;ve put towards this. I generally agree that&lt;br/&gt;&amp;gt;&amp;gt; a smooth functioning Lightning Network is of greater importance than&lt;br/&gt;&amp;gt;&amp;gt; advanced contracting capabilities. However, as I dive deeper into some of&lt;br/&gt;&amp;gt;&amp;gt; the more ambitious goals for LN development I am learning that a great deal&lt;br/&gt;&amp;gt;&amp;gt; of complexity of some current lightning (LN) proposals can be handily&lt;br/&gt;&amp;gt;&amp;gt; discharged with CTV. While I am not intimately familiar with all of the&lt;br/&gt;&amp;gt;&amp;gt; other covenant schemes to the same level of technical proficiency, I have a&lt;br/&gt;&amp;gt;&amp;gt; suspicion that a number of them, if not all of them, are capable of&lt;br/&gt;&amp;gt;&amp;gt; discharging the same flavor and amount of complexity as well. Others should&lt;br/&gt;&amp;gt;&amp;gt; chime in if they can confirm this claim.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I have been publicly on the record as supporting the addition of some&lt;br/&gt;&amp;gt;&amp;gt; covenant scheme into Bitcoin for some time and have long held on&lt;br/&gt;&amp;gt;&amp;gt; theoretical grounds that the addition of such a mechanism is both necessary&lt;br/&gt;&amp;gt;&amp;gt; and inevitable if Bitcoin is to survive in the long term. However, as I&amp;#39;ve&lt;br/&gt;&amp;gt;&amp;gt; started to work more directly with the Lightning protocol, these&lt;br/&gt;&amp;gt;&amp;gt; theoretical and purely logical arguments became far more concrete and&lt;br/&gt;&amp;gt;&amp;gt; immediately beneficial.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I say this primarily to challenge the idea that covenants are a&lt;br/&gt;&amp;gt;&amp;gt; distraction from lightning development. It may very well be that your areas&lt;br/&gt;&amp;gt;&amp;gt; of focus on LN preclude you from splitting your attention and none of this&lt;br/&gt;&amp;gt;&amp;gt; email should be interpreted as a criticism of you applying your efforts in&lt;br/&gt;&amp;gt;&amp;gt; the highest leverage manner you can manage. That said, I don&amp;#39;t want&lt;br/&gt;&amp;gt;&amp;gt; observers of this thread to walk away with the impression that they are two&lt;br/&gt;&amp;gt;&amp;gt; independent efforts as covenants can significantly contribute to LN&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; maturity. When and how should they be prioritized? Unfortunately I don&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; feel able to comment on that at this time. All I know is that Lightning&lt;br/&gt;&amp;gt;&amp;gt; would almost certainly benefit substantially from having a covenant&lt;br/&gt;&amp;gt;&amp;gt; primitive.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Keags&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Tue, Jul 18, 2023 at 3:40 PM Antoine Riard via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Last year amid the failure of the CTV speedy trial activation and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; intense conversations about a rainbow of covenant proposals, I introduced&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the idea of a new community process to specify covenants [0]. This post is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to resume the experiment so far and officially mark the process maintenance&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; as &amp;#34;up for grabs&amp;#34;, as I won&amp;#39;t actively pursue it further (after wavering on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; such a decision a bit during May / June).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Few of the goals announced at that time were to build a consistent&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; framework to evaluate covenant proposals, see the common grounds between&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; proposals if they could be composed or combined by their authors, open the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; consensus  changes development process beyond the historical boundaries of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Bitcoin Core and maintain high-quality technical archive as a consensus&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; discussions have spawned half a decade from intellectual conception to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; activation in average (at least for segwit, schnorr, taproot).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Such effort was a speak-by-the-act answer to the issues in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; consensus development changes pointed out by Jeremy Rubin in April of last&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; year [1]: namely the lack of a &amp;#34;codified checklist&amp;#34; for consensus changes,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that &amp;#34;consensus is memoryless&amp;#34; and &amp;#34;bitcoin core is not bitcoin&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (independently of the technical concerns as I have as limited or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; non-adequate primitive for vaults / payment pools I expressed during the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; same time). Other complementary initiatives have been undertaken during the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; same period, AJ with the bitcoin-inquisition fork where the community of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; developers and contracting primitives of researchers on a consensus-enabled&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fork of core [2]. And Dave Harding with the careful archiving of all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; covenant proposals under the Optech umbrella [3].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; About the Bitcoin Contracting Primitives WG, a Github repository was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; started and maintained to archive and document all the primitives (apo,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; tluv, ctv, the taproot annex, sighash_group, CSFS, cat, txhash, evict,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; check_output_covenant_verify, inherited ids, anyamount, singletons,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; op_vault) and the corresponding protocols (payment pools, vaults,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; drivechains, trust-minimized mining pools payouts). We had a total of 6&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; monthly meetings on the Libera chat #bitcoin-contracting-primitives-wg for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a number of more than 20 individual attendees representing most of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; parts of the community. I think (missing march logs). Numerous in-depth&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; discussions did happen on the repository and on the channel on things like&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;merkelized all the things&amp;#34; or &amp;#34;payment pools for miners payoffs&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As I&amp;#39;ve been busy on the Lightning-side and other Bitcoin projects, I&amp;#39;ve&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; not run an online meeting since the month of April, while still having a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bunch of fruitful technical discussions with folks involved in the effort&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; at conferences and elsewhere. I launched the effort as an experiment with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the soft commitment to dedicate 20% of my time on it, after few successful&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sessions I think such a process has an interest of its own, however it&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; comes with direct competition of my time to work on Lightning robustness.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Getting my hands dirty on low-level LDK development recently made me&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; realize we still have years of titan work to get a secure and reliable&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning Network.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As such, between extended covenant capabilities for advanced contracts&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; coming as a reality for Bitcoin _or_ LN working smoothly at scale with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 50-100M UTXO-sharing users on it during the next 5-7 years cycle, I think&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the latter goal is more critical for Bitcoin existential survival, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; where on a personal title I&amp;#39;ll allocate the best of my time and energy (and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; somehow it match the &amp;#34;slow&amp;#34; technical activity on bitcoin-inquisition&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mostly done by Lightning hands).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This is my personal conclusion only on the state of Bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; technological momentum, and this is quite tainted by my deep background in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning development. If you&amp;#39;ve been working on covenant changes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; proposals, please don&amp;#39;t take it as a discouragement, I think Taproot&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (privacy-preserving script policies behind the taproot tree branches) and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Schnorr (for native multi-sig) soft forks have shown how it can improve the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; building of self-custody solutions by one or two order of magnitude, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; small incremental changes might be good enough to have a lower technical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; consensus bar.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On my side, I&amp;#39;ll pursue pure R&amp;amp;D works on CoinPool, notably coming with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; better solutions with the interactivity issue and mass-compression of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; withdrawal and design exotic advanced Bitcoin contracts based on the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; taproot annex, though more in a &amp;#34;l&amp;#39;art pour l&amp;#39;art&amp;#34; approach for the time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; being [4]. Additionally, I might start to submit an in-depth security&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; review of consensus changes under pseudonyms, it has already been done in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the past and somehow it&amp;#39;s good practice in terms of &amp;#34;message neutrality&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [5]. If folks wanna experiment in terms of payment pools deployment, Greg&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Maxwell&amp;#39;s old joinpool can be used today (and somehow it&amp;#39;s worthy of its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; own as a net advance for coinjoins).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;ll honestly acknowledge towards the community, I might have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; overpromised with the kickstart of this new process aiming to move the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; frontlines in matters of Bitcoin consensus changes development process. On&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the other hand, I think enough sessions of the working group have been&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; runned and enough marks of technical interests have been collected to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; demonstrate the minimal value of such a process, so I would estimate my&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; open-source balance sheet towards the community to be in good standing ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (open-minded question).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I don&amp;#39;t think Bitcoin fundamentally lacks compelling technical proposals&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to advance the capabilities of Bitcoin Script today, nor the crowd of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; seasoned and smart protocol developers to evaluate mature proposals&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; end-to-end and on multiple dimensions with a spirit of independence.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rather, I believe what Bitcoin is lacking is a small crowd of technical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; historians and archivist doing the work of assessing, collecting and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; preserving consensus changes proposals and QA devs to ensure any consensus&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; change proposals has world-class battle-ground testing before to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; considered for deployment, ideally with the best standards of Bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; decentralization and FOSS neutrality [6].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If you would like to pursue the maintenance and nurturing of the Bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Contracting Primitives WG (or the bitcoin-inquisition fork or collaborate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; with Optech to organize industry-wise workshop on covenants at the image of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; what has been done in 2019 for Taproot), that you&amp;#39;re willing to show&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; proof-of-work and you estimate that operational ground, legal information&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; or financial resources will anchor your individual work on the long-term,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; don&amp;#39;t hesitate to reach out, I&amp;#39;ll see what I can do with a disinterested&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mind [7].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; With humility,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [0]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-July/020763.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-July/020763.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [1]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020233.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020233.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [2]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020921.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020921.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/bitcoinops/bitcoinops.github.io/pull/806&#34;&gt;https://github.com/bitcoinops/bitcoinops.github.io/pull/806&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [4] Version 0.2 of the CoinPool whitepaper addressing most of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; remaining &amp;#34;Big Problems&amp;#34; is still pending on my visit to co-author Gleb&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Naumenko in Ukraine, which has been postponed few times in light of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; conflict operational evolutions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [5] See&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017614.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017614.html&lt;/a&gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For the philosophical reasons of doing so, I invite you to read Foucault&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; famous essay &amp;#34;Le philosophe masque&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [6] Somehow I come to share Jeremy&amp;#39;s thesis&amp;#39;s &amp;#34;Product management is not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;my Job&amp;#34; it&amp;#39;s yours&amp;#34; in matters of consensus changes. I believe we might be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; past the technical complexity threshold where even simple consensus changes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; can be conducted from A to Z as a one man job or even by a group of 2/3&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; elite devs.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [7] I&amp;#39;ve been reached out multiple times and consistently by R&amp;amp;D&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; non-profits, plebs whales and VC firms who were interested to commit&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; resources to advance softforks and covenants in the Bitcoin space, no doubt&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; when you&amp;#39;re reliable and with a track record, folks are ready to offer you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; opportunities to work full-time on consensus changes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20230720/364b91a0/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230720/364b91a0/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-07-20T11:54:05&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvqtyrqxzagrwntvly03qn0a5gt7rq4pxs56n8ndwvjq3uhuhjadczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zg4ysev</id>
    
      <title type="html">📅 Original date posted:2023-07-18 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvqtyrqxzagrwntvly03qn0a5gt7rq4pxs56n8ndwvjq3uhuhjadczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zg4ysev" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszyx5d6qs4x4qdvwcc63wyk2qdut9n3z5g4hpsmrgg67t3w24pnwqfckhh5&#39;&gt;nevent1q…khh5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-07-18&lt;br/&gt;🗒️ Summary of this message: Last year, a new community process for specifying covenants was introduced, but the person behind it will no longer actively pursue it. Efforts were made to build a framework for evaluating covenant proposals and expand the consensus changes development process. Other initiatives were also undertaken during the same period. A Github repository was created to document Bitcoin contracting primitives and corresponding protocols. Monthly meetings were held with attendees from various parts of the community. However, the person behind the process has been busy with other Bitcoin projects and has not held online meetings since April.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi list,&lt;br/&gt;&lt;br/&gt;Last year amid the failure of the CTV speedy trial activation and intense&lt;br/&gt;conversations about a rainbow of covenant proposals, I introduced the idea&lt;br/&gt;of a new community process to specify covenants [0]. This post is to resume&lt;br/&gt;the experiment so far and officially mark the process maintenance as &amp;#34;up&lt;br/&gt;for grabs&amp;#34;, as I won&amp;#39;t actively pursue it further (after wavering on such a&lt;br/&gt;decision a bit during May / June).&lt;br/&gt;&lt;br/&gt;Few of the goals announced at that time were to build a consistent&lt;br/&gt;framework to evaluate covenant proposals, see the common grounds between&lt;br/&gt;proposals if they could be composed or combined by their authors, open the&lt;br/&gt;consensus  changes development process beyond the historical boundaries of&lt;br/&gt;Bitcoin Core and maintain high-quality technical archive as a consensus&lt;br/&gt;discussions have spawned half a decade from intellectual conception to&lt;br/&gt;activation in average (at least for segwit, schnorr, taproot).&lt;br/&gt;&lt;br/&gt;Such effort was a speak-by-the-act answer to the issues in&lt;br/&gt;consensus development changes pointed out by Jeremy Rubin in April of last&lt;br/&gt;year [1]: namely the lack of a &amp;#34;codified checklist&amp;#34; for consensus changes,&lt;br/&gt;that &amp;#34;consensus is memoryless&amp;#34; and &amp;#34;bitcoin core is not bitcoin&amp;#34;&lt;br/&gt;(independently of the technical concerns as I have as limited or&lt;br/&gt;non-adequate primitive for vaults / payment pools I expressed during the&lt;br/&gt;same time). Other complementary initiatives have been undertaken during the&lt;br/&gt;same period, AJ with the bitcoin-inquisition fork where the community of&lt;br/&gt;developers and contracting primitives of researchers on a consensus-enabled&lt;br/&gt;fork of core [2]. And Dave Harding with the careful archiving of all&lt;br/&gt;covenant proposals under the Optech umbrella [3].&lt;br/&gt;&lt;br/&gt;About the Bitcoin Contracting Primitives WG, a Github repository was&lt;br/&gt;started and maintained to archive and document all the primitives (apo,&lt;br/&gt;tluv, ctv, the taproot annex, sighash_group, CSFS, cat, txhash, evict,&lt;br/&gt;check_output_covenant_verify, inherited ids, anyamount, singletons,&lt;br/&gt;op_vault) and the corresponding protocols (payment pools, vaults,&lt;br/&gt;drivechains, trust-minimized mining pools payouts). We had a total of 6&lt;br/&gt;monthly meetings on the Libera chat #bitcoin-contracting-primitives-wg for&lt;br/&gt;a number of more than 20 individual attendees representing most of the&lt;br/&gt;parts of the community. I think (missing march logs). Numerous in-depth&lt;br/&gt;discussions did happen on the repository and on the channel on things like&lt;br/&gt;&amp;#34;merkelized all the things&amp;#34; or &amp;#34;payment pools for miners payoffs&amp;#34;.&lt;br/&gt;&lt;br/&gt;As I&amp;#39;ve been busy on the Lightning-side and other Bitcoin projects, I&amp;#39;ve&lt;br/&gt;not run an online meeting since the month of April, while still having a&lt;br/&gt;bunch of fruitful technical discussions with folks involved in the effort&lt;br/&gt;at conferences and elsewhere. I launched the effort as an experiment with&lt;br/&gt;the soft commitment to dedicate 20% of my time on it, after few successful&lt;br/&gt;sessions I think such a process has an interest of its own, however it&lt;br/&gt;comes with direct competition of my time to work on Lightning robustness.&lt;br/&gt;Getting my hands dirty on low-level LDK development recently made me&lt;br/&gt;realize we still have years of titan work to get a secure and reliable&lt;br/&gt;Lightning Network.&lt;br/&gt;&lt;br/&gt;As such, between extended covenant capabilities for advanced contracts&lt;br/&gt;coming as a reality for Bitcoin _or_ LN working smoothly at scale with&lt;br/&gt;50-100M UTXO-sharing users on it during the next 5-7 years cycle, I think&lt;br/&gt;the latter goal is more critical for Bitcoin existential survival, and&lt;br/&gt;where on a personal title I&amp;#39;ll allocate the best of my time and energy (and&lt;br/&gt;somehow it match the &amp;#34;slow&amp;#34; technical activity on bitcoin-inquisition&lt;br/&gt;mostly done by Lightning hands).&lt;br/&gt;&lt;br/&gt;This is my personal conclusion only on the state of Bitcoin technological&lt;br/&gt;momentum, and this is quite tainted by my deep background in Lightning&lt;br/&gt;development. If you&amp;#39;ve been working on covenant changes proposals, please&lt;br/&gt;don&amp;#39;t take it as a discouragement, I think Taproot (privacy-preserving&lt;br/&gt;script policies behind the taproot tree branches) and Schnorr (for native&lt;br/&gt;multi-sig) soft forks have shown how it can improve the building of&lt;br/&gt;self-custody solutions by one or two order of magnitude, and small&lt;br/&gt;incremental changes might be good enough to have a lower technical&lt;br/&gt;consensus bar.&lt;br/&gt;&lt;br/&gt;On my side, I&amp;#39;ll pursue pure R&amp;amp;D works on CoinPool, notably coming with&lt;br/&gt;better solutions with the interactivity issue and mass-compression of&lt;br/&gt;withdrawal and design exotic advanced Bitcoin contracts based on the&lt;br/&gt;taproot annex, though more in a &amp;#34;l&amp;#39;art pour l&amp;#39;art&amp;#34; approach for the time&lt;br/&gt;being [4]. Additionally, I might start to submit an in-depth security&lt;br/&gt;review of consensus changes under pseudonyms, it has already been done in&lt;br/&gt;the past and somehow it&amp;#39;s good practice in terms of &amp;#34;message neutrality&amp;#34;&lt;br/&gt;[5]. If folks wanna experiment in terms of payment pools deployment, Greg&lt;br/&gt;Maxwell&amp;#39;s old joinpool can be used today (and somehow it&amp;#39;s worthy of its&lt;br/&gt;own as a net advance for coinjoins).&lt;br/&gt;&lt;br/&gt;I&amp;#39;ll honestly acknowledge towards the community, I might have overpromised&lt;br/&gt;with the kickstart of this new process aiming to move the frontlines in&lt;br/&gt;matters of Bitcoin consensus changes development process. On the other&lt;br/&gt;hand, I think enough sessions of the working group have been runned and&lt;br/&gt;enough marks of technical interests have been collected to demonstrate the&lt;br/&gt;minimal value of such a process, so I would estimate my open-source balance&lt;br/&gt;sheet towards the community to be in good standing ? (open-minded question).&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think Bitcoin fundamentally lacks compelling technical proposals to&lt;br/&gt;advance the capabilities of Bitcoin Script today, nor the crowd of seasoned&lt;br/&gt;and smart protocol developers to evaluate mature proposals end-to-end and&lt;br/&gt;on multiple dimensions with a spirit of independence. Rather, I believe&lt;br/&gt;what Bitcoin is lacking is a small crowd of technical historians and&lt;br/&gt;archivist doing the work of assessing, collecting and preserving consensus&lt;br/&gt;changes proposals and QA devs to ensure any consensus change proposals has&lt;br/&gt;world-class battle-ground testing before to be considered for deployment,&lt;br/&gt;ideally with the best standards of Bitcoin decentralization and FOSS&lt;br/&gt;neutrality [6].&lt;br/&gt;&lt;br/&gt;If you would like to pursue the maintenance and nurturing of the Bitcoin&lt;br/&gt;Contracting Primitives WG (or the bitcoin-inquisition fork or collaborate&lt;br/&gt;with Optech to organize industry-wise workshop on covenants at the image of&lt;br/&gt;what has been done in 2019 for Taproot), that you&amp;#39;re willing to show&lt;br/&gt;proof-of-work and you estimate that operational ground, legal information&lt;br/&gt;or financial resources will anchor your individual work on the long-term,&lt;br/&gt;don&amp;#39;t hesitate to reach out, I&amp;#39;ll see what I can do with a disinterested&lt;br/&gt;mind [7].&lt;br/&gt;&lt;br/&gt;With humility,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-July/020763.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-July/020763.html&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020233.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020233.html&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020921.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020921.html&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/bitcoinops/bitcoinops.github.io/pull/806&#34;&gt;https://github.com/bitcoinops/bitcoinops.github.io/pull/806&lt;/a&gt;&lt;br/&gt;[4] Version 0.2 of the CoinPool whitepaper addressing most of the remaining&lt;br/&gt;&amp;#34;Big Problems&amp;#34; is still pending on my visit to co-author Gleb Naumenko in&lt;br/&gt;Ukraine, which has been postponed few times in light of the conflict&lt;br/&gt;operational evolutions.&lt;br/&gt;[5] See&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017614.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017614.html&lt;/a&gt;.&lt;br/&gt;For the philosophical reasons of doing so, I invite you to read Foucault&amp;#39;s&lt;br/&gt;famous essay &amp;#34;Le philosophe masque&amp;#34;.&lt;br/&gt;[6] Somehow I come to share Jeremy&amp;#39;s thesis&amp;#39;s &amp;#34;Product management is not&lt;br/&gt;&amp;#34;my Job&amp;#34; it&amp;#39;s yours&amp;#34; in matters of consensus changes. I believe we might be&lt;br/&gt;past the technical complexity threshold where even simple consensus changes&lt;br/&gt;can be conducted from A to Z as a one man job or even by a group of 2/3&lt;br/&gt;elite devs.&lt;br/&gt;[7] I&amp;#39;ve been reached out multiple times and consistently by R&amp;amp;D&lt;br/&gt;non-profits, plebs whales and VC firms who were interested to commit&lt;br/&gt;resources to advance softforks and covenants in the Bitcoin space, no doubt&lt;br/&gt;when you&amp;#39;re reliable and with a track record, folks are ready to offer you&lt;br/&gt;opportunities to work full-time on consensus changes.&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/20230718/0be965a9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230718/0be965a9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-07-19T04:09:38&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg8lgljg2qugukd0qg4fkcftseenqkc2lj7vpezutahh5e83wwrcqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zvn8tjj</id>
    
      <title type="html">📅 Original date posted:2023-06-21 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg8lgljg2qugukd0qg4fkcftseenqkc2lj7vpezutahh5e83wwrcqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zvn8tjj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqezj5st359sdqna04hyhzmjsu3dwvdajh4dzq85gwu0dt9jckvfgrt24k9&#39;&gt;nevent1q…24k9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-06-21&lt;br/&gt;🗒️ Summary of this message: CivKit Node, a Nostr relay with peer-to-peer market board features, has been released. The CLI-only release is written in Rust and has basic NIP 01 support.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Bitcoin Devs,&lt;br/&gt;&lt;br/&gt;Proud to announce the first release of CivKit Node, a basic Nostr relay&lt;br/&gt;with additional features to have a functional peer-to-peer market board,&lt;br/&gt;written in Rust [0]. This is a very raw release as since we published the&lt;br/&gt;paper back in April, we&amp;#39;ve been reached out by a bunch of folks asking how&lt;br/&gt;they could contribute by code, or start to integrate CivKit in their Nostr&lt;br/&gt;and Lightning peer-to-peer market clients [1].&lt;br/&gt;&lt;br/&gt;Current release is CLI-only, just implementing basic NIP 01 support and is&lt;br/&gt;full of bugs and todos, has not been tested on a lot of platforms and still&lt;br/&gt;works as a local host for a lot of things [2]. There is a sample Nostr&lt;br/&gt;client binary joined for deployment and testing purposes and an utility&lt;br/&gt;binary to manage the node with a gRPC interface. Such an interface should&lt;br/&gt;lay the groundwork to build one or more GUI applications on top, as it&amp;#39;s a&lt;br/&gt;recurring and consistent request from the community.&lt;br/&gt;&lt;br/&gt;There is an experimental integration with BOLT8 Noise transport (thanks to&lt;br/&gt;LDK), where one can connect to another CivKit Node has a peer, Idea is to&lt;br/&gt;unify the communication infrastructure between Nostr and Lightning, and as&lt;br/&gt;such have a single market of p2p service providers (watchtower, state&lt;br/&gt;backup, boards) benefiting from network law effect. Beyond sharing all the&lt;br/&gt;work between Lightning and Nostr ecosystem in terms of spamming&lt;br/&gt;mitigations, careful crypto engineering (e.g onion routing) and&lt;br/&gt;privacy-preserving monetary credentials [3].&lt;br/&gt;&lt;br/&gt;With this released out, I think we&amp;#39;ll go for sound onion routing support,&lt;br/&gt;BOLT12 offers, the set of fundamental NIPs like NIP-09, NIP-16, NIP-33 and&lt;br/&gt;others, and integration with a notary protocol (e.g Mainstay). Still, we&lt;br/&gt;would like to listen to our users and we&amp;#39;ll plumber features in the&lt;br/&gt;function of relevant feedback collected from the community. One key lesson&lt;br/&gt;from years contributing on LDK, we do not want to stay in a &amp;#34;purist&lt;br/&gt;developer&amp;#34; ivory tower to avoid hard-to-integrate APIs, and make the&lt;br/&gt;&amp;#34;product management&amp;#34; of the project owned by the community to ensure we&amp;#39;re&lt;br/&gt;building for the real-world of unstable and constrained mobile clients.&lt;br/&gt;&lt;br/&gt;Once we have communication infrastructure and hopefully credentials&lt;br/&gt;framework working, I think we&amp;#39;ll start to have more serious development of&lt;br/&gt;the CivKit functionaries services themselves (e.g market bulletin boards,&lt;br/&gt;rank proof servers and moderation oracles in the paper parlance). Though&lt;br/&gt;again, if folks want to start more custom services on top of CivKit Node,&lt;br/&gt;we&amp;#39;ll see what we can do, there is a brave new world to explore with Nostr&lt;br/&gt;and Lightning maturation.&lt;br/&gt;&lt;br/&gt;For the historical note, peer-to-peer market features were present in&lt;br/&gt;Bitcoin Core circa 2010 (in fact before the ref client was dubbed Core).&lt;br/&gt;Those features were removed by commit 5253d1ab &amp;#34;strip out unfinished&lt;br/&gt;product, review and market stuff&amp;#34; by Satoshi [4]. Retrospectively, it was a&lt;br/&gt;good insight as Core has evolved as a complex beast enough and careful&lt;br/&gt;layerization is one of the best learning from the 50 years of Internet&lt;br/&gt;history. Still, censorship-resistant and large-scale peer-to-peer markets&lt;br/&gt;sounds still one of the missing blocks of the Bitcoin protocol stack.&lt;br/&gt;&lt;br/&gt;Looking forward to growing the Bitcoin and Lightning internal economies by&lt;br/&gt;an order of magnitude or two with the CivKit Node, if the kharma is with us.&lt;br/&gt;&lt;br/&gt;All works are released under MIT/Apache licenses and we aim to bind to the&lt;br/&gt;best open-source development standards as set by Bitcoin Core and the Linux&lt;br/&gt;kernel communities and we&amp;#39;re welcoming anyone strongly willing to build&lt;br/&gt;with passion and love.&lt;br/&gt;&lt;br/&gt;I think for the future, we&amp;#39;ll do the announcement on its own communication&lt;br/&gt;channel, whatever a new mailing list, or something experimental on top of&lt;br/&gt;Nostr groups, Still, if we innove in terms of cryptography we&amp;#39;re aiming to&lt;br/&gt;have things standardized under BIPs.&lt;br/&gt;&lt;br/&gt;&amp;#34;Sic itur ad astra&amp;#34; -&lt;br/&gt;Block 000000000000000000053fd09a45f48e747f281122021edc2f7e97efcdd66248&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/civkit/civkit-node&#34;&gt;https://github.com/civkit/civkit-node&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-April/021556.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-April/021556.html&lt;/a&gt;&lt;br/&gt;[2] Of course, there are gazillins of things to implement, please open an&lt;br/&gt;issue on the repository directly rather to yell something doesn&amp;#39;t work.&lt;br/&gt;[3]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-May/003964.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-May/003964.html&lt;/a&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/commit/5253d1ab&#34;&gt;https://github.com/bitcoin/bitcoin/commit/5253d1ab&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/20230621/7e720924/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230621/7e720924/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-21T11:18:57&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdus9q5emsjgjs4xnmxs6js3dxt8fpv9ffwk848nu5ydf973x9y9czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqeh9zr</id>
    
      <title type="html">📅 Original date posted:2023-05-06 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdus9q5emsjgjs4xnmxs6js3dxt8fpv9ffwk848nu5ydf973x9y9czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqeh9zr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstukl9ph8f0phpg7nuk6xyshvnl06cd583lwtf80gey8jdz0jsuzc4e4mg3&#39;&gt;nevent1q…4mg3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-06&lt;br/&gt;🗒️ Summary of this message: The Lightning Network community is exploring data gathering and local reputation tracking to mitigate channel jamming, starting with a binary endorsement field. The goal is to experiment with different algorithms for tracking local reputation and gather real-world data for future simulation work.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi *,&lt;br/&gt;&lt;br/&gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; more expressive value is required.&lt;br/&gt;&lt;br/&gt;I think the HTLC endorsement scheme as proposed is still suffering from a&lt;br/&gt;vulnerability as local reputation can be built up during periods of low&lt;br/&gt;routing fees, endorsement gained and then abused during periods of high&lt;br/&gt;routing fees. Therefore, it sounds to me this scheme should aim for some&lt;br/&gt;reputational transitivity between incoming traffic and outgoing traffic.&lt;br/&gt;Namely, the acquisition cost of the local reputation should be equal to the&lt;br/&gt;max timevalue damage that one can inflict on a routing node channel&lt;br/&gt;accessible from its local counterparty granting this high-level of&lt;br/&gt;reputation.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if this can be fixed by ensuring permanent link-level &amp;#34;gossip&amp;#34;&lt;br/&gt;where counterparties along a payment path expose their reputation&lt;br/&gt;heuristics to guarantee this transitivity, or it&amp;#39;s a fundamental issue with&lt;br/&gt;a point-to-point approach like HTLC endorsement.&lt;br/&gt;&lt;br/&gt;Opened an issue on the repository to converge on a threat model:&lt;br/&gt;&lt;a href=&#34;https://github.com/ClaraShk/LNJamming/pull/13&#34;&gt;https://github.com/ClaraShk/LNJamming/pull/13&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I still think building data gathering infrastructure for Lightning is&lt;br/&gt;valuable as ultimately any jamming mitigation will have to adapt its&lt;br/&gt;upfront fees or reputation acquisition cost in function of HTLC traffic and&lt;br/&gt;market forces.&lt;br/&gt;&lt;br/&gt;Looking forward to giving an update on Staking Credentials [0], an&lt;br/&gt;end-to-end approach to mitigate channel jamming.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le dim. 30 avr. 2023 à 03:57, Carla Kirk-Cohen &amp;lt;kirkcohenc at gmail.com&amp;gt; a&lt;br/&gt;écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some updates on channel jamming!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Next Call&lt;br/&gt;&amp;gt; - Monday 01 May @ 15:00 UTC&lt;br/&gt;&amp;gt; - &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&amp;gt; - Agenda: &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/12&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/12&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Data Gathering&lt;br/&gt;&amp;gt; During these weekly calls, we&amp;#39;ve come to agreement that we would like&lt;br/&gt;&amp;gt; to gather data about the use of HTLC endorsement and local reputation&lt;br/&gt;&amp;gt; tracking for jamming mitigation. A reminder of the full scheme is&lt;br/&gt;&amp;gt; included at the end of this email, and covered more verbosely in [1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We have a few goals in mind:&lt;br/&gt;&amp;gt; - Observe the effect of endorsement in the steady state with&lt;br/&gt;&amp;gt;   logging-only implementation.&lt;br/&gt;&amp;gt; - Gather real-world data for use in future simulation work.&lt;br/&gt;&amp;gt; - Experiment with different algorithms for tracking local reputation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The minimal changes required to add HTLC endorsement are outlined in [2].&lt;br/&gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; more expressive value is required.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With this infrastructure in place, we can start to experiment with&lt;br/&gt;&amp;gt; various local reputation schemes and data gathering, possibly even&lt;br/&gt;&amp;gt; externally to LN implementations in projects like circuitbreaker [3].&lt;br/&gt;&amp;gt; We&amp;#39;d be interested to hear whether there&amp;#39;s any appetite to deploy using&lt;br/&gt;&amp;gt; an experimental TLV value?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Reputation Scheme&lt;br/&gt;&amp;gt; - Each node locally tracks the reputation of its direct neighbors.&lt;br/&gt;&amp;gt; - Each node allocates, per its risk tolerance:&lt;br/&gt;&amp;gt;   - A number of slots reserved for endorsed HTLCs from high reputation&lt;br/&gt;&amp;gt;     peers.&lt;br/&gt;&amp;gt;   - A portion of liquidity reserved for endorsed HTLCs from high&lt;br/&gt;&amp;gt;     reputation peers.&lt;br/&gt;&amp;gt; - Forwarding of HTLCs:&lt;br/&gt;&amp;gt;   - If a HTLC is endorsed by a high reputation peer, it is forwarded&lt;br/&gt;&amp;gt;     as usual with endorsed = 1.&lt;br/&gt;&amp;gt;   - Otherwise, it is forwarded with endorsed = 0 if there are slots and&lt;br/&gt;&amp;gt;     liquidity available for unknown HTLCs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Endorsement and reputation are proposed as the first step in a two part&lt;br/&gt;&amp;gt; scheme for mitigating channel jamming:&lt;br/&gt;&amp;gt; - Reputation for slow jams which are easily detected as misbehavior.&lt;br/&gt;&amp;gt; - Unconditional fees for quick jams that are difficult to detect, as&lt;br/&gt;&amp;gt;   they can always fall under a target threshold.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Looking forward to discussing further in the upcoming call!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Carla and Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&#34;&gt;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1071&#34;&gt;https://github.com/lightning/bolts/pull/1071&lt;/a&gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/lightningequipment/circuitbreaker&#34;&gt;https://github.com/lightningequipment/circuitbreaker&lt;/a&gt;&lt;br/&gt;&amp;gt; _______________________________________________&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/20230506/40daccce/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230506/40daccce/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T19:42:21&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqs089cl2mmn9mjxa79nmzj73s3pzs6uy8fyf0hklu6ptxcydnh6szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zafrtgy</id>
    
      <title type="html">📅 Original date posted:2023-05-10 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqs089cl2mmn9mjxa79nmzj73s3pzs6uy8fyf0hklu6ptxcydnh6szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zafrtgy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgl563vyuuq72p6v0z94aacykywfeqr4rt7zt6ns385v9fe2mdu7sz6nshc&#39;&gt;nevent1q…nshc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-10&lt;br/&gt;🗒️ Summary of this message: Bitcoin developer defends his right to expose potential conflicts of interest in open-source development and calls for protection of communication channels.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Tony,&lt;br/&gt;&lt;br/&gt;&amp;gt; Is there a better place to have public communication? Unfortunately since&lt;br/&gt;one off topic email was sent here, it&amp;#39;s been a ghost town. It appears that&lt;br/&gt;there&amp;#39;s many emails being held and only one moderator that checks them once&lt;br/&gt;a week.&lt;br/&gt;&lt;br/&gt;As I think you&amp;#39;re referring to my post of March 21th and as the author of&lt;br/&gt;this post, I&amp;#39;ll politely refuse the qualification of &amp;#34;off-topic&amp;#34;. I had and&lt;br/&gt;I still have the concerns of &amp;#34;frivolous legal claims&amp;#34; being used between&lt;br/&gt;bitcoin developers/organizations provoking a distortion of the neutrality&lt;br/&gt;of the development and a chilling effect of the technical discussions (i.e&lt;br/&gt;code we compile and spec we implement). For those reasons, it was my legal&lt;br/&gt;right and moral duty to inform the community of what is happening between&lt;br/&gt;Chaincode and myself. And here I&amp;#39;m following the recommendation of one of&lt;br/&gt;the moderators of the Lightning mailing list himself &amp;#34;If this worries you&lt;br/&gt;too, let&amp;#39;s make sure we keep each other honest, OK?&amp;#34; [0].&lt;br/&gt;&lt;br/&gt;When you think a group of people with open-source responsibilities are in a&lt;br/&gt;situation of conflict of interests or &amp;#34;moral hazards&amp;#34;, or even the&lt;br/&gt;appearance of them, you have the right to expose the wrongdoing, including&lt;br/&gt;the _proportional_ revelation of private elements. People have done the&lt;br/&gt;&amp;#34;free choice&amp;#34; to conduct a career in open-source, for some even declaring&lt;br/&gt;in some context to maintain integrity and accept their actions to be&lt;br/&gt;submitted to external accountability [1]. While the exposure of private&lt;br/&gt;elements of public personalities might break common courtesy, it&amp;#39;s a&lt;br/&gt;morally valid practice if you&amp;#39;re familiar with the public institutions of&lt;br/&gt;US and Europe, and I think this practice has found validity in the history&lt;br/&gt;of open-source commons or IETF&amp;#39;s protocol development [1].&lt;br/&gt;&lt;br/&gt;Beyond, the Bitcoin and Lightning development communication channels&lt;br/&gt;constitute a public forum, where by nature the participants are exchanging&lt;br/&gt;ideas and defending competing interests. In consequence, the participants&amp;#39;&lt;br/&gt;rights and capabilities to contribute and speak their minds in those&lt;br/&gt;communication channels should be protected. Those communication channels&lt;br/&gt;are not your usual corporate workplace, and in case of conflicting&lt;br/&gt;principles, the maintainers of those communication channels should ensure a&lt;br/&gt;balance of rights and a proportionality in any restraining measure.&lt;br/&gt;&lt;br/&gt;And this new post is not to exonerate myself of any legal responsibility&lt;br/&gt;for personal matters that could be recognized as the outcome of a judicial&lt;br/&gt;process, respective of both rights of the accusation and rights of the&lt;br/&gt;defense. Rather to enlighten the Bitcoin community that the formal&lt;br/&gt;separation between private matters and open-source responsibilities, and&lt;br/&gt;the adequate check-and-balances to guarantee this separation is somehow&lt;br/&gt;what are the underlying stakes for this feud between Chaincode and myself,&lt;br/&gt;from my perspective. I can say missing an open-source engineering meeting&lt;br/&gt;or being revoked a few Github permissions matters far less than the clear&lt;br/&gt;affirmation and respect of the freedom of expression, the presumption of&lt;br/&gt;innocence and due process in the Bitcoin common space, all proportions&lt;br/&gt;conserved.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t blame any party involved in this issue, nor assign &amp;#34;bad&lt;br/&gt;intentions&amp;#39;&amp;#39;. One position is really a function of your life experiences,&lt;br/&gt;knowledge of the legal and cultural framework and access to the factual&lt;br/&gt;elements. As all human conflicts it is not binary rather &amp;#34;grey&amp;#34;. People can&lt;br/&gt;be top executives at a billion-dollar company, having successful ventures&lt;br/&gt;with hundreds of folks under management, or have a lot of responsibilities&lt;br/&gt;for their relative young age, and still disagree on the set of legal and&lt;br/&gt;moral principles to apply in the present case.&lt;br/&gt;&lt;br/&gt;Finally, thanks to the Bitcoin friends who have reached out to call for&lt;br/&gt;level-headedness and cool-mindness in the public discussion of this complex&lt;br/&gt;topic. Like I said to them, in the lack of more suspected wrongdoing from&lt;br/&gt;the other side, I won&amp;#39;t communicate further on this subject on the Bitcoin&lt;br/&gt;and Lightning technical channels. However I still firmly believe the&lt;br/&gt;discussion on the principles, abstract in the maximum from its private&lt;br/&gt;elements, should still be pursued on other channels. Independently, there&lt;br/&gt;is a legal channel opened between Chaincode and myself and good progress is&lt;br/&gt;made to find a serene and long-standing resolution to this issue.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://rusty-lightning.medium.com/the-corrosion-of-ethics-in-cryptocurrencies-f7ba77e9dfc3&#34;&gt;https://rusty-lightning.medium.com/the-corrosion-of-ethics-in-cryptocurrencies-f7ba77e9dfc3&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://github.com/btrustteam/board-book/blob/main/vision/genesis_principles.md&#34;&gt;https://github.com/btrustteam/board-book/blob/main/vision/genesis_principles.md&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://www.ietf.org/about/administration/policies-procedures/conflict-interest/&#34;&gt;https://www.ietf.org/about/administration/policies-procedures/conflict-interest/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le lun. 8 mai 2023 à 21:26, Tony Giorgio via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Is there a better place to have public communication? Unfortunately since&lt;br/&gt;&amp;gt; one off topic email was sent here, it&amp;#39;s been a ghost town. It appears that&lt;br/&gt;&amp;gt; there&amp;#39;s many emails being held and only one moderator that checks them once&lt;br/&gt;&amp;gt; a week.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Would hate to see this list die but wondering if there&amp;#39;s a better place&lt;br/&gt;&amp;gt; for discussions?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Tony&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -------- Original Message --------&lt;br/&gt;&amp;gt; On Apr 29, 2023, 9:57 PM, niftynei &amp;lt; niftynei at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; When I joined the lightning community a few years ago, I was relatively&lt;br/&gt;&amp;gt; new to open source software and specification work. Rusty really impressed&lt;br/&gt;&amp;gt; on me on the importance of holding conversations, as much as possible in&lt;br/&gt;&amp;gt; public.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Practically speaking, this encompasses IRC, this mailing list, and github&lt;br/&gt;&amp;gt; issues/PRs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The reason for this is twofold.  It helps document the range of options&lt;br/&gt;&amp;gt; considered for technical decisions and it provides an interface point for&lt;br/&gt;&amp;gt; new participants to contribute to the discussion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given some recent mails that were posted to this list, now seems like a&lt;br/&gt;&amp;gt; good time to reiterate the importance and preference of public&lt;br/&gt;&amp;gt; communication whenever possible, especially for specification or technical&lt;br/&gt;&amp;gt; discussions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ~ nifty&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;&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/20230510/1f0f9268/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230510/1f0f9268/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-19T19:42:06&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsy43ynv0szmhyy8p6um3n92rkevmx4zlvsa5tntghmukjw4dvv0mgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zhkaehl</id>
    
      <title type="html">📅 Original date posted:2023-05-06 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsy43ynv0szmhyy8p6um3n92rkevmx4zlvsa5tntghmukjw4dvv0mgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zhkaehl" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd2elqza200t2kwq98az9r4kx5uv8spnx6ncvanu2u7rtmdttt2vc6agc8f&#39;&gt;nevent1q…gc8f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-06&lt;br/&gt;🗒️ Summary of this message: The Lightning Network community is exploring data gathering and local reputation tracking to mitigate channel jamming, starting with a binary endorsement field. They aim to experiment with different algorithms for tracking local reputation and gather real-world data for future simulation work.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi *,&lt;br/&gt;&lt;br/&gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; more expressive value is required.&lt;br/&gt;&lt;br/&gt;I think the HTLC endorsement scheme as proposed is still suffering from a&lt;br/&gt;vulnerability as local reputation can be built up during periods of low&lt;br/&gt;routing fees, endorsement gained and then abused during periods of high&lt;br/&gt;routing fees. Therefore, it sounds to me this scheme should aim for some&lt;br/&gt;reputational transitivity between incoming traffic and outgoing traffic.&lt;br/&gt;Namely, the acquisition cost of the local reputation should be equal to the&lt;br/&gt;max timevalue damage that one can inflict on a routing node channel&lt;br/&gt;accessible from its local counterparty granting this high-level of&lt;br/&gt;reputation.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if this can be fixed by ensuring permanent link-level &amp;#34;gossip&amp;#34;&lt;br/&gt;where counterparties along a payment path expose their reputation&lt;br/&gt;heuristics to guarantee this transitivity, or it&amp;#39;s a fundamental issue with&lt;br/&gt;a point-to-point approach like HTLC endorsement.&lt;br/&gt;&lt;br/&gt;Opened an issue on the repository to converge on a threat model:&lt;br/&gt;&lt;a href=&#34;https://github.com/ClaraShk/LNJamming/pull/13&#34;&gt;https://github.com/ClaraShk/LNJamming/pull/13&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I still think building data gathering infrastructure for Lightning is&lt;br/&gt;valuable as ultimately any jamming mitigation will have to adapt its&lt;br/&gt;upfront fees or reputation acquisition cost in function of HTLC traffic and&lt;br/&gt;market forces.&lt;br/&gt;&lt;br/&gt;Looking forward to giving an update on Staking Credentials [0], an&lt;br/&gt;end-to-end approach to mitigate channel jamming.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le dim. 30 avr. 2023 à 03:57, Carla Kirk-Cohen &amp;lt;kirkcohenc at gmail.com&amp;gt; a&lt;br/&gt;écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some updates on channel jamming!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Next Call&lt;br/&gt;&amp;gt; - Monday 01 May @ 15:00 UTC&lt;br/&gt;&amp;gt; - &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&amp;gt; - Agenda: &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/12&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/12&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Data Gathering&lt;br/&gt;&amp;gt; During these weekly calls, we&amp;#39;ve come to agreement that we would like&lt;br/&gt;&amp;gt; to gather data about the use of HTLC endorsement and local reputation&lt;br/&gt;&amp;gt; tracking for jamming mitigation. A reminder of the full scheme is&lt;br/&gt;&amp;gt; included at the end of this email, and covered more verbosely in [1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We have a few goals in mind:&lt;br/&gt;&amp;gt; - Observe the effect of endorsement in the steady state with&lt;br/&gt;&amp;gt;   logging-only implementation.&lt;br/&gt;&amp;gt; - Gather real-world data for use in future simulation work.&lt;br/&gt;&amp;gt; - Experiment with different algorithms for tracking local reputation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The minimal changes required to add HTLC endorsement are outlined in [2].&lt;br/&gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; more expressive value is required.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With this infrastructure in place, we can start to experiment with&lt;br/&gt;&amp;gt; various local reputation schemes and data gathering, possibly even&lt;br/&gt;&amp;gt; externally to LN implementations in projects like circuitbreaker [3].&lt;br/&gt;&amp;gt; We&amp;#39;d be interested to hear whether there&amp;#39;s any appetite to deploy using&lt;br/&gt;&amp;gt; an experimental TLV value?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Reputation Scheme&lt;br/&gt;&amp;gt; - Each node locally tracks the reputation of its direct neighbors.&lt;br/&gt;&amp;gt; - Each node allocates, per its risk tolerance:&lt;br/&gt;&amp;gt;   - A number of slots reserved for endorsed HTLCs from high reputation&lt;br/&gt;&amp;gt;     peers.&lt;br/&gt;&amp;gt;   - A portion of liquidity reserved for endorsed HTLCs from high&lt;br/&gt;&amp;gt;     reputation peers.&lt;br/&gt;&amp;gt; - Forwarding of HTLCs:&lt;br/&gt;&amp;gt;   - If a HTLC is endorsed by a high reputation peer, it is forwarded&lt;br/&gt;&amp;gt;     as usual with endorsed = 1.&lt;br/&gt;&amp;gt;   - Otherwise, it is forwarded with endorsed = 0 if there are slots and&lt;br/&gt;&amp;gt;     liquidity available for unknown HTLCs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Endorsement and reputation are proposed as the first step in a two part&lt;br/&gt;&amp;gt; scheme for mitigating channel jamming:&lt;br/&gt;&amp;gt; - Reputation for slow jams which are easily detected as misbehavior.&lt;br/&gt;&amp;gt; - Unconditional fees for quick jams that are difficult to detect, as&lt;br/&gt;&amp;gt;   they can always fall under a target threshold.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Looking forward to discussing further in the upcoming call!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Carla and Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&#34;&gt;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1071&#34;&gt;https://github.com/lightning/bolts/pull/1071&lt;/a&gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/lightningequipment/circuitbreaker&#34;&gt;https://github.com/lightningequipment/circuitbreaker&lt;/a&gt;&lt;br/&gt;&amp;gt; _______________________________________________&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/20230506/40daccce/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230506/40daccce/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:13:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs06ukfa452d2uzu4h5njlvyatzql07u7lanneyyrv9lyszrz2uruczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zrqs7h2</id>
    
      <title type="html">📅 Original date posted:2023-04-03 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs06ukfa452d2uzu4h5njlvyatzql07u7lanneyyrv9lyszrz2uruczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zrqs7h2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswfh2t29h3rq3atgeqqyqlkagrmpe9atyx3zz0aezcnetxt80jxsqzpwzjn&#39;&gt;nevent1q…wzjn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-04-03&lt;br/&gt;🗒️ Summary of this message: Developers discuss challenges with implementing 0-conf splicing in Bitcoin&amp;#39;s Lightning Network, including the risk of double-spending and potential vulnerabilities.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Bastien,&lt;br/&gt;&lt;br/&gt;Thanks for the update on the state of splicing.&lt;br/&gt;&lt;br/&gt;&amp;gt; We&amp;#39;ve also discovered that implementing 0-conf splicing is tricky: you&lt;br/&gt;&amp;gt; need to be very careful about scenarios where your peer force-closes&lt;br/&gt;&amp;gt; using an *inactive* commitment that ends up double-spending what you&lt;br/&gt;&amp;gt; think is the only *active* commitment but is unconfirmed. We&amp;#39;d be happy&lt;br/&gt;&amp;gt; to discuss that in more details with other implementers to reduce the&lt;br/&gt;&amp;gt; risk of introducing new vulnerabilities when shipping that feature.&lt;br/&gt;&lt;br/&gt;I think halting 0-conf splicing is pretty easy for a counterparty by&lt;br/&gt;abusing Bitcoin Core mempool replacement rule #5 on the maximum number of&lt;br/&gt;original transactions replaced.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say you have Alice with 10% of the channel capacity as a balance in&lt;br/&gt;the &amp;#34;inactive&amp;#34; commitment and the 90% remaining in favor of Bob. Bob has&lt;br/&gt;initiated a splice out of 70% of the channel capacity. On the interactive&lt;br/&gt;transaction, Alice adds 4 unrelated confirmed inputs and then broadcasts 4&lt;br/&gt;chains of 25 unconfirmed transactions from those inputs.&lt;br/&gt;&lt;br/&gt;When Bob broadcasts the splice-out, it should be rejected by the network&lt;br/&gt;mempools on the grounds of RBF rule #5, whatever the absolute fee and&lt;br/&gt;feerate. So the &amp;#34;0-conf&amp;#34; splicing might be maintained under risk of&lt;br/&gt;double-spend by your counterparty for a while.&lt;br/&gt;&lt;br/&gt;It sounds like Bob&amp;#39;s splice out funds should be segregated until the&lt;br/&gt;corresponding &amp;#34;active commitment&amp;#34; is confirmed, i.e no use to fund another&lt;br/&gt;channel,&lt;br/&gt;with inbound/outbound HTLC flows.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 3 avr. 2023 à 00:25, Bastien TEINTURIER &amp;lt;bastien at acinq.fr&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As some of you may know, we&amp;#39;ve been hard at work experimenting with&lt;br/&gt;&amp;gt; splicing [1]. Splicing is a complex feature with a large design space.&lt;br/&gt;&amp;gt; It was interesting to iterate on two separate implementations (eclair&lt;br/&gt;&amp;gt; and cln) and discover the pain points, edge cases and things that could&lt;br/&gt;&amp;gt; be improved in the protocol specification.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After a few months trying out different approaches, we&amp;#39;d like to share&lt;br/&gt;&amp;gt; changes that we believe make the splicing protocol simpler and more&lt;br/&gt;&amp;gt; robust.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We call &amp;#34;active commitments&amp;#34; the set of valid commitment transactions to&lt;br/&gt;&amp;gt; which updates must be applied. While one (or more) splices are ongoing,&lt;br/&gt;&amp;gt; there is more than one active commitment. When signing updates, we send&lt;br/&gt;&amp;gt; one `commitment_signed` message per active commitment. We send those&lt;br/&gt;&amp;gt; messages in the order in which the corresponding funding transactions&lt;br/&gt;&amp;gt; have been created, which lets the receiver implicitly match every&lt;br/&gt;&amp;gt; `commitment_signed` to their respective funding transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Once we&amp;#39;ve negotiated a new splice and reached the signing steps of the&lt;br/&gt;&amp;gt; interactive-tx protocol, we send a single `commitment_signed` for that&lt;br/&gt;&amp;gt; new commitment. We don&amp;#39;t revoke the previous commitment(s), as this adds&lt;br/&gt;&amp;gt; an unnecessary step. Conceptually, we&amp;#39;re simply adding a new commitment&lt;br/&gt;&amp;gt; to our active commitments set.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A sample flow will look like this:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Alice                           Bob&lt;br/&gt;&amp;gt;      |             stfu             |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |             stfu             |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |          splice_init         |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |          splice_ack          |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |                              |&lt;br/&gt;&amp;gt;      |       &amp;lt;interactive-tx&amp;gt;       |&lt;br/&gt;&amp;gt;      |&amp;lt;----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |                              |&lt;br/&gt;&amp;gt;      |         tx_complete          |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |         tx_complete          |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the new commitment.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the new commitment.&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |        tx_signatures         |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |        tx_signatures         |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |                              |&lt;br/&gt;&amp;gt;      |       update_add_htlc        | Alice and Bob use the channel while&lt;br/&gt;&amp;gt; the splice transaction is unconfirmed.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |       update_add_htlc        |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the old commitment.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the new commitment.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |       revoke_and_ack         |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the old commitment.&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the new commitment.&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |       revoke_and_ack         |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |                              |&lt;br/&gt;&amp;gt;      |        splice_locked         | The splice transaction confirms.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |        splice_locked         |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |                              |&lt;br/&gt;&amp;gt;      |       update_add_htlc        | Alice and Bob can use the channel&lt;br/&gt;&amp;gt; and forget the old commitment.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the new commitment.&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |       revoke_and_ack         |&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |         commit_sig           | Sign the new commitment.&lt;br/&gt;&amp;gt;      |&amp;lt;-----------------------------|&lt;br/&gt;&amp;gt;      |       revoke_and_ack         |&lt;br/&gt;&amp;gt;      |-----------------------------&amp;gt;|&lt;br/&gt;&amp;gt;      |                              |&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You can find many more details and sample flows in [2].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We require nodes to store data about the funding transaction as soon as&lt;br/&gt;&amp;gt; they send their `commitment_signed` message. This lets us handle every&lt;br/&gt;&amp;gt; disconnection scenario safely, allowing us to either resume the signing&lt;br/&gt;&amp;gt; steps on reconnection or forget the funding attempt. This is important&lt;br/&gt;&amp;gt; because if peers disagree on the set of active commitments, this will&lt;br/&gt;&amp;gt; lead to a force-close. In order to achieve that, we only need to add&lt;br/&gt;&amp;gt; the `next_funding_txid` to the `channel_reestablish` message, and fill&lt;br/&gt;&amp;gt; it when we&amp;#39;re missing signatures from our peer. Again, you can find more&lt;br/&gt;&amp;gt; details and sample flows in [2].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Finally, after trying various approaches, we believe that the funding&lt;br/&gt;&amp;gt; amounts that peer exchange in `splice_init` and `splice_ack` should be&lt;br/&gt;&amp;gt; relative amounts based on each peer&amp;#39;s current channel balance.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If Alice sends `funding_amount = 200_000 sats`, it means she will be&lt;br/&gt;&amp;gt; adding 200 000 sats to the channel&amp;#39;s capacity (splice-in).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If she sends `funding_amount = -50_000 sats`, it means she will be&lt;br/&gt;&amp;gt; removing 50 000 sats from the channel&amp;#39;s capacity (splice-out).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This makes it easier to compute the new channel balances (otherwise we&lt;br/&gt;&amp;gt; have to deal with millisatoshi to satoshi truncation) and better matches&lt;br/&gt;&amp;gt; the UX that node operators are expecting, which means there is less need&lt;br/&gt;&amp;gt; to glue code between the RPC exposed to the node operator and the actual&lt;br/&gt;&amp;gt; underlying protocol.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We&amp;#39;ve also discovered that implementing 0-conf splicing is tricky: you&lt;br/&gt;&amp;gt; need to be very careful about scenarios where your peer force-closes&lt;br/&gt;&amp;gt; using an *inactive* commitment that ends up double-spending what you&lt;br/&gt;&amp;gt; think is the only *active* commitment but is unconfirmed. We&amp;#39;d be happy&lt;br/&gt;&amp;gt; to discuss that in more details with other implementers to reduce the&lt;br/&gt;&amp;gt; risk of introducing new vulnerabilities when shipping that feature.&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; [1] &lt;a href=&#34;https://github.com/lightning/bolts/pull/863&#34;&gt;https://github.com/lightning/bolts/pull/863&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://gist.github.com/t-bast/1ac31f4e27734a10c5b9847d06db8d86&#34;&gt;https://gist.github.com/t-bast/1ac31f4e27734a10c5b9847d06db8d86&lt;/a&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/20230403/ef027b9b/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230403/ef027b9b/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:13:01&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsq2snqk08tnnj54k8l0huz45hhda9lwch4yh3qtgnkqtnmzzgwwyqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zp2e87t</id>
    
      <title type="html">📅 Original date posted:2023-03-06 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsq2snqk08tnnj54k8l0huz45hhda9lwch4yh3qtgnkqtnmzzgwwyqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zp2e87t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgc3hk2j00hzeskke0dt3ujy6thzqv8jsr02p25ekcsjumkmxm2hs0hyhf3&#39;&gt;nevent1q…yhf3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-03-06&lt;br/&gt;🗒️ Summary of this message: The local reputation channel involves forwarding requests from one party to another based on reputation and available outbound liquidity/slots. However, there are concerns about endorsement decision criteria, reputation slashing in case of HTLC failure, and exploitable reputation asymmetries.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;My understanding of the local reputation channel is the following, when Bob&lt;br/&gt;receives a HTLC forwarding request from Alice to Caroll:&lt;br/&gt;- if Alice has reputation of 1 and Alice endorses the transaction, Bob&lt;br/&gt;forwards and endorses the HTLC to Caroll&lt;br/&gt;- else if the HTLC amount is under the available outbound liquidity quota&lt;br/&gt;assigned to Alice and available outbound slots assigned to Alice, Bob&lt;br/&gt;forwards the HTLC to Caroll and reduce available outbound liquidity/slots&lt;br/&gt;assigned to Alice&lt;br/&gt;- else the HTLC is rejected&lt;br/&gt;&lt;br/&gt;This is unclear on which criterias the endorsement decision is made (e.g&lt;br/&gt;CLTV expiry delta, odds of settlement, ongoing congestion of outbound&lt;br/&gt;channels ?). Additionally, this is unclear how the available&lt;br/&gt;liquidity/slots on a given outbound channel are initially distributed&lt;br/&gt;between all the inbound channels (e.g proportional to the capacity) and how&lt;br/&gt;they&amp;#39;re balanced once the inbound channels start to accumulate reputation.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if this local reputation scheme precises how reputation is&lt;br/&gt;slashed in case of HTLC failure, and if any &amp;#34;grace&amp;#34; amount/rate is granted&lt;br/&gt;to the inbound channel counterparty, e.g Alice.&lt;br/&gt;&lt;br/&gt;Independently of those considerations, I think this local reputation scheme&lt;br/&gt;might suffer from exploitable reputation asymmetries by a jamming adversary.&lt;br/&gt;Let&amp;#39;s say you have the topology:&lt;br/&gt;&lt;br/&gt;Alice - Bob - Caroll - Dave&lt;br/&gt;&lt;br/&gt;Alice accumulated a reputation of 1 towards Bob and same for Bob towards&lt;br/&gt;Caroll. As `fee_base_msat` Bob picked up 1000 msat and Caroll picked up&lt;br/&gt;2000 msat. If Alice forwards a HTLC to Bob and it is endorsed by him before&lt;br/&gt;relay to Caroll, Alice can now inflict a 50 sat damage to Caroll, while&lt;br/&gt;only encumbering the lower-priced reputational cost towards Bob.&lt;br/&gt;&lt;br/&gt;This concern could hold in case of asymmetries arising from the dynamic&lt;br/&gt;adjustment of routing fees during an evaluated period of time. E.g both Bob&lt;br/&gt;and Caroll requires routing fees of 1000 msat. Alice builds up a reputation&lt;br/&gt;of 1 towards Bob during this period N. At period N&#43;1, Caroll bumps her&lt;br/&gt;routing fees to 2000 msat. From now on, Alice can exploit this asymmetry.&lt;br/&gt;&lt;br/&gt;While I think this deficiency could be fixed by ensuring a proportionality&lt;br/&gt;of the reputation acquisition cost between the inbound channels and the&lt;br/&gt;cost requested by a counterparty on an outbound channel, I believe this&lt;br/&gt;would come with the downside that any update in reputation cost should be&lt;br/&gt;recursively applied to the downstream links (i.e Bob on Alice channel,&lt;br/&gt;Alice on neighbouring inbound channels, etc).&lt;br/&gt;&lt;br/&gt;Apart of this reputation asymmetry concern, I think the local reputation&lt;br/&gt;scheme could suffer from spontaneous jamming by &amp;#34;honest&amp;#34; long-term held&lt;br/&gt;packets (e.g CLTV delta=2 weeks), where even if Alice is not scored to 1 by&lt;br/&gt;Bob, she always settles her long-term held packets. However, those packets&lt;br/&gt;are yielding less routing fees to Bob than let&amp;#39;s say 14 HTLC packets of&lt;br/&gt;CLTV delta = 1 day.&lt;br/&gt;&lt;br/&gt;Finally, the dynamic reduction of the available outbound liquidity/slots in&lt;br/&gt;the occurrence of reputation=0 counterparty&amp;#39;s HTLC being only known at the&lt;br/&gt;link-level could break the expectations of the HTLC senders scoring&lt;br/&gt;algorithms. E.g, being connected to Alice might have probed through another&lt;br/&gt;path the available liquidity on the link Bob-Caroll. This Eve&amp;#39;s probe is&lt;br/&gt;falsified by any reduction done by Caroll towards Bob, and therefore Eve&amp;#39;s&lt;br/&gt;payment reliability is likely to be downgraded.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 16 févr. 2023 à 21:29, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi List,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We’re writing to seek early feedback on a draft for a neighbour reputation&lt;br/&gt;&amp;gt; setting recommendation as a jamming mitigation. The main idea is that&lt;br/&gt;&amp;gt; allowing full access to liquidity and slots in a channel can result in&lt;br/&gt;&amp;gt; jamming. To prevent this, we allow full access only to neighbours that&lt;br/&gt;&amp;gt; forward HTLC that resolve quickly and generate more profit than the damage&lt;br/&gt;&amp;gt; they can potentially create.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The full suggested jamming mitigation solution includes upfront fees&lt;br/&gt;&amp;gt; together with reputation, see [1] for details.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the previous episodes:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As presented here [1], we suggest a two part jamming mitigation strategy.&lt;br/&gt;&amp;gt; Reputation-based forwarding is aimed to solve “slow jamming”, where the&lt;br/&gt;&amp;gt; jamming transaction takes a long time to resolve.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The main idea is that each node gives a binary reputation to its&lt;br/&gt;&amp;gt; neighbour. Each channel has a quota of liquidity and slots (say 50% of the&lt;br/&gt;&amp;gt; channel size and 50% of the slots in the channel) dedicated to transactions&lt;br/&gt;&amp;gt; coming from neighbours with reputation 0, or for transactions coming from&lt;br/&gt;&amp;gt; neighbours with reputation 1 that were not endorsed by the neighbour.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, when Alice asks Bob to forward to Charlie then:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If (Alice has reputation 1 with Bob) and (Alice endorses transaction):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Forward and endorse&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Else:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If (amount &amp;lt; available liquidity quota) and (available slots in quota&amp;gt;0):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Forward HTLC without endorsing&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reduce available liquidity and slots&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Else:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reject&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reputation:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The question we discuss here is how does Alice gain “good” reputation&lt;br/&gt;&amp;gt; (i.e., a score of 1). Alice starts at 0, and she gains and keeps her good&lt;br/&gt;&amp;gt; reputation of 1 by continuously paying more fees to Bob than the damage she&lt;br/&gt;&amp;gt; can inflict.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The 3 main parameters for reputation that each node operator picks are S,L&lt;br/&gt;&amp;gt; and M. Our recommendations are as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    S should be chosen as the maximum time an HTLC can be unresolved in&lt;br/&gt;&amp;gt;    any of Bob’s channels.&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    M is the revenue generated by Bob’s node in the time S, representing&lt;br/&gt;&amp;gt;    the damage Alice could inflict.&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    L is the time in which Alice should generate M revenue for Bob for her&lt;br/&gt;&amp;gt;    to have a good reputation of 1. We suggest L=10S.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alice has reputation 1 if, in the last L seconds, she has forwarded&lt;br/&gt;&amp;gt; payments that generated M satoshi in fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As an example:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Bob has a maximum CLTV delta of 2 weeks [2]&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Over the last 2 weeks, he has earned 0.5 BTC in routing fees&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Alice will be considered to have good reputation if she has forwarded&lt;br/&gt;&amp;gt;    0.5 BTC of routing revenue to Bob over the last 20 weeks&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Formally:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let t be the current time, and let S and L be constants.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; M is calculated to be the revenue of Bob in time [t-S,t]. The revenue of&lt;br/&gt;&amp;gt; Bob is the sum of fees from transactions forwarded by any neighbour besides&lt;br/&gt;&amp;gt; Alice &#43; any payments received by Bob. Note that Bob can choose to also take&lt;br/&gt;&amp;gt; into account utility gained from sending payments or anything of value to&lt;br/&gt;&amp;gt; the node operator.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alice has reputation 1 if in the time [t-L,t] she has forwarded HTLCs&lt;br/&gt;&amp;gt; that paid M in normalized fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We normalize fees by resolution time to reward payments that resolve&lt;br/&gt;&amp;gt; quickly and discount slow resolving payments. Here we assume 10 seconds is&lt;br/&gt;&amp;gt; the “normal” resolution time, this number can be bikesheded, and we round&lt;br/&gt;&amp;gt; up to avoid penalizing transactions resolved quicker than the “normal”.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The fee from a single transaction is normalized by the time it took for&lt;br/&gt;&amp;gt; the HTLC to resolve, counted in slots of 10 seconds. That is:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Normalized_fee = (fee)/[ceiling(time_to_resolve/10s)]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some notes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    The reputation management happens locally, that is, the only protocol&lt;br/&gt;&amp;gt;    change needed is the ability to signal endorsement as a TLV in&lt;br/&gt;&amp;gt;    UpdateAddHTLC. The various parameters can be selected for various risk&lt;br/&gt;&amp;gt;    preferences.&lt;br/&gt;&amp;gt;    2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    We currently suggest a binary reputation for simplicity. Having&lt;br/&gt;&amp;gt;    several buckets could be interesting to study, yet we don’t think that the&lt;br/&gt;&amp;gt;    complexity and the possible privacy issues are worth the potential benefits.&lt;br/&gt;&amp;gt;    3.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    For most use cases, having reputation 0 is more than enough. If we&lt;br/&gt;&amp;gt;    send and receive transactions at a low rate, we usually don’t need the full&lt;br/&gt;&amp;gt;    liquidity and slots available in a channel. Reputation mostly comes into&lt;br/&gt;&amp;gt;    play only when a channel is under attack, and then not all transaction are&lt;br/&gt;&amp;gt;    allowed to go through.&lt;br/&gt;&amp;gt;    4.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Following this thread [3]: it is important to note that we are only&lt;br/&gt;&amp;gt;    giving reputation to our direct neighbours. An advantage of this is that we&lt;br/&gt;&amp;gt;    have repeated interactions with them. In practice, this is also the only&lt;br/&gt;&amp;gt;    clean data we have to use when deciding whether to forward an HTLC or not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Carla and Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/de94a4ea5e81799330a72dfde111817b38565d99/htlcswitch/link.go#L51&#34;&gt;https://github.com/lightningnetwork/lnd/blob/de94a4ea5e81799330a72dfde111817b38565d99/htlcswitch/link.go#L51&lt;/a&gt;&lt;br/&gt;&amp;gt; [3]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-February/003842.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-February/003842.html&lt;/a&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/20230306/d19448db/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230306/d19448db/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:51&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst447eqzt37p82hj2wy5l4c0mcu6kcsmza2ns525g5mlnx3ggzm8czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqgaf0k</id>
    
      <title type="html">📅 Original date posted:2023-02-14 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst447eqzt37p82hj2wy5l4c0mcu6kcsmza2ns525g5mlnx3ggzm8czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqgaf0k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsftsdkfjr66ssaj7he7kf56grqqw82haaryx7y08ukzmqr5msfxmcjprx8t&#39;&gt;nevent1q…rx8t&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 may require routing nodes to operate flawlessly or face penalties, potentially impacting future routing revenue. Gradual implementation of strict penalties may be necessary for routing nodes to adapt.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Joost,&lt;br/&gt;&lt;br/&gt;&amp;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 &amp;gt; 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 &amp;gt; weeks. The consequence of this is that routing nodes would&lt;br/&gt;need to manage their liquidity meticulously because every failure&lt;br/&gt;potentially has a large&lt;br/&gt;&amp;gt; impact on future routing revenue.&lt;br/&gt;&lt;br/&gt;I think the performance question depends on the type of payment flows&lt;br/&gt;considered. If you&amp;#39;re an&lt;br/&gt;end-user sending a payment to your local Starbucks for coffee, here fast&lt;br/&gt;payment sounds the end-goal.&lt;br/&gt;If you&amp;#39;re doing remittance payment, cheap fees might be favored, and in&lt;br/&gt;function of those flows you&amp;#39;re&lt;br/&gt;probably not going to select the same &amp;#34;performant&amp;#34; routing nodes. I think&lt;br/&gt;adding latency as a criteria for&lt;br/&gt;pathfinding construction has already been mentioned in the past for LDK [0].&lt;br/&gt;&lt;br/&gt;&amp;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&lt;br/&gt;&amp;gt; process a payment in the blink of an eye. A lightning wallet trying&lt;br/&gt;multiple paths to find one that works doesn&amp;#39;t help with this.&lt;br/&gt;&lt;br/&gt;Or there is the direction to build forward-error-correction code on top of&lt;br/&gt;MPP, like in traditional&lt;br/&gt;networking [1]. The rough idea, you send more payment shards than the&lt;br/&gt;requested sum, and then&lt;br/&gt;you reveal the payment secrets to the receiver after an onion interactivity&lt;br/&gt;round to finalize payment.&lt;br/&gt;&lt;br/&gt;&amp;gt; A common argument against strict penalisation is that it would lead to&lt;br/&gt;less efficient use of capital. Routing nodes would need to maintain pools of&lt;br/&gt;&amp;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&lt;br/&gt;&amp;gt; sacrificing a slight part of that efficiency to also achieve the lowest&lt;br/&gt;possible latency.&lt;br/&gt;&lt;br/&gt;At the end of the day, we add more signal channels between HTLC senders and&lt;br/&gt;the routing&lt;br/&gt;nodes offering capital liquidity, if the signal mechanisms are efficient, I&lt;br/&gt;think they should lead&lt;br/&gt;to better allocation of the capital. So yes, I think more liquidity might&lt;br/&gt;be used by routing nodes&lt;br/&gt;to serve finely tailored HTLC requests by senders, however this liquidity&lt;br/&gt;should be rewarded&lt;br/&gt;by higher routing fees.&lt;br/&gt;&lt;br/&gt;&amp;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. &amp;gt; Routing nodes may not offer the required level of&lt;br/&gt;service yet, causing senders to end up with no nodes to choose from.&lt;br/&gt;&lt;br/&gt;&amp;gt; One option is to gradually increase the strength of the penalties, so&lt;br/&gt;that routing nodes are given time to adapt to the new standards. This does&lt;br/&gt;require &amp;gt; everyone to move along and leaves no space for cheap routing&lt;br/&gt;nodes with less leeway in terms of liquidity.&lt;br/&gt;&lt;br/&gt;I think if we have lessons to learn on policy rules design and deployment&lt;br/&gt;on the base-layer&lt;br/&gt;(the full-rbf saga), it&amp;#39;s to be careful in the initial set of rules, and&lt;br/&gt;how we ensure smooth&lt;br/&gt;upgradeability, from one version to another. Otherwise the re-deployment&lt;br/&gt;cost towards&lt;br/&gt;the new version might incentive the old routing node to stay on the&lt;br/&gt;non-optimal versions,&lt;br/&gt;and as we have historical buckets in routing algorithms, or preference for&lt;br/&gt;older channels,&lt;br/&gt;this might lead the end-user to pay higher fees, than they could access to.&lt;br/&gt;&lt;br/&gt;&amp;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 &amp;gt; `highly_available`.&lt;br/&gt;&lt;br/&gt;&amp;gt; It&amp;#39;s then up to payers to decide how to interpret this flag. One way&lt;br/&gt;could be to prefer `highly_available` channels during pathfinding. But if&lt;br/&gt;the routing&lt;br/&gt;&amp;gt; node then returns a failure, a much stronger than normal penalty will be&lt;br/&gt;applied. For routing nodes this creates an opportunity to attract more&lt;br/&gt;traffic by &amp;gt; marking some channels as `highly_available`, but it also comes&lt;br/&gt;with the responsibility to deliver.&lt;br/&gt;&lt;br/&gt;This is where the open question lies to me - &amp;#34;highly available&amp;#34; can be&lt;br/&gt;defined with multiple&lt;br/&gt;senses, like fault-tolerance, latency processing, equilibrated liquidity.&lt;br/&gt;And a routing node might&lt;br/&gt;not be able to optimize its architecture for the same end-goal (e.g more&lt;br/&gt;watchtower on remote&lt;br/&gt;host probably increases the latency processing).&lt;br/&gt;&lt;br/&gt;&amp;gt; Without shadow channels, it is impossible to guarantee liquidity up to&lt;br/&gt;the channel capacity. It might make sense for senders to only assume high&lt;br/&gt;&amp;gt; availability for amounts up to `htlc_maximum_msat`.&lt;br/&gt;&lt;br/&gt;As a note, I think &amp;#34;senders assumption&amp;#34; should be well-documented,&lt;br/&gt;otherwise there will be&lt;br/&gt;performance discrepancies between node implementations or even versions.&lt;br/&gt;E.g, an upgraded&lt;br/&gt;sender penalizing a node for the lack of shadow/parallel channels&lt;br/&gt;fulfilling HTLC amounts up to&lt;br/&gt;`htlc_maximum_msat`.&lt;br/&gt;&lt;br/&gt;&amp;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 &amp;gt; a channel is, the stronger the penalty that is applied on&lt;br/&gt;failure will be. It seems less ideal though, because it&lt;br/&gt;could disincentivize cheap but reliable&lt;br/&gt;&amp;gt; channels on high traffic links.&lt;br/&gt;&lt;br/&gt;&amp;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;&amp;gt; hear your thoughts.&lt;br/&gt;&lt;br/&gt;I think signal availability should be explicit rather than implicit. Even&lt;br/&gt;if it&amp;#39;s coming with more&lt;br/&gt;gossip bandwidth data consumed. I would say for bandwidth performance&lt;br/&gt;management, relying&lt;br/&gt;on new gossip messages, where they can be filtered in function of the level&lt;br/&gt;of services required&lt;br/&gt;is interesting.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/issues/1647&#34;&gt;https://github.com/lightningdevkit/rust-lightning/issues/1647&lt;/a&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc6363.html&#34;&gt;https://www.rfc-editor.org/rfc/rfc6363.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le lun. 13 févr. 2023 à 11:46, Joost Jager &amp;lt;joost.jager at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For a long time I&amp;#39;ve held the expectation that eventually payers on the&lt;br/&gt;&amp;gt; lightning network will become very strict about node performance. That they&lt;br/&gt;&amp;gt; will require a routing node to operate flawlessly or else apply a hefty&lt;br/&gt;&amp;gt; penalty such as completely avoiding the node for an extended period of time&lt;br/&gt;&amp;gt; - multiple weeks. The consequence of this is that routing nodes would need&lt;br/&gt;&amp;gt; to manage their liquidity meticulously because every failure potentially&lt;br/&gt;&amp;gt; has a large impact on future routing revenue.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think movement in this direction is important to guarantee&lt;br/&gt;&amp;gt; competitiveness with centralised payment systems and their (at least&lt;br/&gt;&amp;gt; theoretical) ability to process a payment in the blink of an eye. A&lt;br/&gt;&amp;gt; lightning wallet trying multiple paths to find one that works doesn&amp;#39;t help&lt;br/&gt;&amp;gt; with this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A common argument against strict penalisation is that it would lead to&lt;br/&gt;&amp;gt; less efficient use of capital. Routing nodes would need to maintain pools&lt;br/&gt;&amp;gt; of liquidity to guarantee successes all the time. My opinion on this is&lt;br/&gt;&amp;gt; that lightning is already enormously capital efficient at scale and that it&lt;br/&gt;&amp;gt; is worth sacrificing a slight part of that efficiency to also achieve the&lt;br/&gt;&amp;gt; lowest possible latency.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This brings me to the actual subject of this post. Assuming strict&lt;br/&gt;&amp;gt; penalisation is good, it may still not be ideal to flip the switch from one&lt;br/&gt;&amp;gt; day to the other. Routing nodes may not offer the required level of service&lt;br/&gt;&amp;gt; yet, causing senders to end up with no nodes to choose from.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One option is to gradually increase the strength of the penalties, so that&lt;br/&gt;&amp;gt; routing nodes are given time to adapt to the new standards. This does&lt;br/&gt;&amp;gt; require everyone to move along and leaves no space for cheap routing nodes&lt;br/&gt;&amp;gt; with less leeway in terms of liquidity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Therefore I am proposing another way to go about it: extend the&lt;br/&gt;&amp;gt; `channel_update` field `channel_flags` with a new bit that the sender can&lt;br/&gt;&amp;gt; use to signal `highly_available`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s then up to payers to decide how to interpret this flag. One way could&lt;br/&gt;&amp;gt; be to prefer `highly_available` channels during pathfinding. But if the&lt;br/&gt;&amp;gt; routing node then returns a failure, a much stronger than normal penalty&lt;br/&gt;&amp;gt; will be applied. For routing nodes this creates an opportunity to attract&lt;br/&gt;&amp;gt; more traffic by marking some channels as `highly_available`, but it also&lt;br/&gt;&amp;gt; comes with the responsibility to deliver.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Without shadow channels, it is impossible to guarantee liquidity up to the&lt;br/&gt;&amp;gt; channel capacity. It might make sense for senders to only assume high&lt;br/&gt;&amp;gt; availability for amounts up to `htlc_maximum_msat`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A variation on this scheme that requires no extension of `channel_update`&lt;br/&gt;&amp;gt; is to signal availability implicitly through routing fees. So the more&lt;br/&gt;&amp;gt; expensive a channel is, the stronger the penalty that is applied on failure&lt;br/&gt;&amp;gt; will be. It seems less ideal though, because it could disincentivize cheap&lt;br/&gt;&amp;gt; but reliable channels on high traffic links.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The effort required to implement some form of a `highly_available` flag&lt;br/&gt;&amp;gt; seem limited and it may help to get payment success rates up. Interested to&lt;br/&gt;&amp;gt; hear your thoughts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Joost&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/20230214/893867dd/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230214/893867dd/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:42&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsftsdkfjr66ssaj7he7kf56grqqw82haaryx7y08ukzmqr5msfxmczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zgxq49y</id>
    
      <title type="html">📅 Original date posted:2023-02-17 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsftsdkfjr66ssaj7he7kf56grqqw82haaryx7y08ukzmqr5msfxmczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zgxq49y" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9svuvwtr48sjhwlalah0phaqynqrtehyfmq8t3ef5p5kcy8cwz7q3hmrxu&#39;&gt;nevent1q…mrxu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-17&lt;br/&gt;🗒️ Summary of this message: The discussion is about the development and design of protocols, and the need for neutral approaches to ensure decentralization.&lt;br/&gt;📝 Original message:&lt;br/&gt;As long as protocol development and design is done neutrally, I&amp;#39;m all fine!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le ven. 17 févr. 2023 à 10:48, Joost Jager &amp;lt;joost.jager at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Right, that was my above point about fetching scoring data - there&amp;#39;s three&lt;br/&gt;&amp;gt;&amp;gt; relevant &amp;#34;buckets&amp;#34; of&lt;br/&gt;&amp;gt;&amp;gt; nodes, I think - (a) large nodes sending lots of payments, like the&lt;br/&gt;&amp;gt;&amp;gt; above, (b) &amp;#34;client nodes&amp;#34; that&lt;br/&gt;&amp;gt;&amp;gt; just connect to an LSP or two, (c) nodes that route some but don&amp;#39;t send a&lt;br/&gt;&amp;gt;&amp;gt; lot of payments (but do&lt;br/&gt;&amp;gt;&amp;gt; send *some* payments), and may have lots or not very many channels.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; (a) I think we&amp;#39;re getting there, and we don&amp;#39;t need to add anything extra&lt;br/&gt;&amp;gt;&amp;gt; for this use-case beyond&lt;br/&gt;&amp;gt;&amp;gt; the network maturing and improving our scoring algorithms.&lt;br/&gt;&amp;gt;&amp;gt; (b) I think is trivially solved by downloading the data from a node in&lt;br/&gt;&amp;gt;&amp;gt; category (a), presumably the&lt;br/&gt;&amp;gt;&amp;gt; LSP(s) in question (see other branch of this thread)&lt;br/&gt;&amp;gt;&amp;gt; (c) is trickier, but I think the same solution of just fetching&lt;br/&gt;&amp;gt;&amp;gt; semi-trusted data here more than&lt;br/&gt;&amp;gt;&amp;gt; sufficies. For most routing nodes that don&amp;#39;t send a lot of payments we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt; talking about a very small&lt;br/&gt;&amp;gt;&amp;gt; amount of payments, so trusting a third-party for scoring data seems&lt;br/&gt;&amp;gt;&amp;gt; reasonable.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I see that in your view all nodes will either be large nodes themselves,&lt;br/&gt;&amp;gt; or be downloading scoring data from large nodes. I&amp;#39;d argue that that is&lt;br/&gt;&amp;gt; more of a move towards centralisation than the `ha` flag is. The flag at&lt;br/&gt;&amp;gt; least allows small nodes to build up their view of the network in an&lt;br/&gt;&amp;gt; efficient and independently manner.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Joost&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/20230217/36b81f39/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230217/36b81f39/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:42&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspfq7j2673g0p88xyxxu3lwlxvsfsex8neyp8w2a3jq6asw697uqczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zjw5wrl</id>
    
      <title type="html">📅 Original date posted:2023-01-12 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspfq7j2673g0p88xyxxu3lwlxvsfsex8neyp8w2a3jq6asw697uqczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zjw5wrl" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8a5zt7fcpx5u892rk0h8qvkpzfl0vq62csvkjm77fdf6ekk3hxfgq6pg0m&#39;&gt;nevent1q…pg0m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-01-12&lt;br/&gt;🗒️ Summary of this message: Lightning Network developers are documenting a protocol architecture for mitigating channel jamming with Staking Credentials, enabling deployment within a reputation or monetary strategy. The architecture separates the credentials issuance phase from the redemption phase and abstracts participants to answer multiple types of Lightning deployment. The credentials redemption mechanism covers diverse Lightning channel counterparty risks, with a primary focus on HTLC jamming. The module is designed to be uncoupled from LDK architecture specifics and generic to minimize interdependencies with independent advances in channel types/transaction-relay policy.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi LN devs,&lt;br/&gt;&lt;br/&gt;Following the November proposal of mitigating channel jamming with&lt;br/&gt;Reputation Credentials, started to document the protocol architecture.&lt;br/&gt;After feedback on the naming protocol itself, I switched to Staking&lt;br/&gt;Credentials. In fact the proposed architecture enables mitigations&lt;br/&gt;deployment both within a reputation strategy or a monetary strategy in&lt;br/&gt;function of the base collateral considered (proof-of-utxo ownership or&lt;br/&gt;on-chain/off-chain payments).&lt;br/&gt;&lt;br/&gt;The main advance is the clear separation of the credentials issuance phase&lt;br/&gt;from the redemption phase. Participants in the architecture have been&lt;br/&gt;abstracted to answer multiple types of Lightning deployment: credentials&lt;br/&gt;issuance and redemption fully-sourced on the client-side, issuance&lt;br/&gt;delegation where the credentials mining is delegated to a LSP, redemption&lt;br/&gt;delegation where the credentials are attached on the fly to a HTLC by a hop&lt;br/&gt;supporting trampoline. Abstraction has been done also on the routing-hop&lt;br/&gt;side, where the credentials issuer can be dissociated from the routing hop&lt;br/&gt;against which it can be redeemed (to allow &amp;#34;phantom node&amp;#34; style of&lt;br/&gt;deployment [0]).&lt;br/&gt;&lt;br/&gt;The credentials redemption mechanism itself has been abstracted to cover&lt;br/&gt;diverse Lightning channel counterparty risks, with a primary focus on HTLC&lt;br/&gt;jamming. Beyond, the redemption flow could be easily deployed to solve the&lt;br/&gt;risk asymmetries brought by the signature release flow in the context of&lt;br/&gt;dual-funding/splicing.&lt;br/&gt;&lt;br/&gt;Architecture document is available here:&lt;br/&gt;&lt;a href=&#34;https://github.com/ariard/lightning-rfc/blob/2022-11-reputation-credentials/60-staking-credentials-archi.md&#34;&gt;https://github.com/ariard/lightning-rfc/blob/2022-11-reputation-credentials/60-staking-credentials-archi.md&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Credential issuance phase, redemption phase, onion communication channels&lt;br/&gt;as credential transport protocol, credentials data format, cryptographic&lt;br/&gt;primitives used for unlinking and recommendations for risk-management&lt;br/&gt;strategy (among others) should land in their own documents with time.&lt;br/&gt;&lt;br/&gt;Next focus on advancing the work-in-progress implementation:&lt;br/&gt;&lt;a href=&#34;https://github.com/ariard/lightning-risk-engine&#34;&gt;https://github.com/ariard/lightning-risk-engine&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Module is designed to be uncoupled from LDK architecture specifics and&lt;br/&gt;generic to minimize interdependencies with independent advances in channel&lt;br/&gt;types/transaction-relay policy.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://lightningdevkit.org/blog/introducing-phantom-node-payments/&#34;&gt;https://lightningdevkit.org/blog/introducing-phantom-node-payments/&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/20230112/7ab3d050/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230112/7ab3d050/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:30&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs08ysurauglqdc256sj0n2xt79zy2lv4dlu8mnfwc6av2268jq0aqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zsjcyud</id>
    
      <title type="html">📅 Original date posted:2023-01-05 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs08ysurauglqdc256sj0n2xt79zy2lv4dlu8mnfwc6av2268jq0aqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zsjcyud" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx0pyyuqj6h2js8uny8rl9vh0sc2ec22aqecw4lt8wy57qn36qy0sggqlln&#39;&gt;nevent1q…qlln&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-01-05&lt;br/&gt;🗒️ Summary of this message: The article discusses the use of Chia&amp;#39;s scripting capabilities in multi-party setups and breaking symmetry to prevent cheating in unilateral channel closures.&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi AJ,&lt;br/&gt;&lt;br/&gt;&amp;gt; Chia uses different terminology to bitcoin; &amp;#34;puzzle&amp;#34; is just what we call&lt;br/&gt;&amp;gt; &amp;#34;scriptPubKey&amp;#34; in bitcoin, more or less. Since its scripting capabilities&lt;br/&gt;&amp;gt; are pretty powerful, you can rig up a TLUV/OP_EVICT like mechanism, but&lt;br/&gt;&amp;gt; for a two-party setup, in practice I think that mostly just means you&lt;br/&gt;&amp;gt; can encode the logic directly as script, and when updating the state you&lt;br/&gt;&amp;gt; then only need to exchange CHECKSIGFROMSTACK-like signatures along the&lt;br/&gt;&amp;gt; lines of &amp;#34;state N implies outputs of A,B,C,... -- Alice&amp;#34;, rather than&lt;br/&gt;&amp;gt; signing multiple transactions.&lt;br/&gt;&lt;br/&gt;In the multi-party setup, encoding more of the unrolling logic directly as&lt;br/&gt;script could be a witness space gain, I guess. To express a channel&lt;br/&gt;factory/payment pool withdrawal, at the minimum I think you need an&lt;br/&gt;amount/exit scriptPubKey committed by the signature. Or maybe the output&lt;br/&gt;value could be a spent input amount distribution among a set of signers, if&lt;br/&gt;you would like some non-interactive pre-funded scheme.&lt;br/&gt;&lt;br/&gt;&amp;gt; If you have fully symmetric transactions, then you could have the&lt;br/&gt;&amp;gt; situation where Alice broadcasts update K, then attacks Bob and when&lt;br/&gt;&amp;gt; he attempts to post update N, she instead does a pinning attack by&lt;br/&gt;&amp;gt; broadcasting update K&#43;1 (spending update K), which then forces Bob to&lt;br/&gt;&amp;gt; generate a new version update N, which she then blocks with update K&#43;2,&lt;br/&gt;&amp;gt; etc. An attack like that is presumably pretty difficult to pull off in&lt;br/&gt;&amp;gt; practice, but it makes it pretty hard to reason about many of the limits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A simple advantage to breaking the symmetry is that if A does a unilateral&lt;br/&gt;&amp;gt; close, then B can immediately confirm that closure releasing all funds&lt;br/&gt;&amp;gt; for both parties. Without breaking the symmetry, you can&amp;#39;t distinguish&lt;br/&gt;&amp;gt; that case from B attempting to confirm his own unilateral close, which&lt;br/&gt;&amp;gt; would allow B to cheat.&lt;br/&gt;&lt;br/&gt;Yes, IIUC the proposed flow is UA.n -&amp;gt; CB.n -&amp;gt; money, and in this&lt;br/&gt;optimistic case, there is only one CLTV delay to respect the spend of the&lt;br/&gt;UA. In terms of timevalue cost to redeem all the funds, I think this is&lt;br/&gt;making the cost equivalent for all the parties. With today&amp;#39;s LN-penalty,&lt;br/&gt;the broadcaster balance is encumbered by the CSV delay, not the&lt;br/&gt;counterparty one.&lt;br/&gt;&lt;br/&gt;(Note on the gist, the UA state description includes a Pa or tapscript &amp;#34;IF&lt;br/&gt;CODESEP n OP_CLTV DROP ENDIF 1 CHECKSIG&amp;#34; as spendable paths and the CA.n&lt;br/&gt;state description nSequence = 0, so I&amp;#39;m not sure how the update/justice&lt;br/&gt;delay is enforced)&lt;br/&gt;&lt;br/&gt;&amp;gt; Yes, you can unilaterally close the channel with state N-1; but even&lt;br/&gt;&amp;gt; then they might respond by bumping to state N anyway. If that happens,&lt;br/&gt;&amp;gt; then the funds can remain locked up until the timeout, as you can no&lt;br/&gt;&amp;gt; longer time the htlc out off-chain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Still, if it&amp;#39;s one hung per htlc for the channel&amp;#39;s entire lifetime&lt;br/&gt;&amp;gt; (because you close it &amp;#34;immediately&amp;#34; when it happens), that&amp;#39;s probably&lt;br/&gt;&amp;gt; not going to cause problems frequently...&lt;br/&gt;&lt;br/&gt;I think here the issue can be corrected by selecting conservatively your&lt;br/&gt;implementation channel breakout timers, you should go to chain with the&lt;br/&gt;state N-1 with X buffer of block and ensure your CLTV delta are always&lt;br/&gt;bigger than X, where X=delay * 2. That way even if your counterparty is&lt;br/&gt;broadcasting state N at X-1, your htlc-timeout should be safe, I guess.&lt;br/&gt;&lt;br/&gt;&amp;gt; If Alice is dishonest, and posts a very old state (n-x), then Bob could&lt;br/&gt;&amp;gt; post up to x watchtower txs (WB.(n-x&#43;1) .. WB.n) causing Alice to be&lt;br/&gt;&amp;gt; unable to access her funds for up to (x&#43;1)*to_self_delay blocks. But&lt;br/&gt;&amp;gt; that&amp;#39;s just a reason for her to not be dishonest in the first place.&lt;br/&gt;&lt;br/&gt;So I think there still is the case of Bob broadcasting a very old state and&lt;br/&gt;Alice&amp;#39;s watchtowers colluding to prevent Alice&amp;#39;s honest funds access,&lt;br/&gt;potentially preventing the HTLC-timeout, IIUC. I don&amp;#39;t know if we&amp;#39;re not&lt;br/&gt;introducing some changes in the trust assumptions towards watchtowers where&lt;br/&gt;with vanilla eltoo a single compromised watchtower can be corrected by the&lt;br/&gt;honest channel holder or another watchtower, iirc.&lt;br/&gt;&lt;br/&gt;&amp;gt; No -- the RB.n transactions immediately release A&amp;#39;s funds after applying&lt;br/&gt;&amp;gt; the penalty, so if the watchtower colludes with A and has an old RB.y&lt;br/&gt;&amp;gt; transaction, Alice can steal funds by posting UA.x and RB.y, provided that&lt;br/&gt;&amp;gt; her balance now is sufficiently less than her balance then (ie bal.n &amp;lt;&lt;br/&gt;&amp;gt; bal.y - penalty).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In this model, Bob shouldn&amp;#39;t be signing RB.n or CB.n txs until Alice&lt;br/&gt;&amp;gt; has already started a unilateral close and posted UA.n/UA.k.&lt;br/&gt;&lt;br/&gt;So the penalty transactions should not be delegated to untrusted&lt;br/&gt;watchtowers. In case of RB.n signing key compromise, the whole channel&lt;br/&gt;funds might be lost.&lt;br/&gt;&lt;br/&gt;&amp;gt; Doesn&amp;#39;t generalise to redundant untrusted watchtowers though, but&lt;br/&gt;&amp;gt; presumably nothing does. (You could use the same utxo across multiple&lt;br/&gt;&amp;gt; watchtowers, but a rogue watchtower could just post an old WA.k tx and&lt;br/&gt;&amp;gt; claim your funds, preventing some honest watchtower from helping)&lt;br/&gt;&lt;br/&gt;So you could have a channel balance between the watchtower and yourself,&lt;br/&gt;where the tower balance is the payment for the WA.n broadcast, and there is&lt;br/&gt;an assumption the balance is cooperatively updated to adjust for on-chain&lt;br/&gt;fees. For sure, I&amp;#39;m not sure either how it would generalize to an untrusted&lt;br/&gt;watchtower, where interactions might be even bounded to avoid leak of the&lt;br/&gt;client identity.&lt;br/&gt;&lt;br/&gt;Still, I think eltoo channels would simplify the implementation of&lt;br/&gt;distributed towers by Lightning implementation, notably handling concurrent&lt;br/&gt;broadcast w.r.t chain asynchronicity issues, and hopefully removing the&lt;br/&gt;concern of commitment transaction key duplication by tower [0].&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/679&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/679&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le ven. 9 déc. 2022 à 01:55, Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; On Thu, Dec 08, 2022 at 02:14:06PM -0500, Antoine Riard wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;  - 2022-10-21, eltoo/chia:&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://twitter.com/bramcohen/status/1583122833932099585&#34;&gt;https://twitter.com/bramcohen/status/1583122833932099585&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; On the eltoo/chia variant, from my (quick) understanding, the main&lt;br/&gt;&amp;gt; &amp;gt; innovation aimed for is&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d say the main innovation aimed for is just doing something like&lt;br/&gt;&amp;gt; lightning over the top of chia (rather than bitcoin, liquid, ethereum&lt;br/&gt;&amp;gt; etc), and making it simple enough to be easily implemented.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; the limitation of the publication of eltoo states&lt;br/&gt;&amp;gt; &amp;gt; more than once by a counterparty, by introducing a cryptographic puzzle,&lt;br/&gt;&amp;gt; &amp;gt; where the witness can be produced once and only once ? I would say you&lt;br/&gt;&amp;gt; &amp;gt; might need the inheritance of the updated scriptpubkey across the chain&lt;br/&gt;&amp;gt; of&lt;br/&gt;&amp;gt; &amp;gt; eltoo states, with a TLUV-like mechanism.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Chia uses different terminology to bitcoin; &amp;#34;puzzle&amp;#34; is just what we call&lt;br/&gt;&amp;gt; &amp;#34;scriptPubKey&amp;#34; in bitcoin, more or less. Since its scripting capabilities&lt;br/&gt;&amp;gt; are pretty powerful, you can rig up a TLUV/OP_EVICT like mechanism, but&lt;br/&gt;&amp;gt; for a two-party setup, in practice I think that mostly just means you&lt;br/&gt;&amp;gt; can encode the logic directly as script, and when updating the state you&lt;br/&gt;&amp;gt; then only need to exchange CHECKSIGFROMSTACK-like signatures along the&lt;br/&gt;&amp;gt; lines of &amp;#34;state N implies outputs of A,B,C,... -- Alice&amp;#34;, rather than&lt;br/&gt;&amp;gt; signing multiple transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; The basic idea is &amp;#34;if it&amp;#39;s a two party channel with just Alice and Bob,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; then if Alice starts a unilateral close, then she&amp;#39;s already had her&lt;br/&gt;&amp;gt; say,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; so it&amp;#39;s only Bob&amp;#39;s opinion that matters from now on, and he should be&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; able to act immediately&amp;#34;, and once it&amp;#39;s only Bob&amp;#39;s opinion that&lt;br/&gt;&amp;gt; matters,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; you can simplify a bunch of things.&lt;br/&gt;&amp;gt; &amp;gt; From my understanding, assuming Eltoo paper terminology, Alice can&lt;br/&gt;&amp;gt; publish&lt;br/&gt;&amp;gt; &amp;gt; an update K transaction, and then after Bob can publish an update&lt;br/&gt;&amp;gt; &amp;gt; transaction K&amp;lt;N or Alice can publish the settlement transaction N, or Bob&lt;br/&gt;&amp;gt; &amp;gt; can publish an update transaction N. The main advantage of this&lt;br/&gt;&amp;gt; &amp;gt; construction I can see is a strict bound on the shared_delay encumbered&lt;br/&gt;&amp;gt; in&lt;br/&gt;&amp;gt; &amp;gt; the on-chain publication of the channel ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you have fully symmetric transactions, then you could have the&lt;br/&gt;&amp;gt; situation where Alice broadcasts update K, then attacks Bob and when&lt;br/&gt;&amp;gt; he attempts to post update N, she instead does a pinning attack by&lt;br/&gt;&amp;gt; broadcasting update K&#43;1 (spending update K), which then forces Bob to&lt;br/&gt;&amp;gt; generate a new version update N, which she then blocks with update K&#43;2,&lt;br/&gt;&amp;gt; etc. An attack like that is presumably pretty difficult to pull off in&lt;br/&gt;&amp;gt; practice, but it makes it pretty hard to reason about many of the limits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A simple advantage to breaking the symmetry is that if A does a unilateral&lt;br/&gt;&amp;gt; close, then B can immediately confirm that closure releasing all funds&lt;br/&gt;&amp;gt; for both parties. Without breaking the symmetry, you can&amp;#39;t distinguish&lt;br/&gt;&amp;gt; that case from B attempting to confirm his own unilateral close, which&lt;br/&gt;&amp;gt; would allow B to cheat.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; fast forwards: we might want to allow our channel partner&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; to immediately rely on a new state we propose without needing a&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; round-trip delay -- this potentially makes forwarding payments much&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; faster (though with some risk of locking the funds up, if you do a&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; fast forward to someone who&amp;#39;s gone offline)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; IIRC, there has already been a &amp;#34;fast-forward&amp;#34; protocol upgrade proposal&lt;br/&gt;&amp;gt; &amp;gt; based on update-turn in the LN-penalty paradigm [0]. I think reducing the&lt;br/&gt;&amp;gt; &amp;gt; latency of HTLC propagation across payment paths would constitute a UX&lt;br/&gt;&amp;gt; &amp;gt; improvement, especially a link-level update mechanism upgrade deployment&lt;br/&gt;&amp;gt; &amp;gt; might be incentivized by routing algorithms starting to penalize routing&lt;br/&gt;&amp;gt; &amp;gt; hops HTLC relay latency. What is unclear is the additional risk of&lt;br/&gt;&amp;gt; locking&lt;br/&gt;&amp;gt; &amp;gt; the funds up. If you don&amp;#39;t receive acknowledgement the fast forward state&lt;br/&gt;&amp;gt; &amp;gt; has been received, you should still be able to exit with the state N-1 ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, you can unilaterally close the channel with state N-1; but even&lt;br/&gt;&amp;gt; then they might respond by bumping to state N anyway. If that happens,&lt;br/&gt;&amp;gt; then the funds can remain locked up until the timeout, as you can no&lt;br/&gt;&amp;gt; longer time the htlc out off-chain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Still, if it&amp;#39;s one hung per htlc for the channel&amp;#39;s entire lifetime&lt;br/&gt;&amp;gt; (because you close it &amp;#34;immediately&amp;#34; when it happens), that&amp;#39;s probably&lt;br/&gt;&amp;gt; not going to cause problems frequently...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; doubled delays: once we publish the latest state we can, we want to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; be able to claim the funds immediately after to_self_delay expires;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; however if our counterparty has signatures for a newer state than we&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; do (which will happen if it was fast forwarded), they could post that&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; state shortly before to_self_delay expires, potentially increasing&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; the total delay to 2*to_self_delay.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; While the 2*to_self_delay sounds the maximum time delay in the state&lt;br/&gt;&amp;gt; &amp;gt; publication scenario where the cheating counterparty publishes a old&lt;br/&gt;&amp;gt; state&lt;br/&gt;&amp;gt; &amp;gt; then the honest counterparty publishes the latest one, there could be the&lt;br/&gt;&amp;gt; &amp;gt; case where the cheating counterparty broadcast chain of old states, up to&lt;br/&gt;&amp;gt; &amp;gt; mempool&amp;#39;s `limitancestorcount`. However, this chain of eltoo transactions&lt;br/&gt;&amp;gt; &amp;gt; could be replaced by the honest party paying a higher-feerate (assuming&lt;br/&gt;&amp;gt; &amp;gt; something like nversion=3).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With the asymmetric transactions proposed here, you&amp;#39;d need to have your&lt;br/&gt;&amp;gt; watchtowers collude with the attacker for this to happen.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think you could prevent chains from building up in the mempool by&lt;br/&gt;&amp;gt; requiring a relative timelock of perhaps 2 or 3 blocks for a WA.n/WB.n&lt;br/&gt;&amp;gt; tx to be valid (giving you time to post RA.n/RB.n in the meantime).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; * WA.n, WB.n : watchtower update to state n&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   - this is for an untrusted watchtower to correct attempted cheating&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     by Bob on behalf of Alice (or vice-versa). Spends UB.k or WA.k&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     (or UA.k/WB.k) respectively, provided k &amp;lt; n.&lt;br/&gt;&amp;gt; &amp;gt; I wonder if the introduction of watchtower specific transactions doesn&amp;#39;t&lt;br/&gt;&amp;gt; &amp;gt; break the 2*to_self_delay assumption&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The to_self_delay applies to whoever initiated the unilateral close,&lt;br/&gt;&amp;gt; and provided they actually posted the most recent state, no watchtower&lt;br/&gt;&amp;gt; tx is a valid spend. ie, if Alice is honest and n is the latest state,&lt;br/&gt;&amp;gt; then the only possible spends of UA.n are SA.n (after a delay) or CB.n,&lt;br/&gt;&amp;gt; and as soon as either of those are on chain, she gets access to her funds.&lt;br/&gt;&amp;gt; No version of WB.k or RB.k (or WA.k, CA.k, RA.k) are valid if k&amp;lt;=n and&lt;br/&gt;&amp;gt; UA.n is confirmed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If Alice is dishonest, and posts a very old state (n-x), then Bob could&lt;br/&gt;&amp;gt; post up to x watchtower txs (WB.(n-x&#43;1) .. WB.n) causing Alice to be&lt;br/&gt;&amp;gt; unable to access her funds for up to (x&#43;1)*to_self_delay blocks. But&lt;br/&gt;&amp;gt; that&amp;#39;s just a reason for her to not be dishonest in the first place.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; (iiuc it&amp;#39;s a design goal of current&lt;br/&gt;&amp;gt; &amp;gt; protocol) and what is the design rationale. Beyond that, there is a&lt;br/&gt;&amp;gt; concern&lt;br/&gt;&amp;gt; &amp;gt; with watchtower-specific transactions, it might leak your towers topology&lt;br/&gt;&amp;gt; &amp;gt; (i.e the number of them and the distribution in the p2p network) to an&lt;br/&gt;&amp;gt; &amp;gt; adversary.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you have a watchtower and it takes action, I don&amp;#39;t think you can&lt;br/&gt;&amp;gt; expect to retain privacy over the fact that you have a watchtower,&lt;br/&gt;&amp;gt; and how effective it is against an attacker with extensive monitoring&lt;br/&gt;&amp;gt; of the p2p network...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; * SA.n, SB.n : slowly claim funds according to state n&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   - this is for Alice to claim her funds if Bob is completely offline&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     (or vice-versa). Spends UA.n, UB.n, WA.n or WB.n with relative&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     timelock of to_self_delay.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If I&amp;#39;m following correctly the description, this is logically equivalent&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; &amp;gt; the sweep of a `to_local`/`to_remote` output on a commitment transaction&lt;br/&gt;&amp;gt; &amp;gt; though instead the waiting delay is eltoo shared_delay. There is no&lt;br/&gt;&amp;gt; &amp;gt; to_self_delay, at the punishment seems only to happen on the&lt;br/&gt;&amp;gt; update-level,&lt;br/&gt;&amp;gt; &amp;gt; or maybe one should be also able to punish slow fund exit, and another&lt;br/&gt;&amp;gt; &amp;gt; relative locktime should exist on the S* transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m just using &amp;#34;to_self_delay&amp;#34; as the X in &amp;#34;if you attempt to cheat,&lt;br/&gt;&amp;gt; I&amp;#39;ll definitely notice and take action within X blocks&amp;#34;. If you post&lt;br/&gt;&amp;gt; UA.n then post SA.n after X blocks (due to SA.n&amp;#39;s relative time lock)&lt;br/&gt;&amp;gt; then you&amp;#39;ve already proven you didn&amp;#39;t cheat, because that was enough&lt;br/&gt;&amp;gt; time for B to notice and take action.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; * Alice and Bob&amp;#39;s watchtower collude, but Bob has many watchtowers:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     F -&amp;gt; UA.k1 -&amp;gt; WB.k2 -&amp;gt; WB.n -&amp;gt; (to_self_delay) -&amp;gt; SA.n -&amp;gt; money&lt;br/&gt;&amp;gt; &amp;gt; Could the punishment transactions R* be also delegated to watchtowers,&lt;br/&gt;&amp;gt; &amp;gt; assuming they have been pre-signed to lockdown the exit scriptpubkeys ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No -- the RB.n transactions immediately release A&amp;#39;s funds after applying&lt;br/&gt;&amp;gt; the penalty, so if the watchtower colludes with A and has an old RB.y&lt;br/&gt;&amp;gt; transaction, Alice can steal funds by posting UA.x and RB.y, provided that&lt;br/&gt;&amp;gt; her balance now is sufficiently less than her balance then (ie bal.n &amp;lt;&lt;br/&gt;&amp;gt; bal.y - penalty).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In this model, Bob shouldn&amp;#39;t be signing RB.n or CB.n txs until Alice&lt;br/&gt;&amp;gt; has already started a unilateral close and posted UA.n/UA.k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; In order to allow fast-forwards, when Alice proposes a new state,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; she needs to send her partial signatures to allow Bob to unilaterally&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; accept the new state, ie sigs for: UB.n, CB.n, SB.n, RB.n. But she&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; also needs to be able to claim the funds if Bob proposes the new state&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; and broadcasts UB.n, she needs to be able broadcast CA.n. This can be&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; achieved with an adaptor signature approach (spelt out a bit more fully&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; in the gist) or a CTV-like approach, provided that UB.n reveals the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; state needed to calculate the the CTV commitment (see &amp;#34;EXPR_SETTLE&amp;#34; in&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/instagibbs/bolts/blob/29fe6d36cbad4101d5ec76c2b19c83c1494ac2fc/XX-eltoo-transactions.md&#34;&gt;https://github.com/instagibbs/bolts/blob/29fe6d36cbad4101d5ec76c2b19c83c1494ac2fc/XX-eltoo-transactions.md&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; ).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If you would like to have fast forward of chain of transactions, I wonder&lt;br/&gt;&amp;gt; &amp;gt; if there could be also the &amp;#34;sig-in-the-script&amp;#34; trick, where UB.n&lt;br/&gt;&amp;gt; &amp;gt; scriptpubkey (or one of its tapscripts) contains the signature for CB.n,&lt;br/&gt;&amp;gt; &amp;gt; SB.n, RB.n. Though you might have an issue of re-generating the&lt;br/&gt;&amp;gt; &amp;gt; witnessscript in case of state loss.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Broadcasting UB.n will only reveal signatures by B; so that would only&lt;br/&gt;&amp;gt; potentially help with CA.n or RA.n; and if UB.n is on-chain, then RA.n&lt;br/&gt;&amp;gt; isn&amp;#39;t valid (since it would require &amp;#34;n &amp;lt; n&amp;#34;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The EXPR_SETTLE stuff in the github link describes how to do the trick&lt;br/&gt;&amp;gt; via a CTV-ish approach (including an APO signature in a tapscript in the&lt;br/&gt;&amp;gt; scriptPubKey of UA.n here; and including data in the annex so that you&lt;br/&gt;&amp;gt; can recalculate thinks if an old UA.n is broadcast after you&amp;#39;ve&lt;br/&gt;&amp;gt; forgotten n&amp;#39;s state details).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; * how to pay watchtowers -- when a watchtower broadcasts a W&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   transaction, it needs to add fees, and it&amp;#39;s not clear (to me) how it&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   could fairly and reliably ensure it&amp;#39;s compensated for those costs,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   particularly if multiple W transactions are broadcast for a single&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   unilateral close attempt, due to one or more watchtowers colluding&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;   with an attacker, or simply having out of date information.&lt;br/&gt;&amp;gt; &amp;gt; I wonder if paying a watchtower, or getting paid as a watchtower isn&amp;#39;t  a&lt;br/&gt;&amp;gt; &amp;gt; &amp;#34;counterparty risk&amp;#34; similar to what is happening with jamming due to&lt;br/&gt;&amp;gt; &amp;gt; non-covered HTLC forward risk.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Actually, perhaps you could &amp;#34;yo dawg&amp;#34; it: if you give the watchtower a&lt;br/&gt;&amp;gt; pre-signed transaction WA.n:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     input 1: UA.k/WA.k (ANYPREVOUTANYSCRIPT, SINGLE)&lt;br/&gt;&amp;gt;     input 2: my funds (SINGLE, ALL)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     output 1: WA.n&lt;br/&gt;&amp;gt;     output 2: new lightning channel between me and watchtower&lt;br/&gt;&amp;gt;     output 3: ephemeral OP_TRUE output&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; then you could have the &amp;#34;new lightning channel&amp;#34; be setup with an initial&lt;br/&gt;&amp;gt; capacity of &amp;#34;my funds&amp;#34;, and off-chain update the state of that channel so&lt;br/&gt;&amp;gt; that the watchtower&amp;#39;s balance is how much you&amp;#39;re willing to contribute in&lt;br/&gt;&amp;gt; fees if the watchtower does its job. If you set things up so that you&amp;#39;re&lt;br/&gt;&amp;gt; always able to claim a penalty via WA.n-&amp;gt;RA.n if the watchtower acts,&lt;br/&gt;&amp;gt; then you can give up to that penalty to the watchtower and still end up&lt;br/&gt;&amp;gt; making a profit.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Doesn&amp;#39;t generalise to redundant untrusted watchtowers though, but&lt;br/&gt;&amp;gt; presumably nothing does. (You could use the same utxo across multiple&lt;br/&gt;&amp;gt; watchtowers, but a rogue watchtower could just post an old WA.k tx and&lt;br/&gt;&amp;gt; claim your funds, preventing some honest watchtower from helping)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (Yo dawg, I heard you liked closing lightning channels, so we put a&lt;br/&gt;&amp;gt; lightning channel in your watchtower, so you can close a channel while&lt;br/&gt;&amp;gt; you&amp;#39;re closing a channel. Alternatively: &amp;#34;when god closes one channel,&lt;br/&gt;&amp;gt; he opens another&amp;#34;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230105/a6627adb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230105/a6627adb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:12:27&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv5fjs6lptl8dn9k6036f0dmmdvv0fprn7ngjhy22amp55andrz8czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqyxq5q</id>
    
      <title type="html">📅 Original date posted:2023-05-31 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv5fjs6lptl8dn9k6036f0dmmdvv0fprn7ngjhy22amp55andrz8czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqyxq5q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdzy78dt88y0tpn994dd7mrgn925zkc2rf5kl763vsxjtwr0zewwcymxw88&#39;&gt;nevent1q…xw88&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-31&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; I think it&amp;#39;s important to differentiate between fees a node charges and&lt;br/&gt;&amp;gt; *reputation_revenue*. Reputation is determined as a function of the latter.&lt;br/&gt;&amp;gt; If Caroll has a very high *reputation_revenue* and Bob has a very low one,&lt;br/&gt;&amp;gt; then Bob probably won&amp;#39;t have a high reputation with Caroll, as the amount&lt;br/&gt;&amp;gt; of fees he forwards to Caroll is smaller than the damage he can create.&lt;br/&gt;&amp;gt; That is, if Caroll is a huge node and Bob is a raspberry pi, then Bob will&lt;br/&gt;&amp;gt; never have a good reputation with Caroll. If they have similar&lt;br/&gt;&amp;gt; *reputation_revenue*, then getting a good reputation with Bob is as&lt;br/&gt;&amp;gt; difficult as getting a good reputation with Caroll.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In your example (if I got it correctly) Bob&amp;#39;s *reputation_revenue* = 1,000,&lt;br/&gt;&amp;gt; *reputation_window*=100 and *routing_window*=10. Could you explain what are&lt;br/&gt;&amp;gt; Caroll&amp;#39;s parameters are in your example? The *fee_base_msat* does not&lt;br/&gt;&amp;gt; indicate Carolls *reputation_revenue* (unless Alice is the only one&lt;br/&gt;&amp;gt; transacting on the Bob-Caroll channel, and then she is the one paying for&lt;br/&gt;&amp;gt; Bob&amp;#39;s reputation).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That being said, we use *reputation_revenue *to estimate the damage an&lt;br/&gt;&amp;gt; attacker can create. If there is a chain of nodes that have high reputation&lt;br/&gt;&amp;gt; with each other, and they are jammed, they would be compensated for the&lt;br/&gt;&amp;gt; revenue lost during the attack. If Bob finds that having a high reputation&lt;br/&gt;&amp;gt; with Caroll is crucial and 1,000 sats will not compensate him for loosing&lt;br/&gt;&amp;gt; it, then he should either never endorse anything on that channel, or at&lt;br/&gt;&amp;gt; least put a higher bar than *reputation_revenue*.&lt;br/&gt;&lt;br/&gt;I think the distinction you&amp;#39;re proposing between routing fees and&lt;br/&gt;reputation revenue matters in the HTLC endorsement model. For the&lt;br/&gt;example I&amp;#39;m using let&amp;#39;s say Caroll and Bob share the same exact&lt;br/&gt;parameters, *reputation_revenue* = 1,000, *routing_window*=100 and&lt;br/&gt;*routing_window*=10, where the reputation revenue of Bob towards&lt;br/&gt;Caroll is made from multiple incoming links.&lt;br/&gt;&lt;br/&gt;For each HTLC forwarding request issued from Alice, Bob has to make&lt;br/&gt;the decision between refusing Alice HTLC forward over the Caroll&lt;br/&gt;incoming link, and lose an opportunity of fee income, or accept the&lt;br/&gt;HTLC and suffers from a damage if Alice reveals a posteriori as a&lt;br/&gt;jamming attacker.&lt;br/&gt;&lt;br/&gt;This is unclear to me how the compensation mechanism works in the&lt;br/&gt;chain of nodes that have high reputation with each other, and I still&lt;br/&gt;think the HTLC endorsement mitigation suffers from the classic issues&lt;br/&gt;of reputation systems (i.e whitewashing).&lt;br/&gt;&lt;br/&gt;&amp;gt; Not sure what you mean by that.&lt;br/&gt;&lt;br/&gt;I think there is a coupling effec introduced between the historical&lt;br/&gt;liquidity buckets of routing scoring algorithms and the introduction&lt;br/&gt;of endorsment scheme with adjustement of the channel liquidity and&lt;br/&gt;slots in function of local topology reputation.&lt;br/&gt;&lt;br/&gt;See the LDK scoring engine comments here :&lt;br/&gt;&lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/blob/eec5ec6b50720144fc23503c3ee9c1c8850517ac/lightning/src/routing/scoring.rs#L336&#34;&gt;https://github.com/lightningdevkit/rust-lightning/blob/eec5ec6b50720144fc23503c3ee9c1c8850517ac/lightning/src/routing/scoring.rs#L336&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le mer. 17 mai 2023 à 21:49, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The lack of transitivity of the reputation acquisition cost (e.g based on&lt;br/&gt;&amp;gt;&amp;gt; historical fees earned from forwards originating from the peer) between the&lt;br/&gt;&amp;gt;&amp;gt; hops of the payment path still raises a vulnerability issue for the&lt;br/&gt;&amp;gt;&amp;gt; endorsement scheme, I think.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Namely, let&amp;#39;s say you have Alice, Bob and Caroll where endorsement has&lt;br/&gt;&amp;gt;&amp;gt; been obtained by Alice on the Bob incoming link by paying fees for an&lt;br/&gt;&amp;gt;&amp;gt; amount of 1000 sats for the last 100 blocks. Caroll offers a far higher&lt;br/&gt;&amp;gt;&amp;gt; pricing on her incoming link from Bob, 10000 sats as `fee_base_msat` on her&lt;br/&gt;&amp;gt;&amp;gt; endorsed slots. It sounds to me there is nothing preventing Alice from&lt;br/&gt;&amp;gt;&amp;gt; sacrificing her earned reputation to inflict a loss of routing fees damage&lt;br/&gt;&amp;gt;&amp;gt; on Caroll incoming link ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think it&amp;#39;s important to differentiate between fees a node charges and&lt;br/&gt;&amp;gt; *reputation_revenue*. Reputation is determined as a function of the&lt;br/&gt;&amp;gt; latter. If Caroll has a very high *reputation_revenue* and Bob has a very&lt;br/&gt;&amp;gt; low one, then Bob probably won&amp;#39;t have a high reputation with Caroll, as the&lt;br/&gt;&amp;gt; amount of fees he forwards to Caroll is smaller than the damage he can&lt;br/&gt;&amp;gt; create. That is, if Caroll is a huge node and Bob is a raspberry pi, then&lt;br/&gt;&amp;gt; Bob will never have a good reputation with Caroll. If they have similar&lt;br/&gt;&amp;gt; *reputation_revenue*, then getting a good reputation with Bob is as&lt;br/&gt;&amp;gt; difficult as getting a good reputation with Caroll.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In your example (if I got it correctly) Bob&amp;#39;s *reputation_revenue* =&lt;br/&gt;&amp;gt; 1,000, *reputation_window*=100 and *routing_window*=10. Could you explain&lt;br/&gt;&amp;gt; what are Caroll&amp;#39;s parameters are in your example? The *fee_base_msat*&lt;br/&gt;&amp;gt; does not indicate Carolls *reputation_revenue* (unless Alice is the only&lt;br/&gt;&amp;gt; one transacting on the Bob-Caroll channel, and then she is the one paying&lt;br/&gt;&amp;gt; for Bob&amp;#39;s reputation).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That being said, we use *reputation_revenue *to estimate the damage an&lt;br/&gt;&amp;gt; attacker can create. If there is a chain of nodes that have high reputation&lt;br/&gt;&amp;gt; with each other, and they are jammed, they would be compensated for the&lt;br/&gt;&amp;gt; revenue lost during the attack. If Bob finds that having a high reputation&lt;br/&gt;&amp;gt; with Caroll is crucial and 1,000 sats will not compensate him for loosing&lt;br/&gt;&amp;gt; it, then he should either never endorse anything on that channel, or at&lt;br/&gt;&amp;gt; least put a higher bar than *reputation_revenue*.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is an independent new observation on the effect of dynamic&lt;br/&gt;&amp;gt;&amp;gt; reputation windows on payment reliability, as those windows are not&lt;br/&gt;&amp;gt;&amp;gt; announced to the rest of the network, sudden changes in the links&lt;br/&gt;&amp;gt;&amp;gt; throughput based on HTLC resolution might break the historical liquidity&lt;br/&gt;&amp;gt;&amp;gt; buckets of routing scoring algorithms (at least in the way we&amp;#39;re doing it&lt;br/&gt;&amp;gt;&amp;gt; for LDK), I think ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Not sure what you mean by that.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;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/20230531/5017e472/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230531/5017e472/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:08:50&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr3j3llukj7ty9etg9mprmsu98fz5zklkvcpnemass56y36lgcfnqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zkq06rs</id>
    
      <title type="html">📅 Original date posted:2023-05-17 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr3j3llukj7ty9etg9mprmsu98fz5zklkvcpnemass56y36lgcfnqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zkq06rs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswy872jcfn50nxmlrgwt8yjgkpmuf5er7kjkqx2aqrycq48qec4tc6h5s0m&#39;&gt;nevent1q…5s0m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-17&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;&amp;gt; That is, one cannot gain reputation during low fee times and use it when&lt;br/&gt;fees are high.&lt;br/&gt;&lt;br/&gt;&amp;gt; Good reputation is also a function of the general environment, and so if&lt;br/&gt;there is a fee spike, reputation will change. It is true that nodes can go&lt;br/&gt;rogue, but this is why we aim &amp;gt; for the price of a good reputation to be&lt;br/&gt;similar to the amount of damage they can create.&lt;br/&gt;&lt;br/&gt;The lack of transitivity of the reputation acquisition cost (e.g based on&lt;br/&gt;historical fees earned from forwards originating from the peer) between the&lt;br/&gt;hops of the payment path still raises a vulnerability issue for the&lt;br/&gt;endorsement scheme, I think.&lt;br/&gt;&lt;br/&gt;Namely, let&amp;#39;s say you have Alice, Bob and Caroll where endorsement has been&lt;br/&gt;obtained by Alice on the Bob incoming link by paying fees for an amount of&lt;br/&gt;1000 sats for the last 100 blocks. Caroll offers a far higher pricing on&lt;br/&gt;her incoming link from Bob, 10000 sats as `fee_base_msat` on her endorsed&lt;br/&gt;slots. It sounds to me there is nothing preventing Alice from sacrificing&lt;br/&gt;her earned reputation to inflict a loss of routing fees damage on Caroll&lt;br/&gt;incoming link ?&lt;br/&gt;&lt;br/&gt;Generally, I think the endorsement scheme assumes some synchronicity in the&lt;br/&gt;setting of routing fees by the hops. In practice, it&amp;#39;s expected there will&lt;br/&gt;be variations based on their own pricing of liquidity, their accumulated&lt;br/&gt;data sets (e.g historical view of LN gossips) and downstream link topology.&lt;br/&gt;And this is the same between building a mitigation on concepts like&lt;br/&gt;&amp;#34;peace/war&amp;#34; time, sophisticated attackers might be able to mask their&lt;br/&gt;traffic as some spontaneous congestion.&lt;br/&gt;&lt;br/&gt;There is an independent new observation on the effect of dynamic reputation&lt;br/&gt;windows on payment reliability, as those windows are not announced to the&lt;br/&gt;rest of the network, sudden changes in the links throughput based on HTLC&lt;br/&gt;resolution might break the historical liquidity buckets of routing scoring&lt;br/&gt;algorithms (at least in the way we&amp;#39;re doing it for LDK), I think ?&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le mer. 10 mai 2023 à 16:59, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Christian,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for your comments! We will discuss this further in the upcoming&lt;br/&gt;&amp;gt; call on the 15th, would be great to see you there!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; this is an intrinsic issue with reputation systems, and the main&lt;br/&gt;&amp;gt;&amp;gt; reason I&amp;#39;m sceptical w.r.t. their usefulness in lightning.&lt;br/&gt;&amp;gt;&amp;gt; Fundamentally any reputation system bases their expectations for the&lt;br/&gt;&amp;gt;&amp;gt; future on experiences they made in the past, and they are thus always&lt;br/&gt;&amp;gt;&amp;gt; susceptible to sudden behavioral changes (going rogue from a prior&lt;br/&gt;&amp;gt;&amp;gt; clean record) and whitewashing attacks (switching identity, abusing&lt;br/&gt;&amp;gt;&amp;gt; any builtin bootstrapping method for new users to gain a good or&lt;br/&gt;&amp;gt;&amp;gt; neutral reputation before turning rogue repeatedly).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the Lightning Network, fees are a native way to put a price on having a&lt;br/&gt;&amp;gt; good reputation (see details here [0]). In the design that we suggest, the&lt;br/&gt;&amp;gt; reputation gained today cannot be used in the distant future, and funds&lt;br/&gt;&amp;gt; need to be invested continuously to keep a good reputation. Good reputation&lt;br/&gt;&amp;gt; is also a function of the general environment, and so if there is a fee&lt;br/&gt;&amp;gt; spike, reputation will change. It is true that nodes can go rogue, but this&lt;br/&gt;&amp;gt; is why we aim for the price of a good reputation to be similar to the&lt;br/&gt;&amp;gt; amount of damage they can create.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This gets compounded as soon as we start gossiping about reputations,&lt;br/&gt;&amp;gt;&amp;gt; since now our decisions are no longer based just on information we can&lt;br/&gt;&amp;gt;&amp;gt; witness ourselves, or at least verify its correctness, and as such an&lt;br/&gt;&amp;gt;&amp;gt; attacker can most likely &amp;#34;earn&amp;#34; a positive reputation in some other&lt;br/&gt;&amp;gt;&amp;gt; part of the world, and then turn around and attack the nodes that&lt;br/&gt;&amp;gt;&amp;gt; trusted the reputation shared from those other parts.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Notice that we are not gossiping about our peer&amp;#39;s reputation. The only&lt;br/&gt;&amp;gt; thing that a node communicates to its neighbor is whether they see an HTLC&lt;br/&gt;&amp;gt; as endorsed or just neutral, that is, should this HTLC be granted access to&lt;br/&gt;&amp;gt; all of the resources or just the restricted part.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;d be very interested in how many repeat interactions nodes get from&lt;br/&gt;&amp;gt;&amp;gt; individual senders, since that also tells us how much use we can get&lt;br/&gt;&amp;gt;&amp;gt; out of local-only reputation based systems, and I wouldn&amp;#39;t be&lt;br/&gt;&amp;gt;&amp;gt; surprised if, for large routing nodes, we have sufficient data for&lt;br/&gt;&amp;gt;&amp;gt; them to make an informed decision, while the edges may be more&lt;br/&gt;&amp;gt;&amp;gt; vulnerable, but they&amp;#39;d also be used by way fewer senders, and the&lt;br/&gt;&amp;gt;&amp;gt; impact of an attack would also be proportionally smaller.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is something we hope to learn once we&amp;#39;ll start collecting data from&lt;br/&gt;&amp;gt; our brave volunteers :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Clara&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/20230517/9cd075a3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230517/9cd075a3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:08:49&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8gkunpa5hzfasq40y8p0vycjm5fpk99rgqcfewkrfz96jsmed88czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z7kt29u</id>
    
      <title type="html">📅 Original date posted:2023-05-06 📝 Original message: Hi *, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8gkunpa5hzfasq40y8p0vycjm5fpk99rgqcfewkrfz96jsmed88czypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z7kt29u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr4x82pfthdukn5u65ng6ytqml4pt0sps939ezpw30jevs380zspsgjap7f&#39;&gt;nevent1q…ap7f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-05-06&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi *,&lt;br/&gt;&lt;br/&gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; more expressive value is required.&lt;br/&gt;&lt;br/&gt;I think the HTLC endorsement scheme as proposed is still suffering from a&lt;br/&gt;vulnerability as local reputation can be built up during periods of low&lt;br/&gt;routing fees, endorsement gained and then abused during periods of high&lt;br/&gt;routing fees. Therefore, it sounds to me this scheme should aim for some&lt;br/&gt;reputational transitivity between incoming traffic and outgoing traffic.&lt;br/&gt;Namely, the acquisition cost of the local reputation should be equal to the&lt;br/&gt;max timevalue damage that one can inflict on a routing node channel&lt;br/&gt;accessible from its local counterparty granting this high-level of&lt;br/&gt;reputation.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if this can be fixed by ensuring permanent link-level &amp;#34;gossip&amp;#34;&lt;br/&gt;where counterparties along a payment path expose their reputation&lt;br/&gt;heuristics to guarantee this transitivity, or it&amp;#39;s a fundamental issue with&lt;br/&gt;a point-to-point approach like HTLC endorsement.&lt;br/&gt;&lt;br/&gt;Opened an issue on the repository to converge on a threat model:&lt;br/&gt;&lt;a href=&#34;https://github.com/ClaraShk/LNJamming/pull/13&#34;&gt;https://github.com/ClaraShk/LNJamming/pull/13&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I still think building data gathering infrastructure for Lightning is&lt;br/&gt;valuable as ultimately any jamming mitigation will have to adapt its&lt;br/&gt;upfront fees or reputation acquisition cost in function of HTLC traffic and&lt;br/&gt;market forces.&lt;br/&gt;&lt;br/&gt;Looking forward to giving an update on Staking Credentials [0], an&lt;br/&gt;end-to-end approach to mitigate channel jamming.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le dim. 30 avr. 2023 à 03:57, Carla Kirk-Cohen &amp;lt;kirkcohenc at gmail.com&amp;gt; a&lt;br/&gt;écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some updates on channel jamming!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Next Call&lt;br/&gt;&amp;gt; - Monday 01 May @ 15:00 UTC&lt;br/&gt;&amp;gt; - &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&amp;gt; - Agenda: &lt;a href=&#34;https://github.com/ClaraShk/LNJamming/issues/12&#34;&gt;https://github.com/ClaraShk/LNJamming/issues/12&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Data Gathering&lt;br/&gt;&amp;gt; During these weekly calls, we&amp;#39;ve come to agreement that we would like&lt;br/&gt;&amp;gt; to gather data about the use of HTLC endorsement and local reputation&lt;br/&gt;&amp;gt; tracking for jamming mitigation. A reminder of the full scheme is&lt;br/&gt;&amp;gt; included at the end of this email, and covered more verbosely in [1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We have a few goals in mind:&lt;br/&gt;&amp;gt; - Observe the effect of endorsement in the steady state with&lt;br/&gt;&amp;gt;   logging-only implementation.&lt;br/&gt;&amp;gt; - Gather real-world data for use in future simulation work.&lt;br/&gt;&amp;gt; - Experiment with different algorithms for tracking local reputation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The minimal changes required to add HTLC endorsement are outlined in [2].&lt;br/&gt;&amp;gt; Our suggestion is to start simple with a binary endorsement field. As&lt;br/&gt;&amp;gt; we learn more, we will be better equipped to understand whether a&lt;br/&gt;&amp;gt; more expressive value is required.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With this infrastructure in place, we can start to experiment with&lt;br/&gt;&amp;gt; various local reputation schemes and data gathering, possibly even&lt;br/&gt;&amp;gt; externally to LN implementations in projects like circuitbreaker [3].&lt;br/&gt;&amp;gt; We&amp;#39;d be interested to hear whether there&amp;#39;s any appetite to deploy using&lt;br/&gt;&amp;gt; an experimental TLV value?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Reputation Scheme&lt;br/&gt;&amp;gt; - Each node locally tracks the reputation of its direct neighbors.&lt;br/&gt;&amp;gt; - Each node allocates, per its risk tolerance:&lt;br/&gt;&amp;gt;   - A number of slots reserved for endorsed HTLCs from high reputation&lt;br/&gt;&amp;gt;     peers.&lt;br/&gt;&amp;gt;   - A portion of liquidity reserved for endorsed HTLCs from high&lt;br/&gt;&amp;gt;     reputation peers.&lt;br/&gt;&amp;gt; - Forwarding of HTLCs:&lt;br/&gt;&amp;gt;   - If a HTLC is endorsed by a high reputation peer, it is forwarded&lt;br/&gt;&amp;gt;     as usual with endorsed = 1.&lt;br/&gt;&amp;gt;   - Otherwise, it is forwarded with endorsed = 0 if there are slots and&lt;br/&gt;&amp;gt;     liquidity available for unknown HTLCs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Endorsement and reputation are proposed as the first step in a two part&lt;br/&gt;&amp;gt; scheme for mitigating channel jamming:&lt;br/&gt;&amp;gt; - Reputation for slow jams which are easily detected as misbehavior.&lt;br/&gt;&amp;gt; - Unconditional fees for quick jams that are difficult to detect, as&lt;br/&gt;&amp;gt;   they can always fall under a target threshold.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Looking forward to discussing further in the upcoming call!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Carla and Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&#34;&gt;https://gist.github.com/carlaKC/be820bb638624253f3ae7b39dbd0e343&lt;/a&gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://github.com/lightning/bolts/pull/1071&#34;&gt;https://github.com/lightning/bolts/pull/1071&lt;/a&gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/lightningequipment/circuitbreaker&#34;&gt;https://github.com/lightningequipment/circuitbreaker&lt;/a&gt;&lt;br/&gt;&amp;gt; _______________________________________________&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/20230506/40daccce/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230506/40daccce/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:08:47&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszy45m0nwkuy0uf3rhy3p3n7v674m9kpd74pgldwejjkgjxrzqfzqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqwe07q</id>
    
      <title type="html">📅 Original date posted:2023-03-06 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszy45m0nwkuy0uf3rhy3p3n7v674m9kpd74pgldwejjkgjxrzqfzqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqwe07q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyjhp3hkntp2fk8xr2ddufpmjq3475amfuy4ccllxgej3myrvgyvgfsggky&#39;&gt;nevent1q…ggky&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-03-06&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;My understanding of the local reputation channel is the following, when Bob&lt;br/&gt;receives a HTLC forwarding request from Alice to Caroll:&lt;br/&gt;- if Alice has reputation of 1 and Alice endorses the transaction, Bob&lt;br/&gt;forwards and endorses the HTLC to Caroll&lt;br/&gt;- else if the HTLC amount is under the available outbound liquidity quota&lt;br/&gt;assigned to Alice and available outbound slots assigned to Alice, Bob&lt;br/&gt;forwards the HTLC to Caroll and reduce available outbound liquidity/slots&lt;br/&gt;assigned to Alice&lt;br/&gt;- else the HTLC is rejected&lt;br/&gt;&lt;br/&gt;This is unclear on which criterias the endorsement decision is made (e.g&lt;br/&gt;CLTV expiry delta, odds of settlement, ongoing congestion of outbound&lt;br/&gt;channels ?). Additionally, this is unclear how the available&lt;br/&gt;liquidity/slots on a given outbound channel are initially distributed&lt;br/&gt;between all the inbound channels (e.g proportional to the capacity) and how&lt;br/&gt;they&amp;#39;re balanced once the inbound channels start to accumulate reputation.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if this local reputation scheme precises how reputation is&lt;br/&gt;slashed in case of HTLC failure, and if any &amp;#34;grace&amp;#34; amount/rate is granted&lt;br/&gt;to the inbound channel counterparty, e.g Alice.&lt;br/&gt;&lt;br/&gt;Independently of those considerations, I think this local reputation scheme&lt;br/&gt;might suffer from exploitable reputation asymmetries by a jamming adversary.&lt;br/&gt;Let&amp;#39;s say you have the topology:&lt;br/&gt;&lt;br/&gt;Alice - Bob - Caroll - Dave&lt;br/&gt;&lt;br/&gt;Alice accumulated a reputation of 1 towards Bob and same for Bob towards&lt;br/&gt;Caroll. As `fee_base_msat` Bob picked up 1000 msat and Caroll picked up&lt;br/&gt;2000 msat. If Alice forwards a HTLC to Bob and it is endorsed by him before&lt;br/&gt;relay to Caroll, Alice can now inflict a 50 sat damage to Caroll, while&lt;br/&gt;only encumbering the lower-priced reputational cost towards Bob.&lt;br/&gt;&lt;br/&gt;This concern could hold in case of asymmetries arising from the dynamic&lt;br/&gt;adjustment of routing fees during an evaluated period of time. E.g both Bob&lt;br/&gt;and Caroll requires routing fees of 1000 msat. Alice builds up a reputation&lt;br/&gt;of 1 towards Bob during this period N. At period N&#43;1, Caroll bumps her&lt;br/&gt;routing fees to 2000 msat. From now on, Alice can exploit this asymmetry.&lt;br/&gt;&lt;br/&gt;While I think this deficiency could be fixed by ensuring a proportionality&lt;br/&gt;of the reputation acquisition cost between the inbound channels and the&lt;br/&gt;cost requested by a counterparty on an outbound channel, I believe this&lt;br/&gt;would come with the downside that any update in reputation cost should be&lt;br/&gt;recursively applied to the downstream links (i.e Bob on Alice channel,&lt;br/&gt;Alice on neighbouring inbound channels, etc).&lt;br/&gt;&lt;br/&gt;Apart of this reputation asymmetry concern, I think the local reputation&lt;br/&gt;scheme could suffer from spontaneous jamming by &amp;#34;honest&amp;#34; long-term held&lt;br/&gt;packets (e.g CLTV delta=2 weeks), where even if Alice is not scored to 1 by&lt;br/&gt;Bob, she always settles her long-term held packets. However, those packets&lt;br/&gt;are yielding less routing fees to Bob than let&amp;#39;s say 14 HTLC packets of&lt;br/&gt;CLTV delta = 1 day.&lt;br/&gt;&lt;br/&gt;Finally, the dynamic reduction of the available outbound liquidity/slots in&lt;br/&gt;the occurrence of reputation=0 counterparty&amp;#39;s HTLC being only known at the&lt;br/&gt;link-level could break the expectations of the HTLC senders scoring&lt;br/&gt;algorithms. E.g, being connected to Alice might have probed through another&lt;br/&gt;path the available liquidity on the link Bob-Caroll. This Eve&amp;#39;s probe is&lt;br/&gt;falsified by any reduction done by Caroll towards Bob, and therefore Eve&amp;#39;s&lt;br/&gt;payment reliability is likely to be downgraded.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 16 févr. 2023 à 21:29, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi List,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We’re writing to seek early feedback on a draft for a neighbour reputation&lt;br/&gt;&amp;gt; setting recommendation as a jamming mitigation. The main idea is that&lt;br/&gt;&amp;gt; allowing full access to liquidity and slots in a channel can result in&lt;br/&gt;&amp;gt; jamming. To prevent this, we allow full access only to neighbours that&lt;br/&gt;&amp;gt; forward HTLC that resolve quickly and generate more profit than the damage&lt;br/&gt;&amp;gt; they can potentially create.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The full suggested jamming mitigation solution includes upfront fees&lt;br/&gt;&amp;gt; together with reputation, see [1] for details.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the previous episodes:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As presented here [1], we suggest a two part jamming mitigation strategy.&lt;br/&gt;&amp;gt; Reputation-based forwarding is aimed to solve “slow jamming”, where the&lt;br/&gt;&amp;gt; jamming transaction takes a long time to resolve.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The main idea is that each node gives a binary reputation to its&lt;br/&gt;&amp;gt; neighbour. Each channel has a quota of liquidity and slots (say 50% of the&lt;br/&gt;&amp;gt; channel size and 50% of the slots in the channel) dedicated to transactions&lt;br/&gt;&amp;gt; coming from neighbours with reputation 0, or for transactions coming from&lt;br/&gt;&amp;gt; neighbours with reputation 1 that were not endorsed by the neighbour.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, when Alice asks Bob to forward to Charlie then:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If (Alice has reputation 1 with Bob) and (Alice endorses transaction):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Forward and endorse&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Else:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If (amount &amp;lt; available liquidity quota) and (available slots in quota&amp;gt;0):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Forward HTLC without endorsing&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reduce available liquidity and slots&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Else:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reject&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reputation:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The question we discuss here is how does Alice gain “good” reputation&lt;br/&gt;&amp;gt; (i.e., a score of 1). Alice starts at 0, and she gains and keeps her good&lt;br/&gt;&amp;gt; reputation of 1 by continuously paying more fees to Bob than the damage she&lt;br/&gt;&amp;gt; can inflict.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The 3 main parameters for reputation that each node operator picks are S,L&lt;br/&gt;&amp;gt; and M. Our recommendations are as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    S should be chosen as the maximum time an HTLC can be unresolved in&lt;br/&gt;&amp;gt;    any of Bob’s channels.&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    M is the revenue generated by Bob’s node in the time S, representing&lt;br/&gt;&amp;gt;    the damage Alice could inflict.&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    L is the time in which Alice should generate M revenue for Bob for her&lt;br/&gt;&amp;gt;    to have a good reputation of 1. We suggest L=10S.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alice has reputation 1 if, in the last L seconds, she has forwarded&lt;br/&gt;&amp;gt; payments that generated M satoshi in fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As an example:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Bob has a maximum CLTV delta of 2 weeks [2]&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Over the last 2 weeks, he has earned 0.5 BTC in routing fees&lt;br/&gt;&amp;gt;    -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Alice will be considered to have good reputation if she has forwarded&lt;br/&gt;&amp;gt;    0.5 BTC of routing revenue to Bob over the last 20 weeks&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Formally:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let t be the current time, and let S and L be constants.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; M is calculated to be the revenue of Bob in time [t-S,t]. The revenue of&lt;br/&gt;&amp;gt; Bob is the sum of fees from transactions forwarded by any neighbour besides&lt;br/&gt;&amp;gt; Alice &#43; any payments received by Bob. Note that Bob can choose to also take&lt;br/&gt;&amp;gt; into account utility gained from sending payments or anything of value to&lt;br/&gt;&amp;gt; the node operator.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alice has reputation 1 if in the time [t-L,t] she has forwarded HTLCs&lt;br/&gt;&amp;gt; that paid M in normalized fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We normalize fees by resolution time to reward payments that resolve&lt;br/&gt;&amp;gt; quickly and discount slow resolving payments. Here we assume 10 seconds is&lt;br/&gt;&amp;gt; the “normal” resolution time, this number can be bikesheded, and we round&lt;br/&gt;&amp;gt; up to avoid penalizing transactions resolved quicker than the “normal”.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The fee from a single transaction is normalized by the time it took for&lt;br/&gt;&amp;gt; the HTLC to resolve, counted in slots of 10 seconds. That is:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Normalized_fee = (fee)/[ceiling(time_to_resolve/10s)]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some notes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    The reputation management happens locally, that is, the only protocol&lt;br/&gt;&amp;gt;    change needed is the ability to signal endorsement as a TLV in&lt;br/&gt;&amp;gt;    UpdateAddHTLC. The various parameters can be selected for various risk&lt;br/&gt;&amp;gt;    preferences.&lt;br/&gt;&amp;gt;    2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    We currently suggest a binary reputation for simplicity. Having&lt;br/&gt;&amp;gt;    several buckets could be interesting to study, yet we don’t think that the&lt;br/&gt;&amp;gt;    complexity and the possible privacy issues are worth the potential benefits.&lt;br/&gt;&amp;gt;    3.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    For most use cases, having reputation 0 is more than enough. If we&lt;br/&gt;&amp;gt;    send and receive transactions at a low rate, we usually don’t need the full&lt;br/&gt;&amp;gt;    liquidity and slots available in a channel. Reputation mostly comes into&lt;br/&gt;&amp;gt;    play only when a channel is under attack, and then not all transaction are&lt;br/&gt;&amp;gt;    allowed to go through.&lt;br/&gt;&amp;gt;    4.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Following this thread [3]: it is important to note that we are only&lt;br/&gt;&amp;gt;    giving reputation to our direct neighbours. An advantage of this is that we&lt;br/&gt;&amp;gt;    have repeated interactions with them. In practice, this is also the only&lt;br/&gt;&amp;gt;    clean data we have to use when deciding whether to forward an HTLC or not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Carla and Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/lightningnetwork/lnd/blob/de94a4ea5e81799330a72dfde111817b38565d99/htlcswitch/link.go#L51&#34;&gt;https://github.com/lightningnetwork/lnd/blob/de94a4ea5e81799330a72dfde111817b38565d99/htlcswitch/link.go#L51&lt;/a&gt;&lt;br/&gt;&amp;gt; [3]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-February/003842.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2023-February/003842.html&lt;/a&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/20230306/d19448db/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20230306/d19448db/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:08:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyvky0u2n40959cjmsl32y9t5rkyj943gg2kltv0cean6aek9dsrszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zt780ej</id>
    
      <title type="html">📅 Original date posted:2022-12-13 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyvky0u2n40959cjmsl32y9t5rkyj943gg2kltv0cean6aek9dsrszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zt780ej" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrfe3wp4laxtvzz0m6va0uy99h7fn7kdmhr4zh6ckw9gv9kkpukpga3pcdg&#39;&gt;nevent1q…pcdg&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-12-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi AJ,&lt;br/&gt;&lt;br/&gt;I believe we&amp;#39;re in sync on the attack description.&lt;br/&gt;&lt;br/&gt;&amp;gt;  prior to (1): UA.k (k &amp;lt;= n) -- However this allows Bob to immediately&lt;br/&gt;&amp;gt;  broadcast one of either CA.n or RA.n, and will then have ~150 blocks&lt;br/&gt;&amp;gt;  to claim the HTLC before its timeout&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding, with two party eltoo w/punihsment, UA.k has a&lt;br/&gt;tapscript path with &amp;#34;1 CHECKSIGVERIFY k&amp;lt;n CLTV&amp;#34;, where the internal pubkey&lt;br/&gt;substituted is &amp;#34;musig(A,B)/1. Mallory should receive Bob&amp;#39;s signature for&lt;br/&gt;UA.k, though also UA.k&#43;1, UA.k&#43;2, UAk&#43;3, until k=n.&lt;br/&gt;&lt;br/&gt;Or is this a tapscript only existing for the dual-funding case ? I think&lt;br/&gt;this a bit unclear from the gist construction, how Mallory is restrained to&lt;br/&gt;use the tapscript path on UA.k, with UA.k&#43;1 as she should be in possession&lt;br/&gt;of Bob&amp;#39;s signature for this state.&lt;br/&gt;&lt;br/&gt;&amp;gt; I think traditional eltoo envisages being able to spend update transaction&lt;br/&gt;&amp;gt; 1 immediately, without having to wait for the next block.  This might&lt;br/&gt;&amp;gt; not be compatible with the version 3 relay rules that are being thought&lt;br/&gt;&amp;gt; about, though, and presumably would hit ancestor limits.&lt;br/&gt;&lt;br/&gt;While update transaction 1 could spend update transaction 0 immediately,&lt;br/&gt;there is no reliable knowledge by U*.1 transaction broadcaster of the state&lt;br/&gt;of the network mempools. I believe the update transactions themselves could&lt;br/&gt;be used to partition network mempools in multiple subsets (at least this is&lt;br/&gt;achievable under LN-penalty with using old revoked states).&lt;br/&gt;&lt;br/&gt;&amp;gt; I think a simple way to avoid that problem would be for eltoo nodes&lt;br/&gt;&amp;gt; to have a priority tx relay network -- if they see a channel close to&lt;br/&gt;&amp;gt; state N, always replace any txs closing to an earlier state K&amp;lt;N, and&lt;br/&gt;&amp;gt; always quickly relay that close to all other peers. There&amp;#39;s no reason&lt;br/&gt;&amp;gt; to assume the bad guys have the best access to the network when we can&lt;br/&gt;&amp;gt; write code so that the honest participants have it instead.&lt;br/&gt;&lt;br/&gt;While I think this solution of eltoo nodes quickly replacing any state K&lt;br/&gt;previous to the latest state N, there is no guarantee the latest state K&lt;br/&gt;doesn&amp;#39;t offer a higher feerate than state N, making it more attractive to&lt;br/&gt;the miners.&lt;br/&gt;&lt;br/&gt;One other solution could be a p2p extension allowing an update transaction&lt;br/&gt;N to be &amp;#34;blindly&amp;#34; rebinded on any update transaction K, with K &amp;lt; N, by&lt;br/&gt;pointing to the channel funding output, and a per-counterparty ancestor&lt;br/&gt;limit enforced as a policy rule (otherwise the malicious counterparty could&lt;br/&gt;still buy all the ancestor limits).&lt;br/&gt;&lt;br/&gt;A more sophisticated solution could be to &amp;#34;trim&amp;#34; the counterparty ability&lt;br/&gt;to confirm multiple update transactions with some TLUV mechanism.&lt;br/&gt;&lt;br/&gt;&amp;gt; In the two-party scheme, the only transaction Mallory can broadcast&lt;br/&gt;&amp;gt; after sending UA.k and having it confirmed on chain is SA.k, and that&lt;br/&gt;&amp;gt; only after a 144 block relative timelock. UA.(k&#43;1) etc only spend the&lt;br/&gt;&amp;gt; funding output, but that has already been spent by UA.k.&lt;br/&gt;&lt;br/&gt;See above question on the existence of a tapscript 1 path in update&lt;br/&gt;transaction, and by which transaction type it could/should be spent. I&lt;br/&gt;think the crux of the attack&amp;#39;s soundness (or not) against two parties eltoo&lt;br/&gt;w/ punishment relies here. AFAICT, if there is an unbounded spending path&lt;br/&gt;cycle introduced for one of the counterparties, you&amp;#39;re exposed to &amp;#34;eltoo&lt;br/&gt;states overflow&amp;#34;.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 12 déc. 2022 à 22:51, Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; On Mon, Dec 12, 2022 at 08:38:43PM -0500, Antoine Riard wrote:&lt;br/&gt;&amp;gt; &amp;gt; The attack purpose is to delay the confirmation of the final settlement&lt;br/&gt;&amp;gt; &amp;gt; transaction S, to double-spend a HTLC forwarded by a routing hop.&lt;br/&gt;&amp;gt; &amp;gt; The cltv_expiry_delta requested by Ned is equal to N=144.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe what you&amp;#39;re suggesting here is:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   Mallory has two channels with Bob, M1 and M2. Both have a to_self_delay&lt;br/&gt;&amp;gt;   of 144 blocks. In that case cltv_expiry_delay should include some slack,&lt;br/&gt;&amp;gt;   I&amp;#39;m going to assume it&amp;#39;s 154 blocks in total.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   Mallory forwards a large payment, M1-&amp;gt;Bob-&amp;gt;M2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   Mallory claims the funds on M2 just prior to the timeout, but&lt;br/&gt;&amp;gt;   goes offline on M1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   Bob chose the timeout for M2 via cltv_expiry_delay, so now has 154&lt;br/&gt;&amp;gt;   blocks before the CLTV on the M1-&amp;gt;Bob payment expires.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In this scenario, under the two-party eltoo scheme, Bob should:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   1) immediately broadcast the most recent UB.n state for M1/Bob,&lt;br/&gt;&amp;gt;      aiming for this to be confirmed within 5 blocks&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   2) wait 144 blocks for the relative timelock to expire&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   3) broadcast SB.n to finalise the funds, and immediately claim the&lt;br/&gt;&amp;gt;      large HTLC. providing this confirms within 5 blocks, it will confirm&lt;br/&gt;&amp;gt;      before the HTLC timelock expires, and Mallory will have been unable&lt;br/&gt;&amp;gt;      to claim the funds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The only transactions Mallory could broadcast are:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   prior to (1): UA.k (k &amp;lt;= n) -- However this allows Bob to immediately&lt;br/&gt;&amp;gt;   broadcast one of either CA.n or RA.n, and will then have ~150 blocks&lt;br/&gt;&amp;gt;   to claim the HTLC before its timeout&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   during (2): CA.n -- Again, this allows Bob to claim the HTLC&lt;br/&gt;&amp;gt;   immediately, prior to its timeout&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The only delaying attack with repeated transactions comes if Bob&lt;br/&gt;&amp;gt; broadcasts an old state UB.k (k &amp;lt; n), in which case Mallory can broadcast&lt;br/&gt;&amp;gt; (n-k) WA.i watchtower transactions prior to finalising the state. However&lt;br/&gt;&amp;gt; if Bob *only* has old state, Mallory can simply broadcast WA.n, at which&lt;br/&gt;&amp;gt; point Bob can do nothing, as (by assumption) he doesn&amp;#39;t have access&lt;br/&gt;&amp;gt; to current state and thus doesn&amp;#39;t have SB.n to broadcast it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The attack scenario works in the following way: Malicia updates the Eltoo&lt;br/&gt;&amp;gt; &amp;gt; channel N time, getting the possession of N update transactions. At block&lt;br/&gt;&amp;gt; &amp;gt; A, she breaks the channel and confirms the update transaction 0 by&lt;br/&gt;&amp;gt; &amp;gt; attaching a feerate equal to or superior to top mempool block space &#43; 1&lt;br/&gt;&amp;gt; &amp;gt; sat. At each new block, she iterates by confirming the next update&lt;br/&gt;&amp;gt; &amp;gt; transaction, i.e update transaction 1 at block A&#43;1, update transaction&lt;br/&gt;&amp;gt; &amp;gt; transaction 2 at block A&#43;2, update transaction 3 at block A&#43;3, ...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think traditional eltoo envisages being able to spend update transaction&lt;br/&gt;&amp;gt; 1 immediately, without having to wait for the next block.  This might&lt;br/&gt;&amp;gt; not be compatible with the version 3 relay rules that are being thought&lt;br/&gt;&amp;gt; about, though, and presumably would hit ancestor limits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think a simple way to avoid that problem would be for eltoo nodes&lt;br/&gt;&amp;gt; to have a priority tx relay network -- if they see a channel close to&lt;br/&gt;&amp;gt; state N, always replace any txs closing to an earlier state K&amp;lt;N, and&lt;br/&gt;&amp;gt; always quickly relay that close to all other peers. There&amp;#39;s no reason&lt;br/&gt;&amp;gt; to assume the bad guys have the best access to the network when we can&lt;br/&gt;&amp;gt; write code so that the honest participants have it instead.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; From Ned&amp;#39;s viewpoint, there is limited rationality of the network&lt;br/&gt;&amp;gt; mempools,&lt;br/&gt;&amp;gt; &amp;gt; as such each punishment transaction R, as it&amp;#39;s confirmation could have&lt;br/&gt;&amp;gt; been&lt;br/&gt;&amp;gt; &amp;gt; delay due to &amp;#34;honest&amp;#34; slow propagation on the network is likely to be&lt;br/&gt;&amp;gt; &amp;gt; pre-signed with top mempool block space feerate, but not more to save on&lt;br/&gt;&amp;gt; &amp;gt; fees. Therefore, transaction RN.0 should fail to punish update&lt;br/&gt;&amp;gt; transaction&lt;br/&gt;&amp;gt; &amp;gt; 0 as it&amp;#39;s double-spent by update transaction 1, transaction RN.1 should&lt;br/&gt;&amp;gt; &amp;gt; fail to punish update transaction 1 as it&amp;#39;s double-spent by update&lt;br/&gt;&amp;gt; &amp;gt; transaction 2, transaction RN.2 should fail to punish update transaction&lt;br/&gt;&amp;gt; 2&lt;br/&gt;&amp;gt; &amp;gt; as it&amp;#39;s double-spent by update transaction 3...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the two-party scheme, the only transaction Mallory can broadcast&lt;br/&gt;&amp;gt; after sending UA.k and having it confirmed on chain is SA.k, and that&lt;br/&gt;&amp;gt; only after a 144 block relative timelock. UA.(k&#43;1) etc only spend the&lt;br/&gt;&amp;gt; funding output, but that has already been spent by UA.k.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&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/20221213/caed9efb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221213/caed9efb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:43&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyju4zfxq74sgprre5yjs2085t2sjr306737qw0y59jyemsy7r5agzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z5prxrd</id>
    
      <title type="html">📅 Original date posted:2022-12-09 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyju4zfxq74sgprre5yjs2085t2sjr306737qw0y59jyemsy7r5agzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z5prxrd" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgwy4gut4pz0lzpxgfvpymqslgjtc6gtq63zl4rt6u2mg3uyxkaccjmr9w9&#39;&gt;nevent1q…r9w9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-12-09&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Clara,&lt;br/&gt;&lt;br/&gt;Thanks for rolling the ball forward.&lt;br/&gt;&lt;br/&gt;On the agenda, a few more thoughts.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. Which parameters should be considered in reputation-based solutions?&lt;br/&gt;&lt;br/&gt;I think before thinking about the parameters of reputation-based solutions,&lt;br/&gt;we should discuss the security goal we&amp;#39;re aiming to achieve with any&lt;br/&gt;potential jamming solutions. Browsing the solution space some have aimed to&lt;br/&gt;increase the opportunity cost for the attacker (e.g liquidity slots), some&lt;br/&gt;to reduce the jamming intensity (e.g circuit breakers), some inflicting a&lt;br/&gt;on-chain fee damage cost back to the adversary (e.g stake certificates),&lt;br/&gt;some to achieve economic hedge of the routing hops (e.g unconditional&lt;br/&gt;fees, reputation credentials). As of today, I would say a security goal&lt;br/&gt;designed in the term of a monetary strategy could be more acceptable to the&lt;br/&gt;routing hops node operators. Beyond that, I believe there is capturing this&lt;br/&gt;design goal in a &amp;#34;measurable&amp;#34; notion, such as the unjamming lightning&lt;br/&gt;paper&amp;#39;s breakeven point, and see how we can enrich this &amp;#34;measurable&amp;#34; notion.&lt;br/&gt;&lt;br/&gt;&amp;gt; 2. Circuitbreaker [1]&lt;br/&gt;&lt;br/&gt;While reviewing the circuitbreaker last week, I started to wonder if there&lt;br/&gt;wasn&amp;#39;t another &amp;#34;hidden&amp;#34; issue while solving channel jamming, namely&lt;br/&gt;congestion control of the HTLC flows. A node operator is not only&lt;br/&gt;interested that any liquidity unit allocated for a HTLC forward is paid&lt;br/&gt;back with routing fees, but also in case of more forward demand than&lt;br/&gt;liquidity offer, ready to process it (potentially by deferring and sending&lt;br/&gt;backpressure messages to the HTLC sender). I don&amp;#39;t know, though I think&lt;br/&gt;that can be an interesting point to discuss.&lt;br/&gt;&lt;br/&gt;&amp;gt; 3. Onion relay network [2] and its potential uses.&lt;br/&gt;&lt;br/&gt;Onion relay network rate-limits have been discussed earlier this year, with&lt;br/&gt;a probabilistic backpressure scheme proposed. If the onion relay traffic&lt;br/&gt;starts to have economically-weighable traffic (offers, credentials tokens,&lt;br/&gt;etc), there could be a risk of onion-jamming. For the bootstrap of the&lt;br/&gt;onion relay network, I believe this could be solved by leveraging more the&lt;br/&gt;channel-network topology for the design of a solution. We could re-use the&lt;br/&gt;evaluation framework from the unjamming lightning paper, I guess.&lt;br/&gt;&lt;br/&gt;In the meeting, I think it could be very valuable if we have reliable&lt;br/&gt;transcripts and if we start to maintain a community repository, where we&lt;br/&gt;can pin the issues, problems and ideas.&lt;br/&gt;&lt;br/&gt;On the frequency of the meeting, note some Lightning developers raised the&lt;br/&gt;concern that biweekly might be too much:&lt;br/&gt;&lt;a href=&#34;https://gnusha.org/lightning-dev/2022-11-23.log&#34;&gt;https://gnusha.org/lightning-dev/2022-11-23.log&lt;/a&gt; (once a month could work&lt;br/&gt;well too, if  we have a sound agenda).&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 8 déc. 2022 à 11:08, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The agenda for next week&amp;#39;s meeting (Monday the 12th, 7 pm UTC) is the&lt;br/&gt;&amp;gt; following:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Which parameters should be considered in reputation-based solutions?&lt;br/&gt;&amp;gt; 2. Circuitbreaker [1]&lt;br/&gt;&amp;gt; 3. Onion relay network [2] and its potential uses.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The link to the call:  &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; See you there,&lt;br/&gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-December/003781.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-December/003781.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-December/003780.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-December/003780.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Sun, Nov 27, 2022 at 9:48 PM Clara Shikhelman &amp;lt;&lt;br/&gt;&amp;gt; clara.shikhelman at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In light of recent conversations ([1],[2]), the agenda for the call&lt;br/&gt;&amp;gt;&amp;gt; tomorrow (Monday the 28th, 7 pm UTC) is roughly the following:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. Overview of solutions under discussion&lt;br/&gt;&amp;gt;&amp;gt; 2. Reputation (local/tokens)&lt;br/&gt;&amp;gt;&amp;gt; 3. Fees&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is the link to the call: &lt;a href=&#34;https://meet.jit.si/UnjammingLN&#34;&gt;https://meet.jit.si/UnjammingLN&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; See you there,&lt;br/&gt;&amp;gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [1]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [2]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003754.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; 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;&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/20221208/e56d9ec4/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221208/e56d9ec4/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:40&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstvly3uz28dd3swgpwhu9c5gygwa2u3zm5jyyscnx8aw0lnxwlymszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zxu40ev</id>
    
      <title type="html">📅 Original date posted:2022-12-08 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstvly3uz28dd3swgpwhu9c5gygwa2u3zm5jyyscnx8aw0lnxwlymszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zxu40ev" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsft8k24t658k7287rstsnmsq009x0e8nwrqd03egr4llhdsefkamqknzkcp&#39;&gt;nevent1q…zkcp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-12-08&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi AJ,&lt;br/&gt;&lt;br/&gt;The eltoo irc channel is ##eltoo on Libera chat.&lt;br/&gt;&lt;br/&gt;&amp;gt;  - 2022-10-21, eltoo/chia:&lt;br/&gt;&lt;a href=&#34;https://twitter.com/bramcohen/status/1583122833932099585&#34;&gt;https://twitter.com/bramcohen/status/1583122833932099585&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;On the eltoo/chia variant, from my (quick) understanding, the main&lt;br/&gt;innovation aimed for is the limitation of the publication of eltoo states&lt;br/&gt;more than once by a counterparty, by introducing a cryptographic puzzle,&lt;br/&gt;where the witness can be produced once and only once ? I would say you&lt;br/&gt;might need the inheritance of the updated scriptpubkey across the chain of&lt;br/&gt;eltoo states, with a TLUV-like mechanism.&lt;br/&gt;&lt;br/&gt;&amp;gt; The basic idea is &amp;#34;if it&amp;#39;s a two party channel with just Alice and Bob,&lt;br/&gt;&amp;gt; then if Alice starts a unilateral close, then she&amp;#39;s already had her say,&lt;br/&gt;&amp;gt; so it&amp;#39;s only Bob&amp;#39;s opinion that matters from now on, and he should be&lt;br/&gt;&amp;gt; able to act immediately&amp;#34;, and once it&amp;#39;s only Bob&amp;#39;s opinion that matters,&lt;br/&gt;&amp;gt; you can simplify a bunch of things.&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding, assuming Eltoo paper terminology, Alice can publish&lt;br/&gt;an update K transaction, and then after Bob can publish an update&lt;br/&gt;transaction K&amp;lt;N or Alice can publish the settlement transaction N, or Bob&lt;br/&gt;can publish an update transaction N. The main advantage of this&lt;br/&gt;construction I can see is a strict bound on the shared_delay encumbered in&lt;br/&gt;the on-chain publication of the channel ?&lt;br/&gt;&lt;br/&gt;&amp;gt; fast forwards: we might want to allow our channel partner&lt;br/&gt;&amp;gt; to immediately rely on a new state we propose without needing a&lt;br/&gt;&amp;gt; round-trip delay -- this potentially makes forwarding payments much&lt;br/&gt;&amp;gt; faster (though with some risk of locking the funds up, if you do a&lt;br/&gt;&amp;gt; fast forward to someone who&amp;#39;s gone offline)&lt;br/&gt;&lt;br/&gt;IIRC, there has already been a &amp;#34;fast-forward&amp;#34; protocol upgrade proposal&lt;br/&gt;based on update-turn in the LN-penalty paradigm [0]. I think reducing the&lt;br/&gt;latency of HTLC propagation across payment paths would constitute a UX&lt;br/&gt;improvement, especially a link-level update mechanism upgrade deployment&lt;br/&gt;might be incentivized by routing algorithms starting to penalize routing&lt;br/&gt;hops HTLC relay latency. What is unclear is the additional risk of locking&lt;br/&gt;the funds up. If you don&amp;#39;t receive acknowledgement the fast forward state&lt;br/&gt;has been received, you should still be able to exit with the state N-1 ?&lt;br/&gt;However, the fast-forward trade-off might sound acceptable, with time you&lt;br/&gt;might expect reliable routing hops in the core of the graph, and flappy&lt;br/&gt;spokes at the edge.&lt;br/&gt;&lt;br/&gt;&amp;gt; doubled delays: once we publish the latest state we can, we want to&lt;br/&gt;&amp;gt; be able to claim the funds immediately after to_self_delay expires;&lt;br/&gt;&amp;gt; however if our counterparty has signatures for a newer state than we&lt;br/&gt;&amp;gt; do (which will happen if it was fast forwarded), they could post that&lt;br/&gt;&amp;gt; state shortly before to_self_delay expires, potentially increasing&lt;br/&gt;&amp;gt; the total delay to 2*to_self_delay.&lt;br/&gt;&lt;br/&gt;While the 2*to_self_delay sounds the maximum time delay in the state&lt;br/&gt;publication scenario where the cheating counterparty publishes a old state&lt;br/&gt;then the honest counterparty publishes the latest one, there could be the&lt;br/&gt;case where the cheating counterparty broadcast chain of old states, up to&lt;br/&gt;mempool&amp;#39;s `limitancestorcount`. However, this chain of eltoo transactions&lt;br/&gt;could be replaced by the honest party paying a higher-feerate (assuming&lt;br/&gt;something like nversion=3). I think there might still be an attack&lt;br/&gt;triggerable under certain economic conditions, where the attacker overbids&lt;br/&gt;with the higher-feerate transaction until the HTLC cltv expires. If this&lt;br/&gt;attack is plausible, it could be even opportun if you&amp;#39;re batching against&lt;br/&gt;multiple channels, where the victims are not able to coordinate response.&lt;br/&gt;&lt;br/&gt;&amp;gt; penalties: when you do a unilateral close, attempting to cheat comes&lt;br/&gt;&amp;gt; with no cost to you and a possible benefit if you succeed, but&lt;br/&gt;&amp;gt; potentially does cost your channel partner (either in forcing them&lt;br/&gt;&amp;gt; to spend on-chain fees to update to the correct state, or in the risk&lt;br/&gt;&amp;gt; of loss if their node malfunctions occassionally) -- a penalty could&lt;br/&gt;&amp;gt; reduce this incentive to cheat&lt;br/&gt;&lt;br/&gt;I think there has been a proposal in the past to enable penalties on top of&lt;br/&gt;symmetric states by leveraging asymmetric witnesses [1]. Further, I wonder&lt;br/&gt;if there is a game-theory interest for penalty-on-top-eltoo, it could be an&lt;br/&gt;incentive against laziness, where a dysfunctional trusted watchtower&lt;br/&gt;broadcasts an old state. On the qualification of the game-theory soundness,&lt;br/&gt;I think one would have to run the empirical case study: select channel&lt;br/&gt;counterparties randomly (no out-of-band assumptions), one set with&lt;br/&gt;eltoo&#43;penalty and the other with vanilla eltoo, observe the broadcast of&lt;br/&gt;revoked states over some period.&lt;br/&gt;&lt;br/&gt;&amp;gt; trustless watchtowers: we may want to consider the possibility of a&lt;br/&gt;&amp;gt; watchtower holding onto obsolete states and colluding with an&lt;br/&gt;&amp;gt; attacker to attempt to cheat us&lt;br/&gt;&lt;br/&gt;In terms of pinning and other mempool games, I think honest participant own&lt;br/&gt;states leveraged by a colluding watchtower might increase the attack&lt;br/&gt;surface, especially post-anchor with the SIGHASH_SINGLE malleability on&lt;br/&gt;second-stage HTLC transactions.&lt;br/&gt;&lt;br/&gt;&amp;gt; (I think for initial eltoo experimentation it doesn&amp;#39;t make sense to try to&lt;br/&gt;&amp;gt; deal with all (or perhaps any) of those constraints; simple and working&lt;br/&gt;&amp;gt; is better than complex and theoretical. But having them written down so&lt;br/&gt;&amp;gt; the ideas can be thought about and looked up later still seems useful)&lt;br/&gt;&lt;br/&gt;I share the belief -- &amp;#34;simple and working&amp;#34; enable shorter iteration cycles&lt;br/&gt;and hopefully fasten the protocol design learning curve. Beyond, I think&lt;br/&gt;it&amp;#39;s also realistic in face of the state of the LN ecosystem, especially on&lt;br/&gt;the watchtower issue. AFAICT, there is no even multi trusted watchtower&lt;br/&gt;design covering the full execution of the protocol (i.e including&lt;br/&gt;HTLC-preimage/ HTLC-timeout claim), and such implementation is far from&lt;br/&gt;simple, as from now on you LN&amp;#39;s chain backend might have asynchronicity&lt;br/&gt;issue to solve between your on-chain monitoring state machine (at least&lt;br/&gt;speaking in knowledge of the LDK-architecture).&lt;br/&gt;&lt;br/&gt;&amp;gt; * WA.n, WB.n : watchtower update to state n&lt;br/&gt;&amp;gt;   - this is for an untrusted watchtower to correct attempted cheating&lt;br/&gt;&amp;gt;     by Bob on behalf of Alice (or vice-versa). Spends UB.k or WA.k&lt;br/&gt;&amp;gt;     (or UA.k/WB.k) respectively, provided k &amp;lt; n.&lt;br/&gt;&lt;br/&gt;I wonder if the introduction of watchtower specific transactions doesn&amp;#39;t&lt;br/&gt;break the 2*to_self_delay assumption (iiuc it&amp;#39;s a design goal of current&lt;br/&gt;protocol) and what is the design rationale. Beyond that, there is a concern&lt;br/&gt;with watchtower-specific transactions, it might leak your towers topology&lt;br/&gt;(i.e the number of them and the distribution in the p2p network) to an&lt;br/&gt;adversary.&lt;br/&gt;&lt;br/&gt;&amp;gt; * SA.n, SB.n : slowly claim funds according to state n&lt;br/&gt;&amp;gt;   - this is for Alice to claim her funds if Bob is completely offline&lt;br/&gt;&amp;gt;     (or vice-versa). Spends UA.n, UB.n, WA.n or WB.n with relative&lt;br/&gt;&amp;gt;     timelock of to_self_delay.&lt;br/&gt;&lt;br/&gt;If I&amp;#39;m following correctly the description, this is logically equivalent to&lt;br/&gt;the sweep of a `to_local`/`to_remote` output on a commitment transaction&lt;br/&gt;though instead the waiting delay is eltoo shared_delay. There is no&lt;br/&gt;to_self_delay, at the punishment seems only to happen on the update-level,&lt;br/&gt;or maybe one should be also able to punish slow fund exit, and another&lt;br/&gt;relative locktime should exist on the S* transactions.&lt;br/&gt;&lt;br/&gt;&amp;gt; * Alice and Bob&amp;#39;s watchtower collude, but Bob has many watchtowers:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     F -&amp;gt; UA.k1 -&amp;gt; WB.k2 -&amp;gt; WB.n -&amp;gt; (to_self_delay) -&amp;gt; SA.n -&amp;gt; money&lt;br/&gt;&lt;br/&gt;Could the punishment transactions R* be also delegated to watchtowers,&lt;br/&gt;assuming they have been pre-signed to lockdown the exit scriptpubkeys ?&lt;br/&gt;&lt;br/&gt;&amp;gt; In order to allow fast-forwards, when Alice proposes a new state,&lt;br/&gt;&amp;gt; she needs to send her partial signatures to allow Bob to unilaterally&lt;br/&gt;&amp;gt; accept the new state, ie sigs for: UB.n, CB.n, SB.n, RB.n. But she&lt;br/&gt;&amp;gt; also needs to be able to claim the funds if Bob proposes the new state&lt;br/&gt;&amp;gt; and broadcasts UB.n, she needs to be able broadcast CA.n. This can be&lt;br/&gt;&amp;gt; achieved with an adaptor signature approach (spelt out a bit more fully&lt;br/&gt;&amp;gt; in the gist) or a CTV-like approach, provided that UB.n reveals the&lt;br/&gt;&amp;gt; state needed to calculate the the CTV commitment (see &amp;#34;EXPR_SETTLE&amp;#34; in&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/instagibbs/bolts/blob/29fe6d36cbad4101d5ec76c2b19c83c1494ac2fc/XX-eltoo-transactions.md&#34;&gt;https://github.com/instagibbs/bolts/blob/29fe6d36cbad4101d5ec76c2b19c83c1494ac2fc/XX-eltoo-transactions.md&lt;/a&gt;&lt;br/&gt;).&lt;br/&gt;&lt;br/&gt;If you would like to have fast forward of chain of transactions, I wonder&lt;br/&gt;if there could be also the &amp;#34;sig-in-the-script&amp;#34; trick, where UB.n&lt;br/&gt;scriptpubkey (or one of its tapscripts) contains the signature for CB.n,&lt;br/&gt;SB.n, RB.n. Though you might have an issue of re-generating the&lt;br/&gt;witnessscript in case of state loss.&lt;br/&gt;&lt;br/&gt;&amp;gt; * how to add fees -- the U/W transactions are 1-in/1-out transactions&lt;br/&gt;&amp;gt;   that can&amp;#39;t be trivially CPFPed by the proposer and need to have&lt;br/&gt;&amp;gt;   fees added (either SINGLE/ANYONECANPAY signatures or having a 0-sat&lt;br/&gt;&amp;gt;   ephemeral output and package relay might be workable); the C/S/R&lt;br/&gt;&amp;gt;   transactions are 1-in/many-out transactions, but have balance outputs&lt;br/&gt;&amp;gt;   that can be immediately spent to pay for fees via CPFP if package&lt;br/&gt;&amp;gt;   relay is available.&lt;br/&gt;&lt;br/&gt;Assuming something like nversion=3, the SINGLE/ANYONCANPAY could be a&lt;br/&gt;viable fee-bumping mechanism, as ancestor-based pinning should be less of a&lt;br/&gt;concern. Ephemeral anchor output could be a more efficient direction, if&lt;br/&gt;the output value can be cooperatively inflated from the channel value,&lt;br/&gt;rather than relying on external fee-bumping reserves. I think even more&lt;br/&gt;efficient fee-bumping primitives can be introduced later.&lt;br/&gt;&lt;br/&gt;&amp;gt; * how to pay watchtowers -- when a watchtower broadcasts a W&lt;br/&gt;&amp;gt;   transaction, it needs to add fees, and it&amp;#39;s not clear (to me) how it&lt;br/&gt;&amp;gt;   could fairly and reliably ensure it&amp;#39;s compensated for those costs,&lt;br/&gt;&amp;gt;   particularly if multiple W transactions are broadcast for a single&lt;br/&gt;&amp;gt;   unilateral close attempt, due to one or more watchtowers colluding&lt;br/&gt;&amp;gt;   with an attacker, or simply having out of date information.&lt;br/&gt;&lt;br/&gt;I wonder if paying a watchtower, or getting paid as a watchtower isn&amp;#39;t  a&lt;br/&gt;&amp;#34;counterparty risk&amp;#34; similar to what is happening with jamming due to&lt;br/&gt;non-covered HTLC forward risk. The watchtower has the risk of not being&lt;br/&gt;paid a posteriori and the user has the risk of the tower not acting. There&lt;br/&gt;is even a trade-off between tower costs and safety, as the more towers you&lt;br/&gt;have, more robust if your Lightning channel (in theory, as you also have a&lt;br/&gt;duplication of the key material).&lt;br/&gt;&lt;br/&gt;&amp;gt; * lack of layered transactions -- while this prevents you having to&lt;br/&gt;&amp;gt;   wait longer than to_self_delay before you can claim channel funds,&lt;br/&gt;&amp;gt;   it still means that any htlc that is going to timeout sooner than that&lt;br/&gt;&amp;gt;   may not be claimable on-chain, meaning you need to set&lt;br/&gt;&amp;gt;   cltv_expiry_delta &amp;gt;= to_self_delay.&lt;br/&gt;&lt;br/&gt;&amp;gt;From a security perspective, offsetting the cltv_expiry_delta to a value&lt;br/&gt;superior to to_self_delay can be considered as an improvement, especially&lt;br/&gt;if it gradually does it network-wide. On the other hand, if routing&lt;br/&gt;algorithms start to penalize long-cltv-delta payment paths as the timevalue&lt;br/&gt;of liquidity is priced in routing fees, this design rationale might not be&lt;br/&gt;aligned with long-term LN network incentives (as of today even more&lt;br/&gt;loosely-defined than miner incentives).&lt;br/&gt;&lt;br/&gt;&amp;gt; * extending to multiparty channels -- penalising is hard if there&amp;#39;s&lt;br/&gt;&amp;gt;   more than two parties, fast forwards are probably impossible since&lt;br/&gt;&amp;gt;   you need multiple round-trips to coordinate signatures anyway, and if&lt;br/&gt;&amp;gt;   you&amp;#39;re doing channels-within-channels to reduce your n-party channel&lt;br/&gt;&amp;gt;   to an easier to update 2-party channel you&amp;#39;re probably forced to have&lt;br/&gt;&amp;gt;   to_self_delay for each layer of channels. Also, just figuring out how&lt;br/&gt;&amp;gt;   to coordinate multiparty state updates and even keeping everyone in&lt;br/&gt;&amp;gt;   a multiparty channel online consistently to generate new signatures&lt;br/&gt;&amp;gt;   seems potentially hard?&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if penalising has been a solved issue for mulit-party, at&lt;br/&gt;least in a trustless fashion in the same way we have with 2-party&lt;br/&gt;LN-penalty (you could devise weird scheme based on timelock, taproot tree&lt;br/&gt;and threshold signatures incentivizing towards the convergence of a&lt;br/&gt;&amp;#34;consensus&amp;#34; punishment, still...) Figuring out coordinating multi-party&lt;br/&gt;states updates sounds workable with modern consensus algorithms (e.g Raft),&lt;br/&gt;though still conserving the fast forward effect is a high bar, it might be&lt;br/&gt;better deferred to an uplifted layer of 2-of-2 LN channels. The only reason&lt;br/&gt;you might have payments at the multi-party level (with the signature of the&lt;br/&gt;N-of-N participants requested) only for privacy or liquidity allocation&lt;br/&gt;reason. Though effectively, it sounds like your multiparty&lt;br/&gt;channel coordination mechanism should encompass party eviction or&lt;br/&gt;partitioning the offline parties. One or two orders of magnitude of&lt;br/&gt;complexity beyond the 2-party eltoo channel case, I think.&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/lightning/bolts/pull/867&#34;&gt;https://github.com/lightning/bolts/pull/867&lt;/a&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/LLFourn/witness-asymmetric-channel&#34;&gt;https://github.com/LLFourn/witness-asymmetric-channel&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le mer. 7 déc. 2022 à 00:36, Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the eltoo irc channel we discussed optimising eltoo for the 2-party&lt;br/&gt;&amp;gt; scenario; figured it was probably worth repeating that here.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is similar to:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - 2018-07-18, simplified eltoo:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-July/001363.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2018-July/001363.html&lt;/a&gt;&lt;br/&gt;&amp;gt;  - 2021-09-17, IID 2Stage,&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019470.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019470.html&lt;/a&gt;&lt;br/&gt;&amp;gt;  - 2022-09-29, Daric: &lt;a href=&#34;https://eprint.iacr.org/2022/1295&#34;&gt;https://eprint.iacr.org/2022/1295&lt;/a&gt;&lt;br/&gt;&amp;gt;  - 2022-10-21, eltoo/chia:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://twitter.com/bramcohen/status/1583122833932099585&#34;&gt;https://twitter.com/bramcohen/status/1583122833932099585&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The basic idea is &amp;#34;if it&amp;#39;s a two party channel with just Alice and Bob,&lt;br/&gt;&amp;gt; then if Alice starts a unilateral close, then she&amp;#39;s already had her say,&lt;br/&gt;&amp;gt; so it&amp;#39;s only Bob&amp;#39;s opinion that matters from now on, and he should be&lt;br/&gt;&amp;gt; able to act immediately&amp;#34;, and once it&amp;#39;s only Bob&amp;#39;s opinion that matters,&lt;br/&gt;&amp;gt; you can simplify a bunch of things.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A &amp;#34;gist&amp;#34; for this idea is&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/ajtowns/53e0f735f4d5c06a681429d937200aa5&#34;&gt;https://gist.github.com/ajtowns/53e0f735f4d5c06a681429d937200aa5&lt;/a&gt; (it goes&lt;br/&gt;&amp;gt; into a little more detail in places, though doesn&amp;#39;t cover trustless&lt;br/&gt;&amp;gt; watchtowers at all).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In particular, there are a few practical constraints that we might like&lt;br/&gt;&amp;gt; to consider for 2-party channels with eltoo:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - fast forwards: we might want to allow our channel partner&lt;br/&gt;&amp;gt;    to immediately rely on a new state we propose without needing a&lt;br/&gt;&amp;gt;    round-trip delay -- this potentially makes forwarding payments much&lt;br/&gt;&amp;gt;    faster (though with some risk of locking the funds up, if you do a&lt;br/&gt;&amp;gt;    fast forward to someone who&amp;#39;s gone offline)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - doubled delays: once we publish the latest state we can, we want to&lt;br/&gt;&amp;gt;    be able to claim the funds immediately after to_self_delay expires;&lt;br/&gt;&amp;gt;    however if our counterparty has signatures for a newer state than we&lt;br/&gt;&amp;gt;    do (which will happen if it was fast forwarded), they could post that&lt;br/&gt;&amp;gt;    state shortly before to_self_delay expires, potentially increasing&lt;br/&gt;&amp;gt;    the total delay to 2*to_self_delay.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - penalties: when you do a unilateral close, attempting to cheat comes&lt;br/&gt;&amp;gt;    with no cost to you and a possible benefit if you succeed, but&lt;br/&gt;&amp;gt;    potentially does cost your channel partner (either in forcing them&lt;br/&gt;&amp;gt;    to spend on-chain fees to update to the correct state, or in the risk&lt;br/&gt;&amp;gt;    of loss if their node malfunctions occassionally) -- a penalty could&lt;br/&gt;&amp;gt;    reduce this incentive to cheat&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - trustless watchtowers: we may want to consider the possibility of a&lt;br/&gt;&amp;gt;    watchtower holding onto obsolete states and colluding with an&lt;br/&gt;&amp;gt;    attacker to attempt to cheat us&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What follows is a rough approach for dealing with all those issues for&lt;br/&gt;&amp;gt; two-party channels. It&amp;#39;s spelled out in a little more detail in the gist.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (I think for initial eltoo experimentation it doesn&amp;#39;t make sense to try to&lt;br/&gt;&amp;gt; deal with all (or perhaps any) of those constraints; simple and working&lt;br/&gt;&amp;gt; is better than complex and theoretical. But having them written down so&lt;br/&gt;&amp;gt; the ideas can be thought about and looked up later still seems useful)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In more detail: unilateral closes are handled by each channel participant&lt;br/&gt;&amp;gt; maintaining five transactions, which we&amp;#39;ll call:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * UA.n, UB.n : unilaterally propose closing at state n&lt;br/&gt;&amp;gt;    - this is for Alice or Bob to spend the funding tx for a unilater&lt;br/&gt;&amp;gt;      close to state n. Spends the funding transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * WA.n, WB.n : watchtower update to state n&lt;br/&gt;&amp;gt;    - this is for an untrusted watchtower to correct attempted cheating&lt;br/&gt;&amp;gt;      by Bob on behalf of Alice (or vice-versa). Spends UB.k or WA.k&lt;br/&gt;&amp;gt;      (or UA.k/WB.k) respectively, provided k &amp;lt; n.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * CA.n, CB.n : cooperatively claim funds according to state n&lt;br/&gt;&amp;gt;    - this is for Alice to confirm Bob&amp;#39;s unilateral close (or vice-versa).&lt;br/&gt;&amp;gt;      Spends UB.k, WA.k (or UA.k/WB.k respectively), provided k &amp;lt;= n&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * SA.n, SB.n : slowly claim funds according to state n&lt;br/&gt;&amp;gt;    - this is for Alice to claim her funds if Bob is completely offline&lt;br/&gt;&amp;gt;      (or vice-versa). Spends UA.n, UB.n, WA.n or WB.n with relative&lt;br/&gt;&amp;gt;      timelock of to_self_delay.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * RA.n, RB.n : claim funds with penalty after unilateral close to&lt;br/&gt;&amp;gt;    revoked state&lt;br/&gt;&amp;gt;    - this is for Alice to update the state if Bob attempted to cheat&lt;br/&gt;&amp;gt;      (or vice-versa). Spends UB.k or WA.k (or UA.k/WB.k respectively)&lt;br/&gt;&amp;gt;      conditional on k &amp;lt; n - 1; outputs are adjusted to transfer a fixed&lt;br/&gt;&amp;gt;      penalty of penalty_msat from Bob&amp;#39;s balance to Alice&amp;#39;s (or vice-versa)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Each of these &amp;#34;transactions&amp;#34; requires a pre-signed signature; however&lt;br/&gt;&amp;gt; the actual transaction/txid will vary in cases where a transaction has&lt;br/&gt;&amp;gt; the possibility of spending different inputs (eg &amp;#34;Spends UB.k or WA.k&amp;#34;).&lt;br/&gt;&amp;gt; In particular UA.n/UB.n can be constructed with known txids and non-APO&lt;br/&gt;&amp;gt; signatures but WA.n/WB.n/CA.n/CB.n/SA.n/SB.n/RA.n/RB.n all require&lt;br/&gt;&amp;gt; APO signatures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; They&amp;#39;re named such that Alice can immediately broadcast all the *A.n&lt;br/&gt;&amp;gt; transactions (provided a tx that it can spend has been broadcast) and&lt;br/&gt;&amp;gt; Bob can likewise immediately broadcast all the *B.n transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Scenarios where Alice decides to unilaterally close the channel might&lt;br/&gt;&amp;gt; look like:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * if Alice/Bob can&amp;#39;t communicate directly, but both are online:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      F -&amp;gt; UA.n -&amp;gt; CB.n -&amp;gt; money&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    (balances and htlcs claimed, no delay)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * if Bob has gone offline entirely:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      F -&amp;gt; UA.n -&amp;gt; (to_self_delay) -&amp;gt; SA.n -&amp;gt; money&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Alice cheats, Bob punishes:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      F -&amp;gt; UA.k -&amp;gt; RB.n -&amp;gt; money[Alice pays Bob penalty]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Bob is offline, Alice cheats, but Bob has a watchtower:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      F -&amp;gt; UA.k -&amp;gt; WB.n -&amp;gt; (to_self_delay) -&amp;gt; SA.n -&amp;gt; money&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Alice and Bob&amp;#39;s watchtower collude, but Bob&amp;#39;s not offline:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      F -&amp;gt; UA.k1 -&amp;gt; WB.k2 -&amp;gt; RB.n -&amp;gt; money[Alice pays Bob penalty]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Alice and Bob&amp;#39;s watchtower collude, but Bob has many watchtowers:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;      F -&amp;gt; UA.k1 -&amp;gt; WB.k2 -&amp;gt; WB.n -&amp;gt; (to_self_delay) -&amp;gt; SA.n -&amp;gt; money&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For Alice to successfully cheat, she needs Bob to be offline for at least&lt;br/&gt;&amp;gt; to_self_delay, and for all Bob&amp;#39;s watchtowers to either also be offline,&lt;br/&gt;&amp;gt; or colluding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This can be simplified somewhat, if you don&amp;#39;t care about all the features:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * If you don&amp;#39;t care about trustless watchtowers you can drop WA.n/WB.n&lt;br/&gt;&amp;gt;    (and simplify SA.n/SB.n to not require an APO signature)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * If you don&amp;#39;t care about penalties you can set penalty_msat to 0 and&lt;br/&gt;&amp;gt;    allow RA.n/RB.n to spend k&amp;lt;=n. In this case, you can either drop&lt;br/&gt;&amp;gt;    CA.n/CB.n entirely, or you can have CA.n/CB.n only be used for directly&lt;br/&gt;&amp;gt;    spending of UB.n/UA.n and thus not require APO signatures&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In order to allow fast-forwards, when Alice proposes a new state,&lt;br/&gt;&amp;gt; she needs to send her partial signatures to allow Bob to unilaterally&lt;br/&gt;&amp;gt; accept the new state, ie sigs for: UB.n, CB.n, SB.n, RB.n. But she&lt;br/&gt;&amp;gt; also needs to be able to claim the funds if Bob proposes the new state&lt;br/&gt;&amp;gt; and broadcasts UB.n, she needs to be able broadcast CA.n. This can be&lt;br/&gt;&amp;gt; achieved with an adaptor signature approach (spelt out a bit more fully&lt;br/&gt;&amp;gt; in the gist) or a CTV-like approach, provided that UB.n reveals the&lt;br/&gt;&amp;gt; state needed to calculate the the CTV commitment (see &amp;#34;EXPR_SETTLE&amp;#34; in&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/instagibbs/bolts/blob/29fe6d36cbad4101d5ec76c2b19c83c1494ac2fc/XX-eltoo-transactions.md&#34;&gt;https://github.com/instagibbs/bolts/blob/29fe6d36cbad4101d5ec76c2b19c83c1494ac2fc/XX-eltoo-transactions.md&lt;/a&gt;&lt;br/&gt;&amp;gt; ).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that in this scenario Alice doesn&amp;#39;t provide WB.n to Bob&lt;br/&gt;&amp;gt; immediately. This is okay, as if Alice proposes UA.(n-1) (her most&lt;br/&gt;&amp;gt; recent state), Bob can still immediately claim via CA.n. If Bob did have&lt;br/&gt;&amp;gt; WB.n; then if Alice proposed UA.(n-1) Bob could wait for an initial&lt;br/&gt;&amp;gt; to_self_delay period and broadcast WB.n, forcing Alice to wait for an&lt;br/&gt;&amp;gt; additional to_self_delay before being able to claim her funds via SA.n.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note also that this is why RA.n/RB.n require &amp;#34;k &amp;lt; n - 1&amp;#34; -- otherwise&lt;br/&gt;&amp;gt; Alice would only be able to broadcast UA.(n-1) and Bob would immediately&lt;br/&gt;&amp;gt; be able to penalise by broadcasting RB.n.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that if you&amp;#39;re using a watchtower and wish to punish your&lt;br/&gt;&amp;gt; counterparty if it attempts to cheat, you should only pass WA.(n-2)&lt;br/&gt;&amp;gt; to your watchtowers, not WA.(n-1) or WA.n.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This doesn&amp;#39;t address any potential issues from:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * how to add fees -- the U/W transactions are 1-in/1-out transactions&lt;br/&gt;&amp;gt;    that can&amp;#39;t be trivially CPFPed by the proposer and need to have&lt;br/&gt;&amp;gt;    fees added (either SINGLE/ANYONECANPAY signatures or having a 0-sat&lt;br/&gt;&amp;gt;    ephemeral output and package relay might be workable); the C/S/R&lt;br/&gt;&amp;gt;    transactions are 1-in/many-out transactions, but have balance outputs&lt;br/&gt;&amp;gt;    that can be immediately spent to pay for fees via CPFP if package&lt;br/&gt;&amp;gt;    relay is available.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * how to pay watchtowers -- when a watchtower broadcasts a W&lt;br/&gt;&amp;gt;    transaction, it needs to add fees, and it&amp;#39;s not clear (to me) how it&lt;br/&gt;&amp;gt;    could fairly and reliably ensure it&amp;#39;s compensated for those costs,&lt;br/&gt;&amp;gt;    particularly if multiple W transactions are broadcast for a single&lt;br/&gt;&amp;gt;    unilateral close attempt, due to one or more watchtowers colluding&lt;br/&gt;&amp;gt;    with an attacker, or simply having out of date information.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * lack of layered transactions -- while this prevents you having to&lt;br/&gt;&amp;gt;    wait longer than to_self_delay before you can claim channel funds,&lt;br/&gt;&amp;gt;    it still means that any htlc that is going to timeout sooner than that&lt;br/&gt;&amp;gt;    may not be claimable on-chain, meaning you need to set&lt;br/&gt;&amp;gt;    cltv_expiry_delta &amp;gt;= to_self_delay.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * extending to multiparty channels -- penalising is hard if there&amp;#39;s&lt;br/&gt;&amp;gt;    more than two parties, fast forwards are probably impossible since&lt;br/&gt;&amp;gt;    you need multiple round-trips to coordinate signatures anyway, and if&lt;br/&gt;&amp;gt;    you&amp;#39;re doing channels-within-channels to reduce your n-party channel&lt;br/&gt;&amp;gt;    to an easier to update 2-party channel you&amp;#39;re probably forced to have&lt;br/&gt;&amp;gt;    to_self_delay for each layer of channels. Also, just figuring out how&lt;br/&gt;&amp;gt;    to coordinate multiparty state updates and even keeping everyone in&lt;br/&gt;&amp;gt;    a multiparty channel online consistently to generate new signatures&lt;br/&gt;&amp;gt;    seems potentially hard?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&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/20221208/6ba33096/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221208/6ba33096/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:37&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgjssepauj62uuadzfgf826f9az5s9eykefvthpjjpzgzv8a5uxaqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2ch3wt</id>
    
      <title type="html">📅 Original date posted:2022-11-28 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgjssepauj62uuadzfgf826f9az5s9eykefvthpjjpzgzv8a5uxaqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2ch3wt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxjru2rs8ak5h400cvexd73j7jpv0xn626qgeghx4rju39ty7p59suljr39&#39;&gt;nevent1q…jr39&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-28&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Michael,&lt;br/&gt;&lt;br/&gt;Thanks for the feedback,&lt;br/&gt;&lt;br/&gt;On the first point, I think it should be underscored how much this proposed&lt;br/&gt;credential system, while labeled a reputational one, belongs more to a&lt;br/&gt;monetary strategy (after the fact should be called &amp;#34;staking&amp;#34; credentials).&lt;br/&gt;Indeed, there is a direct link between the credentials and a cost expressed&lt;br/&gt;in satoshis. Therefore, in case of loopholes in the system damages are&lt;br/&gt;effectively borne by the routing hops, without throwing the whole system&lt;br/&gt;down. Note, the default policy should be some 0-risk HTLC forward&lt;br/&gt;acceptance.&lt;br/&gt;&lt;br/&gt;On the second point, we already have today&amp;#39;s reputation systems in&lt;br/&gt;Lightning, namely the routing algorithms keeping track of the performance&lt;br/&gt;of the routing hops, and their liquidity. That information is used in a&lt;br/&gt;continuous fashion to improve payment-path building. And while those&lt;br/&gt;algorithms are doing probabilistic estimation of the balance distribution,&lt;br/&gt;the proposed credential system is not all relying on past statistics for&lt;br/&gt;its effectiveness (as long as the node operators are requiring credentials&lt;br/&gt;of worthiness equivalent to routing fees).&lt;br/&gt;&lt;br/&gt;On the third point, the protocol defer to the node operators all the&lt;br/&gt;decisions on the credential acquisition costs, expiration height, binding&lt;br/&gt;with liquidity units, or even allow additional routing policy checks.&lt;br/&gt;Flexibility is offered to the node operators, without the protocol&lt;br/&gt;developers trying to do any &amp;#34;centralized&amp;#34; decision on the cost of the&lt;br/&gt;credentials or whatever.&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding, the critics you&amp;#39;re raising, while potentially&lt;br/&gt;correct for the reputation systems links you&amp;#39;re including, does not bind to&lt;br/&gt;any concrete point of my proposal. I hope you&amp;#39;ll take time to browse the&lt;br/&gt;proposal as detailed more in depth here:&lt;br/&gt;&lt;a href=&#34;https://github.com/lightning/bolts/pull/1043&#34;&gt;https://github.com/lightning/bolts/pull/1043&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le sam. 26 nov. 2022 à 05:53, Michael Folkson &amp;lt;michaelfolkson at protonmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;ve got a lot to catch up on re channel jamming but just to say I&amp;#39;m&lt;br/&gt;&amp;gt; deeply skeptical about attempting to embed a reputation layer or reputation&lt;br/&gt;&amp;gt; credentials into the Lightning protocol. Admittedly I&amp;#39;m somewhat of a&lt;br/&gt;&amp;gt; curious amateur in the field of reputation systems but a number of people&lt;br/&gt;&amp;gt; (me included) have had to look into reputation systems in the past for&lt;br/&gt;&amp;gt; projects/startups they were working on and *centralized​*​ reputation&lt;br/&gt;&amp;gt; systems are absolute minefields to manage effectively though some&lt;br/&gt;&amp;gt; corporations do manage it. Decentralized reputation systems baked into a&lt;br/&gt;&amp;gt; protocol is just a step too far. All you need is one edge case where the&lt;br/&gt;&amp;gt; attacker can ensure an innocent party is blamed and the reputation system&lt;br/&gt;&amp;gt; falls apart. The protocol developer is in the position of assessing who is&lt;br/&gt;&amp;gt; telling the truth out of two opposing viewpoints on Reddit etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I do think reputation systems will play a key part in a future Lightning&lt;br/&gt;&amp;gt; Network (to some extent they already are with sites like 1ML and Amboss)&lt;br/&gt;&amp;gt; but they won&amp;#39;t be managed by protocol devs, they will be managed by&lt;br/&gt;&amp;gt; multiple flavors of companies and projects (hopefully open source but most&lt;br/&gt;&amp;gt; likely closed source too, for profit, non-profit etc) who are free to use&lt;br/&gt;&amp;gt; whatever metrics and weigh those metrics however they like. The protocol&lt;br/&gt;&amp;gt; just can&amp;#39;t afford to expand into areas where there is case by case judgment&lt;br/&gt;&amp;gt; and statistical analysis required. It will become bloated, ineffective and&lt;br/&gt;&amp;gt; put protocol developers in the position of deciding who ultimately receives&lt;br/&gt;&amp;gt; routing fees rather than just enabling payments can get from A to B.&lt;br/&gt;&amp;gt; Identity is easier, you either control a private key or you don&amp;#39;t.&lt;br/&gt;&amp;gt; Reputation is much more difficult, there will be some attacks where a&lt;br/&gt;&amp;gt; probabilistic assessment will need to be made on who the perpetrator of the&lt;br/&gt;&amp;gt; attack was. You don&amp;#39;t add that to the (already long) list of protocol&lt;br/&gt;&amp;gt; developers&amp;#39; responsibilities.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So feel free to continue to explore reputation and reputation systems but&lt;br/&gt;&amp;gt; a strong warning that this is likely not solved at the protocol level.&lt;br/&gt;&amp;gt; Decisions protocol developers make will impact what data can be collected&lt;br/&gt;&amp;gt; and how easy that data is to collect (there are already some tricky&lt;br/&gt;&amp;gt; trade-offs with regards to privacy, routing success and transparency for&lt;br/&gt;&amp;gt; when things go wrong) but beyond that protocol developers should leave it&lt;br/&gt;&amp;gt; to others. I&amp;#39;ve included some links to some additional reading on&lt;br/&gt;&amp;gt; reputation systems in case you are interested.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks&lt;br/&gt;&amp;gt; Michael&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0]:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://www.amazon.com/Building-Reputation-Systems-Randy-Farmer/dp/059615979X/&#34;&gt;https://www.amazon.com/Building-Reputation-Systems-Randy-Farmer/dp/059615979X/&lt;/a&gt;&lt;br/&gt;&amp;gt; [1]:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/openbazaarproject/decentralized-reputation-in-openbazaar-1a577fac5175&#34;&gt;https://medium.com/openbazaarproject/decentralized-reputation-in-openbazaar-1a577fac5175&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]: &lt;a href=&#34;https://www.bitrated.com/faq&#34;&gt;https://www.bitrated.com/faq&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Michael Folkson&lt;br/&gt;&amp;gt; Email: michaelfolkson at protonmail.com&lt;br/&gt;&amp;gt; Keybase: michaelfolkson&lt;br/&gt;&amp;gt; PGP: 43ED C999 9F85 1D40 EAF4 9835 92D6 0159 214C FEE3&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt; On Monday, November 21st, 2022 at 06:01, Antoine Riard &amp;lt;&lt;br/&gt;&amp;gt; antoine.riard at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi LN Devs,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; tl;dr A formalization of a reputation-based scheme to solve channel&lt;br/&gt;&amp;gt; jamming is proposed. The system relies on &amp;#34;credentials&amp;#34; issued by routing&lt;br/&gt;&amp;gt; hops and requested to be attached to each HTLC forward request. The&lt;br/&gt;&amp;gt; &amp;#34;credentials&amp;#34; can be used by a reputation algorithm to reward/punish&lt;br/&gt;&amp;gt; payment senders and allocate channel liquidity resources efficiently. The&lt;br/&gt;&amp;gt; &amp;#34;credentials&amp;#34; initial distribution can be bootstrapped leveraging one-time&lt;br/&gt;&amp;gt; upfront fees paid toward the routing hops. Afterwards, the &amp;#34;credentials&amp;#34;&lt;br/&gt;&amp;gt; subsequent distribution can rely on previous HTLC traffic.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A protocol description can be found here, with few extensions already to&lt;br/&gt;&amp;gt; the BOLTs:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/lightning/bolts/pull/1043&#34;&gt;https://github.com/lightning/bolts/pull/1043&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is also a work-in-progress proof-of-concept in LDK (on top of our&lt;br/&gt;&amp;gt; coming soon^TM HTLC intercepting API):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/1848&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/1848&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This work builds on previous reputation-scheme research [0] [1]. It also&lt;br/&gt;&amp;gt; integrates the more recent proposals of upfront fees as a straightforward&lt;br/&gt;&amp;gt; mechanism to bootstrap the reputation system. Bootstrapping the system with&lt;br/&gt;&amp;gt; more economically cost-effective privacy-preserving UTXO ownership proofs&lt;br/&gt;&amp;gt; not only add another layer of engineering complexity, there is still a&lt;br/&gt;&amp;gt; proof size vs proof generation/validation trade-off to arbiter between ZKP&lt;br/&gt;&amp;gt; cryptosystems.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Rather to seek for a game-theory equilibrium defined as a breakeven point&lt;br/&gt;&amp;gt; as in the latest unconditional fee research [2], this proposal aims to use&lt;br/&gt;&amp;gt; reputation credentials to allow HTLC traffic-shaping. This not only should&lt;br/&gt;&amp;gt; protect against jamming situations (either malicious&lt;br/&gt;&amp;gt; or spontaneous) but also allow active HTLC traffic-shaping, where a&lt;br/&gt;&amp;gt; routing hop can allow extended channel liquidity lockups based on&lt;br/&gt;&amp;gt; accumulated reputation (e.g for hold-invoices). This is also a reduced&lt;br/&gt;&amp;gt; overhead cost, as upfront fees are only paid at bootstrap, or when the HTLC&lt;br/&gt;&amp;gt; forward behavior can be qualified as &amp;#34;whitewashing&amp;#34; from the routing hop&lt;br/&gt;&amp;gt; viewpoint.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It should be noted, this current reputation-credential architectural&lt;br/&gt;&amp;gt; framework assumes credentials distribution at the endpoint of the network.&lt;br/&gt;&amp;gt; However, the framework should be flexible enough for the credentials to be&lt;br/&gt;&amp;gt; harvested by the LSPs, and then distributed in a secondary fashion to their&lt;br/&gt;&amp;gt; spokes, when they need it, or even attached transparently thanks to&lt;br/&gt;&amp;gt; trampoline. So one design intuition, there is no strong attachment of the&lt;br/&gt;&amp;gt; reputation to the endpoint HTLC sender, even if the protocol is described&lt;br/&gt;&amp;gt; in a &amp;#34;flat&amp;#34; view for now.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let&amp;#39;s evaluate quickly this mitigation proposal against a few criterias&lt;br/&gt;&amp;gt; emerged from recent research.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mitigation is effective, in the sense a routing hop can apply a&lt;br/&gt;&amp;gt; proportional relationship between the acquisition of the reputation and the&lt;br/&gt;&amp;gt; amount of liquidity resources credited in function of said reputation. In a&lt;br/&gt;&amp;gt; period of steady state, the reputation acquisition cost can be downgraded&lt;br/&gt;&amp;gt; to 0. In periods of channel congestion, the reputation credentials to&lt;br/&gt;&amp;gt; liquidity units translation can be severed, in the limit of routing hop&lt;br/&gt;&amp;gt; acceptable competitiveness.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mitigation is incentive-compatible, if the credentials are not honored&lt;br/&gt;&amp;gt; by their issuers, the HTLC senders can evict them from the routing network&lt;br/&gt;&amp;gt; view for a while. The successful usage of credentials can lead to more&lt;br/&gt;&amp;gt; credentials allocated for longer and more capacity-intensive channel&lt;br/&gt;&amp;gt; lockups. In case of HTLC failure, the failure source could be forgiven by&lt;br/&gt;&amp;gt; routing hops to maintain the worthiness of the sender credentials.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mitigation can be made transparent from the user, as the credentials&lt;br/&gt;&amp;gt; harvesting can be done automatically from a pre-allocated budget, similar&lt;br/&gt;&amp;gt; to the fee-bumping reserves requirement introduced by anchor output. At the&lt;br/&gt;&amp;gt; end of today, if we take modern browsers as an example, the average user&lt;br/&gt;&amp;gt; doesn&amp;#39;t check manually the TLS certificates (for what they&amp;#39;re worth...).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mitigation can conserve high-level privacy, as the usage of blinded&lt;br/&gt;&amp;gt; signature (or another equivalent cryptosystem breaking signature/message&lt;br/&gt;&amp;gt; linking) should allow the credentials issued during a preliminary phase to&lt;br/&gt;&amp;gt; be undistinguishable during the redeem/usage phase. New CPU/memory DoS&lt;br/&gt;&amp;gt; vectors due to the credentials processing should be watched out.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; About the ease of implementation, there are few protocol messages to&lt;br/&gt;&amp;gt; modify, a HTLC intercepting API is assumed as supported by the&lt;br/&gt;&amp;gt; implementation, onion messages support is also implied, landing EC blinded&lt;br/&gt;&amp;gt; signature in libsecp256k1-zkp shouldn&amp;#39;t be a big deal, routing algorithms&lt;br/&gt;&amp;gt; adaptations might be more serious but still reasonable. The&lt;br/&gt;&amp;gt; &amp;#34;credentials-to-liquidity&amp;#34; allocation algorithms are likely the new real&lt;br/&gt;&amp;gt; beast, though I don&amp;#39;t think any reputation scheme can spare them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There could be a concern about the centralization inertia introduced by a&lt;br/&gt;&amp;gt; reputation system. Intuitively, the argument can be made that any&lt;br/&gt;&amp;gt; historical tracking (such as routing buckets) favor established LN&lt;br/&gt;&amp;gt; incumbents at the gain of efficiency. A counter-argument can be made, a new&lt;br/&gt;&amp;gt; routing hop can lower the acquisition cost of its issued credentials to&lt;br/&gt;&amp;gt; attract more HTLC traffic (accepting higher jamming risk).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the ecosystem impacts, it should be studied that this proposal would&lt;br/&gt;&amp;gt; impact things like inbound channel routing fees [3], ratecard [4] or&lt;br/&gt;&amp;gt; flow-control valve [5] and the whole liquidity toolchain. Hopefully, we&lt;br/&gt;&amp;gt; don&amp;#39;t significantly restrain the design space for future LN protocol&lt;br/&gt;&amp;gt; upgrades.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the proposal modularity and flexibility, each routing node has&lt;br/&gt;&amp;gt; oversight on its routing policy, acquisition methods, credentials to&lt;br/&gt;&amp;gt; liquidity rate. New acquisition methods can be experimented or deployed&lt;br/&gt;&amp;gt; when ready, e.g stakes certificates with only e2e upgrade. The credentials&lt;br/&gt;&amp;gt; themselves could have &amp;#34;innate&amp;#34; expiration time if we use things like&lt;br/&gt;&amp;gt; short-lived ZKP [6]. The credentials framework can be extended beyond&lt;br/&gt;&amp;gt; solving jamming, as a generalized risk-management framework for Bitcoin&lt;br/&gt;&amp;gt; decentralized financial network, e.g transaction signature exchange&lt;br/&gt;&amp;gt; ordering in multi-party transactions [7] or finding reliable Coinjoin&lt;br/&gt;&amp;gt; counterparties.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Feedback welcome.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-November/002884.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-November/002884.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-August/003673.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-August/003673.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [3]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-July/003643.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-July/003643.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [4]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003685.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003685.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [5]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003686.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003686.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [6] &lt;a href=&#34;https://eprint.iacr.org/2022/190.pdf&#34;&gt;https://eprint.iacr.org/2022/190.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt; [7] &lt;a href=&#34;https://github.com/lightning/bolts/pull/851#issuecomment-1290727242&#34;&gt;https://github.com/lightning/bolts/pull/851#issuecomment-1290727242&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221128/31dea565/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221128/31dea565/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:28&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsycx52xd8jh2s2ceq9x4wuxcaaps65chqhwnpfdkcaggum4xfdhpszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z4gg429</id>
    
      <title type="html">📅 Original date posted:2022-11-25 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsycx52xd8jh2s2ceq9x4wuxcaaps65chqhwnpfdkcaggum4xfdhpszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z4gg429" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvw657d4dvl5xstthjfn7gha6n36hjcph4alzn8r5cdhyukkh2j5ce5535r&#39;&gt;nevent1q…535r&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-25&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Clara,&lt;br/&gt;&lt;br/&gt;The main benefit of this &amp;#34;staking&amp;#34;/reputational credentials is to save on&lt;br/&gt;unconditional fees paid by HTLC senders. They benefit from their past HTLC&lt;br/&gt;routing success in terms of more credentials allocated to them, and as such&lt;br/&gt;minimize the overhead cost of their future HTLC sends, or allow them to&lt;br/&gt;lock liquidity for longer periods. From a routing node viewpoint, a 0-risk&lt;br/&gt;HTLC forwarding acceptance can be maintained by requesting strict binding&lt;br/&gt;between credentials acquisition cost and channel liquidity routed. If&lt;br/&gt;higher returns are seeked, the ratio credentials to liquidity can be&lt;br/&gt;adjusted, of course coming with higher risks, and I think this is where the&lt;br/&gt;model built for the current unconditional fees proposal could be useful (if&lt;br/&gt;we integrate the channel congestion rate factor, I believe).&lt;br/&gt;&lt;br/&gt;On top of this monetary paradigm, we can layer a &amp;#34;pure reputation&amp;#34; system,&lt;br/&gt;where in function of the quality of the identities (e.g&lt;br/&gt;proof-of-utxo-ownership), HTLC senders are allocated more significant&lt;br/&gt;liquidity slots. Here, the real bottleneck is the cryptosystem, i.e proving&lt;br/&gt;a UTXO ownership without revealing any other information. The rationale of&lt;br/&gt;this &amp;#34;pure reputation&amp;#34; system, we could even save more in&lt;br/&gt;upfront/unconditional fees in the steady state of the network (however such&lt;br/&gt;a probabilistic model breaks hard in presence of attackers).&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 24 nov. 2022 à 09:45, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It sounds like unconditional fees cover most of what this policy does,&lt;br/&gt;&amp;gt; without the extra risks that come from creating a new token. Is there a&lt;br/&gt;&amp;gt; clear benefit to using a token compared to unconditional fees and&lt;br/&gt;&amp;gt; local reputation?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Nov 23, 2022 at 9:48 PM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Clara,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think the simplest recommended policy you can devise is credential&lt;br/&gt;&amp;gt;&amp;gt; shown to the routing hop should cover for full routing fees, therefore the&lt;br/&gt;&amp;gt;&amp;gt; routing hop benefits from a zero-jamming risk situation. Then you can&lt;br/&gt;&amp;gt;&amp;gt; appreciate the &amp;#34;liquidity value&amp;#34; credentials requested in function of your&lt;br/&gt;&amp;gt;&amp;gt; local channel congestion rate, or even network data. Increasing your&lt;br/&gt;&amp;gt;&amp;gt; returns in exchange of higher risk exposure. And even more, you can lay on&lt;br/&gt;&amp;gt;&amp;gt; top a reputation layer, where the reputation scores are fully fungible&lt;br/&gt;&amp;gt;&amp;gt; against monetary credentials, in the acceptance of a HTLC forward request.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; So I think I agree with you a recommended policy is needed, let&amp;#39;s just&lt;br/&gt;&amp;gt;&amp;gt; start with a simple one! And refine it with time once we sense we have&lt;br/&gt;&amp;gt;&amp;gt; solid foundations.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Le mer. 23 nov. 2022 à 11:00, Clara Shikhelman &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; clara.shikhelman at gmail.com&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; To discuss your proposed solution in detail, I think that some kind of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; recommended policy is needed. If presenting one is a low priority, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; waiting for other things, my main concern is that it will just never happen&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (&amp;#34;any decade now&amp;#34; kind of situation).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Tue, Nov 22, 2022 at 8:13 PM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Clara,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Shared the mail on #lightning-dev Libera chat to get more feedback on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; schedule.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Do you have a timeline in mind for presenting such a policy?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; See the comments on the BOLT #1043  PR, for now I&amp;#39;m thinking more to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; refine the proposed credentials architectural framework.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think dynamic routing policy in function of channel congestion rate,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and you combine that with reputation to do active risk-management are far&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; more advanced questions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Le mar. 22 nov. 2022 à 15:54, Clara Shikhelman &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; clara.shikhelman at gmail.com&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dear All,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If the call time (Monday the 28th at 7 pm UTC) doesn&amp;#39;t work out for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; you, please reach out!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks for your quick and detailed response, Antoine.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If by recommend policy, you mean the set of algorithms that should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; guide the token quantity, rate issuance, token acquisition cost, and the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; adaptations in function of the local channel congestion, or even the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; gossips of the other routing nodes, not at all.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Do you have a timeline in mind for presenting such a policy?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Looking forward to discussing this further over the phone call, will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; make some inquiries to make sure the time works for most people.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;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/20221124/e87d5d27/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221124/e87d5d27/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:25&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2pz92ajfg80zrvgwu02nnflxa0ez9tlmx65jty7kr3n7eud4gtjczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zsfy44k</id>
    
      <title type="html">📅 Original date posted:2022-11-22 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2pz92ajfg80zrvgwu02nnflxa0ez9tlmx65jty7kr3n7eud4gtjczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zsfy44k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqw0v7ladg4fg3ml7hhvek6afsks3gtd2t7fndw73xq6kpgn3jjgs8kepmx&#39;&gt;nevent1q…epmx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-22&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Clara,&lt;br/&gt;&lt;br/&gt;Shared the mail on #lightning-dev Libera chat to get more feedback on&lt;br/&gt;schedule.&lt;br/&gt;&lt;br/&gt;&amp;gt; Do you have a timeline in mind for presenting such a policy?&lt;br/&gt;&lt;br/&gt;See the comments on the BOLT #1043  PR, for now I&amp;#39;m thinking more to refine&lt;br/&gt;the proposed credentials architectural framework.&lt;br/&gt;I think dynamic routing policy in function of channel congestion rate, and&lt;br/&gt;you combine that with reputation to do active risk-management are far more&lt;br/&gt;advanced questions.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le mar. 22 nov. 2022 à 15:54, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Dear All,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the call time (Monday the 28th at 7 pm UTC) doesn&amp;#39;t work out for you,&lt;br/&gt;&amp;gt; please reach out!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for your quick and detailed response, Antoine.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If by recommend policy, you mean the set of algorithms that should guide&lt;br/&gt;&amp;gt;&amp;gt; the token quantity, rate issuance, token acquisition cost, and the&lt;br/&gt;&amp;gt;&amp;gt; adaptations in function of the local channel congestion, or even the&lt;br/&gt;&amp;gt;&amp;gt; gossips of the other routing nodes, not at all.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Do you have a timeline in mind for presenting such a policy?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Looking forward to discussing this further over the phone call, will make&lt;br/&gt;&amp;gt; some inquiries to make sure the time works for most people.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Clara&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/20221122/11bab8b0/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221122/11bab8b0/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf9j5hqjstfchgw95phnjd8q83hqarp5mrhx06sewue6rxu33xrpgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zepu3ng</id>
    
      <title type="html">📅 Original date posted:2022-11-24 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf9j5hqjstfchgw95phnjd8q83hqarp5mrhx06sewue6rxu33xrpgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zepu3ng" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvs82taltze8mcvlw5p0lt6gs7tf2dthsdcjegrpfzftkveg2gjesanw3kq&#39;&gt;nevent1q…w3kq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-24&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Clara,&lt;br/&gt;&lt;br/&gt;I think the simplest recommended policy you can devise is credential shown&lt;br/&gt;to the routing hop should cover for full routing fees, therefore the&lt;br/&gt;routing hop benefits from a zero-jamming risk situation. Then you can&lt;br/&gt;appreciate the &amp;#34;liquidity value&amp;#34; credentials requested in function of your&lt;br/&gt;local channel congestion rate, or even network data. Increasing your&lt;br/&gt;returns in exchange of higher risk exposure. And even more, you can lay on&lt;br/&gt;top a reputation layer, where the reputation scores are fully fungible&lt;br/&gt;against monetary credentials, in the acceptance of a HTLC forward request.&lt;br/&gt;&lt;br/&gt;So I think I agree with you a recommended policy is needed, let&amp;#39;s just&lt;br/&gt;start with a simple one! And refine it with time once we sense we have&lt;br/&gt;solid foundations.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le mer. 23 nov. 2022 à 11:00, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To discuss your proposed solution in detail, I think that some kind of&lt;br/&gt;&amp;gt; recommended policy is needed. If presenting one is a low priority, and&lt;br/&gt;&amp;gt; waiting for other things, my main concern is that it will just never happen&lt;br/&gt;&amp;gt; (&amp;#34;any decade now&amp;#34; kind of situation).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Nov 22, 2022 at 8:13 PM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Clara,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Shared the mail on #lightning-dev Libera chat to get more feedback on&lt;br/&gt;&amp;gt;&amp;gt; schedule.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Do you have a timeline in mind for presenting such a policy?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; See the comments on the BOLT #1043  PR, for now I&amp;#39;m thinking more to&lt;br/&gt;&amp;gt;&amp;gt; refine the proposed credentials architectural framework.&lt;br/&gt;&amp;gt;&amp;gt; I think dynamic routing policy in function of channel congestion rate,&lt;br/&gt;&amp;gt;&amp;gt; and you combine that with reputation to do active risk-management are far&lt;br/&gt;&amp;gt;&amp;gt; more advanced questions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Le mar. 22 nov. 2022 à 15:54, Clara Shikhelman &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; clara.shikhelman at gmail.com&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Dear All,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If the call time (Monday the 28th at 7 pm UTC) doesn&amp;#39;t work out for you,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; please reach out!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thanks for your quick and detailed response, Antoine.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If by recommend policy, you mean the set of algorithms that should guide&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the token quantity, rate issuance, token acquisition cost, and the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; adaptations in function of the local channel congestion, or even the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; gossips of the other routing nodes, not at all.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Do you have a timeline in mind for presenting such a policy?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Looking forward to discussing this further over the phone call, will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; make some inquiries to make sure the time works for most people.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;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/20221123/4dfcbdf3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221123/4dfcbdf3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsq2e7yrjqe8z4xwu5qgpxs33m7njv5x8qfpnu2u7vwvmuthhqdurqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zftm24m</id>
    
      <title type="html">📅 Original date posted:2022-11-21 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsq2e7yrjqe8z4xwu5qgpxs33m7njv5x8qfpnu2u7vwvmuthhqdurqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zftm24m" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx066r4dnd3rymte0898qf49m804hxkdtw2y3uhu34pjwc3rrqyvc39wz8q&#39;&gt;nevent1q…wz8q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-21&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Clara,&lt;br/&gt;&lt;br/&gt;Thanks for reading!&lt;br/&gt;&lt;br/&gt;&amp;gt; I think that another call to discuss jamming would be great. I would&lt;br/&gt;&amp;gt; suggest making it a repeating call every 2 weeks, starting from Monday the&lt;br/&gt;&amp;gt; 28th at 7 pm UTC.&lt;br/&gt;&lt;br/&gt;Cool to take the initiative, the schedule works for me, however this slot&lt;br/&gt;might conflict with the Core Lightning engineering call ? I remember we&lt;br/&gt;moved the LDK meeting time from 7pm to 5pm, as we had folks willing to&lt;br/&gt;attend both.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. Are the tokens transferable between users? For example, if Ned is a&lt;br/&gt;&amp;gt; routing node, and Alice has some of their tokens, can she give these&lt;br/&gt;tokens&lt;br/&gt;&amp;gt; to Bob?&lt;br/&gt;&amp;gt; If yes - could this lead to the creation of a secondary market?&lt;br/&gt;&amp;gt; If no - will that slow down the transaction flow that a new node can send?&lt;br/&gt;&lt;br/&gt;Current version of the proposal, there is nothing preventing the tokens to&lt;br/&gt;be transferred between the users, Alice can give these tokens to Bob. We&lt;br/&gt;could make them binding to the prover, by requesting a new round where&lt;br/&gt;Alice registers a pubkey towards Ned, and all tokens should be&lt;br/&gt;counter-authenticated by Ned at forward. Ned would flag out the&lt;br/&gt;double-usage of tokens, ideally in a ZKP-way. Still I think this would&lt;br/&gt;never prevent Alice from sharing her key material with Bob. So I&amp;#39;m not sure&lt;br/&gt;we can prevent a secondary-market, and it might be even more valuable if we&lt;br/&gt;would like LSPs to collect tokens for their spokes nodes to simplify UX.&lt;br/&gt;&lt;br/&gt;That said, beyond unlinkability between the blinded message and the&lt;br/&gt;cleartext tokens/signatures, I think all the properties should be open to&lt;br/&gt;more research.&lt;br/&gt;&lt;br/&gt;&amp;gt; 2. Do you have a recommended policy for the creation of tokens and their&lt;br/&gt;&amp;gt; use? Ideally, there will be a policy that would mitigate both slow and&lt;br/&gt;&amp;gt; quick jamming, without harming usability too much.&lt;br/&gt;&lt;br/&gt;If by recommend policy, you mean the set of algorithms that should guide&lt;br/&gt;the token quantity, rate issuance, token acquisition cost, and the&lt;br/&gt;adaptations in function of the local channel congestion, or even the&lt;br/&gt;gossips of the other routing nodes, not at all. Just intuition, I think a&lt;br/&gt;simple model should start from enforcing a proportionality between token&lt;br/&gt;acquisition costs and the available channels liquidity, then you can add&lt;br/&gt;more factors in function of your risk model.&lt;br/&gt;&lt;br/&gt;About the slow/quick jamming distinction, I still believe a good&lt;br/&gt;anti-jamming solution should aim to solve things in a continuous fashion,&lt;br/&gt;rather than a discrete one. That way binds better to the reality of&lt;br/&gt;differing hold time Lightning HTLC: simple payment, offline receive,&lt;br/&gt;hold-invoice,  swaps, etc...&lt;br/&gt;&lt;br/&gt;&amp;gt; 3. You write &amp;#34;the reputation credentials to liquidity units translation&lt;br/&gt;can&lt;br/&gt;&amp;gt; be severed&amp;#34; - does this mean that the value of the token changes? Is that&lt;br/&gt;&amp;gt; in the spirit of changing the fees in a channel?&lt;br/&gt;&amp;gt; If this is the case, can&amp;#39;t a routing node &amp;#34;trick&amp;#34; a user into buying many&lt;br/&gt;&amp;gt; tokens and then bring the price up?&lt;br/&gt;&lt;br/&gt;Yes, the &amp;#34;liquidity value&amp;#34; of the tokens is currently left as a floating&lt;br/&gt;parameter. This is a good question if it should be fixed and only the&lt;br/&gt;routing fees should fluctuate in function of channel congestion, or&lt;br/&gt;floating e.g when the global quantity of tokens are required to re-dilute&lt;br/&gt;their current values to maintain some proportion between acquisition cost&lt;br/&gt;and available liquidity.&lt;br/&gt;&lt;br/&gt;For sure, a routing node could &amp;#34;trick&amp;#34; a user into buying many tokens and&lt;br/&gt;then break the promise of not only bringing the price up but also plainly&lt;br/&gt;reject HTLC forward requests satisfying the announced routing policy.&lt;br/&gt;Though note the user&amp;#39;s routing algorithms could penalize in retorsion the&lt;br/&gt;node, if the routing policy gossiped isn&amp;#39;t respected.&lt;br/&gt;&lt;br/&gt;&amp;gt; 4. How would these tokens work with blinded paths and other&lt;br/&gt;&amp;gt; privacy-preserving suggestions?&lt;br/&gt;&lt;br/&gt;Primarily, the tokens could use the new onion messages and blinded paths&lt;br/&gt;for the dissemination and renewal rounds. Current design assumes they&amp;#39;re&lt;br/&gt;attached to the HTLC during forward along the payment path, though I think&lt;br/&gt;one design alternative could be completely detached, and the HTLC onion&lt;br/&gt;just contains a ref to the tokens.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Zooming out, after submitting this proposal to the mailing list yesterday,&lt;br/&gt;I thought how much a token/credentials system bootstrapped on pre-paid fees&lt;br/&gt;should be classified into monetary strategy or a reputation-based strategy,&lt;br/&gt;and it turns out as there is an acquisition cost associated to the tokens,&lt;br/&gt;in fact it might belong more to the monetary strategy classification. So I&lt;br/&gt;wonder now if the usage of the reputation in the proposal title isn&amp;#39;t&lt;br/&gt;misleading and if a &amp;#34;breakeven point&amp;#34; isn&amp;#39;t still implied (&amp;#34;the&lt;br/&gt;proportionality&amp;#34; seeked). From a history of ideas standpoint, a&lt;br/&gt;reputation-based strategy was more the Stakes Certificate solution&lt;br/&gt;originally proposed in 2020. Though this proposal reuses the liquidity&lt;br/&gt;units/credit score introduced there.&lt;br/&gt;&lt;br/&gt;I think more and more we should have a &amp;#34;two-tier&amp;#34; mitigation strategy,&lt;br/&gt;where the base tier is strictly defined in &amp;#34;pure fees&amp;#34; terms, and then&lt;br/&gt;layered on top of a reputation system. A routing node could deviate from&lt;br/&gt;the zero risk &amp;#34;pure fees&amp;#34; ones to increase its routing fees returns, by&lt;br/&gt;relying more on assumptions like &amp;#34;Past HTLC senders behave well if there is&lt;br/&gt;a proportionality between reputation cost and amount of liquidity resources&lt;br/&gt;allocated in function of said-reputation&amp;#34;.&lt;br/&gt;&lt;br/&gt;Looking forward to pursuing discussions during calls!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 21 nov. 2022 à 13:16, Clara Shikhelman &amp;lt;clara.shikhelman at gmail.com&amp;gt;&lt;br/&gt;a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Dear Antoine and list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that another call to discuss jamming would be great. I would&lt;br/&gt;&amp;gt; suggest making it a repeating call every 2 weeks, starting from Monday the&lt;br/&gt;&amp;gt; 28th at 7 pm UTC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Antoine - Thank you for your work!&lt;br/&gt;&amp;gt; I have a few questions to better understand the details.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Are the tokens transferable between users? For example, if Ned is a&lt;br/&gt;&amp;gt; routing node, and Alice has some of their tokens, can she give these tokens&lt;br/&gt;&amp;gt; to Bob?&lt;br/&gt;&amp;gt; If yes - could this lead to the creation of a secondary market?&lt;br/&gt;&amp;gt; If no - will that slow down the transaction flow that a new node can send?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. Do you have a recommended policy for the creation of tokens and their&lt;br/&gt;&amp;gt; use? Ideally, there will be a policy that would mitigate both slow and&lt;br/&gt;&amp;gt; quick jamming, without harming usability too much.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 3. You write &amp;#34;the reputation credentials to liquidity units translation&lt;br/&gt;&amp;gt; can be severed&amp;#34; - does this mean that the value of the token changes? Is&lt;br/&gt;&amp;gt; that in the spirit of changing the fees in a channel?&lt;br/&gt;&amp;gt; If this is the case, can&amp;#39;t a routing node &amp;#34;trick&amp;#34; a user into buying many&lt;br/&gt;&amp;gt; tokens and then bring the price up?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 4. How would these tokens work with blinded paths and other&lt;br/&gt;&amp;gt; privacy-preserving suggestions?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks again,&lt;br/&gt;&amp;gt; Clara&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Sun, Nov 20, 2022 at 11:01 PM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi LN Devs,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; tl;dr A formalization of a reputation-based scheme to solve channel&lt;br/&gt;&amp;gt;&amp;gt; jamming is proposed. The system relies on &amp;#34;credentials&amp;#34; issued by routing&lt;br/&gt;&amp;gt;&amp;gt; hops and requested to be attached to each HTLC forward request. The&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;credentials&amp;#34; can be used by a reputation algorithm to reward/punish&lt;br/&gt;&amp;gt;&amp;gt; payment senders and allocate channel liquidity resources efficiently. The&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;credentials&amp;#34;  initial distribution can be bootstrapped leveraging one-time&lt;br/&gt;&amp;gt;&amp;gt; upfront fees paid toward the routing hops. Afterwards, the &amp;#34;credentials&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; subsequent distribution can rely on previous HTLC traffic.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A protocol description can be found here, with few extensions already to&lt;br/&gt;&amp;gt;&amp;gt; the BOLTs:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/lightning/bolts/pull/1043&#34;&gt;https://github.com/lightning/bolts/pull/1043&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There is also a work-in-progress proof-of-concept in LDK (on top of our&lt;br/&gt;&amp;gt;&amp;gt; coming soon^TM  HTLC intercepting API):&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/1848&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/1848&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This work builds on previous reputation-scheme research [0] [1]. It also&lt;br/&gt;&amp;gt;&amp;gt; integrates the more recent proposals of upfront fees as a straightforward&lt;br/&gt;&amp;gt;&amp;gt; mechanism to bootstrap the reputation system. Bootstrapping the system with&lt;br/&gt;&amp;gt;&amp;gt; more economically cost-effective privacy-preserving UTXO ownership proofs&lt;br/&gt;&amp;gt;&amp;gt; not only add another layer of engineering complexity, there is still a&lt;br/&gt;&amp;gt;&amp;gt; proof size vs proof generation/validation trade-off to arbiter between ZKP&lt;br/&gt;&amp;gt;&amp;gt; cryptosystems.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Rather to seek for a game-theory equilibrium defined as a breakeven point&lt;br/&gt;&amp;gt;&amp;gt; as in the latest unconditional fee research [2], this proposal aims to use&lt;br/&gt;&amp;gt;&amp;gt; reputation credentials to allow HTLC traffic-shaping. This not only should&lt;br/&gt;&amp;gt;&amp;gt; protect against jamming situations (either malicious&lt;br/&gt;&amp;gt;&amp;gt; or spontaneous) but also allow active HTLC traffic-shaping, where a&lt;br/&gt;&amp;gt;&amp;gt; routing hop can allow extended channel liquidity lockups based on&lt;br/&gt;&amp;gt;&amp;gt; accumulated reputation (e.g for hold-invoices). This is also a reduced&lt;br/&gt;&amp;gt;&amp;gt; overhead cost, as upfront fees are only paid at bootstrap, or when the HTLC&lt;br/&gt;&amp;gt;&amp;gt; forward behavior can be qualified as &amp;#34;whitewashing&amp;#34; from the routing hop&lt;br/&gt;&amp;gt;&amp;gt; viewpoint.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It should be noted, this current reputation-credential architectural&lt;br/&gt;&amp;gt;&amp;gt; framework assumes credentials distribution at the endpoint of the network.&lt;br/&gt;&amp;gt;&amp;gt; However, the framework should be flexible enough for the credentials to be&lt;br/&gt;&amp;gt;&amp;gt; harvested by the LSPs, and then distributed in a secondary fashion to their&lt;br/&gt;&amp;gt;&amp;gt; spokes, when they need it, or even attached transparently thanks to&lt;br/&gt;&amp;gt;&amp;gt; trampoline. So one design intuition, there is no strong attachment of the&lt;br/&gt;&amp;gt;&amp;gt; reputation to the endpoint HTLC sender, even if the protocol is described&lt;br/&gt;&amp;gt;&amp;gt; in a &amp;#34;flat&amp;#34; view for now.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Let&amp;#39;s evaluate quickly this mitigation proposal against a few criterias&lt;br/&gt;&amp;gt;&amp;gt; emerged from recent research.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mitigation is effective, in the sense a routing hop can apply a&lt;br/&gt;&amp;gt;&amp;gt; proportional relationship between the acquisition of the reputation and the&lt;br/&gt;&amp;gt;&amp;gt; amount of liquidity resources credited in function of said reputation. In a&lt;br/&gt;&amp;gt;&amp;gt; period of steady state, the reputation acquisition cost can be downgraded&lt;br/&gt;&amp;gt;&amp;gt; to 0. In periods of channel congestion, the reputation credentials to&lt;br/&gt;&amp;gt;&amp;gt; liquidity units translation can be severed, in the limit of routing hop&lt;br/&gt;&amp;gt;&amp;gt; acceptable competitiveness.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mitigation is incentive-compatible, if the credentials are not&lt;br/&gt;&amp;gt;&amp;gt; honored by their issuers, the HTLC senders can evict them from the routing&lt;br/&gt;&amp;gt;&amp;gt; network view for a while. The successful usage of credentials can lead to&lt;br/&gt;&amp;gt;&amp;gt; more credentials allocated for longer and more capacity-intensive channel&lt;br/&gt;&amp;gt;&amp;gt; lockups. In case of HTLC failure, the failure source could be forgiven by&lt;br/&gt;&amp;gt;&amp;gt; routing hops to maintain the worthiness of the sender credentials.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mitigation can be made transparent from the user, as the credentials&lt;br/&gt;&amp;gt;&amp;gt; harvesting can be done automatically from a pre-allocated budget, similar&lt;br/&gt;&amp;gt;&amp;gt; to the fee-bumping reserves requirement introduced by anchor output. At the&lt;br/&gt;&amp;gt;&amp;gt; end of today, if we take modern browsers as an example, the average user&lt;br/&gt;&amp;gt;&amp;gt; doesn&amp;#39;t check manually the TLS certificates (for what they&amp;#39;re worth...).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mitigation can conserve high-level privacy, as the usage of blinded&lt;br/&gt;&amp;gt;&amp;gt; signature (or another equivalent cryptosystem breaking signature/message&lt;br/&gt;&amp;gt;&amp;gt; linking) should allow the credentials issued during a preliminary phase to&lt;br/&gt;&amp;gt;&amp;gt; be undistinguishable during the redeem/usage phase. New CPU/memory DoS&lt;br/&gt;&amp;gt;&amp;gt; vectors due to the credentials processing should be watched out.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; About the ease of implementation, there are few protocol messages to&lt;br/&gt;&amp;gt;&amp;gt; modify, a HTLC intercepting API is assumed as supported by the&lt;br/&gt;&amp;gt;&amp;gt; implementation, onion messages support is also implied, landing EC blinded&lt;br/&gt;&amp;gt;&amp;gt; signature in libsecp256k1-zkp shouldn&amp;#39;t be a big deal, routing algorithms&lt;br/&gt;&amp;gt;&amp;gt; adaptations might be more serious but still reasonable. The&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;credentials-to-liquidity&amp;#34; allocation algorithms are likely the new real&lt;br/&gt;&amp;gt;&amp;gt; beast, though I don&amp;#39;t think any reputation scheme can spare them.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There could be a concern about the centralization inertia introduced by a&lt;br/&gt;&amp;gt;&amp;gt; reputation system.  Intuitively, the argument can be made that any&lt;br/&gt;&amp;gt;&amp;gt; historical tracking (such as routing buckets) favor established LN&lt;br/&gt;&amp;gt;&amp;gt; incumbents at the gain of efficiency. A counter-argument can be made, a new&lt;br/&gt;&amp;gt;&amp;gt; routing hop can lower the acquisition cost of its issued credentials to&lt;br/&gt;&amp;gt;&amp;gt; attract more HTLC traffic (accepting higher jamming risk).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On the ecosystem impacts, it should be studied that this proposal would&lt;br/&gt;&amp;gt;&amp;gt; impact things like inbound channel routing fees [3], ratecard [4] or&lt;br/&gt;&amp;gt;&amp;gt; flow-control valve [5] and the whole liquidity toolchain. Hopefully, we&lt;br/&gt;&amp;gt;&amp;gt; don&amp;#39;t significantly restrain the design space for future LN protocol&lt;br/&gt;&amp;gt;&amp;gt; upgrades.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On the proposal modularity and flexibility, each routing node has&lt;br/&gt;&amp;gt;&amp;gt; oversight on its routing policy, acquisition methods, credentials to&lt;br/&gt;&amp;gt;&amp;gt; liquidity rate. New acquisition methods can be experimented or deployed&lt;br/&gt;&amp;gt;&amp;gt; when ready, e.g stakes certificates with only e2e upgrade. The credentials&lt;br/&gt;&amp;gt;&amp;gt; themselves could have &amp;#34;innate&amp;#34; expiration time if we use things like&lt;br/&gt;&amp;gt;&amp;gt; short-lived ZKP [6]. The credentials framework can be extended beyond&lt;br/&gt;&amp;gt;&amp;gt; solving jamming, as a generalized risk-management framework for Bitcoin&lt;br/&gt;&amp;gt;&amp;gt; decentralized financial network, e.g transaction signature exchange&lt;br/&gt;&amp;gt;&amp;gt; ordering in multi-party transactions [7] or finding reliable Coinjoin&lt;br/&gt;&amp;gt;&amp;gt; counterparties.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Feedback welcome.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [0]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-November/002884.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-November/002884.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [1]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-August/003673.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-August/003673.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [2]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [3]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-July/003643.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-July/003643.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [4]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003685.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003685.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [5]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003686.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003686.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [6] &lt;a href=&#34;https://eprint.iacr.org/2022/190.pdf&#34;&gt;https://eprint.iacr.org/2022/190.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [7] &lt;a href=&#34;https://github.com/lightning/bolts/pull/851#issuecomment-1290727242&#34;&gt;https://github.com/lightning/bolts/pull/851#issuecomment-1290727242&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&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/20221121/d1e83ac2/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221121/d1e83ac2/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:23&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqnwj6ha49s5us4tmksxerfsu9yvhpd64m5wtm3udfg2qgcgsattqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zf602n0</id>
    
      <title type="html">📅 Original date posted:2022-11-21 📝 Original message: Hi LN ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqnwj6ha49s5us4tmksxerfsu9yvhpd64m5wtm3udfg2qgcgsattqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zf602n0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfcwnrkdtx4kpmrm7zgy9svaczuy580vt8mursydqsx98kt6lh2jcscluzn&#39;&gt;nevent1q…luzn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-21&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi LN Devs,&lt;br/&gt;&lt;br/&gt;tl;dr A formalization of a reputation-based scheme to solve channel jamming&lt;br/&gt;is proposed. The system relies on &amp;#34;credentials&amp;#34; issued by routing hops and&lt;br/&gt;requested to be attached to each HTLC forward request. The &amp;#34;credentials&amp;#34;&lt;br/&gt;can be used by a reputation algorithm to reward/punish payment senders and&lt;br/&gt;allocate channel liquidity resources efficiently. The &amp;#34;credentials&amp;#34;&lt;br/&gt;initial distribution can be bootstrapped leveraging one-time upfront fees&lt;br/&gt;paid toward the routing hops. Afterwards, the &amp;#34;credentials&amp;#34; subsequent&lt;br/&gt;distribution can rely on previous HTLC traffic.&lt;br/&gt;&lt;br/&gt;A protocol description can be found here, with few extensions already to&lt;br/&gt;the BOLTs:&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/lightning/bolts/pull/1043&#34;&gt;https://github.com/lightning/bolts/pull/1043&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;There is also a work-in-progress proof-of-concept in LDK (on top of our&lt;br/&gt;coming soon^TM  HTLC intercepting API):&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/1848&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/1848&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;This work builds on previous reputation-scheme research [0] [1]. It also&lt;br/&gt;integrates the more recent proposals of upfront fees as a straightforward&lt;br/&gt;mechanism to bootstrap the reputation system. Bootstrapping the system with&lt;br/&gt;more economically cost-effective privacy-preserving UTXO ownership proofs&lt;br/&gt;not only add another layer of engineering complexity, there is still a&lt;br/&gt;proof size vs proof generation/validation trade-off to arbiter between ZKP&lt;br/&gt;cryptosystems.&lt;br/&gt;&lt;br/&gt;Rather to seek for a game-theory equilibrium defined as a breakeven point&lt;br/&gt;as in the latest unconditional fee research [2], this proposal aims to use&lt;br/&gt;reputation credentials to allow HTLC traffic-shaping. This not only should&lt;br/&gt;protect against jamming situations (either malicious&lt;br/&gt;or spontaneous) but also allow active HTLC traffic-shaping, where a routing&lt;br/&gt;hop can allow extended channel liquidity lockups based on accumulated&lt;br/&gt;reputation (e.g for hold-invoices). This is also a reduced overhead cost,&lt;br/&gt;as upfront fees are only paid at bootstrap, or when the HTLC forward&lt;br/&gt;behavior can be qualified as &amp;#34;whitewashing&amp;#34; from the routing hop viewpoint.&lt;br/&gt;&lt;br/&gt;It should be noted, this current reputation-credential architectural&lt;br/&gt;framework assumes credentials distribution at the endpoint of the network.&lt;br/&gt;However, the framework should be flexible enough for the credentials to be&lt;br/&gt;harvested by the LSPs, and then distributed in a secondary fashion to their&lt;br/&gt;spokes, when they need it, or even attached transparently thanks to&lt;br/&gt;trampoline. So one design intuition, there is no strong attachment of the&lt;br/&gt;reputation to the endpoint HTLC sender, even if the protocol is described&lt;br/&gt;in a &amp;#34;flat&amp;#34; view for now.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s evaluate quickly this mitigation proposal against a few criterias&lt;br/&gt;emerged from recent research.&lt;br/&gt;&lt;br/&gt;The mitigation is effective, in the sense a routing hop can apply a&lt;br/&gt;proportional relationship between the acquisition of the reputation and the&lt;br/&gt;amount of liquidity resources credited in function of said reputation. In a&lt;br/&gt;period of steady state, the reputation acquisition cost can be downgraded&lt;br/&gt;to 0. In periods of channel congestion, the reputation credentials to&lt;br/&gt;liquidity units translation can be severed, in the limit of routing hop&lt;br/&gt;acceptable competitiveness.&lt;br/&gt;&lt;br/&gt;The mitigation is incentive-compatible, if the credentials are not honored&lt;br/&gt;by their issuers, the HTLC senders can evict them from the routing network&lt;br/&gt;view for a while. The successful usage of credentials can lead to more&lt;br/&gt;credentials allocated for longer and more capacity-intensive channel&lt;br/&gt;lockups. In case of HTLC failure, the failure source could be forgiven by&lt;br/&gt;routing hops to maintain the worthiness of the sender credentials.&lt;br/&gt;&lt;br/&gt;The mitigation can be made transparent from the user, as the credentials&lt;br/&gt;harvesting can be done automatically from a pre-allocated budget, similar&lt;br/&gt;to the fee-bumping reserves requirement introduced by anchor output. At the&lt;br/&gt;end of today, if we take modern browsers as an example, the average user&lt;br/&gt;doesn&amp;#39;t check manually the TLS certificates (for what they&amp;#39;re worth...).&lt;br/&gt;&lt;br/&gt;The mitigation can conserve high-level privacy, as the usage of blinded&lt;br/&gt;signature (or another equivalent cryptosystem breaking signature/message&lt;br/&gt;linking) should allow the credentials issued during a preliminary phase to&lt;br/&gt;be undistinguishable during the redeem/usage phase. New CPU/memory DoS&lt;br/&gt;vectors due to the credentials processing should be watched out.&lt;br/&gt;&lt;br/&gt;About the ease of implementation, there are few protocol messages to&lt;br/&gt;modify, a HTLC intercepting API is assumed as supported by the&lt;br/&gt;implementation, onion messages support is also implied, landing EC blinded&lt;br/&gt;signature in libsecp256k1-zkp shouldn&amp;#39;t be a big deal, routing algorithms&lt;br/&gt;adaptations might be more serious but still reasonable. The&lt;br/&gt;&amp;#34;credentials-to-liquidity&amp;#34; allocation algorithms are likely the new real&lt;br/&gt;beast, though I don&amp;#39;t think any reputation scheme can spare them.&lt;br/&gt;&lt;br/&gt;There could be a concern about the centralization inertia introduced by a&lt;br/&gt;reputation system.  Intuitively, the argument can be made that any&lt;br/&gt;historical tracking (such as routing buckets) favor established LN&lt;br/&gt;incumbents at the gain of efficiency. A counter-argument can be made, a new&lt;br/&gt;routing hop can lower the acquisition cost of its issued credentials to&lt;br/&gt;attract more HTLC traffic (accepting higher jamming risk).&lt;br/&gt;&lt;br/&gt;On the ecosystem impacts, it should be studied that this proposal would&lt;br/&gt;impact things like inbound channel routing fees [3], ratecard [4] or&lt;br/&gt;flow-control valve [5] and the whole liquidity toolchain. Hopefully, we&lt;br/&gt;don&amp;#39;t significantly restrain the design space for future LN protocol&lt;br/&gt;upgrades.&lt;br/&gt;&lt;br/&gt;On the proposal modularity and flexibility, each routing node has oversight&lt;br/&gt;on its routing policy, acquisition methods, credentials to liquidity rate.&lt;br/&gt;New acquisition methods can be experimented or deployed when ready, e.g&lt;br/&gt;stakes certificates with only e2e upgrade. The credentials themselves could&lt;br/&gt;have &amp;#34;innate&amp;#34; expiration time if we use things like short-lived ZKP [6].&lt;br/&gt;The credentials framework can be extended beyond solving jamming, as a&lt;br/&gt;generalized risk-management framework for Bitcoin decentralized financial&lt;br/&gt;network, e.g transaction signature exchange ordering in multi-party&lt;br/&gt;transactions [7] or finding reliable Coinjoin counterparties.&lt;br/&gt;&lt;br/&gt;Feedback welcome.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-November/002884.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-November/002884.html&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-August/003673.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-August/003673.html&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-November/003740.html&lt;/a&gt;&lt;br/&gt;[3]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-July/003643.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-July/003643.html&lt;/a&gt;&lt;br/&gt;[4]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003685.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003685.html&lt;/a&gt;&lt;br/&gt;[5]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003686.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-September/003686.html&lt;/a&gt;&lt;br/&gt;[6] &lt;a href=&#34;https://eprint.iacr.org/2022/190.pdf&#34;&gt;https://eprint.iacr.org/2022/190.pdf&lt;/a&gt;&lt;br/&gt;[7] &lt;a href=&#34;https://github.com/lightning/bolts/pull/851#issuecomment-1290727242&#34;&gt;https://github.com/lightning/bolts/pull/851#issuecomment-1290727242&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/20221120/2a736ba2/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20221120/2a736ba2/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:07:22&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqfya3cuj0xn5klqu3fr2put8kd425g0spjvgwaensw77kdqghe7qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zq0henn</id>
    
      <title type="html">📅 Original date posted:2022-09-01 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqfya3cuj0xn5klqu3fr2put8kd425g0spjvgwaensw77kdqghe7qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zq0henn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvzdzhqh60mg0vmtsqqlcltc232nwzzrymae8sqsvjgdx9apggeegerwgx3&#39;&gt;nevent1q…wgx3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-09-01&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Alex,&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say the adversary targeting your high-value &amp;#34;LiFi&amp;#34; infrastructure is&lt;br/&gt;a nation-state sponsored hacking-group with strong capabilities (as we&amp;#39;re&lt;br/&gt;seeing today in the cryptocurrencies DeFi space). This hacking group avails&lt;br/&gt;hundreds of bitcoins to fund channels, is able to setup thousands of sybil&lt;br/&gt;peers across the base-layer p2p network, has built a fine-grained knowledge&lt;br/&gt;of the miner mempools, controls few Internet ASNs and has bought&lt;br/&gt;second-hands mining chips on the market to own limited hashing capabilities.&lt;br/&gt;&lt;br/&gt;As of today, they would have a marked embarrassment on which attack pickup&lt;br/&gt;to target your Lightning infrastructure. They could start with an &amp;#34;old&lt;br/&gt;known&amp;#34; jamming attack to permanently cut your channel links from the rest&lt;br/&gt;of the wider network topology [0].&lt;br/&gt;Or they could launch time-dilation attacks by building on BGP disruptions,&lt;br/&gt;until your chain view is so far in the past from the network tip that your&lt;br/&gt;on-chain HTLC-claiming safety reaction timers are useless [1]. Or they&lt;br/&gt;could exercise pinning attacks to prevent you to claim back routed HTLC, as&lt;br/&gt;a malicious commitment transaction sleeps in the network mempools until&lt;br/&gt;it&amp;#39;s too far [2].  Or they could target your pre-0.24 Bitcoin Core&lt;br/&gt;full-node to provoke a memory crash thanks to a long-chain of low-work&lt;br/&gt;headers [3].&lt;br/&gt;&lt;br/&gt;And I would say that&amp;#39;s only a subset of the attack surface of a Lightning&lt;br/&gt;node.&lt;br/&gt;&lt;br/&gt;Considering all those factors, moving a LN implementation architecture from&lt;br/&gt;a single, monolithic process towards a collection of processes, where the&lt;br/&gt;critical components of the LN active defense security model are replicated&lt;br/&gt;and distributed, redundant access to the chain view guaranteed, sandboxing&lt;br/&gt;access between processes enforced and data flow monitored to react on&lt;br/&gt;anomalies, all things your #6843 would make easier, sounds a reasonable&lt;br/&gt;direction. I think it&amp;#39;s needed if you aim for your infrastructure to&lt;br/&gt;survive strong attacks.&lt;br/&gt;&lt;br/&gt;On the LDK-side, inheriting from the adversarial thinking and safety-first&lt;br/&gt;mindset development culture from Bitcoin Core, we&amp;#39;ve always considered that&lt;br/&gt;type of scenarii since the early days and designed our software in&lt;br/&gt;consequence. We have been working and we&amp;#39;ll keep working on many&lt;br/&gt;security/safety hardening: external signing [4], replicated  chain&lt;br/&gt;monitoring [5], dynamic fee-bumping of time-sensitive transactions, various&lt;br/&gt;attack vectors mitigations [6]. All that said, we&amp;#39;re looking forward to&lt;br/&gt;collaborate with the wider Lightning community on reusable security modules&lt;br/&gt;across implementations (e.g jamming mitigations) and wished&lt;br/&gt;&amp;#34;fix-the-annoying-holes&amp;#34; changes in Bitcoin Core (e.g package relay).&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://jamming-dev.github.io/book/&#34;&gt;https://jamming-dev.github.io/book/&lt;/a&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://arxiv.org/abs/2006.01418&#34;&gt;https://arxiv.org/abs/2006.01418&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25717&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25717&lt;/a&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/214&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/214&lt;/a&gt;&lt;br/&gt;[5] &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/679&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/679&lt;/a&gt;&lt;br/&gt;[6] &lt;a href=&#34;https://github.com/lightningdevkit/rust-lightning/pull/1009&#34;&gt;https://github.com/lightningdevkit/rust-lightning/pull/1009&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le jeu. 1 sept. 2022 à 13:56, Alex Akselrod via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; At NYDIG, we&amp;#39;re considering ways to harden large LND deployments. Joost&lt;br/&gt;&amp;gt; and I discussed that currently, when external untrusted peers make inbound&lt;br/&gt;&amp;gt; connections, LND must verify the identity of the peer during the noise&lt;br/&gt;&amp;gt; handshake, and it must do this before enforcing any potential key-based&lt;br/&gt;&amp;gt; allow lists. This is done in the same process as the node&amp;#39;s other critical&lt;br/&gt;&amp;gt; tasks, such as monitoring the chain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To reduce the attack area of the main node process, we&amp;#39;d like to propose a&lt;br/&gt;&amp;gt; means to optionally separate the peer communication into a separate&lt;br/&gt;&amp;gt; process: something like CLN&amp;#39;s connectd, running separately, and the&lt;br/&gt;&amp;gt; connections would be multiplexed over a single network connection initiated&lt;br/&gt;&amp;gt; from the node to the proxy. The core of our current idea is demonstrated in&lt;br/&gt;&amp;gt; a draft PR: &lt;a href=&#34;https://github.com/lightningnetwork/lnd/pull/6843&#34;&gt;https://github.com/lightningnetwork/lnd/pull/6843&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d love some early feedback on the general direction of this. If this&lt;br/&gt;&amp;gt; would be interesting, I&amp;#39;ll build it out into a fully working feature.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alex Akselrod&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/20220901/d81ca8c8/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220901/d81ca8c8/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:06:46&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvqmtwlkhpvn63h9wrskcrflv5dwf6pkecygrue9tmlvffzh69ylszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zs3z50y</id>
    
      <title type="html">📅 Original date posted:2021-10-04 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvqmtwlkhpvn63h9wrskcrflv5dwf6pkecygrue9tmlvffzh69ylszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zs3z50y" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0u3sf6943erguxdnp74vgcm9n2szlud07affj7lxk9dak49cvqgceqdu5g&#39;&gt;nevent1q…du5g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-04&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; * C-lightning v0.10.2 (CVE-2021-41593)&lt;br/&gt;&lt;br/&gt;Thanks I was unsure about the exact version number. I&amp;#39;ll update the CVE&lt;br/&gt;quickly.&lt;br/&gt;&lt;br/&gt;Le lun. 4 oct. 2021 à 14:16, lisa neigut &amp;lt;niftynei at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; FYI the next version of c-lightning will contain the proposed&lt;br/&gt;&amp;gt; `max_dust_htlc_exposure_msat` as outlined in #919&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/919/files&amp;gt&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/919/files&amp;gt&lt;/a&gt;;; the&lt;br/&gt;&amp;gt; given expected vulnerabilities patch table should have reflected this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The vulnerabilities are expected to be patched in:&lt;br/&gt;&amp;gt; &amp;gt; * Eclair: v0.6.2&#43; (CVE-2021-41591)&lt;br/&gt;&amp;gt; &amp;gt; * LND: v0.13.3&#43; (CVE-2021-41592)&lt;br/&gt;&amp;gt; &amp;gt; * LDK: v0.0.102 (not released as production software yet)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * C-lightning v0.10.2 (CVE-2021-41593)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Lisa&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Oct 4, 2021 at 10:09 AM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m writing a report to disclose specification-level vulnerabilities&lt;br/&gt;&amp;gt;&amp;gt; affecting the Lightning implementations.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The vulnerabilities are expected to be patched in:&lt;br/&gt;&amp;gt;&amp;gt; * Eclair: v0.6.2&#43; (CVE-2021-41591)&lt;br/&gt;&amp;gt;&amp;gt; * LND: v0.13.3&#43; (CVE-2021-41592)&lt;br/&gt;&amp;gt;&amp;gt; * LDK: v0.0.102 (not released as production software yet)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The vulnerabilities are also affecting c-lightning (CVE-2021-41593).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Those vulnerabilities can be exploited in a wide range of attacks, going&lt;br/&gt;&amp;gt;&amp;gt; from fee blackmailing of node operators, burning liquidity of your&lt;br/&gt;&amp;gt;&amp;gt; competing LSPs or even stealing your counterparty channel balance if you&lt;br/&gt;&amp;gt;&amp;gt; avail mining capabilities. Exercise of the vulnerability revealed that a&lt;br/&gt;&amp;gt;&amp;gt; majority of the balance funds can be at loss.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Credit to Eugene Siegel (Crypt-iQ) for reporting the trimmed-to-dust&lt;br/&gt;&amp;gt;&amp;gt; exploitation and multiple insights about attacks.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thanks to Bastien Teinturier and Matt Corallo for numerous contributions&lt;br/&gt;&amp;gt;&amp;gt; about mitigations development.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Problem&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The current BOLT specification only requires Alice&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; `dust_limit_satoshis` (applied on Alice&amp;#39;s commitment) to be under Alice&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; `channel_reserve_satoshis` (applied on Bob). As those 2 parameters are&lt;br/&gt;&amp;gt;&amp;gt; selectable by Alice, she can inflate the dust limit until reaching the&lt;br/&gt;&amp;gt;&amp;gt; implementation-defined max value (e.g LND: 20% of chan capacity, LDK: 100%&lt;br/&gt;&amp;gt;&amp;gt; of chan capacity).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Any in-flight incoming HTLC under Alice&amp;#39;s dust limit will be converted as&lt;br/&gt;&amp;gt;&amp;gt; miner fees on Alice&amp;#39;s commitment. This HTLC is deducted from Bob&amp;#39;s balance&lt;br/&gt;&amp;gt;&amp;gt; and as such they&amp;#39;re still owned by Bob, until resolution (i.e a RAA&lt;br/&gt;&amp;gt;&amp;gt; removing the HTLC from Alice&amp;#39;s commitment). This limitation only applies&lt;br/&gt;&amp;gt;&amp;gt; per-HTLC. No implementation enforces a limit on the sum of in-flight HTLCs&lt;br/&gt;&amp;gt;&amp;gt; burned as fees. Therefore, Alice is free to inflict a substantial loss to&lt;br/&gt;&amp;gt;&amp;gt; Bob funds by publishing her commitment on-chain.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In-flight outgoing HTLC are also committed as fees on Bob&amp;#39;s commitment if&lt;br/&gt;&amp;gt;&amp;gt; they&amp;#39;re under Bob&amp;#39;s threshold. Alice can also exploit from this angle by&lt;br/&gt;&amp;gt;&amp;gt; circular routing HTLCs until reaching Bob&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; `max_htlc_value_in_flight_msat`. Alice withholds HTLCs resolution until Bob&lt;br/&gt;&amp;gt;&amp;gt; goes on-chain to timeout an offered HTLC or claim an accepted HTLC.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Dust HTLC processing can be also exploited at `update_fee` reception.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As the BOLT3&amp;#39;s fees computation encompasses the negotiated feerate from&lt;br/&gt;&amp;gt;&amp;gt; `update_fee` for the 2nd-stage HTLC fees to decide if the HTLC must be&lt;br/&gt;&amp;gt;&amp;gt; trimmed, the amount of balance at risk is a function of current mempool&lt;br/&gt;&amp;gt;&amp;gt; feerates.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The maximum of funds at risk on a counterparty commitment is:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; counterparty&amp;#39;s `max_accepted_htlcs` * (`htlc_success_tx_kw` * opener&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; `feerate_per_kw` &#43; counterparty&amp;#39;s `dust_limit_satoshis`) &#43; holder&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; `max_accepted_htlcs` * (`htlc_timeout_tx_kw` * opener&amp;#39;s `feerate_per_kw` &#43;&lt;br/&gt;&amp;gt;&amp;gt; counterparty&amp;#39;s `dust_limit_satoshis`)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If the opener is also the attacker, the negotiated feerate can be&lt;br/&gt;&amp;gt;&amp;gt; manipulated beyond the &amp;#34;honest&amp;#34; mempool feerates only upper bounded&lt;br/&gt;&amp;gt;&amp;gt; implementation-defined value (before fixes, LDK: 2 * high-feerate of our&lt;br/&gt;&amp;gt;&amp;gt; fee-estimator). If the opener is the victim, the negotiated feerate is&lt;br/&gt;&amp;gt;&amp;gt; still a safety concern in case of spontaneous mempool spikes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Note, `anchors_zero_htlc_fee` channels are not affected by the feerate&lt;br/&gt;&amp;gt;&amp;gt; inflation as the trimmed-to-dust fee computation mechanism for 2nd-stage&lt;br/&gt;&amp;gt;&amp;gt; HTLC is removed. They&amp;#39;re still at risk of the sum of the HTLCs under the&lt;br/&gt;&amp;gt;&amp;gt; dust limit being maliciously burned.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Solution&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A first mitigation is to verify the counterparty&amp;#39;s announced&lt;br/&gt;&amp;gt;&amp;gt; `dust_limit_satoshis` at channel opening (`open_channel`/`accept_channel`)&lt;br/&gt;&amp;gt;&amp;gt; reception and reject if it&amp;#39;s estimated too large (see #894)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For LDK, we choose the value of 660 satoshis as it&amp;#39;s beyond the highest&lt;br/&gt;&amp;gt;&amp;gt; dust threshold enforced by Bitcoin Core (p2pkh: 546) with a margin of&lt;br/&gt;&amp;gt;&amp;gt; safety. Propagation of Lightning time-sensitive transactions shouldn&amp;#39;t be&lt;br/&gt;&amp;gt;&amp;gt; affected.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A second mitigation is to define a new configurable limit&lt;br/&gt;&amp;gt;&amp;gt; `max_dust_htlc_exposure` and apply this one at incoming and outgoing of&lt;br/&gt;&amp;gt;&amp;gt; HTLC.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For LDK, we choose the value of 5 000 000 milli-satoshis as we gauged&lt;br/&gt;&amp;gt;&amp;gt; this value as a substantial loss for our class of users. Setting this too&lt;br/&gt;&amp;gt;&amp;gt; low may prevent the sending or receipt of low-value HTLCs on high-traffic&lt;br/&gt;&amp;gt;&amp;gt; nodes. A node operator should fine-tune this value in function of what&lt;br/&gt;&amp;gt;&amp;gt; qualifies as an acceptable loss.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We would like to ensure that the node isn&amp;#39;t suddenly exposed to&lt;br/&gt;&amp;gt;&amp;gt; significantly more trimmed balance if the feerate increases when we have&lt;br/&gt;&amp;gt;&amp;gt; several HTLCs pending which are near the dust limit.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; To achieve this goal, we introduce a new `dust_buffer_feerate` defined as&lt;br/&gt;&amp;gt;&amp;gt; the maximum of either 2530 sats per kWU or 125% of the current&lt;br/&gt;&amp;gt;&amp;gt; `feerate_per_kw` (implementation-defined values).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Then, upon an incoming HTLC, if the HTLC&amp;#39;s `amount_msat` is inferior to&lt;br/&gt;&amp;gt;&amp;gt; the counterparty&amp;#39;s `dust_limit_satoshis` plus the HTLC-timeout fee at the&lt;br/&gt;&amp;gt;&amp;gt; `dust_buffer_feerate`. If the `amount_msat` plus the&lt;br/&gt;&amp;gt;&amp;gt; `dust_balance_on_counterparty_tx` is superior to `max_dust_htlc_exposure`,&lt;br/&gt;&amp;gt;&amp;gt; the HTLC should be failed once it&amp;#39;s committed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Upon an outgoing HTLC, if the HTLC&amp;#39;s `amount_msat` is inferior to the&lt;br/&gt;&amp;gt;&amp;gt; counterparty&amp;#39;s `dust_limit_satoshis`  plus the HTLC-success fee at the&lt;br/&gt;&amp;gt;&amp;gt; `dust_buffer_feerate`. If the `amount_msat` plus the&lt;br/&gt;&amp;gt;&amp;gt; `dust_balance_on_counterparty_tx` is superior to `max_dust_htlc_exposure`,&lt;br/&gt;&amp;gt;&amp;gt; the HTLC should not be sent and fail without forwarding.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The check symmetry must also be applied on holder commitment&lt;br/&gt;&amp;gt;&amp;gt; transactions. See PR #919 for more details.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A last mitigation is ensuring that at `update_fee` reception, the pending&lt;br/&gt;&amp;gt;&amp;gt; `dust_balance` at the new proposed feerate isn&amp;#39;t superior to&lt;br/&gt;&amp;gt;&amp;gt; `max_dust_htlc_exposure_msat`.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Background&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The dust limit is a base layer policy stopping the relay of a transaction&lt;br/&gt;&amp;gt;&amp;gt; if one of its outputs is under a given threshold. The goal of this policy&lt;br/&gt;&amp;gt;&amp;gt; is to prevent the pollution of the UTXO set with low-value outputs and as&lt;br/&gt;&amp;gt;&amp;gt; such increase the amount of work done by full-nodes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Lightning commitment transactions should be able to propagate at any&lt;br/&gt;&amp;gt;&amp;gt; point during the channel lifetime to unilaterally enforce on-chain a&lt;br/&gt;&amp;gt;&amp;gt; balance. A Lightning commitment transaction with one of its outputs below&lt;br/&gt;&amp;gt;&amp;gt; the dust limit would fail to relay and thus jeopardizes funds safety.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; To prevent this, BOLT2 requires counterparties to announce a&lt;br/&gt;&amp;gt;&amp;gt; `dust_limit_satoshis` during channel opening (at&lt;br/&gt;&amp;gt;&amp;gt; `open_channel`/`accept_channel` exchange). This `dust_limit_satoshis` must&lt;br/&gt;&amp;gt;&amp;gt; be under the same party&amp;#39;s `channel_reserve_satoshis`. This value is static&lt;br/&gt;&amp;gt;&amp;gt; for the channel lifetime.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; During commitment signatures exchange, each counterparty&amp;#39;s limit is&lt;br/&gt;&amp;gt;&amp;gt; applied on each counterparty&amp;#39;s commitment (e.g A&amp;#39;s `dust_limit_satoshis` is&lt;br/&gt;&amp;gt;&amp;gt; applied on A&amp;#39;s commitment, though both A and B have to generate and sign&lt;br/&gt;&amp;gt;&amp;gt; the transaction). An output below this limit is trimmed to fees and won&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; materialize on the commitment.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The specification didn&amp;#39;t require that the `open_channel`/`accept_channel`&lt;br/&gt;&amp;gt;&amp;gt; receiver verify that the announced `dust_limit_satoshis` isn&amp;#39;t too large.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The specification didn&amp;#39;t require that the sum of the dust HTLC committed&lt;br/&gt;&amp;gt;&amp;gt; as fees was verified against an upper bound.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Discovery&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Vulnerabilities around our dust HTLC processing have been known for years&lt;br/&gt;&amp;gt;&amp;gt; by some LN developers/researchers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; During Q1 2019, private discussions on the Rust-Lightning-side (LDK&lt;br/&gt;&amp;gt;&amp;gt; before marketing rebranding) about potential safety risks around dust HTLC&lt;br/&gt;&amp;gt;&amp;gt; processing.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In November 2019, Rusty Russell (c-lightning) opened an issue against the&lt;br/&gt;&amp;gt;&amp;gt; specification mentioning the lack of check of counterparty&amp;#39;s dust limit&lt;br/&gt;&amp;gt;&amp;gt; (#696).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In May 2020, I published a high-level attack scenario &amp;#34;Miners Dust&lt;br/&gt;&amp;gt;&amp;gt; Inflation attacks on Lightning Network&amp;#34;, leveraging this lack.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In February 2021, I did a test of the first vulnerability against LND&lt;br/&gt;&amp;gt;&amp;gt; software and successfully burnt the majority of the targeted node balance&lt;br/&gt;&amp;gt;&amp;gt; in fees. As it sounds to me like a check missing in the specification, I&lt;br/&gt;&amp;gt;&amp;gt; notified CL/LND/Eclair/LDK maintainers. Mitigations started to be developed&lt;br/&gt;&amp;gt;&amp;gt; on the LDK-side.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In July 2021, in the context of `option_dusty_htlcs_uncounted`&lt;br/&gt;&amp;gt;&amp;gt; discussions, Eugene Spiegel (LND) reported on how to exploit the&lt;br/&gt;&amp;gt;&amp;gt; trimmed-to-dust mechanism at `update_fee` reception. Discussions followed&lt;br/&gt;&amp;gt;&amp;gt; on the best way to mitigate this new vector.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; During August 2021, mitigations were developed and released on the&lt;br/&gt;&amp;gt;&amp;gt; LDK-side. vulnerabilities were disclosed to other Lightning projects (Muun&lt;br/&gt;&amp;gt;&amp;gt; wallet, Electrum). From the LDK-side, a public disclosure date was proposed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Still during August 2021, the Bitcoin Core dust limit was actively&lt;br/&gt;&amp;gt;&amp;gt; discussed on the mailing list. Changes of this dust limit would have&lt;br/&gt;&amp;gt;&amp;gt; affected the ongoing development of the mitigations.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; While this report highlights the lack of well-defined communication&lt;br/&gt;&amp;gt;&amp;gt; process across Lightning teams,  developers from 3 different&lt;br/&gt;&amp;gt;&amp;gt; implementations have actively participated in the vulnerabilities&lt;br/&gt;&amp;gt;&amp;gt; diagnostic and mitigations development of those long-standing specification&lt;br/&gt;&amp;gt;&amp;gt; issues affecting the whole Lightning ecosystem.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; All mistakes and opinions are my own and please verify any information&lt;br/&gt;&amp;gt;&amp;gt; reported.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Timeline&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * 2021-04-19: Working exploit of the vulnerability against LND,&lt;br/&gt;&amp;gt;&amp;gt; CL/LND/Eclair/LDK maintainers notified&lt;br/&gt;&amp;gt;&amp;gt; * 2021-07-21: Finding by Eugene Siegel on how to exploit the&lt;br/&gt;&amp;gt;&amp;gt; trimmed-to-dust mechanism at `update_fee` reception&lt;br/&gt;&amp;gt;&amp;gt; * 2021-08-11: BOLT PR #894 opened by Bastien Teinturier, covering the&lt;br/&gt;&amp;gt;&amp;gt; lack of verification of counterparty per-HTLC `dust_limit_satoshis`&lt;br/&gt;&amp;gt;&amp;gt; * 2021-08-16: Mitigations developed in LDK, communication of a public&lt;br/&gt;&amp;gt;&amp;gt; disclosure date&lt;br/&gt;&amp;gt;&amp;gt; * 2021-08-26: Notification to Muun wallet, non-affected&lt;br/&gt;&amp;gt;&amp;gt; * 2021-08-27: Notification to Electrum wallet&lt;br/&gt;&amp;gt;&amp;gt; * 2021-10-04: Full Disclosure of CVEs&lt;br/&gt;&amp;gt;&amp;gt; * 2021-10-04: Submit BOLT PR #919 covering the remaining vulnerabilities&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/20211004/7a56a20b/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211004/7a56a20b/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:00&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2x4a443edfnl9vthns67k9slvgj3g5sle60s50mn4vscu9rf97eczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zaee4t4</id>
    
      <title type="html">📅 Original date posted:2021-10-04 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2x4a443edfnl9vthns67k9slvgj3g5sle60s50mn4vscu9rf97eczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zaee4t4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsztm8dpl6z3fv6h2qndct7kp7arzdh0rrje6gfeta2mx907p36z0gzu359g&#39;&gt;nevent1q…359g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-04&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; In other words, simply not secured.&lt;br/&gt;&lt;br/&gt;How do you define Bitcoin base-layer security ? How strong are the&lt;br/&gt;assumptions we&amp;#39;re relying on the base-layer ?&lt;br/&gt;Not easy answers :/&lt;br/&gt;&lt;br/&gt;&amp;gt; L2s shouldn&amp;#39;t build on flawed assumptions.&lt;br/&gt;&lt;br/&gt;Waiting for your proposal to scale Bitcoin payments relying on pure&lt;br/&gt;consensus assumptions :)&lt;br/&gt;&lt;br/&gt;&amp;gt; No thanks. Not sure that would even help (since policies can always be&lt;br/&gt;set to&lt;br/&gt;a higher dust limit than any consensus rule)&lt;br/&gt;&lt;br/&gt;Sure. Policies can always be more restrictive. One of them could be to not&lt;br/&gt;relay transactions at all. If widely-deployed, such policy would make the&lt;br/&gt;network quite unusable....&lt;br/&gt;&lt;br/&gt;More seriously, I think when we consider this policy discussion, we should&lt;br/&gt;have more in mind the consequences of adopting a given policy or another&lt;br/&gt;one.&lt;br/&gt;As long as they&amp;#39;re economically-compatible, they should be followed by an&lt;br/&gt;economically rational node operator.&lt;br/&gt;I think we&amp;#39;re already making that kind of social or economic assumption on&lt;br/&gt;the user behavior w.r.t to full-node design. Blocks and transactions are&lt;br/&gt;relayed for &amp;#34;free&amp;#34; today, not satoshis are received in exchange.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le lun. 4 oct. 2021 à 12:28, Luke Dashjr &amp;lt;luke at dashjr.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; On Monday 04 October 2021 16:14:20 Antoine Riard wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; The &amp;#34;dust limit&amp;#34; is arbitrarily decided by each node, and cannot be&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; relied upon for security at all. Expecting it to be a given default&lt;br/&gt;&amp;gt; value&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; is in itself a security vulnerability&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Reality is that an increasing number of funds are secured by assumptions&lt;br/&gt;&amp;gt; &amp;gt; around mempool behavior.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In other words, simply not secured.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; And sadly that&amp;#39;s going to increase with Lightning growth and deployment&lt;br/&gt;&amp;gt; of&lt;br/&gt;&amp;gt; &amp;gt; other L2s.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; L2s shouldn&amp;#39;t build on flawed assumptions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Maybe we could dry-up some policy rules in consensus like the dust limit&lt;br/&gt;&amp;gt; &amp;gt; one :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No thanks. Not sure that would even help (since policies can always be set&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; a higher dust limit than any consensus rule)&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/20211004/30471001/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211004/30471001/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:03:59&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2n9wjmurek3cun4mv07duja8sz088up5efdp2kruwlhqrere6q6gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zd54c7u</id>
    
      <title type="html">📅 Original date posted:2021-10-04 📝 Original message: Hi, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2n9wjmurek3cun4mv07duja8sz088up5efdp2kruwlhqrere6q6gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zd54c7u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp6xqxxgszhfn80xdglrjas8ju96n5gxkpelzcu2p8dfzfuse2zlq887hv7&#39;&gt;nevent1q…7hv7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-04&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;I&amp;#39;m writing a report to disclose specification-level vulnerabilities&lt;br/&gt;affecting the Lightning implementations.&lt;br/&gt;&lt;br/&gt;The vulnerabilities are expected to be patched in:&lt;br/&gt;* Eclair: v0.6.2&#43; (CVE-2021-41591)&lt;br/&gt;* LND: v0.13.3&#43; (CVE-2021-41592)&lt;br/&gt;* LDK: v0.0.102 (not released as production software yet)&lt;br/&gt;&lt;br/&gt;The vulnerabilities are also affecting c-lightning (CVE-2021-41593).&lt;br/&gt;&lt;br/&gt;Those vulnerabilities can be exploited in a wide range of attacks, going&lt;br/&gt;from fee blackmailing of node operators, burning liquidity of your&lt;br/&gt;competing LSPs or even stealing your counterparty channel balance if you&lt;br/&gt;avail mining capabilities. Exercise of the vulnerability revealed that a&lt;br/&gt;majority of the balance funds can be at loss.&lt;br/&gt;&lt;br/&gt;Credit to Eugene Siegel (Crypt-iQ) for reporting the trimmed-to-dust&lt;br/&gt;exploitation and multiple insights about attacks.&lt;br/&gt;&lt;br/&gt;Thanks to Bastien Teinturier and Matt Corallo for numerous contributions&lt;br/&gt;about mitigations development.&lt;br/&gt;&lt;br/&gt;# Problem&lt;br/&gt;&lt;br/&gt;The current BOLT specification only requires Alice&amp;#39;s `dust_limit_satoshis`&lt;br/&gt;(applied on Alice&amp;#39;s commitment) to be under Alice&amp;#39;s&lt;br/&gt;`channel_reserve_satoshis` (applied on Bob). As those 2 parameters are&lt;br/&gt;selectable by Alice, she can inflate the dust limit until reaching the&lt;br/&gt;implementation-defined max value (e.g LND: 20% of chan capacity, LDK: 100%&lt;br/&gt;of chan capacity).&lt;br/&gt;&lt;br/&gt;Any in-flight incoming HTLC under Alice&amp;#39;s dust limit will be converted as&lt;br/&gt;miner fees on Alice&amp;#39;s commitment. This HTLC is deducted from Bob&amp;#39;s balance&lt;br/&gt;and as such they&amp;#39;re still owned by Bob, until resolution (i.e a RAA&lt;br/&gt;removing the HTLC from Alice&amp;#39;s commitment). This limitation only applies&lt;br/&gt;per-HTLC. No implementation enforces a limit on the sum of in-flight HTLCs&lt;br/&gt;burned as fees. Therefore, Alice is free to inflict a substantial loss to&lt;br/&gt;Bob funds by publishing her commitment on-chain.&lt;br/&gt;&lt;br/&gt;In-flight outgoing HTLC are also committed as fees on Bob&amp;#39;s commitment if&lt;br/&gt;they&amp;#39;re under Bob&amp;#39;s threshold. Alice can also exploit from this angle by&lt;br/&gt;circular routing HTLCs until reaching Bob&amp;#39;s&lt;br/&gt;`max_htlc_value_in_flight_msat`. Alice withholds HTLCs resolution until Bob&lt;br/&gt;goes on-chain to timeout an offered HTLC or claim an accepted HTLC.&lt;br/&gt;&lt;br/&gt;Dust HTLC processing can be also exploited at `update_fee` reception.&lt;br/&gt;&lt;br/&gt;As the BOLT3&amp;#39;s fees computation encompasses the negotiated feerate from&lt;br/&gt;`update_fee` for the 2nd-stage HTLC fees to decide if the HTLC must be&lt;br/&gt;trimmed, the amount of balance at risk is a function of current mempool&lt;br/&gt;feerates.&lt;br/&gt;&lt;br/&gt;The maximum of funds at risk on a counterparty commitment is:&lt;br/&gt;&lt;br/&gt;counterparty&amp;#39;s `max_accepted_htlcs` * (`htlc_success_tx_kw` * opener&amp;#39;s&lt;br/&gt;`feerate_per_kw` &#43; counterparty&amp;#39;s `dust_limit_satoshis`) &#43; holder&amp;#39;s&lt;br/&gt;`max_accepted_htlcs` * (`htlc_timeout_tx_kw` * opener&amp;#39;s `feerate_per_kw` &#43;&lt;br/&gt;counterparty&amp;#39;s `dust_limit_satoshis`)&lt;br/&gt;&lt;br/&gt;If the opener is also the attacker, the negotiated feerate can be&lt;br/&gt;manipulated beyond the &amp;#34;honest&amp;#34; mempool feerates only upper bounded&lt;br/&gt;implementation-defined value (before fixes, LDK: 2 * high-feerate of our&lt;br/&gt;fee-estimator). If the opener is the victim, the negotiated feerate is&lt;br/&gt;still a safety concern in case of spontaneous mempool spikes.&lt;br/&gt;&lt;br/&gt;Note, `anchors_zero_htlc_fee` channels are not affected by the feerate&lt;br/&gt;inflation as the trimmed-to-dust fee computation mechanism for 2nd-stage&lt;br/&gt;HTLC is removed. They&amp;#39;re still at risk of the sum of the HTLCs under the&lt;br/&gt;dust limit being maliciously burned.&lt;br/&gt;&lt;br/&gt;# Solution&lt;br/&gt;&lt;br/&gt;A first mitigation is to verify the counterparty&amp;#39;s announced&lt;br/&gt;`dust_limit_satoshis` at channel opening (`open_channel`/`accept_channel`)&lt;br/&gt;reception and reject if it&amp;#39;s estimated too large (see #894)&lt;br/&gt;&lt;br/&gt;For LDK, we choose the value of 660 satoshis as it&amp;#39;s beyond the highest&lt;br/&gt;dust threshold enforced by Bitcoin Core (p2pkh: 546) with a margin of&lt;br/&gt;safety. Propagation of Lightning time-sensitive transactions shouldn&amp;#39;t be&lt;br/&gt;affected.&lt;br/&gt;&lt;br/&gt;A second mitigation is to define a new configurable limit&lt;br/&gt;`max_dust_htlc_exposure` and apply this one at incoming and outgoing of&lt;br/&gt;HTLC.&lt;br/&gt;&lt;br/&gt;For LDK, we choose the value of 5 000 000 milli-satoshis as we gauged this&lt;br/&gt;value as a substantial loss for our class of users. Setting this too low&lt;br/&gt;may prevent the sending or receipt of low-value HTLCs on high-traffic&lt;br/&gt;nodes. A node operator should fine-tune this value in function of what&lt;br/&gt;qualifies as an acceptable loss.&lt;br/&gt;&lt;br/&gt;We would like to ensure that the node isn&amp;#39;t suddenly exposed to&lt;br/&gt;significantly more trimmed balance if the feerate increases when we have&lt;br/&gt;several HTLCs pending which are near the dust limit.&lt;br/&gt;&lt;br/&gt;To achieve this goal, we introduce a new `dust_buffer_feerate` defined as&lt;br/&gt;the maximum of either 2530 sats per kWU or 125% of the current&lt;br/&gt;`feerate_per_kw` (implementation-defined values).&lt;br/&gt;&lt;br/&gt;Then, upon an incoming HTLC, if the HTLC&amp;#39;s `amount_msat` is inferior to the&lt;br/&gt;counterparty&amp;#39;s `dust_limit_satoshis` plus the HTLC-timeout fee at the&lt;br/&gt;`dust_buffer_feerate`. If the `amount_msat` plus the&lt;br/&gt;`dust_balance_on_counterparty_tx` is superior to `max_dust_htlc_exposure`,&lt;br/&gt;the HTLC should be failed once it&amp;#39;s committed.&lt;br/&gt;&lt;br/&gt;Upon an outgoing HTLC, if the HTLC&amp;#39;s `amount_msat` is inferior to the&lt;br/&gt;counterparty&amp;#39;s `dust_limit_satoshis`  plus the HTLC-success fee at the&lt;br/&gt;`dust_buffer_feerate`. If the `amount_msat` plus the&lt;br/&gt;`dust_balance_on_counterparty_tx` is superior to `max_dust_htlc_exposure`,&lt;br/&gt;the HTLC should not be sent and fail without forwarding.&lt;br/&gt;&lt;br/&gt;The check symmetry must also be applied on holder commitment transactions.&lt;br/&gt;See PR #919 for more details.&lt;br/&gt;&lt;br/&gt;A last mitigation is ensuring that at `update_fee` reception, the pending&lt;br/&gt;`dust_balance` at the new proposed feerate isn&amp;#39;t superior to&lt;br/&gt;`max_dust_htlc_exposure_msat`.&lt;br/&gt;&lt;br/&gt;# Background&lt;br/&gt;&lt;br/&gt;The dust limit is a base layer policy stopping the relay of a transaction&lt;br/&gt;if one of its outputs is under a given threshold. The goal of this policy&lt;br/&gt;is to prevent the pollution of the UTXO set with low-value outputs and as&lt;br/&gt;such increase the amount of work done by full-nodes.&lt;br/&gt;&lt;br/&gt;Lightning commitment transactions should be able to propagate at any point&lt;br/&gt;during the channel lifetime to unilaterally enforce on-chain a balance. A&lt;br/&gt;Lightning commitment transaction with one of its outputs below the dust&lt;br/&gt;limit would fail to relay and thus jeopardizes funds safety.&lt;br/&gt;&lt;br/&gt;To prevent this, BOLT2 requires counterparties to announce a&lt;br/&gt;`dust_limit_satoshis` during channel opening (at&lt;br/&gt;`open_channel`/`accept_channel` exchange). This `dust_limit_satoshis` must&lt;br/&gt;be under the same party&amp;#39;s `channel_reserve_satoshis`. This value is static&lt;br/&gt;for the channel lifetime.&lt;br/&gt;&lt;br/&gt;During commitment signatures exchange, each counterparty&amp;#39;s limit is applied&lt;br/&gt;on each counterparty&amp;#39;s commitment (e.g A&amp;#39;s `dust_limit_satoshis` is applied&lt;br/&gt;on A&amp;#39;s commitment, though both A and B have to generate and sign the&lt;br/&gt;transaction). An output below this limit is trimmed to fees and won&amp;#39;t&lt;br/&gt;materialize on the commitment.&lt;br/&gt;&lt;br/&gt;The specification didn&amp;#39;t require that the `open_channel`/`accept_channel`&lt;br/&gt;receiver verify that the announced `dust_limit_satoshis` isn&amp;#39;t too large.&lt;br/&gt;&lt;br/&gt;The specification didn&amp;#39;t require that the sum of the dust HTLC committed as&lt;br/&gt;fees was verified against an upper bound.&lt;br/&gt;&lt;br/&gt;# Discovery&lt;br/&gt;&lt;br/&gt;Vulnerabilities around our dust HTLC processing have been known for years&lt;br/&gt;by some LN developers/researchers.&lt;br/&gt;&lt;br/&gt;During Q1 2019, private discussions on the Rust-Lightning-side (LDK before&lt;br/&gt;marketing rebranding) about potential safety risks around dust HTLC&lt;br/&gt;processing.&lt;br/&gt;&lt;br/&gt;In November 2019, Rusty Russell (c-lightning) opened an issue against the&lt;br/&gt;specification mentioning the lack of check of counterparty&amp;#39;s dust limit&lt;br/&gt;(#696).&lt;br/&gt;&lt;br/&gt;In May 2020, I published a high-level attack scenario &amp;#34;Miners Dust&lt;br/&gt;Inflation attacks on Lightning Network&amp;#34;, leveraging this lack.&lt;br/&gt;&lt;br/&gt;In February 2021, I did a test of the first vulnerability against LND&lt;br/&gt;software and successfully burnt the majority of the targeted node balance&lt;br/&gt;in fees. As it sounds to me like a check missing in the specification, I&lt;br/&gt;notified CL/LND/Eclair/LDK maintainers. Mitigations started to be developed&lt;br/&gt;on the LDK-side.&lt;br/&gt;&lt;br/&gt;In July 2021, in the context of `option_dusty_htlcs_uncounted` discussions,&lt;br/&gt;Eugene Spiegel (LND) reported on how to exploit the trimmed-to-dust&lt;br/&gt;mechanism at `update_fee` reception. Discussions followed on the best way&lt;br/&gt;to mitigate this new vector.&lt;br/&gt;&lt;br/&gt;During August 2021, mitigations were developed and released on the&lt;br/&gt;LDK-side. vulnerabilities were disclosed to other Lightning projects (Muun&lt;br/&gt;wallet, Electrum). From the LDK-side, a public disclosure date was proposed.&lt;br/&gt;&lt;br/&gt;Still during August 2021, the Bitcoin Core dust limit was actively&lt;br/&gt;discussed on the mailing list. Changes of this dust limit would have&lt;br/&gt;affected the ongoing development of the mitigations.&lt;br/&gt;&lt;br/&gt;While this report highlights the lack of well-defined communication process&lt;br/&gt;across Lightning teams,  developers from 3 different implementations have&lt;br/&gt;actively participated in the vulnerabilities diagnostic and mitigations&lt;br/&gt;development of those long-standing specification issues affecting the whole&lt;br/&gt;Lightning ecosystem.&lt;br/&gt;&lt;br/&gt;All mistakes and opinions are my own and please verify any information&lt;br/&gt;reported.&lt;br/&gt;&lt;br/&gt;# Timeline&lt;br/&gt;&lt;br/&gt;* 2021-04-19: Working exploit of the vulnerability against LND,&lt;br/&gt;CL/LND/Eclair/LDK maintainers notified&lt;br/&gt;* 2021-07-21: Finding by Eugene Siegel on how to exploit the&lt;br/&gt;trimmed-to-dust mechanism at `update_fee` reception&lt;br/&gt;* 2021-08-11: BOLT PR #894 opened by Bastien Teinturier, covering the lack&lt;br/&gt;of verification of counterparty per-HTLC `dust_limit_satoshis`&lt;br/&gt;* 2021-08-16: Mitigations developed in LDK, communication of a public&lt;br/&gt;disclosure date&lt;br/&gt;* 2021-08-26: Notification to Muun wallet, non-affected&lt;br/&gt;* 2021-08-27: Notification to Electrum wallet&lt;br/&gt;* 2021-10-04: Full Disclosure of CVEs&lt;br/&gt;* 2021-10-04: Submit BOLT PR #919 covering the remaining vulnerabilities&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/20211004/9af032f2/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211004/9af032f2/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:03:57&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfntrqgjgsalmc0y3jt0msmmxmll4y0qsaczdj95uppmarep3ey9qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z38ts6k</id>
    
      <title type="html">📅 Original date posted:2021-04-23 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfntrqgjgsalmc0y3jt0msmmxmll4y0qsaczdj95uppmarep3ey9qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z38ts6k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst5t7xtx63j2dht58gep98jlrg57dcak592napptufsnlmg2z2mzcakp5jg&#39;&gt;nevent1q…p5jg&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-23&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Jeremy,&lt;br/&gt;&lt;br/&gt;Yes dates are floating for now. After Bitcoin 2021, sounds a good idea.&lt;br/&gt;&lt;br/&gt;Awesome, I&amp;#39;ll be really interested to review again an improved version of&lt;br/&gt;sponsorship. And I&amp;#39;ll try to sketch out the sighash_no-input fee-bumping&lt;br/&gt;idea which was floating around last year during pinnings discussions. Yet&lt;br/&gt;another set of trade-offs :)&lt;br/&gt;&lt;br/&gt;Le ven. 23 avr. 2021 à 11:25, Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;d be excited to join. Recommend bumping the date  to mid June, if that&amp;#39;s&lt;br/&gt;&amp;gt; ok, as many Americans will be at Bitcoin 2021.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I was thinking about reviving the sponsors proposal with a 100 block lock&lt;br/&gt;&amp;gt; on spending a sponsoring tx which would hopefully make less controversial,&lt;br/&gt;&amp;gt; this would be a great place to discuss those tradeoffs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Fri, Apr 23, 2021, 8:17 AM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; During the lastest years, tx-relay and mempool acceptances rules of the&lt;br/&gt;&amp;gt;&amp;gt; base layer have been sources of major security and operational concerns for&lt;br/&gt;&amp;gt;&amp;gt; Lightning and other Bitcoin second-layers [0]. I think those areas require&lt;br/&gt;&amp;gt;&amp;gt; significant improvements to ease design and deployment of higher Bitcoin&lt;br/&gt;&amp;gt;&amp;gt; layers and I believe this opinion is shared among the L2 dev community. In&lt;br/&gt;&amp;gt;&amp;gt; order to make advancements, it has been discussed a few times in the last&lt;br/&gt;&amp;gt;&amp;gt; months to organize in-person workshops to discuss those issues with the&lt;br/&gt;&amp;gt;&amp;gt; presence of both L1/L2 devs to make exchange fruitful.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Unfortunately, I don&amp;#39;t think we&amp;#39;ll be able to organize such in-person&lt;br/&gt;&amp;gt;&amp;gt; workshops this year (because you know travel is hard those days...) As a&lt;br/&gt;&amp;gt;&amp;gt; substitution, I&amp;#39;m proposing a series of one or more irc meetings. That&lt;br/&gt;&amp;gt;&amp;gt; said, this substitution has the happy benefit to gather far more folks&lt;br/&gt;&amp;gt;&amp;gt; interested by those issues that you can fit in a room.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Scope&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I would like to propose the following 4 items as topics of discussion.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1) Package relay design or another generic L2 fee-bumping primitive like&lt;br/&gt;&amp;gt;&amp;gt; sponsorship [0]. IMHO, this primitive should at least solve mempools spikes&lt;br/&gt;&amp;gt;&amp;gt; making obsolete propagation of transactions with pre-signed feerate, solve&lt;br/&gt;&amp;gt;&amp;gt; pinning attacks compromising Lightning/multi-party contract protocol&lt;br/&gt;&amp;gt;&amp;gt; safety, offer an usable and stable API to L2 software stack, stay&lt;br/&gt;&amp;gt;&amp;gt; compatible with miner and full-node operators incentives and obviously&lt;br/&gt;&amp;gt;&amp;gt; minimize CPU/memory DoS vectors.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2) Deprecation of opt-in RBF toward full-rbf. Opt-in RBF makes it trivial&lt;br/&gt;&amp;gt;&amp;gt; for an attacker to partition network mempools in divergent subsets and from&lt;br/&gt;&amp;gt;&amp;gt; then launch advanced security or privacy attacks against a Lightning node.&lt;br/&gt;&amp;gt;&amp;gt; Note, it might also be a concern for bandwidth bleeding attacks against L1&lt;br/&gt;&amp;gt;&amp;gt; nodes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 3) Guidelines about coordinated cross-layers security disclosures.&lt;br/&gt;&amp;gt;&amp;gt; Mitigating a security issue around tx-relay or the mempool in Core might&lt;br/&gt;&amp;gt;&amp;gt; have harmful implications for downstream projects. Ideally, L2 projects&lt;br/&gt;&amp;gt;&amp;gt; maintainers should be ready to upgrade their protocols in emergency in&lt;br/&gt;&amp;gt;&amp;gt; coordination with base layers developers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 4) Guidelines about L2 protocols onchain security design. Currently&lt;br/&gt;&amp;gt;&amp;gt; deployed like Lightning are making a bunch of assumptions on tx-relay and&lt;br/&gt;&amp;gt;&amp;gt; mempool acceptances rules. Those rules are non-normative, non-reliable and&lt;br/&gt;&amp;gt;&amp;gt; lack documentation. Further, they&amp;#39;re devoid of tooling to enforce them at&lt;br/&gt;&amp;gt;&amp;gt; runtime [2]. IMHO, it could be preferable to identify a subset of them on&lt;br/&gt;&amp;gt;&amp;gt; which second-layers protocols can do assumptions without encroaching too&lt;br/&gt;&amp;gt;&amp;gt; much on nodes&amp;#39;s policy realm or making the base layer development in those&lt;br/&gt;&amp;gt;&amp;gt; areas too cumbersome.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m aware that some folks are interested in other topics such as&lt;br/&gt;&amp;gt;&amp;gt; extension of Core&amp;#39;s mempools package limits or better pricing of RBF&lt;br/&gt;&amp;gt;&amp;gt; replacement. So l propose a 2-week concertation period to submit other&lt;br/&gt;&amp;gt;&amp;gt; topics related to tx-relay or mempools improvements towards L2s before to&lt;br/&gt;&amp;gt;&amp;gt; propose a finalized scope and agenda.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Goals&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1) Reaching technical consensus.&lt;br/&gt;&amp;gt;&amp;gt; 2) Reaching technical consensus, before seeking community consensus as it&lt;br/&gt;&amp;gt;&amp;gt; likely has ecosystem-wide implications.&lt;br/&gt;&amp;gt;&amp;gt; 3) Establishing a security incident response policy which can be applied&lt;br/&gt;&amp;gt;&amp;gt; by dev teams in the future.&lt;br/&gt;&amp;gt;&amp;gt; 4) Establishing a philosophy design and associated documentations (BIPs,&lt;br/&gt;&amp;gt;&amp;gt; best practices, ...)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Timeline&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2021-04-23: Start of concertation period&lt;br/&gt;&amp;gt;&amp;gt; 2021-05-07: End of concertation period&lt;br/&gt;&amp;gt;&amp;gt; 2021-05-10: Proposition of workshop agenda and schedule&lt;br/&gt;&amp;gt;&amp;gt; late 2021-05/2021-06: IRC meetings&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As the problem space is savagely wide, I&amp;#39;ve started a collection of&lt;br/&gt;&amp;gt;&amp;gt; documents to assist this workshop : &lt;a href=&#34;https://github.com/ariard/L2-zoology&#34;&gt;https://github.com/ariard/L2-zoology&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; Still wip, but I&amp;#39;ll have them in a good shape at agenda publication, with&lt;br/&gt;&amp;gt;&amp;gt; reading suggestions and open questions to structure discussions.&lt;br/&gt;&amp;gt;&amp;gt; Also working on transaction pinning and mempool partitions attacks&lt;br/&gt;&amp;gt;&amp;gt; simulations.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If L2s security/p2p/mempool is your jam, feel free to get involved :)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [0] For e.g see optech section on transaction pinning attacks :&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://bitcoinops.org/en/topics/transaction-pinning/&#34;&gt;https://bitcoinops.org/en/topics/transaction-pinning/&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [1]&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; [2] Lack of reference tooling make it easier to have bug slip in like&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002858.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002858.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&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/20210423/b87b1ec8/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210423/b87b1ec8/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:02:21&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqk0q957lp42tq495n4f3nkhsgnyt22zmvnd0dntra96v0542njjszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2c24jf</id>
    
      <title type="html">📅 Original date posted:2021-04-23 📝 Original message: Hi, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqk0q957lp42tq495n4f3nkhsgnyt22zmvnd0dntra96v0542njjszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2c24jf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxma3hzukg225q622cpeq5fw22w5dnxnaj7egz0y8rtswa4wf4nac7cj3xk&#39;&gt;nevent1q…j3xk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-23&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;During the lastest years, tx-relay and mempool acceptances rules of the&lt;br/&gt;base layer have been sources of major security and operational concerns for&lt;br/&gt;Lightning and other Bitcoin second-layers [0]. I think those areas require&lt;br/&gt;significant improvements to ease design and deployment of higher Bitcoin&lt;br/&gt;layers and I believe this opinion is shared among the L2 dev community. In&lt;br/&gt;order to make advancements, it has been discussed a few times in the last&lt;br/&gt;months to organize in-person workshops to discuss those issues with the&lt;br/&gt;presence of both L1/L2 devs to make exchange fruitful.&lt;br/&gt;&lt;br/&gt;Unfortunately, I don&amp;#39;t think we&amp;#39;ll be able to organize such in-person&lt;br/&gt;workshops this year (because you know travel is hard those days...) As a&lt;br/&gt;substitution, I&amp;#39;m proposing a series of one or more irc meetings. That&lt;br/&gt;said, this substitution has the happy benefit to gather far more folks&lt;br/&gt;interested by those issues that you can fit in a room.&lt;br/&gt;&lt;br/&gt;# Scope&lt;br/&gt;&lt;br/&gt;I would like to propose the following 4 items as topics of discussion.&lt;br/&gt;&lt;br/&gt;1) Package relay design or another generic L2 fee-bumping primitive like&lt;br/&gt;sponsorship [0]. IMHO, this primitive should at least solve mempools spikes&lt;br/&gt;making obsolete propagation of transactions with pre-signed feerate, solve&lt;br/&gt;pinning attacks compromising Lightning/multi-party contract protocol&lt;br/&gt;safety, offer an usable and stable API to L2 software stack, stay&lt;br/&gt;compatible with miner and full-node operators incentives and obviously&lt;br/&gt;minimize CPU/memory DoS vectors.&lt;br/&gt;&lt;br/&gt;2) Deprecation of opt-in RBF toward full-rbf. Opt-in RBF makes it trivial&lt;br/&gt;for an attacker to partition network mempools in divergent subsets and from&lt;br/&gt;then launch advanced security or privacy attacks against a Lightning node.&lt;br/&gt;Note, it might also be a concern for bandwidth bleeding attacks against L1&lt;br/&gt;nodes.&lt;br/&gt;&lt;br/&gt;3) Guidelines about coordinated cross-layers security disclosures.&lt;br/&gt;Mitigating a security issue around tx-relay or the mempool in Core might&lt;br/&gt;have harmful implications for downstream projects. Ideally, L2 projects&lt;br/&gt;maintainers should be ready to upgrade their protocols in emergency in&lt;br/&gt;coordination with base layers developers.&lt;br/&gt;&lt;br/&gt;4) Guidelines about L2 protocols onchain security design. Currently&lt;br/&gt;deployed like Lightning are making a bunch of assumptions on tx-relay and&lt;br/&gt;mempool acceptances rules. Those rules are non-normative, non-reliable and&lt;br/&gt;lack documentation. Further, they&amp;#39;re devoid of tooling to enforce them at&lt;br/&gt;runtime [2]. IMHO, it could be preferable to identify a subset of them on&lt;br/&gt;which second-layers protocols can do assumptions without encroaching too&lt;br/&gt;much on nodes&amp;#39;s policy realm or making the base layer development in those&lt;br/&gt;areas too cumbersome.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m aware that some folks are interested in other topics such as extension&lt;br/&gt;of Core&amp;#39;s mempools package limits or better pricing of RBF replacement. So&lt;br/&gt;l propose a 2-week concertation period to submit other topics related to&lt;br/&gt;tx-relay or mempools improvements towards L2s before to propose a finalized&lt;br/&gt;scope and agenda.&lt;br/&gt;&lt;br/&gt;# Goals&lt;br/&gt;&lt;br/&gt;1) Reaching technical consensus.&lt;br/&gt;2) Reaching technical consensus, before seeking community consensus as it&lt;br/&gt;likely has ecosystem-wide implications.&lt;br/&gt;3) Establishing a security incident response policy which can be applied by&lt;br/&gt;dev teams in the future.&lt;br/&gt;4) Establishing a philosophy design and associated documentations (BIPs,&lt;br/&gt;best practices, ...)&lt;br/&gt;&lt;br/&gt;# Timeline&lt;br/&gt;&lt;br/&gt;2021-04-23: Start of concertation period&lt;br/&gt;2021-05-07: End of concertation period&lt;br/&gt;2021-05-10: Proposition of workshop agenda and schedule&lt;br/&gt;late 2021-05/2021-06: IRC meetings&lt;br/&gt;&lt;br/&gt;As the problem space is savagely wide, I&amp;#39;ve started a collection of&lt;br/&gt;documents to assist this workshop : &lt;a href=&#34;https://github.com/ariard/L2-zoology&#34;&gt;https://github.com/ariard/L2-zoology&lt;/a&gt;&lt;br/&gt;Still wip, but I&amp;#39;ll have them in a good shape at agenda publication, with&lt;br/&gt;reading suggestions and open questions to structure discussions.&lt;br/&gt;Also working on transaction pinning and mempool partitions attacks&lt;br/&gt;simulations.&lt;br/&gt;&lt;br/&gt;If L2s security/p2p/mempool is your jam, feel free to get involved :)&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] For e.g see optech section on transaction pinning attacks :&lt;br/&gt;&lt;a href=&#34;https://bitcoinops.org/en/topics/transaction-pinning/&#34;&gt;https://bitcoinops.org/en/topics/transaction-pinning/&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-September/018168.html&lt;/a&gt;&lt;br/&gt;[2] Lack of reference tooling make it easier to have bug slip in like&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002858.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-October/002858.html&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/20210423/98e1f2cc/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210423/98e1f2cc/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:02:20&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv2qs7kdg2n5z4ees54e9eajr4n9evt3yyu2ggucuknuem4pf2qkgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zg3zg80</id>
    
      <title type="html">📅 Original date posted:2020-10-06 📝 Original message: Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv2qs7kdg2n5z4ees54e9eajr4n9evt3yyu2ggucuknuem4pf2qkgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zg3zg80" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs26j56yptr75wtjj5gvn23hcnm4czj043m08r9wu9glau6rzwvy7cunrdkc&#39;&gt;nevent1q…rdkc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-06&lt;br/&gt;📝 Original message:&lt;br/&gt;Hello Bastien,&lt;br/&gt;&lt;br/&gt;I&amp;#39;m all in for a model where channel transactions are pre-signed with a&lt;br/&gt;reasonable minimal relay fee and the adjustment is done by the closer. The&lt;br/&gt;channel initiator shouldn&amp;#39;t have to pay for channel-closing as it&amp;#39;s somehow&lt;br/&gt;a liquidity allocation decision (&amp;#34;My balance could be better allocated&lt;br/&gt;elsewhere than in this channel&amp;#34;).&lt;br/&gt;&lt;br/&gt;That said, a channel closing might be triggered due to a security&lt;br/&gt;mechanism, like a HTLC to timeout onchain. Thus a malicious counterparty&lt;br/&gt;can easily loop a HTLC forwarding on an honest peer. Then not cancel it&lt;br/&gt;on-time to force the honest counterparty to pay onchain fees to avoid a&lt;br/&gt;offered HTLC not being claimed back on time.&lt;br/&gt;&lt;br/&gt;AFAICT, this issue is not solved by anchor outputs. A way to decentivize&lt;br/&gt;this kind of behavior from a malicious counterparty is an upfront payment&lt;br/&gt;where the upholding HTLC fee * HTLC block-buffer-before-onchain is higher&lt;br/&gt;than the cost of going onchain. It should cost higher for the counterparty&lt;br/&gt;to withhold a HTLC than paying onchain-fees to close the channel.&lt;br/&gt;&lt;br/&gt;Or can you think about another mitigation for the issue raised above ?&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 5 oct. 2020 à 09:13, Bastien TEINTURIER via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems to me that the &amp;#34;funder pays all the commit tx fees&amp;#34; rule exists&lt;br/&gt;&amp;gt; solely for simplicity&lt;br/&gt;&amp;gt; (which was totally reasonable). I haven&amp;#39;t been able to find much&lt;br/&gt;&amp;gt; discussion about this decision&lt;br/&gt;&amp;gt; on the mailing list nor in the spec commits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At first glance, it&amp;#39;s true that at the beginning of the channel lifetime,&lt;br/&gt;&amp;gt; the funder should be&lt;br/&gt;&amp;gt; responsible for the fee (it&amp;#39;s his decision to open a channel after all).&lt;br/&gt;&amp;gt; But as time goes by and&lt;br/&gt;&amp;gt; both peers earn value from this channel, this rule becomes questionable.&lt;br/&gt;&amp;gt; We&amp;#39;ve discovered since&lt;br/&gt;&amp;gt; then that there is some risk associated with having pending HTLCs&lt;br/&gt;&amp;gt; (flood-and-loot type of attacks,&lt;br/&gt;&amp;gt; pinning, channel jamming, etc).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that *in some cases*, fundees should be paying a portion of the&lt;br/&gt;&amp;gt; commit-tx on-chain fees,&lt;br/&gt;&amp;gt; otherwise we may end up with a web-of-trust network where channels would&lt;br/&gt;&amp;gt; only exist between peers&lt;br/&gt;&amp;gt; that trust each other, which is quite limiting (I&amp;#39;m hoping we can do&lt;br/&gt;&amp;gt; better).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Routing nodes may be at risk when they *receive* HTLCs. All the attacks&lt;br/&gt;&amp;gt; that steal funds come from&lt;br/&gt;&amp;gt; the fact that a routing node has paid downstream but cannot claim the&lt;br/&gt;&amp;gt; upstream HTLCs (correct me&lt;br/&gt;&amp;gt; if that&amp;#39;s incorrect). Thus I&amp;#39;d like nodes to pay for the on-chain fees of&lt;br/&gt;&amp;gt; the HTLCs they offer&lt;br/&gt;&amp;gt; while they&amp;#39;re pending in the commit-tx, regardless of whether they&amp;#39;re&lt;br/&gt;&amp;gt; funder or fundee.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The simplest way to do this would be to deduce the HTLC cost (172 *&lt;br/&gt;&amp;gt; feerate) from the offerer&amp;#39;s&lt;br/&gt;&amp;gt; main output (instead of the funder&amp;#39;s main output, while keeping the base&lt;br/&gt;&amp;gt; commit tx weight paid&lt;br/&gt;&amp;gt; by the funder).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A more extreme proposal would be to tie the *total* commit-tx fee to the&lt;br/&gt;&amp;gt; channel usage:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * if there are no pending HTLCs, the funder pays all the fee&lt;br/&gt;&amp;gt; * if there are pending HTLCs, each node pays a proportion of the fee&lt;br/&gt;&amp;gt; proportional to the number of&lt;br/&gt;&amp;gt; HTLCs they offered. If Alice offered 1 HTLC and Bob offered 3 HTLCs, Bob&lt;br/&gt;&amp;gt; pays 75% of the&lt;br/&gt;&amp;gt; commit-tx fee and Alice pays 25%. When the HTLCs settle, the fee is&lt;br/&gt;&amp;gt; redistributed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This model uses the on-chain fee as collateral for usage of the channel.&lt;br/&gt;&amp;gt; If Alice wants to forward&lt;br/&gt;&amp;gt; HTLCs through this channel (because she has something to gain - routing&lt;br/&gt;&amp;gt; fees), she should be taking&lt;br/&gt;&amp;gt; on some of the associated risk, not Bob. Bob will be taking the same risk&lt;br/&gt;&amp;gt; downstream if he chooses&lt;br/&gt;&amp;gt; to forward.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe it also forces the fundee to care about on-chain feerates, which&lt;br/&gt;&amp;gt; is a healthy incentive.&lt;br/&gt;&amp;gt; It may create a feedback loop between on-chain feerates and routing fees,&lt;br/&gt;&amp;gt; which I believe is also&lt;br/&gt;&amp;gt; a good long-term thing (but it&amp;#39;s hard to predict as there may be negative&lt;br/&gt;&amp;gt; side-effects as well).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What do you all think? Is this a terrible idea? Is it okay-ish, but not&lt;br/&gt;&amp;gt; worth the additional&lt;br/&gt;&amp;gt; complexity? Is it an amazing idea worth a lightning nobel? Please don&amp;#39;t&lt;br/&gt;&amp;gt; take any of my claims&lt;br/&gt;&amp;gt; for granted and challenge them, there may be negative side-effects I&amp;#39;m&lt;br/&gt;&amp;gt; completely missing, this is&lt;br/&gt;&amp;gt; a fragile game of incentives...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Side-note: don&amp;#39;t forget to take into account that the fees for HTLC&lt;br/&gt;&amp;gt; transactions (second-level txs)&lt;br/&gt;&amp;gt; are always paid by the party that broadcasts them (which makes sense). I&lt;br/&gt;&amp;gt; still think this is not&lt;br/&gt;&amp;gt; enough and can even be abused by fundees in some setups.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Bastien&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/20201006/eb3eaa1c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20201006/eb3eaa1c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:01:00&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyhtr5k3v8pl60ecgu84kv6tnrpth6samete7gm7nrvkdf5068g6szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zmr0wkq</id>
    
      <title type="html">📅 Original date posted:2020-10-08 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyhtr5k3v8pl60ecgu84kv6tnrpth6samete7gm7nrvkdf5068g6szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zmr0wkq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqxuwc2ymqlwm6vwcx5eq3gdq4k6jev0w6wshtnhu6ltr4kkw70msyunvxu&#39;&gt;nevent1q…nvxu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-08&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; There is no need to stop the channel&amp;#39;s operations while you&amp;#39;re updating&lt;br/&gt;these parameters, since&lt;br/&gt;they can be updated unilaterally anyway&lt;br/&gt;&lt;br/&gt;I think it&amp;#39;s just how you defne channel&amp;#39;s operations, either emptying out&lt;br/&gt;all pending HTLCs or more a `update_fee` alike semantic. You&amp;#39;re right that&lt;br/&gt;the latter should be good enough for the set of parameters you&amp;#39;re proposing.&lt;br/&gt;A lightweight `update_policy` doesn&amp;#39;t sound to bear difficulty at first&lt;br/&gt;sight.&lt;br/&gt;&lt;br/&gt;Le jeu. 8 oct. 2020 à 08:23, Bastien TEINTURIER &amp;lt;bastien at acinq.fr&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Antoine and Zman,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for your answers!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I was thinking dynamic policy adjustment would be covered by the dynamic&lt;br/&gt;&amp;gt;&amp;gt; commitment mechanism proposed by Laolu&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I didn&amp;#39;t mention this as I think we still have a long-ish way to go before&lt;br/&gt;&amp;gt; dynamic commitments&lt;br/&gt;&amp;gt; are spec-ed, implemented and deployed, and I think the parameters I&amp;#39;m&lt;br/&gt;&amp;gt; interested in don&amp;#39;t require&lt;br/&gt;&amp;gt; that complexity to be updated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please forget about channel jamming, upfront fees et al and simply&lt;br/&gt;&amp;gt; consider the parameters I&amp;#39;m&lt;br/&gt;&amp;gt; mentioning. It feels to me that these are by nature dynamic channel&lt;br/&gt;&amp;gt; parameters (some of them are&lt;br/&gt;&amp;gt; even present in `channel_update`, but no-one updates them yet because&lt;br/&gt;&amp;gt; direct peers don&amp;#39;t take the&lt;br/&gt;&amp;gt; update into account anyway). I&amp;#39;d like to raise `htlc_minimum_msat` on some&lt;br/&gt;&amp;gt; big channels because&lt;br/&gt;&amp;gt; I&amp;#39;d like these channels to be used only for big-ish payments. Today I&lt;br/&gt;&amp;gt; can&amp;#39;t, I have to close that&lt;br/&gt;&amp;gt; channel and open a new one for such a trivial configuration update, which&lt;br/&gt;&amp;gt; is sad.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is no need to stop the channel&amp;#39;s operations while you&amp;#39;re updating&lt;br/&gt;&amp;gt; these parameters, since&lt;br/&gt;&amp;gt; they can be updated unilaterally anyway. The only downside is that if you&lt;br/&gt;&amp;gt; make your policy stricter,&lt;br/&gt;&amp;gt; your peer may send you some HTLCs that you will immediately fail&lt;br/&gt;&amp;gt; afterwards; it&amp;#39;s only a minor&lt;br/&gt;&amp;gt; inconvenience that won&amp;#39;t trigger a channel closure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d like to know if other implementations than eclair have specificities&lt;br/&gt;&amp;gt; that would make this&lt;br/&gt;&amp;gt; feature particularly hard to implement or undesirable.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Bastien&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Le mar. 6 oct. 2020 à 18:43, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning Antoine, and Bastien,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Instead of relying on reputation, the other alternative is just to have&lt;br/&gt;&amp;gt;&amp;gt; an upfront payment system, where a relay node doesn&amp;#39;t have to account for a&lt;br/&gt;&amp;gt;&amp;gt; HTLC issuer reputation to decide acceptance and can just forward a HTLC as&lt;br/&gt;&amp;gt;&amp;gt; long it paid enough. More, I think it&amp;#39;s better to mitigate jamming with a&lt;br/&gt;&amp;gt;&amp;gt; fees-based system than a web-of-trust one, less burden on network newcomers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Let us consider some of the complications here.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A newcomer wants to make an outgoing payment.&lt;br/&gt;&amp;gt;&amp;gt; Speculatively, it connects to some existing nodes based on some policy.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Now, since forwarding is upfront, the newcomer fears that the node it&lt;br/&gt;&amp;gt;&amp;gt; connected to might not even bother forwarding the payment, and instead just&lt;br/&gt;&amp;gt;&amp;gt; fail it and claim the upfront fees.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In particular: how would the newcomer offer upfront fees to a node it is&lt;br/&gt;&amp;gt;&amp;gt; not directly channeled with?&lt;br/&gt;&amp;gt;&amp;gt; In order to do that, we would have to offer the upfront fees for that&lt;br/&gt;&amp;gt;&amp;gt; node, to the node we *are* channeled with, so it can forward this as well.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * We can give the upfront fee outright to the first hop, and trust that&lt;br/&gt;&amp;gt;&amp;gt; if it forwards, it will also forward the upfront fee for the next hop.&lt;br/&gt;&amp;gt;&amp;gt;   * The first hop would then prefer to just fail the HTLC then and there&lt;br/&gt;&amp;gt;&amp;gt; and steal all the upfront fees.&lt;br/&gt;&amp;gt;&amp;gt;     * After all, the offerrer is a newcomer, and might be the sybil of a&lt;br/&gt;&amp;gt;&amp;gt; hacker that is trying to tie up its liquidity.&lt;br/&gt;&amp;gt;&amp;gt;       The first hop would (1) avoid this risk and (2) earn more upfront&lt;br/&gt;&amp;gt;&amp;gt; fees because it does not forward those fees to later hops.&lt;br/&gt;&amp;gt;&amp;gt;   * This is arguably custodial and not your keys not your coins applies.&lt;br/&gt;&amp;gt;&amp;gt;     Thus, it returns us back to tr\*st anyway.&lt;br/&gt;&amp;gt;&amp;gt; * We can require that the first hop prove *where* along the route errored.&lt;br/&gt;&amp;gt;&amp;gt;  If it provably failed at a later hop, then the first hop can claim more&lt;br/&gt;&amp;gt;&amp;gt; as upfront fees, since it will forward the upfront fees to the later hop as&lt;br/&gt;&amp;gt;&amp;gt; well.&lt;br/&gt;&amp;gt;&amp;gt;   * This has to be enforcable onchain in case the channel gets dropped&lt;br/&gt;&amp;gt;&amp;gt; onchain.&lt;br/&gt;&amp;gt;&amp;gt;     Is there a proposal SCRIPT which can enforce this?&lt;br/&gt;&amp;gt;&amp;gt;   * If not enforcable onchain, then there may be onchain shenanigans&lt;br/&gt;&amp;gt;&amp;gt; possible and thus this solution might introduce an attack vector even as it&lt;br/&gt;&amp;gt;&amp;gt; fixes another.&lt;br/&gt;&amp;gt;&amp;gt;     * On the other hand, sub-satoshi amounts are not enforcable onchain&lt;br/&gt;&amp;gt;&amp;gt; too, and nobody cares, so...&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On the other hand, a web-of-tr\*st might not be *that* bad.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; One can say that &amp;#34;tr\*st is risk&amp;#34;, and consider that the size and age of&lt;br/&gt;&amp;gt;&amp;gt; a channel to a peer represents your tr\*st that that peer will behave&lt;br/&gt;&amp;gt;&amp;gt; correctly for fast and timely resolution of payments.&lt;br/&gt;&amp;gt;&amp;gt; And anyone can look at the blockchain and the network gossip to get an&lt;br/&gt;&amp;gt;&amp;gt; idea of who is generally considered tr\*stworthy, and since that&lt;br/&gt;&amp;gt;&amp;gt; information is backed by Bitcoins locked in channels, this is reasonably&lt;br/&gt;&amp;gt;&amp;gt; hard to fake.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On the other hand, this risks centralization around existing, long-lived&lt;br/&gt;&amp;gt;&amp;gt; nodes.&lt;br/&gt;&amp;gt;&amp;gt; *Sigh*.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj&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/20201008/4fe5af26/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20201008/4fe5af26/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:56&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsw3nlylqt0hntn7cxuj86aywjuxtgqtfzhz8lhd70xcxz7yl6kk8gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z0hs4gp</id>
    
      <title type="html">📅 Original date posted:2020-10-06 📝 Original message: Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsw3nlylqt0hntn7cxuj86aywjuxtgqtfzhz8lhd70xcxz7yl6kk8gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z0hs4gp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsf8njf9unv0h4uun82jz7sand9rqykrtqeqqnx5ersjfhfk47j67cltdvap&#39;&gt;nevent1q…dvap&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-06&lt;br/&gt;📝 Original message:&lt;br/&gt;Hello Bastien,&lt;br/&gt;&lt;br/&gt;As a first note , I was thinking dynamic policy adjustment would be covered&lt;br/&gt;by the dynamic commitment mechanism proposed by Laolu as it presents the&lt;br/&gt;same trade-offs, you need to stop channel HTLC processing before upgrading,&lt;br/&gt;otherwise it might falsify your whole in-flight HTLC accounting.&lt;br/&gt;&lt;br/&gt;&amp;gt; Recent discussions around channel jamming [1] have highlighted again the&lt;br/&gt;&amp;gt; need to think twice when&lt;br/&gt;&amp;gt; configuring your channels parameters.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m still dubious that straighter channel parameters are the best solution&lt;br/&gt;to solve channel jamming. As a routing node evaluating a HTLC, I think the&lt;br/&gt;question you&amp;#39;re trying to answer is : &amp;#34;Is this a _honest_ HTLC to relay ?&amp;#34;,&lt;br/&gt;where honest is defined both as paying more fees that the liquidity lock&lt;br/&gt;and with high odds of a positive settlement, otherwise you won&amp;#39;t get paid.&lt;br/&gt;&lt;br/&gt;The first predicate is easy to evaluate, just verify that the HTLC is&lt;br/&gt;paying more as an incoming packet that you have to send forward.&lt;br/&gt;&lt;br/&gt;On the other hand, the second predicate is hard to evaluate. A first lead&lt;br/&gt;of a solution is to evaluate the packet forwarder instead of the packet&lt;br/&gt;itself. You may have a web-of-trust/reputation system with a one-level rank&lt;br/&gt;of trust which would be enforced at the channel opening layer, i.e don&amp;#39;t&lt;br/&gt;open/accept channels with random nodes. A less constraining version is&lt;br/&gt;still a reputation system but where you statically attribute a HTLC&lt;br/&gt;forwarding policy based on counterparty reputation (~today).&lt;br/&gt;&lt;br/&gt;The more evolved reputation system version you implicitly seem to argue for&lt;br/&gt;is adapting the forwarding policy based on counterparty past behavior, e.g&lt;br/&gt;like relaxing channel parameters for a counterparty upstreaming a lot of&lt;br/&gt;successful HTLCs. IMO, this is still presenting hurdles.&lt;br/&gt;&lt;br/&gt;If you have 1 BTC of outgoing bandwidth but your counterparty is enforcing&lt;br/&gt;a `max_htlc_value_in_flight_msat` of 0.5 BTC, it means you have a&lt;br/&gt;&amp;#34;sleeping&amp;#34; outgoing liquidity. Rationally, you should only open a channel&lt;br/&gt;with a capacity somehow equivalent to what is authorized by your&lt;br/&gt;counterparty relay policy.&lt;br/&gt;&lt;br/&gt;A lesson would be to negotiate first a policy then an opening, as of today&lt;br/&gt;they&amp;#39;re still bundled in one message flow. I don&amp;#39;t think you can reduce the&lt;br/&gt;capacity once you learn acceptor policy ? Don&amp;#39;t overstake liquidity more&lt;br/&gt;than you can actually gain from.&lt;br/&gt;&lt;br/&gt;That said, if you have a dynamic policy model, at policy relaxation, you&lt;br/&gt;need to increase channel capacity to profit from relaxation, let&amp;#39;s say&lt;br/&gt;through some kind of splice-in. But now you have on-chain fees at each&lt;br/&gt;policy/liquidity adjustment.&lt;br/&gt;&lt;br/&gt;Under a dynamic policy model based on accumulated reputation, it sounds&lt;br/&gt;like there is some kind of trade-off between useless off-chain liquidity&lt;br/&gt;and on-chain fees.&lt;br/&gt;&lt;br/&gt;Instead of relying on reputation, the other alternative is just to have an&lt;br/&gt;upfront payment system, where a relay node doesn&amp;#39;t have to account for a&lt;br/&gt;HTLC issuer reputation to decide acceptance and can just forward a HTLC as&lt;br/&gt;long it paid enough. More, I think it&amp;#39;s better to mitigate jamming with a&lt;br/&gt;fees-based system than a web-of-trust one, less burden on network newcomers.&lt;br/&gt;&lt;br/&gt;This doesn&amp;#39;t prevent hybrid models where you might reward your good&lt;br/&gt;behaving peers with a discount on your upfront payment policy.&lt;br/&gt;&lt;br/&gt;What&amp;#39;s your opinion ?&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 5 oct. 2020 à 07:54, Bastien TEINTURIER via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good evening list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Recent discussions around channel jamming [1] have highlighted again the&lt;br/&gt;&amp;gt; need to think twice when&lt;br/&gt;&amp;gt; configuring your channels parameters. There are currently parameters that&lt;br/&gt;&amp;gt; are set once at channel&lt;br/&gt;&amp;gt; creation that would benefit a lot from being configurable throughout the&lt;br/&gt;&amp;gt; lifetime of the channel&lt;br/&gt;&amp;gt; to avoid closing channels when we just want to reconfigure them:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * max_htlc_value_in_flight_msat&lt;br/&gt;&amp;gt; * max_accepted_htlcs&lt;br/&gt;&amp;gt; * htlc_minimum_msat&lt;br/&gt;&amp;gt; * htlc_maximum_msat&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Nodes can currently unilaterally udpate these by applying forwarding&lt;br/&gt;&amp;gt; heuristics, but it would be&lt;br/&gt;&amp;gt; better to tell our peer about the limits we want to put in place&lt;br/&gt;&amp;gt; (otherwise we&amp;#39;re wasting a whole&lt;br/&gt;&amp;gt; cycle of add/commit/revoke/fail messages for no good reason).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suggest adding tlv records in `commitment_signed` to tell our channel&lt;br/&gt;&amp;gt; peer that we&amp;#39;re changing&lt;br/&gt;&amp;gt; the values of these fields.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is someone opposed to that?&lt;br/&gt;&amp;gt; Are there other fields you think would need to become dynamic as well?&lt;br/&gt;&amp;gt; Do you think that needs a new message instead of using extensions of&lt;br/&gt;&amp;gt; `commitment_signed`?&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; [1] &lt;a href=&#34;https://twitter.com/joostjgr/status/1308414364911841281&#34;&gt;https://twitter.com/joostjgr/status/1308414364911841281&lt;/a&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/20201006/8dc749f6/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20201006/8dc749f6/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:55&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf976rxc7m2tdmd4e00smzemlufe4j03q3uznu5vhj5u8zqq8y2rczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zu8u3uv</id>
    
      <title type="html">📅 Original date posted:2020-06-18 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf976rxc7m2tdmd4e00smzemlufe4j03q3uznu5vhj5u8zqq8y2rczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zu8u3uv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsreav5a36rc6s6wtc6p4duyjrwh4d3x7q3vs6ju8ryn5za6eeepaccl5zw7&#39;&gt;nevent1q…5zw7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-06-18&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rene,&lt;br/&gt;&lt;br/&gt;Thanks for disclosing this vulnerability,&lt;br/&gt;&lt;br/&gt;I think this blackmail scenario holds but sadly there is a lower scenario.&lt;br/&gt;&lt;br/&gt;Both &amp;#34;Flood &amp;amp; Loot&amp;#34; and your blackmail attack rely on `update_fee`&lt;br/&gt;mechanism and unbounded commitment transaction size inflation. Though the&lt;br/&gt;first to provoke block congestion and yours to lockdown in-flight fees as&lt;br/&gt;funds hostage situation.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. The current solution is to just not use up the max value of&lt;br/&gt;htlc&amp;#39;s. Eclaire and c-lightning by default only use up to 30 htlcs.&lt;br/&gt;&lt;br/&gt;As of today, yes I would recommend capping commitment size both for&lt;br/&gt;ensuring competitive propagation/block selection and limiting HTLC exposure.&lt;br/&gt;&lt;br/&gt;&amp;gt; 2. Probably the best fix (not sure if I understand the consequences&lt;br/&gt;correctly) is coming from this PR to bitcoin core (c.f.&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/15681&#34;&gt;https://github.com/bitcoin/bitcoin/pull/15681&lt;/a&gt; by @TheBlueMatt . If I get it&lt;br/&gt;correctly with that we could always have low fees and ask the person who&lt;br/&gt;want to claim their outputs to pay fees. This excludes overpayment and&lt;br/&gt;could happen at a later stage when fees are not spiked. Still the victim&lt;br/&gt;who offered the htlcs would have to spend those outputs at some time.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s a bit more complex, carve-out output, even combined with anchor output&lt;br/&gt;support on the LN-side won&amp;#39;t protect against different flavors of pinning.&lt;br/&gt;I invite you to go through logs of past 2 LN dev meetings.&lt;br/&gt;&lt;br/&gt;&amp;gt; 3. Don&amp;#39;t overpay fees in commitment transactions. We can&amp;#39;t foresee the&lt;br/&gt;future anyway&lt;br/&gt;&lt;br/&gt;Once 2. is well-addressed we may deprecate `update_fee`.&lt;br/&gt;&lt;br/&gt;&amp;gt; 4. Don&amp;#39;t add htlcs for which the on chain fee is higher than the HTLCs&lt;br/&gt;value (like we do with sub dust amounts and sub satoshi amounts. This would&lt;br/&gt;at least make the attack expensive as the attacker would have to bind a lot&lt;br/&gt;of liquidity.&lt;br/&gt;&lt;br/&gt;Ideally we want dust_limit to be dynamic, dust cap should be based on HTLC&lt;br/&gt;economic value, feerate of its output, feerate of HTLC-transaction, feerate&lt;br/&gt;estimation of any CPFP to bump it. I think that&amp;#39;s kind of worthy to do once&lt;br/&gt;we solved 3. and 4&lt;br/&gt;&lt;br/&gt;&amp;gt; 5. Somehow be able to aggregate htlc&amp;#39;s. In a world where we use payment&lt;br/&gt;points instead of preimages we might be able to do so. It would be really&lt;br/&gt;cool if separate HTLC&amp;#39;s could be combined to 1 single output. I played&lt;br/&gt;around a little bit but I have not come up with a scheme that is more&lt;br/&gt;compact in all cases. Thus I just threw in the idea.&lt;br/&gt;&lt;br/&gt;Yes we may encode all HTLC in some Taproot tree in the future. There are&lt;br/&gt;some wrinkles but for a high-level theoretical construction see my post on&lt;br/&gt;CoinPool.&lt;br/&gt;&lt;br/&gt;&amp;gt; 6. Split onchain fees differently (now the attacker would also lose fees&lt;br/&gt;by conducting this attack) - No I don&amp;#39;t want to start yet another fee&lt;br/&gt;bikeshadding debate. (In particular I believe that a different split of&lt;br/&gt;fees might make the Flood &amp;amp; Loot attack economically more viable which&lt;br/&gt;relies on the same principle)&lt;br/&gt;&lt;br/&gt;Likely a bit more of fee bikeshedding is something we have to do to make LN&lt;br/&gt;secure... Switching fee from pre-committed ones to a single-party, dynamic&lt;br/&gt;one.&lt;br/&gt;&lt;br/&gt;&amp;gt; Independently I think we should have a hint in our readme file about&lt;br/&gt;where and how people can disclose attacks and vulnerabilities.&lt;br/&gt;Implementations have this but the BOLTs do not.&lt;br/&gt;&lt;br/&gt;I 100% agree, that&amp;#39;s exactly&lt;br/&gt;&lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/772&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/772&lt;/a&gt;, waiting for&lt;br/&gt;your feedback :)&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le mer. 17 juin 2020 à 09:41, ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good morning all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Fee futures could help against this.&lt;br/&gt;&amp;gt; &amp;gt; I remember writing about this some time ago but cannot find where (not&lt;br/&gt;&amp;gt; sure if it was in lightning-dev or bitcoin-dev).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; `harding` found it:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-January/017601.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-January/017601.html&lt;/a&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/20200618/4505fed3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200618/4505fed3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstmrvkf92qmjah9hmykxfuuku4tfm9ayxrpftw98zs5e2msdce6gszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2cx4un</id>
    
      <title type="html">📅 Original date posted:2020-05-06 📝 Original message: I do ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstmrvkf92qmjah9hmykxfuuku4tfm9ayxrpftw98zs5e2msdce6gszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2cx4un" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxluhypnvy07jxudefsrzypp60x2m3wk2284p9y2munsaps0w8hkc90awvr&#39;&gt;nevent1q…awvr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-06&lt;br/&gt;📝 Original message:&lt;br/&gt;I do see the consensus capture argument by miners but in reality isn&amp;#39;t this&lt;br/&gt;attack scenario have a lot of assumptions on topology an deployment ?&lt;br/&gt;&lt;br/&gt;For such attack to succeed you need miners nodes to be connected to clients&lt;br/&gt;to feed directly the invalid headers and if these ones are connected to&lt;br/&gt;headers/filters gateways, themselves doing full-nodes validation invalid&lt;br/&gt;chain is going to be sanitized out ?&lt;br/&gt;&lt;br/&gt;Sure now you trust these gateways, but if you have multiple connections to&lt;br/&gt;them and can guarantee they aren&amp;#39;t run by the same entity, that maybe an&lt;br/&gt;acceptable security model, depending of staked amount and your&lt;br/&gt;expectations. I more concerned of having a lot of them and being&lt;br/&gt;diversified enough to avoid collusion between gateways/chain access&lt;br/&gt;providers/miners.&lt;br/&gt;&lt;br/&gt;But even if you light clients is directly connected to the backbone network&lt;br/&gt;and may be reached by miners you can implement fork anomalies detection and&lt;br/&gt;from then you may have multiples options:&lt;br/&gt;* halt the wallet, wait for human intervention&lt;br/&gt;* fallback connection to a trusted server, authoritative on your chain view&lt;br/&gt;* invalidity proofs?&lt;br/&gt;&lt;br/&gt;Now I agree you need a wide-enough, sane backbone network to build on top,&lt;br/&gt;and we should foster node adoption as much as we can.&lt;br/&gt;&lt;br/&gt;Le mar. 5 mai 2020 à 09:01, Luke Dashjr &amp;lt;luke at dashjr.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; On Tuesday 05 May 2020 10:17:37 Antoine Riard via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; Trust-minimization of Bitcoin security model has always relied first and&lt;br/&gt;&amp;gt; &amp;gt; above on running a full-node. This current paradigm may be shifted by LN&lt;br/&gt;&amp;gt; &amp;gt; where fast, affordable, confidential, censorship-resistant payment&lt;br/&gt;&amp;gt; services&lt;br/&gt;&amp;gt; &amp;gt; may attract a lot of adoption without users running a full-node.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, it cannot be shifted. This would compromise Bitcoin itself, which for&lt;br/&gt;&amp;gt; security depends on the assumption that a supermajority of the economy is&lt;br/&gt;&amp;gt; verifying their incoming transactions using their own full node.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The past few years has seen severe regressions in this area, to the point&lt;br/&gt;&amp;gt; where Bitcoin&amp;#39;s future seems quite bleak. Without serious improvements to&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; full node ratio, Bitcoin is likely to fail.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Therefore, all efforts to improve the &amp;#34;full node-less&amp;#34; experience are&lt;br/&gt;&amp;gt; harmful,&lt;br/&gt;&amp;gt; and should be actively avoided. BIP 157 improves privacy of fn-less usage,&lt;br/&gt;&amp;gt; while providing no real benefits to full node users (compared to more&lt;br/&gt;&amp;gt; efficient protocols like Stratum/Electrum).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For this reason, myself and a few others oppose merging support for BIP&lt;br/&gt;&amp;gt; 157 in&lt;br/&gt;&amp;gt; Core.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Assuming a user adoption path where a full-node is required to benefit&lt;br/&gt;&amp;gt; for&lt;br/&gt;&amp;gt; &amp;gt; LN may deprive a lot of users, especially those who are already denied a&lt;br/&gt;&amp;gt; &amp;gt; real financial infrastructure access.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If Bitcoin can&amp;#39;t do it, then Bitcoin can&amp;#39;t do it.&lt;br/&gt;&amp;gt; Bitcoin can&amp;#39;t solve *any* problem if it becomes insecure itself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Luke&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; P.S. See also&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/@nicolasdorier/why-i-dont-celebrate-neutrino-206bafa5fda0&#34;&gt;https://medium.com/@nicolasdorier/why-i-dont-celebrate-neutrino-206bafa5fda0&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/@nicolasdorier/neutrino-is-dangerous-for-my-self-sovereignty-18fac5bcdc25&#34;&gt;https://medium.com/@nicolasdorier/neutrino-is-dangerous-for-my-self-sovereignty-18fac5bcdc25&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/20200506/7b20c4d4/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200506/7b20c4d4/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:10&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxluhypnvy07jxudefsrzypp60x2m3wk2284p9y2munsaps0w8hkczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zguqf7g</id>
    
      <title type="html">📅 Original date posted:2020-05-17 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxluhypnvy07jxudefsrzypp60x2m3wk2284p9y2munsaps0w8hkczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zguqf7g" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszqmn4dqrc8w3w2ju284fvqgty90ka36nh3kn2g92jc3rjp958uegzrvd7n&#39;&gt;nevent1q…vd7n&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-17&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; * At the same time, it retains your-keys-your-coins noncustodiality,&lt;br/&gt;because every update of a Lightning channel requires your keys to sign off&lt;br/&gt;on it.&lt;br/&gt;&lt;br/&gt;Yes I agree, I can foresee an easier step where managing low-value channel&lt;br/&gt;and get your familiar with smooth key management maybe a first step before&lt;br/&gt;running a full-node and getting a more full-fledged key management solution.&lt;br/&gt;&lt;br/&gt;&amp;gt; It may even be possible, that the Lightning future with massive SPV might&lt;br/&gt;end up with more economic weight in SPV nodes, than in the world without&lt;br/&gt;Lightning and dependent on centralized custodial services to scale.&lt;br/&gt;&lt;br/&gt;Even evaluating economic weight in Lightning is hard, both parties have&lt;br/&gt;their own chain view, and it&amp;#39;s likely if you assume a hub-and-spoke&lt;br/&gt;topology, leaf nodes are going to be SPV and internal nodes full-nodes ?&lt;br/&gt;&lt;br/&gt;&amp;gt; Money makes the world go round, so such backup servers that are&lt;br/&gt;publicly-facing rather than privately-owned should be somehow incentivized&lt;br/&gt;to do so, or else they would not exist in the first place.&lt;br/&gt;&lt;br/&gt;I was thinking about the current workflow, Alice downloads her New Shiny&lt;br/&gt;LN-wallet, she is asked to backup the seed, she is asked to pick-up&lt;br/&gt;backup(s) nodes among her friends, relatives or business partners and is&lt;br/&gt;NOT provided any automatic hint and register backup nodes addresses, maybe&lt;br/&gt;even do out-of-band key exchange with this full-node operator. Therefore&lt;br/&gt;you may avoid centralization by having not such publicly-facing servers. Of&lt;br/&gt;course, Alice can still scrawl the web to and be lured to pickup malicious&lt;br/&gt;public servers but if she is severely notified to not do so that may be&lt;br/&gt;enough.&lt;br/&gt;&lt;br/&gt;So it would be a combination of UX&#43;user education&#43;fallback security&lt;br/&gt;mechanism to avoid economy hijack. That maybe a better solution rather than&lt;br/&gt;PoW-only SPV. We have an open network so you can&amp;#39;t prevent someone to run&lt;br/&gt;such type of client but at least if they have to do so you can provide them&lt;br/&gt;with a better option ?&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le jeu. 14 mai 2020 à 00:02, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; While approaching this question, I think you should consider economic&lt;br/&gt;&amp;gt; weight of nodes in evaluating miner consensus-hijack success. Even if you&lt;br/&gt;&amp;gt; expect a disproportionate ratio of full-nodes-vs-SPV, they may not have the&lt;br/&gt;&amp;gt; same  economic weight at all, therefore even if miners are able to lure a&lt;br/&gt;&amp;gt; majority of SPV clients they may not be able to stir economic nodes. SPV&lt;br/&gt;&amp;gt; clients users will now have an incentive to cancel their hijacked history&lt;br/&gt;&amp;gt; to stay on the most economic meaningful chain. And it&amp;#39;s already assumed,&lt;br/&gt;&amp;gt; that if you run a bitcoin business or LN routing node, you do want to run&lt;br/&gt;&amp;gt; your own full-node.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One hope I have for Lightning is that it will replace centralized&lt;br/&gt;&amp;gt; custodial services, because:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Lightning gains some of the scalability advantage of centralized&lt;br/&gt;&amp;gt; custodial services, because you can now transfer to any Lightning client&lt;br/&gt;&amp;gt; without touching the blockchain, for much reduced transfer fees.&lt;br/&gt;&amp;gt; * At the same time, it retains your-keys-your-coins noncustodiality,&lt;br/&gt;&amp;gt; because every update of a Lightning channel requires your keys to sign off&lt;br/&gt;&amp;gt; on it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If most Lightning clients are SPV, then if we compare these two worlds:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * There are a few highly-important centralized custodial services with&lt;br/&gt;&amp;gt; significant economic weight running fullnodes (i.e. now).&lt;br/&gt;&amp;gt; * There are no highly-important centralized custodial services, and most&lt;br/&gt;&amp;gt; everyone uses Lightning, but with SPV (i.e. a Lightning future).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then the distribution of economic weight would be different between these&lt;br/&gt;&amp;gt; two worlds.&lt;br/&gt;&amp;gt; It may even be possible, that the Lightning future with massive SPV might&lt;br/&gt;&amp;gt; end up with more economic weight in SPV nodes, than in the world without&lt;br/&gt;&amp;gt; Lightning and dependent on centralized custodial services to scale.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is also entirely possible that custodial services for Lightning will&lt;br/&gt;&amp;gt; arise anyway and my hope is already dashed, come on universe, work harder&lt;br/&gt;&amp;gt; will you, would you really disappoint some randomly-generated Internet&lt;br/&gt;&amp;gt; person like that.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I agree it may be hard to evaluate economic-weight-to-chain-backend&lt;br/&gt;&amp;gt; segments, specially with offchain you disentangle an onchain output value&lt;br/&gt;&amp;gt; from its real payment traffic. To strengthen SPV, you may implement forks&lt;br/&gt;&amp;gt; detection and fallback to some backup node(s) which would serve as an&lt;br/&gt;&amp;gt; authoritative source to arbiter between branches. Such backup node(s) must&lt;br/&gt;&amp;gt; be picked up manually at client initialization, before any risk of conflict&lt;br/&gt;&amp;gt; to avoid Reddit-style of hijack during contentious period or other massive&lt;br/&gt;&amp;gt; social engineering. You don&amp;#39;t want autopilot-style of recommendations for&lt;br/&gt;&amp;gt; picking up a backup nodes and avoid cenralization of backups, but somehow a&lt;br/&gt;&amp;gt; uniform distribution. A backup node may be a private one, it won&amp;#39;t serve&lt;br/&gt;&amp;gt; you any data beyond headers, and therefore you preserve public nodes&lt;br/&gt;&amp;gt; bandwidth, which IMO is the real bottleneck. I concede it won&amp;#39;t work well&lt;br/&gt;&amp;gt; if you have a ratio of 1000-SPV for 1-full-node and people are not&lt;br/&gt;&amp;gt; effectively able to pickup a backup among their social environment.&lt;br/&gt;&amp;gt; &amp;gt; What do you think about this model ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Money makes the world go round, so such backup servers that are&lt;br/&gt;&amp;gt; publicly-facing rather than privately-owned should be somehow incentivized&lt;br/&gt;&amp;gt; to do so, or else they would not exist in the first place.&lt;br/&gt;&amp;gt; Of course, a free market tends towards monopoly, because any entity that&lt;br/&gt;&amp;gt; happens to have even a slight advantage at the business will have more&lt;br/&gt;&amp;gt; money to use towards business reinvestment and increase its advantage&lt;br/&gt;&amp;gt; further, until they beat the competition to dust, anyone who has won a 4X&lt;br/&gt;&amp;gt; game knows to search for and stack those little advantages until you&lt;br/&gt;&amp;gt; snowball and conquer the world/galaxy/petri dish which is why the endgame&lt;br/&gt;&amp;gt; of 4X games is so boring compared to the start, we have seen this happen in&lt;br/&gt;&amp;gt; mining and exchanges and so on, and this works against your desire to have&lt;br/&gt;&amp;gt; a uniform distribution.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If everyone runs such a privately-owned server, on the other hand, this is&lt;br/&gt;&amp;gt; not so different from having a Lightning node you run at your home that has&lt;br/&gt;&amp;gt; a fullnode as well and which you access via a remote control mobile device,&lt;br/&gt;&amp;gt; and it is the inconvenience of having such a server at your home that&lt;br/&gt;&amp;gt; prevents this in the first place.&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;-------------- 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/20200516/5aa4025e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200516/5aa4025e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:10&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdcyg6hx8aq2pv2v3n79avysd3jm33v2hw6jgn445aak3dkmzq9cczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zx3fupl</id>
    
      <title type="html">📅 Original date posted:2020-05-13 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdcyg6hx8aq2pv2v3n79avysd3jm33v2hw6jgn445aak3dkmzq9cczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zx3fupl" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx2cswtt8kkm7amn0cuk4dh0h6xdahgwmunj07ceq6jqv52klhf2g6mtljk&#39;&gt;nevent1q…tljk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Chris,&lt;br/&gt;&lt;br/&gt;While approaching this question, I think you should consider economic&lt;br/&gt;weight of nodes in evaluating miner consensus-hijack success. Even if you&lt;br/&gt;expect a disproportionate ratio of full-nodes-vs-SPV, they may not have the&lt;br/&gt;same  economic weight at all, therefore even if miners are able to lure a&lt;br/&gt;majority of SPV clients they may not be able to stir economic nodes. SPV&lt;br/&gt;clients users will now have an incentive to cancel their hijacked history&lt;br/&gt;to stay on the most economic meaningful chain. And it&amp;#39;s already assumed,&lt;br/&gt;that if you run a bitcoin business or LN routing node, you do want to run&lt;br/&gt;your own full-node.&lt;br/&gt;&lt;br/&gt;I agree it may be hard to evaluate economic-weight-to-chain-backend&lt;br/&gt;segments, specially with offchain you disentangle an onchain output value&lt;br/&gt;from its real payment traffic. To strengthen SPV, you may implement forks&lt;br/&gt;detection and fallback to some backup node(s) which would serve as an&lt;br/&gt;authoritative source to arbiter between branches. Such backup node(s) must&lt;br/&gt;be picked up manually at client initialization, before any risk of conflict&lt;br/&gt;to avoid Reddit-style of hijack during contentious period or other massive&lt;br/&gt;social engineering. You don&amp;#39;t want autopilot-style of recommendations for&lt;br/&gt;picking up a backup nodes and avoid cenralization of backups, but somehow a&lt;br/&gt;uniform distribution. A backup node may be a private one, it won&amp;#39;t serve&lt;br/&gt;you any data beyond headers, and therefore you preserve public nodes&lt;br/&gt;bandwidth, which IMO is the real bottleneck. I concede it won&amp;#39;t work well&lt;br/&gt;if you have a ratio of 1000-SPV for 1-full-node and people are not&lt;br/&gt;effectively able to pickup a backup among their social environment.&lt;br/&gt;&lt;br/&gt;What do you think about this model ?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le mar. 12 mai 2020 à 17:06, Chris Belcher &amp;lt;belcher at riseup.net&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; On 05/05/2020 16:16, Lloyd Fournier via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; On Tue, May 5, 2020 at 9:01 PM Luke Dashjr via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; On Tuesday 05 May 2020 10:17:37 Antoine Riard via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Trust-minimization of Bitcoin security model has always relied first&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; above on running a full-node. This current paradigm may be shifted by&lt;br/&gt;&amp;gt; LN&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; where fast, affordable, confidential, censorship-resistant payment&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; services&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; may attract a lot of adoption without users running a full-node.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; No, it cannot be shifted. This would compromise Bitcoin itself, which&lt;br/&gt;&amp;gt; for&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; security depends on the assumption that a supermajority of the economy&lt;br/&gt;&amp;gt; is&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; verifying their incoming transactions using their own full node.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi Luke,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I have heard this claim made several times but have never understood the&lt;br/&gt;&amp;gt; &amp;gt; argument behind it. The question I always have is: If I get scammed by&lt;br/&gt;&amp;gt; not&lt;br/&gt;&amp;gt; &amp;gt; verifying my incoming transactions properly how can this affect anyone&lt;br/&gt;&amp;gt; &amp;gt; else? It&amp;#39;s very unintuative.  I&amp;#39;ve been scammed several times in my life&lt;br/&gt;&amp;gt; in&lt;br/&gt;&amp;gt; &amp;gt; fiat currency transactions but as far as I could tell it never negatively&lt;br/&gt;&amp;gt; &amp;gt; affected the currency overall!&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The links you point and from what I&amp;#39;ve seen you say before refer to&lt;br/&gt;&amp;gt; &amp;#34;miner&lt;br/&gt;&amp;gt; &amp;gt; control&amp;#34; as the culprit. My only thought is that this is because a light&lt;br/&gt;&amp;gt; &amp;gt; client could follow a dishonest majority of hash power chain. But this&lt;br/&gt;&amp;gt; just&lt;br/&gt;&amp;gt; &amp;gt; brings me back to the question. If, instead of BTC, I get a payment in&lt;br/&gt;&amp;gt; some&lt;br/&gt;&amp;gt; &amp;gt; miner scamcoin on their dishonest fork (but I think it&amp;#39;s BTC because I&amp;#39;m&lt;br/&gt;&amp;gt; &amp;gt; running a light client) that still seems to only to damage me. Where does&lt;br/&gt;&amp;gt; &amp;gt; the side effect onto others on the network come from?&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Cheers,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; LL&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hello Lloyd,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The problem comes when a large part of the ecosystem gets scammed at&lt;br/&gt;&amp;gt; once, which is how such an attack would happen in practice.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, consider if bitcoin had 10000 users. 10 of them use a full&lt;br/&gt;&amp;gt; node wallet while the other 9990 use an SPV wallet. If a miner attacked&lt;br/&gt;&amp;gt; the system by printing infinite bitcoins and spending coins without a&lt;br/&gt;&amp;gt; valid signature, then the 9990 SPV wallets would accept those fake coins&lt;br/&gt;&amp;gt; as payment, and trade the coins amongst themselves. After a time those&lt;br/&gt;&amp;gt; coins would likely be the ancestors of most active coins in the&lt;br/&gt;&amp;gt; 9990-SPV-wallet ecosystem. Bitcoin would split into two currencies:&lt;br/&gt;&amp;gt; full-node-coin and SPV-coin.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Now the fraud miners may become well known, perhaps being published on&lt;br/&gt;&amp;gt; bitcoin news portals, but the 9990-SPV-wallet ecosystem has a strong&lt;br/&gt;&amp;gt; incentive to be against any rollback. Their recent transactions would&lt;br/&gt;&amp;gt; disappear and they&amp;#39;d lose money. They would argue that they&amp;#39;ve already&lt;br/&gt;&amp;gt; been using the coin for a while, and it works perfectly fine, and anyway&lt;br/&gt;&amp;gt; a coin that can be spent in 9990 places is more useful than one that can&lt;br/&gt;&amp;gt; be spent in just 10 places. The SPV-wallet community might even decide&lt;br/&gt;&amp;gt; to use something like `invalidateblock` to make sure their SPV-coin&lt;br/&gt;&amp;gt; doesn&amp;#39;t get reorg&amp;#39;d out of existence. There&amp;#39;d also likely be a social&lt;br/&gt;&amp;gt; attack, with every bitcoin community portal being flooded with bots and&lt;br/&gt;&amp;gt; shills advocating the merits of SPV-coin. This is not a hypothetical&lt;br/&gt;&amp;gt; because we already saw the same thing during the scalability conflict&lt;br/&gt;&amp;gt; 2015-2017.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Before you know it, &amp;#34;Bitcoin&amp;#34; would become SPV-coin with inflation and&lt;br/&gt;&amp;gt; arbitrary seizure. Any normal user could download software called&lt;br/&gt;&amp;gt; &amp;#34;Bitcoin wallet&amp;#34; which they trust and have used before, but instead of&lt;br/&gt;&amp;gt; using Bitcoin they&amp;#39;d be using SPV-coin. You may be one of the 10 wallets&lt;br/&gt;&amp;gt; backed by a full node, but that won&amp;#39;t do much good to you when 9990&lt;br/&gt;&amp;gt; users happily use another coin as their medium of exchange.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards&lt;br/&gt;&amp;gt; CB&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/20200513/91739e5e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200513/91739e5e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:08&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspx8zwgz6grhwy8v5gx94vd70rn09g32prmyfu6sg23cx93qjrdqszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zs395c7</id>
    
      <title type="html">📅 Original date posted:2020-05-06 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspx8zwgz6grhwy8v5gx94vd70rn09g32prmyfu6sg23cx93qjrdqszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zs395c7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8l5l5ga5m52uxr2k0ze84njg9aejvfdc92pdkvrqwyygjpww4qzcskhp4w&#39;&gt;nevent1q…hp4w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-06&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; The choice between whether we offer them a light client technology that&lt;br/&gt;is better or worse for privacy and scalability.&lt;br/&gt;&lt;br/&gt;And offer them a solution which would scale in the long-term.&lt;br/&gt;&lt;br/&gt;Again it&amp;#39;s not an argumentation against BIP 157 protocol in itself, the&lt;br/&gt;problem I&amp;#39;m interested in is how implementing BIP157 in Core will address&lt;br/&gt;this issue ?&lt;br/&gt;&lt;br/&gt;Le mar. 5 mai 2020 à 13:36, John Newbery via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; There doesn&amp;#39;t seem to be anything in the original email that&amp;#39;s specific to&lt;br/&gt;&amp;gt; BIP 157. It&amp;#39;s a restatement of the arguments against light clients:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - light clients are a burden on the full nodes that serve them&lt;br/&gt;&amp;gt; - if light clients become more popular, there won&amp;#39;t be enough full nodes&lt;br/&gt;&amp;gt; to serve them&lt;br/&gt;&amp;gt; - people might build products that depend on altruistic nodes serving&lt;br/&gt;&amp;gt; data, which is unsustainable&lt;br/&gt;&amp;gt; - maybe at some point in the future, light clients will need to pay for&lt;br/&gt;&amp;gt; services&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The choice isn&amp;#39;t between people using light clients or not. People already&lt;br/&gt;&amp;gt; use light clients. The choice between whether we offer them a light client&lt;br/&gt;&amp;gt; technology that is better or worse for privacy and scalability.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The arguments for why BIP 157 is better than the existing light client&lt;br/&gt;&amp;gt; technologies are available elsewhere, but to summarize:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - they&amp;#39;re unique for a block, which means they can easily be cached.&lt;br/&gt;&amp;gt; Serving a filter requires no computation, just i/o (or memory access for&lt;br/&gt;&amp;gt; cached filter/header data) and bandwidth. There are plenty of other&lt;br/&gt;&amp;gt; services that a full node offers that use i/o and bandwidth, such as&lt;br/&gt;&amp;gt; serving blocks.&lt;br/&gt;&amp;gt; - unique-for-block means clients can download from multiple sources&lt;br/&gt;&amp;gt; - the linked-headers/filters model allows hybrid approaches, where headers&lt;br/&gt;&amp;gt; checkpoints can be fetched from trusted/signed nodes, with intermediate&lt;br/&gt;&amp;gt; headers and filters fetched from untrusted sources&lt;br/&gt;&amp;gt; - less possibilities to DoS/waste resources on the serving node&lt;br/&gt;&amp;gt; - better for privacy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The intention, as I understood it, of putting BIP157 directly into&lt;br/&gt;&amp;gt; bitcoind was to essentially force all `bitcoind` users to possibly service&lt;br/&gt;&amp;gt; BIP157 clients&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please. No-one is forcing anyone to do anything. To serve filters, a node&lt;br/&gt;&amp;gt; user needs to download the latest version, set `-blockfilterindex=basic` to&lt;br/&gt;&amp;gt; build the compact filters index, and set `-peercfilters` to serve them over&lt;br/&gt;&amp;gt; P2P. This is an optional, off-by-default feature.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; John&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, May 5, 2020 at 9:50 AM ZmnSCPxj via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning ariard and luke-jr&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; Trust-minimization of Bitcoin security model has always relied first&lt;br/&gt;&amp;gt;&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; above on running a full-node. This current paradigm may be shifted by&lt;br/&gt;&amp;gt;&amp;gt; LN&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; where fast, affordable, confidential, censorship-resistant payment&lt;br/&gt;&amp;gt;&amp;gt; services&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; may attract a lot of adoption without users running a full-node.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; No, it cannot be shifted. This would compromise Bitcoin itself, which&lt;br/&gt;&amp;gt;&amp;gt; for&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; security depends on the assumption that a supermajority of the economy&lt;br/&gt;&amp;gt;&amp;gt; is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; verifying their incoming transactions using their own full node.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; The past few years has seen severe regressions in this area, to the&lt;br/&gt;&amp;gt;&amp;gt; point&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; where Bitcoin&amp;#39;s future seems quite bleak. Without serious improvements&lt;br/&gt;&amp;gt;&amp;gt; to the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; full node ratio, Bitcoin is likely to fail.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Therefore, all efforts to improve the &amp;#34;full node-less&amp;#34; experience are&lt;br/&gt;&amp;gt;&amp;gt; harmful,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; and should be actively avoided. BIP 157 improves privacy of fn-less&lt;br/&gt;&amp;gt;&amp;gt; usage,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; while providing no real benefits to full node users (compared to more&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; efficient protocols like Stratum/Electrum).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; For this reason, myself and a few others oppose merging support for BIP&lt;br/&gt;&amp;gt;&amp;gt; 157 in&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Core.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; BIP 157 can be implemented as a separate daemon that processes the blocks&lt;br/&gt;&amp;gt;&amp;gt; downloaded by an attached `bitcoind`, i.e. what Wasabi does.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The intention, as I understood it, of putting BIP157 directly into&lt;br/&gt;&amp;gt;&amp;gt; bitcoind was to essentially force all `bitcoind` users to possibly service&lt;br/&gt;&amp;gt;&amp;gt; BIP157 clients, in the hope that a BIP157 client can contact any arbitrary&lt;br/&gt;&amp;gt;&amp;gt; fullnode to get BIP157 service.&lt;br/&gt;&amp;gt;&amp;gt; This is supposed to improve to the situation relative to e.g. Electrum,&lt;br/&gt;&amp;gt;&amp;gt; where there are far fewer Electrum servers than fullnodes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Of course, as ariard computes, deploying BIP157 could lead to an&lt;br/&gt;&amp;gt;&amp;gt; effective DDoS on the fullnode network if a large number of BIP157 clients&lt;br/&gt;&amp;gt;&amp;gt; arise.&lt;br/&gt;&amp;gt;&amp;gt; Though maybe this will not occur very fast?  We hope?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It seems to me that the thing that *could* be done would be to have&lt;br/&gt;&amp;gt;&amp;gt; watchtowers provide light-client services, since that seems to be the major&lt;br/&gt;&amp;gt;&amp;gt; business model of watchtowers, as suggested by ariard as well.&lt;br/&gt;&amp;gt;&amp;gt; This is still less than ideal, but maybe is better than nothing.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/20200506/8f7f3555/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200506/8f7f3555/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:00:07&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrmza05lahl9wn4u2qzmhfj98573qdgmxz7u3m20fg0zuq043fc5szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zxxa3jh</id>
    
      <title type="html">📅 Original date posted:2019-12-18 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrmza05lahl9wn4u2qzmhfj98573qdgmxz7u3m20fg0zuq043fc5szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zxxa3jh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8g0s2kjzt5z3jdm3sunc6kgyn8nwl5zhcd3e7aajzlx55kdre40g59pdsm&#39;&gt;nevent1q…pdsm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-12-18&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Bastien,&lt;br/&gt;&lt;br/&gt;The use case you&amp;#39;re describing strikes me as similar to a slashing protocol&lt;br/&gt;for a LN node and a watchtower, i.e punishing&lt;br/&gt;a lazy watchtower for not broadcasting a penalty tx on remote revoked&lt;br/&gt;state. In both case you want &amp;#34;if A don&amp;#39;t do X&lt;br/&gt;unlock some funds for B&amp;#34;.&lt;br/&gt;&lt;br/&gt;Here a rough slashing protocol I&amp;#39;ve sketched out to someone else off-list,&lt;br/&gt;it may work for you use case if you replace the penalty tx&lt;br/&gt;by the funding transaction as a way for the trusted channel funder to clear&lt;br/&gt;his liability. Though you will need onchain interactivity&lt;br/&gt;before the fact but you may be able to reuse slashing outpoint for multiple&lt;br/&gt;channel funding.&lt;br/&gt;&lt;br/&gt;Slashing Protocol&lt;br/&gt;----------------------&lt;br/&gt;&lt;br/&gt;Alice and Bob lock fund in channel outpoint X. They issue commitment tx N.&lt;br/&gt;Will the accountable watchtower locks fund&lt;br/&gt;in a 2-of-2 slashing outpoint Y with Bob the client.&lt;br/&gt;&lt;br/&gt;When Alice and Bob update channels to N&amp;#39;, Bob and Will use some output from&lt;br/&gt;commitment N (like upcoming anchor output)&lt;br/&gt;to create an accountable tx M. M is paying to Bob after timelock&#43;Bob sig or&lt;br/&gt;is paying to transaction success_penalty P&lt;br/&gt;with Will sig &#43; Bob sig. Success_penalty P will have 2 inputs, one from M&lt;br/&gt;and from J the justice tx than Bob has given&lt;br/&gt;to Will. J is spending Alice&amp;#39;s revoked commitment N.&lt;br/&gt;&lt;br/&gt;So this slashing protocol should avoid Bob making false claim, because you&lt;br/&gt;need a revoked broadcast to enable the claim&lt;br/&gt;and at same time we use a justice tx output as a proof than Will have done&lt;br/&gt;its monitoring&#43;punishment job. Will shouldn&amp;#39;t&lt;br/&gt;learn commitment balance if there is no channel breach and Alice and Bob&lt;br/&gt;wouldn&amp;#39;t be able to collude against Will, if&lt;br/&gt;watchtower have a penalty tx on Alice non-revoked commitment tx, that&amp;#39;s her&lt;br/&gt;concern.&lt;br/&gt;&lt;br/&gt;So topology would be:&lt;br/&gt;&lt;br/&gt;                                                       to_Bob&lt;br/&gt;                                                     /&lt;br/&gt;          X  &amp;lt;---------- N   &amp;lt;--------- J&lt;br/&gt;                                ^                   ^&lt;br/&gt;                                   \                   \&lt;br/&gt;            Y &amp;lt;---------------  M  &amp;lt;---------- P - to_Will&lt;br/&gt;                                       \&lt;br/&gt;                                        to_Bob&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Main idea of the protocol is to use transactions topology of a first&lt;br/&gt;contract as proofs for a subsidiary contract.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m quite sure it&amp;#39;s insecure, just quick ideas, any thoughts ?&lt;br/&gt;&lt;br/&gt;(but would be really cool to have one accountable protocol to both&lt;br/&gt;watchtower and pay-to-open use cases to save&lt;br/&gt;engineering costs)&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le mar. 17 déc. 2019 à 16:08, Ethan Heilman &amp;lt;eth3rs at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; From where I&amp;#39;m sitting the fact that OP_CAT allows people to build&lt;br/&gt;&amp;gt; more powerful constructions in Bitcoin without introducing additional&lt;br/&gt;&amp;gt; complexity at the consensus layer is a positive not a negative. Using&lt;br/&gt;&amp;gt; OP_CAT or OP_SUBSTRING to enforce ECDSA nonce reuse is a very powerful&lt;br/&gt;&amp;gt; protocol tool for enforcing fairness in layer two protocols.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Dec 17, 2019 at 11:27 AM ZmnSCPxj via Lightning-dev&lt;br/&gt;&amp;gt; &amp;lt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Good morning t-bast,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Further, we can enforce that RBF is signalled for every spend of the&lt;br/&gt;&amp;gt; output by:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     &amp;lt;0&amp;gt; OP_CHECKSEQUENCEVERIFY OP_DROP &amp;lt;R&amp;gt; OP_SWAP OP_CAT &amp;lt;ACINQ&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKSIG&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Requiring that RBF is signalled gives a little more assurance.&lt;br/&gt;&amp;gt; &amp;gt; Suppose ACINQ becomes evil and double-spends the output.&lt;br/&gt;&amp;gt; &amp;gt; The transaction that is posted in the mempool must be marked by RBF due&lt;br/&gt;&amp;gt; to the `OP_CHECKSEQUENCEVERIFY` opcode, since `nSequence` also doubles as&lt;br/&gt;&amp;gt; RBF opt-in.&lt;br/&gt;&amp;gt; &amp;gt; Then anyone who notices the double-spend can RBF the double-spending&lt;br/&gt;&amp;gt; transaction to themselves rather than ACINQ.&lt;br/&gt;&amp;gt; &amp;gt; This also further publishes ACINQ private key, until the winning&lt;br/&gt;&amp;gt; transaction has an `OP_RETURN` output that pays the entire value as fees&lt;br/&gt;&amp;gt; and nobody can RBF it further.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is a minor increase in the assurability of the construction, by&lt;br/&gt;&amp;gt; making any output that is double-spent directly revocable in favor of the&lt;br/&gt;&amp;gt; miners.&lt;br/&gt;&amp;gt; &amp;gt; Again, it requires `OP_CAT`, which is a very dangerous opcode, allowing&lt;br/&gt;&amp;gt; such powerful constructions.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Regards,&lt;br/&gt;&amp;gt; &amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Thanks a lot David for the suggestion and pointers, that&amp;#39;s a really&lt;br/&gt;&amp;gt; interesting solution.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I will dive into that in-depth, it could be very useful for many&lt;br/&gt;&amp;gt; layer-2 constructions.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Thanks ZmnSCPxj as well for the quick feedback and the `OP_CAT`&lt;br/&gt;&amp;gt; construction,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; a lot of cool tricks coming up once (if?) we have such tools in the&lt;br/&gt;&amp;gt; future ;)&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Le mar. 17 déc. 2019 à 16:14, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; a&lt;br/&gt;&amp;gt; écrit :&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Good morning David, t-bast, and all,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; I&amp;#39;m not aware of any way to currently force single-show signatures&lt;br/&gt;&amp;gt; in&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Bitcoin, so this is pretty theoretical. Also, single-show&lt;br/&gt;&amp;gt; signatures&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; add a lot of fragility to any setup and make useful features like&lt;br/&gt;&amp;gt; RBF&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; fee bumping unavailable.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; With `OP_CAT`, we can enforce that a particular `R` is used, which&lt;br/&gt;&amp;gt; allows to implement single-show signatures.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     # Assuming signatures are the concatenation of (R,s)&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;     &amp;lt;R&amp;gt; OP_SWAP OP_CAT &amp;lt;ACINQ&amp;gt; OP_CHECKSIG&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The above would then feed `s` only on the witness stack.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Regards,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&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/20191217/52ad7f11/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20191217/52ad7f11/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:57:48&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspnu8lcg6ur2sptgl2hmhlv59wmm7alquspwql8ssdmjpn2cf3wdqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z7vnvfm</id>
    
      <title type="html">📅 Original date posted:2019-12-09 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspnu8lcg6ur2sptgl2hmhlv59wmm7alquspwql8ssdmjpn2cf3wdqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z7vnvfm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9e2ursltdq55ylgfdr6slx5nl925g9eyvjk08n5vlg58z6dvh7fgpm0dkk&#39;&gt;nevent1q…0dkk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-12-09&lt;br/&gt;📝 Original message:&lt;br/&gt;Time-Dilation Attacks on Offchain Protocols&lt;br/&gt;===================================&lt;br/&gt;&lt;br/&gt;Lightning works on reversing the double-spend problem to a private&lt;br/&gt;state between parties instead of being a public issue verified by every&lt;br/&gt;network peer. The security model is based on revocation of previous&lt;br/&gt;states and in case of broadcast of any of them, being aware of it to&lt;br/&gt;generate justice transactions to claim misbehaving peer onchain outputs&lt;br/&gt;before contest period expiration. This period is driven by the blockchain&lt;br/&gt;which is here the system clock.&lt;br/&gt;&lt;br/&gt;Eclipse attacks&amp;#39;s end-goal is to monopolize a victim&amp;#39;s incoming and&lt;br/&gt;outgoing connections, by this way isolating a node from the rest of its&lt;br/&gt;peers in the network. A successful Eclipse attacks lets the attacker&lt;br/&gt;filter the victim&amp;#39;s view of the blockchain, i.e he controls transactions&lt;br/&gt;and blocks announcements [0].&lt;br/&gt;&lt;br/&gt;Every LN node must be tied to a bitcoin full-node or light-client to&lt;br/&gt;verify independently channels opening/closing, HTLCs expiration and&lt;br/&gt;previous/latest state broadcast. To operate securely, the view of the&lt;br/&gt;blockchain must be up-to-date with the one shared with the rest of the&lt;br/&gt;network. By considering Eclipse attacks on the base layer, this assumption&lt;br/&gt;can be broken.&lt;br/&gt;&lt;br/&gt;First scenario : Targeting the CSV security delay&lt;br/&gt;--------------------------------------------------------------&lt;br/&gt;&lt;br/&gt;Alice and Mallory are LN peers with a channel opened at state N. They&lt;br/&gt;use a CSV of 144 blocks as a security parameter for contestation period.&lt;br/&gt;Mallory is able to identify Alice full-node and start to eclipse it.&lt;br/&gt;When done, it keeps announcing blocks to Alice node but delaying them by&lt;br/&gt;2min. Given a variance of 10min, after 6 blocks, Mallory will have a&lt;br/&gt;height ahead of Alice of 1, after 24 blocks, a lead of 4, after 144,&lt;br/&gt;a lead of 24, after 1008, a lead of 168.&lt;br/&gt;&lt;br/&gt;After maintaining the eclipse for a week, Mallory will have more than a&lt;br/&gt;day of height advance on Alice view of blockchain. The difference being&lt;br/&gt;superior at the CSV timelock, Mallory can broadcast a previous&lt;br/&gt;commitment transaction at state N - 10 with a balance far more favorable&lt;br/&gt;than the legit one at height H, the synchronized height with the rest&lt;br/&gt;of the network.&lt;br/&gt;&lt;br/&gt;At revoked commitment transaction broadcast, Alice is slow down at&lt;br/&gt;height H - 168. At H&#43;144, Mallory can unlock its funds out of the&lt;br/&gt;commitment transaction outputs and by so closing the contestation period&lt;br/&gt;while Alice is still stuck at H-24. When Alice learn about revoked&lt;br/&gt;broadcast at H, it&amp;#39;s already too late. Mallory may have stopped the&lt;br/&gt;Eclipse attack after H&#43;144, or he may pursue the attack on Alice because&lt;br/&gt;of targeting multiple of her channels in parallel.&lt;br/&gt;&lt;br/&gt;Second scenario : Targeting the per-hop CLTV-delta&lt;br/&gt;-------------------------------------------------------------------&lt;br/&gt;&lt;br/&gt;Alice, Bob and Caroll are LN peers with channel Alice-Bob and Bob-Caroll.&lt;br/&gt;Bob enforce a cltv_delta of 12 blocks on incoming HTLCs. Alice and Caroll&lt;br/&gt;are both malicious and start to eclipse Alice full-node until they gain a&lt;br/&gt;lead of 15 blocks on Alice.&lt;br/&gt;&lt;br/&gt;At height N, Alice route a payment E to Caroll through Bob with a base&lt;br/&gt;delta of 24 blocks. On channel AB, HTLC will expire at height H&#43;24, on&lt;br/&gt;channel BC, it will expire at height H&#43;12 while Alice ticking herself&lt;br/&gt;at height H-15.&lt;br/&gt;&lt;br/&gt;When real-network blockchain height reaches H&#43;24, Caroll provides&lt;br/&gt;preimage P to Bob and following protocol rules she gets a new&lt;br/&gt;commitment transaction with balance increased of HTLC E. At same time,&lt;br/&gt;Alice broadcast unilaterally commitment transaction for AB and claim&lt;br/&gt;back HTLC E with a HTLC-timeout transaction as its nLockTime is already&lt;br/&gt;final. Bob wrongly clocking at height H&#43;9, HTLC on channel BC won&amp;#39;t have&lt;br/&gt;been timeout by him and provided preimage is now useless as HTLC as&lt;br/&gt;already claimed back on mainnet blockchain.&lt;br/&gt;&lt;br/&gt;Attack difficulty&lt;br/&gt;-------------------&lt;br/&gt;&lt;br/&gt;Following Eclipse attack paper publication, multiple counter-measures&lt;br/&gt;have been implemented [1], [2]. Even if it&amp;#39;s far harder, this kind of&lt;br/&gt;attacks may still be possible for an off-path attacker. Including recent&lt;br/&gt;changes, research should be done to ascertain it. Beyond, it still&lt;br/&gt;widely feasible for attackers controlling key infrastructure between&lt;br/&gt;the victim and the network [3]. A simple Tier 3 ISP doing deep packet&lt;br/&gt;inspection and delaying your blocks may be able to practice this class&lt;br/&gt;of attacks.&lt;br/&gt;&lt;br/&gt;The case of LN nodes using light clients, like BIP157 or Electrum, as a&lt;br/&gt;backend should be specially considered. Given the low number of servers&lt;br/&gt;providing these services today it should be trivial for an attacker to run&lt;br/&gt;swarm of them and from then control blockchain view of this class of LN&lt;br/&gt;nodes.&lt;br/&gt;&lt;br/&gt;Another difficulty of the attack, is to map the LN node to its full-node.&lt;br/&gt;This can range from being trivial if both run in clear with same ipv4&lt;br/&gt;address. It would be interesting to scan both networks and see how many&lt;br/&gt;nodes pair are in this case. Learning the mapping can still be doable if&lt;br/&gt;they are using an anonymous network like Tor with same exit node base on&lt;br/&gt;message timing.&lt;br/&gt;&lt;br/&gt;Further inter-layer mapping techniques could be developped like funding&lt;br/&gt;transaction broadcast and seeing its propagation on the base layer. Or&lt;br/&gt;knowledge of onchain utxo graph leaked by addressed reused to fund&lt;br/&gt;channels.&lt;br/&gt;&lt;br/&gt;On the LN-side, depending of the scenario, cost of the attack ranges&lt;br/&gt;between opening one or two channels and paying the related onchain fees.&lt;br/&gt;That being said, an attacker can also target victim-initiated channels&lt;br/&gt;and costs would be reduced only to operating LN nodes.&lt;br/&gt;&lt;br/&gt;Onchain counter-measures&lt;br/&gt;-----------------------------------&lt;br/&gt;&lt;br/&gt;Warnings could be triggered by full-node when the block issuance rate&lt;br/&gt;becomes weird but first it&amp;#39;s hard to dissociate weirdness from edges of&lt;br/&gt;block variance and secondly the algo being public it should be easy for&lt;br/&gt;an attacker to stay under the radar by choosing the right announcement&lt;br/&gt;delay.&lt;br/&gt;&lt;br/&gt;Raising alarms based on nTime of block headers being to far in the past&lt;br/&gt;compare to local clock wouldn&amp;#39;t make sense due to IBD.&lt;br/&gt;&lt;br/&gt;A practical solution would be to have multiple bitcoin full-nodes&lt;br/&gt;with multi-homing and doing reconciliation of blockchain views every&lt;br/&gt;N hour/minute. This kind of method, already deployed by some bitcoin&lt;br/&gt;infrastructures, would raise attack difficulty for off-path attackers&lt;br/&gt;but wouldn&amp;#39;t counter in-path attackers. Nevertheless, it would already&lt;br/&gt;be a good step, the issue is the current absent of implementing this&lt;br/&gt;in open-source software for hobbyists.&lt;br/&gt;&lt;br/&gt;A defense in depth would require to have multiple data links, like&lt;br/&gt;receiving headers from space/radio or tunneling through&lt;br/&gt;some other protocols [4].&lt;br/&gt;&lt;br/&gt;Even learning discrepancies between your local view of the blockchain&lt;br/&gt;and the mainnet one, the right move to do isn&amp;#39;t clear as an automatic&lt;br/&gt;system may be triggered by false positives to halt operation of your LN&lt;br/&gt;node, a human intervention to double-check may seem preferable. And&lt;br/&gt;it&amp;#39;s really likely the attacker control you ability of transactions&lt;br/&gt;on the base layer. BIP324 may help there.&lt;br/&gt;&lt;br/&gt;Offchain counter-measures&lt;br/&gt;-----------------------------------&lt;br/&gt;&lt;br/&gt;Some LN errors messages may be triggered at abnormal rate like&lt;br/&gt;`expiry_too_soon`  due to victim using a HTLC base in the past and may&lt;br/&gt;be used to guess oddities.&lt;br/&gt;&lt;br/&gt;A measure orthogonal to running multiple bitcoin full-nodes should be&lt;br/&gt;to have multiples watchtowers running their own blocks provider (full-node&lt;br/&gt;or light clients). Assuming attacker don&amp;#39;t control your connection to them,&lt;br/&gt;if at least one of them isn&amp;#39;t eclipsed, it should be able to time-out HTLC/&lt;br/&gt;justice revoked transaction efficiently.&lt;br/&gt;&lt;br/&gt;Another option would be to use the control plane as a safety mechanism.&lt;br/&gt;When a LN node learns a channel_announcement to far in the future it&lt;br/&gt;would ask to this LN node, few next headers through this communication&lt;br/&gt;channel and connect these headers to its full-node. Based on this&lt;br/&gt;information, full-node may trigger alarms more accurately. This mechanism&lt;br/&gt;would work assuming one of your gossiping LN node is honest. It may ask&lt;br/&gt;for fine-tuning to avoid there too false-positives but it seems an&lt;br/&gt;interesting topic of research to use L2 information to correct L1 blockchain&lt;br/&gt;view and even further to use L2 communications channels as an emergency&lt;br/&gt;transaction broadcast.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Further research could be lead to investigate attacks combining eclipsing&lt;br/&gt;victim&lt;br/&gt;view of both layer, that&amp;#39;s said the LN one may seem harder to take on as&lt;br/&gt;nodes&lt;br/&gt;have persistent identities.&lt;br/&gt;&lt;br/&gt;Eclipse attacks were already known to be very bad, offchain protocols&lt;br/&gt;relying on time for their security model make them worst at it lower the bar&lt;br/&gt;to exploit them from being a miner to being party to an offchain contract.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;After talking with LN implementations teams, they don&amp;#39;t think funds are at&lt;br/&gt;risks,&lt;br/&gt;given than light clients have low-value channels right now and it&amp;#39;s not&lt;br/&gt;worthy the&lt;br/&gt;attack setup, but they acknowledge the issue on the long term for&lt;br/&gt;processing nodes.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Thanks to Gleb Naumenko for fruitful discussions/review.&lt;br/&gt;&lt;br/&gt;Cheers&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://eprint.iacr.org/2015/263.pdf&#34;&gt;https://eprint.iacr.org/2015/263.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/9037&#34;&gt;https://github.com/bitcoin/bitcoin/pull/9037&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/8282&#34;&gt;https://github.com/bitcoin/bitcoin/pull/8282&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://erebus-attack.comp.nus.edu.sg/&#34;&gt;https://erebus-attack.comp.nus.edu.sg/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[4] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16834&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16834&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/20191209/cd6947dc/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20191209/cd6947dc/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:57:37&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs93uutny8mqrjvfgmmg2lk5q5h3xqxdpwlzytv3yfvghpx4s7q62gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqt93r5</id>
    
      <title type="html">📅 Original date posted:2022-12-01 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs93uutny8mqrjvfgmmg2lk5q5h3xqxdpwlzytv3yfvghpx4s7q62gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zqt93r5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv6gkwrz0ydmvwm5cgg6kqccps9jyjjgv4qzpu6fak0h6arg9kwysvhlde4&#39;&gt;nevent1q…lde4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-12-01&lt;br/&gt;📝 Original message:Hi Daniel,&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding of GAP600, you&amp;#39;re operating a zero-conf risk analysis&lt;br/&gt;business, which is integrated and leveraged by payment processors/liquidity&lt;br/&gt;providers and merchants. A deployment of fullrbf by enough full-node&lt;br/&gt;operators and a subset of the mining hashrate would lower the cost of&lt;br/&gt;double-spend attack by lamda users, therefore increasing the risk exposure&lt;br/&gt;of your users. This increased risk exposure could lead you to alter the&lt;br/&gt;acceptance of incoming zero-conf transactions, AFAICT in a similar&lt;br/&gt;reasoning as exposed by Bitrefill earlier this year [0].&lt;br/&gt;&lt;br/&gt;About the statistics you&amp;#39;re asking for considerations, few further&lt;br/&gt;questions, on those 1.5M transactions per month, a) how many are&lt;br/&gt;Bitcoin-only (as I understand to be multi-cryptocurrencies), b) how many&lt;br/&gt;are excluded from zeroconf due to factors like RBF, long-chain of&lt;br/&gt;unconfirmed ancestors or too high-value and c) what has been the average&lt;br/&gt;feerate (assuming a standard size of 200 bytes) ?&lt;br/&gt;&lt;br/&gt;My personal position on fullrbf is still the same as expressed in #26525&lt;br/&gt;[1]. As a community, I think we still don&amp;#39;t have conceptual consensus on&lt;br/&gt;deploying full-rbf, neither to remove it. In the direction of removing the&lt;br/&gt;current option from Bitcoin Core, I think the prerequisite to address are&lt;br/&gt;the qualification of enough economic flows at risk and the presence of a&lt;br/&gt;sizable loss in miners income. Beyond that, I think there is still the open&lt;br/&gt;question if we (we, as the Bitcoin protocol development community, with all&lt;br/&gt;its stakeholders) should restrain user choice in policy settings in the&lt;br/&gt;name of preserving mining income and established use-case stability.&lt;br/&gt;&lt;br/&gt;To recall, the original technical motivation of this option, and the wider&lt;br/&gt;smoother deployment was to address a DoS vector affecting another class of&lt;br/&gt;use-case: multi-party transactions like coinjoin and contracting protocols&lt;br/&gt;like Lightning [2] [3]. All of them expect to generate economic flows and&lt;br/&gt;corresponding mining income. Since then, alternative paths to solve this&lt;br/&gt;DoS vector have been devised, all with their own trade-offs and conceptual&lt;br/&gt;issues [4] [5].&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021070.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021070.html&lt;/a&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/26525#issuecomment-1319499006&#34;&gt;https://github.com/bitcoin/bitcoin/pull/26525#issuecomment-1319499006&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&lt;/a&gt;&lt;br/&gt;[3]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;[4]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021135.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021135.html&lt;/a&gt;&lt;br/&gt;[5]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-November/021144.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-November/021144.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le jeu. 1 déc. 2022 à 07:32, Daniel Lipshitz via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; HI All&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am the CEO of GAP600. We guarantee zero confirmed Bitcoin and other&lt;br/&gt;&amp;gt; crypto  transactions, BTC is a primary part of our business. Our guarantee&lt;br/&gt;&amp;gt; enables our customers to recognise zero-conf deposits. We reimburse our&lt;br/&gt;&amp;gt; clients value of the trx should we get it wrong and a transaction we&lt;br/&gt;&amp;gt; confirmed gets double spent.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Should full RBF become default enabled and significantly adopted this&lt;br/&gt;&amp;gt; would have a major impact on the capacity to accept zerof confs on mainnet.&lt;br/&gt;&amp;gt; With the end result being this use case will be forced to move to a&lt;br/&gt;&amp;gt; different chain, with lightning being just another option.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I wanted to share some statistics about how significant this use case is.&lt;br/&gt;&amp;gt; GAP600 clients are primarily payment processors and non custodial&lt;br/&gt;&amp;gt; liquidity providers; you can see some of our clients on our site&lt;br/&gt;&amp;gt; www.gap600.com. There are also merchants who have developed their own&lt;br/&gt;&amp;gt; tools so GAP600 statistics are only a subset of the full use case.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I do not know of any wallet, exchange or custodian who accepts zero conf&lt;br/&gt;&amp;gt; without having some sort of solution in place. The market seems to be fully&lt;br/&gt;&amp;gt; aware of the risks of zero-conf. The opt-RBF seems to be a solution which&lt;br/&gt;&amp;gt; gives a clear free choice for actors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Statistics for consideration as a sample of the zero conf use case -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    1. As of end of Nov 2022 - GAP600 has processed i.e responded to circa&lt;br/&gt;&amp;gt;    15M transactions&lt;br/&gt;&amp;gt;    2. These transactions have a cumulative value of 2.3B USD value.&lt;br/&gt;&amp;gt;    3. We currently are seeing circa 1.5M transactions queired per month.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s a sizable amount of trxs on mainet and we are by no means the full&lt;br/&gt;&amp;gt; market of platforms accepting zero-conf.  I realise there are other&lt;br/&gt;&amp;gt; considerations which BTC has,  I would urge you to take into account the&lt;br/&gt;&amp;gt; major risk being placed on this significant market share when deciding to&lt;br/&gt;&amp;gt; make this feature default enabled and encouraging full adoption.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you for your consideration&lt;br/&gt;&amp;gt; Daniel&lt;br/&gt;&amp;gt; ________________________________&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Daniel Lipshitz&lt;br/&gt;&amp;gt; GAP600| www.gap600.com&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20221201/ef417993/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221201/ef417993/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:17:11&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsp4j8czlszzfzfjtjlusc5meejjycc0mzrg0xtejzk34207kmw8eqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24za2ayye</id>
    
      <title type="html">📅 Original date posted:2022-11-02 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsp4j8czlszzfzfjtjlusc5meejjycc0mzrg0xtejzk34207kmw8eqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24za2ayye" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2mlxqfxs04cmgh59dlvmlsqaz2ckvlu3mdrlnellz3v2wakrcexce7lf7v&#39;&gt;nevent1q…lf7v&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-02&lt;br/&gt;📝 Original message:Hi Suhas,&lt;br/&gt;&lt;br/&gt;&amp;gt;From my understanding, the main crux of the reasoning exposed in your post&lt;br/&gt;would be to solidify the transaction-relay paradigm we have been following&lt;br/&gt;during the last years, e.g introducing the carve-out rule specifically for&lt;br/&gt;lightning commitment transactions, or more recently version=3 transactions.&lt;br/&gt;I think this paradigm could be described summarly as &amp;#34;to each use-case&lt;br/&gt;belongs a set of transaction-relay policy rules&amp;#34;. Some of this set of rules&lt;br/&gt;could aim to non-replacement guarantees to the consumers of transactions&lt;br/&gt;signaling under this regime (e.g zeroconf). Another set of rules could&lt;br/&gt;provide a high-guarantee that a transaction would always get to a miner, no&lt;br/&gt;matter what the state of node&amp;#39;s mempools on the network (e.g &amp;#34;maximal rbf&amp;#34;&lt;br/&gt;for contracting protocols).&lt;br/&gt;&lt;br/&gt;First, coming out of my mind, we would have to consider isolation between&lt;br/&gt;each set of policy rules, ensuring the signaling mechanism cannot be abused&lt;br/&gt;by an attacker to create a new pinning vector. E.g, a hypothetical concern&lt;br/&gt;could be BIP125 rules interfering with version=3 policy to block the&lt;br/&gt;replacement of better ancestor feerate packages. Further, for each set of&lt;br/&gt;policy rules arises the question of internal consistency, again an attacker&lt;br/&gt;could abuse them to pin transactions&lt;br/&gt;propagation. I think an earlier version of version=3 was suffering from&lt;br/&gt;this concern of not scoping potential &amp;#34;junk&amp;#34; ancestors. None of those&lt;br/&gt;issues are unsolvable, however we should be well-aware of the&lt;br/&gt;non-negligeable design complexity encumbered by transaction-relay protocol&lt;br/&gt;developers to achieve the correct goal. There is not only a need to ensure&lt;br/&gt;careful policy rules security analysis, but further to communicate well&lt;br/&gt;their usage to second-layers and wallets developers (a task far from easy&lt;br/&gt;with all the confusions contained by current BIP125).&lt;br/&gt;&lt;br/&gt;Now, in the evaluation process of a set of policy rules soundness are&lt;br/&gt;proposed a few reasoning heuristics: namely that it shouldn&amp;#39;t interfere&lt;br/&gt;sensibly with a anti-DoS mempool acceptance algorithm, or shouldn&amp;#39;t&lt;br/&gt;interfere with other protocols on the network, or counter the interests of&lt;br/&gt;miners or node operators. I hold the belief the latest question could be&lt;br/&gt;the one raising the most concerns. Browsing in the history of Bitcoin Core,&lt;br/&gt;I think one of the design goals aimed for has always been to level the&lt;br/&gt;playing field between miners, e.g BIP152 improving block transfer latency&lt;br/&gt;to reduce orphan rate. Following this principle, we might wonder if our&lt;br/&gt;transaction-relay network should guarantee some equal access to transaction&lt;br/&gt;information to all the miners.&lt;br/&gt;&lt;br/&gt;In the present case of a non-replacement policy regime, we could see the&lt;br/&gt;following situation to arise, on one side miners deploying private&lt;br/&gt;transaction-relay communication channels or API to capture higher fees&lt;br/&gt;income from non-standard transactions. On the other-side, transaction&lt;br/&gt;issuers or consumers bypass the standard transaction-relay policy rules.&lt;br/&gt;Bypass could be motivated by either a zeroconf service double-spend, or&lt;br/&gt;faster confirmation of a collaborative transaction. E.g, to reuse the&lt;br/&gt;example of unconfirmed transaction chaining, where the sender commit to&lt;br/&gt;non-replacement by opting out from the RBF flag, this commitment could be&lt;br/&gt;reevaluated in the light of changing network mempools congestion, or&lt;br/&gt;liquidity preferences (e.g the quick need to open LN routing channels). The&lt;br/&gt;sender could leverage such hypothetical private transaction-relay&lt;br/&gt;communication channels to revoke its non-replacement commitment. Therefore&lt;br/&gt;discrepancies between a set of policy rules design and miners incentives&lt;br/&gt;sounds to lead to informational asymmetries, harmful for the long-term&lt;br/&gt;decentralization of the mining ecosystem. Of course, miner incomes&lt;br/&gt;asymmetries due to edge in transaction flows access might not be weighted&lt;br/&gt;as serious today, in a world where transaction fees contribute to most of&lt;br/&gt;the block reward, this is far more worrying!&lt;br/&gt;&lt;br/&gt;Of course, one position could be to estimate that miner centralization is&lt;br/&gt;beyond the scope of responsibility of the Bitcoin Core project. Or at least&lt;br/&gt;as a result of lightweighted risks.&lt;br/&gt;&lt;br/&gt;Such discrepancy between a set of policy rules design and miners incentives&lt;br/&gt;could also lead to hidden security risks for second-layers. As we see more&lt;br/&gt;security assumptions made on policy rules extension, e.g version=3, a&lt;br/&gt;lightning channel counterparty could have a competing interest to forge a&lt;br/&gt;raw package suiting better incentives, and as such nullify the security&lt;br/&gt;advantage expected. This could be seen as a loose concern, however the last&lt;br/&gt;time we have seen an actor deliberately providing non-standard transactions&lt;br/&gt;to a miner to break second-layers was yesterday [0]!. From observing other&lt;br/&gt;cryptocurrencies spaces, such &amp;#34;MEV-style&amp;#34; attacks could be more and more&lt;br/&gt;concerning [1]. I don&amp;#39;t think we should assume miners to behave as &amp;#34;network&lt;br/&gt;gentlemen&amp;#34;, in a world where mining can be anonymous, permissionless and&lt;br/&gt;censorship-resistant (e.g Stratum V2 giving back template construction to&lt;br/&gt;miners operators rather than pools).&lt;br/&gt;&lt;br/&gt;According to me, one of the harder problem we&amp;#39;re seeing with this fullrbf&lt;br/&gt;discussion is the lack of a consistent, grounded and well-understood miner&lt;br/&gt;incentive model, where not only block template construction but also&lt;br/&gt;transaction collection and replacement strategies are analyzed, and against&lt;br/&gt;which we could simulate the efficiency of a policy. Assuming we would have&lt;br/&gt;such a model, rather than qualify a policy rule as incentive-compatible in&lt;br/&gt;a binary fashion, we could evaluate them on a scale, and agree on when&lt;br/&gt;they&amp;#39;re satisfying enough in face of technical complexity, validation&lt;br/&gt;resources, margin of adversarial exploitation, or whatever other relevant&lt;br/&gt;criteria.&lt;br/&gt;&lt;br/&gt;Answering a few other points raised in this post, what appears to me&lt;br/&gt;obscure is the qualification that fullrbf doesn&amp;#39;t solve the DoS issues for&lt;br/&gt;contracting protocols (e..g coinjoin/dual-funded lightning). If I can&lt;br/&gt;understand, it&amp;#39;s on the ground that the imperfections of BIP125 underscore&lt;br/&gt;only the direct conflict feerate. It should be remembered that allowing&lt;br/&gt;replacement without considering the opting flag would be already an&lt;br/&gt;improvement against the DoS attack, as the attack would have to offer a&lt;br/&gt;more compelling feerate to maintain the pin. Improvements of BIP125 can&lt;br/&gt;happen on the top, but solving the opt-out double-spend issue sounds to me&lt;br/&gt;a prerequisite.&lt;br/&gt;&lt;br/&gt;Beyond that, I think few questions are laid out on the conceptual soundness&lt;br/&gt;of v3 transaction policy w.r.t concerns raised about fullrbf today. In my&lt;br/&gt;opinion, I&amp;#39;m sadly with most of them, especially that miners might earn&lt;br/&gt;more revenue if we allowed multiple descendant v3 transactions and the&lt;br/&gt;unenforceable promise for the recipient of such package to not add more&lt;br/&gt;high-value children, I&amp;#39;ve echoed those concerns earlier in the review of&lt;br/&gt;nVersion=3 proposal [2]. We might have to swallow the bullet for now, and&lt;br/&gt;be okay as lightning developers and operators that there is only a social&lt;br/&gt;inertia of the miners and lack of reliable communication channels towards&lt;br/&gt;them by an adversarial counterparty to offer security [3]. Additionally, I&lt;br/&gt;think it would be acceptable to have an option to disable v3 transaction&lt;br/&gt;policy, an operator could be willing to reduce the CPU/memory DoS surface&lt;br/&gt;of its node from partaking to any package relay. Even if it comes at the&lt;br/&gt;loss of a better view of blockspace demand and downgrades its&lt;br/&gt;fee-estimation, I think we should give the maximum flexibility to operators&lt;br/&gt;in choosing their risk model.&lt;br/&gt;&lt;br/&gt;To put it in a nutshell, if we would like to pursue further in the paradigm&lt;br/&gt;that &amp;#34;to each use-case belongs its set of policy rules&amp;#34; (as long as they&lt;br/&gt;don&amp;#39;t introduce any harm for the network stakeholders), I believe we would&lt;br/&gt;be more grounded with a better quantitative understanding of so-called&lt;br/&gt;&amp;#34;miners incentives&amp;#34;. I&amp;#39;m still wondering if it&amp;#39;s realistic to deploy policy&lt;br/&gt;rules that are not sustainable in face of long-term mining dynamics.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/lightningnetwork/lnd/issues/7096&#34;&gt;https://github.com/lightningnetwork/lnd/issues/7096&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] On risks of introducing miner harvesting attacks, especially when you&lt;br/&gt;consider implications on lightning-style constructions&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-February/002569.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-February/002569.html&lt;/a&gt;&lt;br/&gt;and&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019615.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019615.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020939.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020939.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;#34;If you&amp;#39;re a miner and you receive a non-V3, second descendant of an&lt;br/&gt;unconfirmed V3 transaction, if the offered fee is in the top mempool&lt;br/&gt;backlog, I think you would have an interest to accept such a transaction.&lt;br/&gt;&lt;br/&gt;So I&amp;#39;m not sure if those two rules are compatible with miners incentives...&amp;#34;&lt;br/&gt;&lt;br/&gt;[3] This wonders if we should look forward in the future to lock in the&lt;br/&gt;CPFP weight of a Lightning commitment with some new consensus semantic, or&lt;br/&gt;leveraging any covenant magic, cf.&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-March/020122.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-March/020122.html&lt;/a&gt;&lt;br/&gt;and&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/020991.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/020991.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le lun. 31 oct. 2022 à 11:02, Suhas Daftuar via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; AJ,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for the thoughtful post. I think your observations about how we&lt;br/&gt;&amp;gt; view mempool policy in the Bitcoin Core project, and how that seems to be&lt;br/&gt;&amp;gt; changing in the discussions around `-mempoolfullrbf`, are on-point and&lt;br/&gt;&amp;gt; provide a helpful baseline for considering future policy changes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For a long time I viewed fullrbf as an eventuality and I considered myself&lt;br/&gt;&amp;gt; to be philosophically supportive of the idea.  However, after giving this&lt;br/&gt;&amp;gt; issue some thought in the past few weeks, I am reversing my thinking on&lt;br/&gt;&amp;gt; this.  Concretely, I will argue that we should continue to maintain a relay&lt;br/&gt;&amp;gt; policy where replacements are rejected for transactions that don&amp;#39;t opt-in&lt;br/&gt;&amp;gt; to RBF (as described in BIP 125), and moreover, that we should remove the&lt;br/&gt;&amp;gt; `-mempoolfullrbf` flag from Bitcoin Core’s latest release candidate and not&lt;br/&gt;&amp;gt; plan to release software with that flag, unless (or until) circumstances&lt;br/&gt;&amp;gt; change on the network, which I&amp;#39;ll discuss below.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is, of course, a nuanced topic, and among the considerations is a&lt;br/&gt;&amp;gt; philosophy of how to think about the relay policy and configuration options&lt;br/&gt;&amp;gt; that we make available in Bitcoin Core (a consideration that is perhaps&lt;br/&gt;&amp;gt; unique to that project, but I think relevant for this mailing list).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;ll start with some technical issues regarding the benefits of enabling&lt;br/&gt;&amp;gt; fullrbf on the network.  In the current BIP 125 regime, every time a&lt;br/&gt;&amp;gt; transaction is created, a choice is made whether to subject the transaction&lt;br/&gt;&amp;gt; to BIP 125’s RBF rules or not (based on the sequence values of the&lt;br/&gt;&amp;gt; inputs).  So given that users can already opt-in to RBF, the benefit of a&lt;br/&gt;&amp;gt; “fullrbf” network policy would be if, somehow, RBF users were still denied&lt;br/&gt;&amp;gt; the benefits of RBF due to the existence of other transactions that don’t&lt;br/&gt;&amp;gt; opt-in.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Along those lines, Antoine Riard brought up[1] a DoS vector that is&lt;br/&gt;&amp;gt; available to someone who wants to interfere with multi-party funded&lt;br/&gt;&amp;gt; transactions, and suggested that fullrbf would eliminate the problem.&lt;br/&gt;&amp;gt; After exploring that question again in this thread (thanks to Greg Sanders&lt;br/&gt;&amp;gt; for clarifying this to me), I understand that the issue is around ensuring&lt;br/&gt;&amp;gt; that a multiparty (coinjoin-type) protocol is able to make eventual&lt;br/&gt;&amp;gt; progress, by having a candidate multiparty transaction either eventually&lt;br/&gt;&amp;gt; confirm or become conflicted with something that has been confirmed, in&lt;br/&gt;&amp;gt; which case the double-spend information could be used to start a new&lt;br/&gt;&amp;gt; coinjoin round with fewer participants.  The concern Antoine and Greg have&lt;br/&gt;&amp;gt; brought up is that non-rbf transactions can persist in the mempool&lt;br/&gt;&amp;gt; ~indefinitely (at a low feerate and not subject to replacement) and&lt;br/&gt;&amp;gt; interfere with progress being made in a coinjoin protocol.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, it seems to me that similar problems exist for such a protocol&lt;br/&gt;&amp;gt; even in a fullrbf world, as we understand that term today.  I mentioned the&lt;br/&gt;&amp;gt; ability for rbf “pinning” to interfere with relay of the multiparty&lt;br/&gt;&amp;gt; transaction (even if the conflicting transaction signals for RBF – a set of&lt;br/&gt;&amp;gt; large but low feerate conflicting transactions can persist in the mempool&lt;br/&gt;&amp;gt; and make it difficult for the coinjoin transaction from confirming, at&lt;br/&gt;&amp;gt; least without attaching a very large fee); and as Greg mentioned in a&lt;br/&gt;&amp;gt; followup, the BIP 125 rule to only permit 100 transactions to be removed&lt;br/&gt;&amp;gt; from the mempool at a time during a replacement can also be used to pin a&lt;br/&gt;&amp;gt; coinjoin protocol in the same way as a non-rbf transaction today.  It seems&lt;br/&gt;&amp;gt; to me that what these multiparty protocols actually need is some sort of&lt;br/&gt;&amp;gt; &amp;#34;maximal rbf&amp;#34; network policy: a way to guarantee that a transaction which&lt;br/&gt;&amp;gt; should be desirable for a miner to mine would always get to a miner and&lt;br/&gt;&amp;gt; considered for inclusion in a block, no matter what the state of node’s&lt;br/&gt;&amp;gt; mempools on the network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While that sounds like a reasonable thing to want on its face (and worth&lt;br/&gt;&amp;gt; working on), it&amp;#39;s not how opt-in RBF works today, nor is it how transaction&lt;br/&gt;&amp;gt; relay has ever conceptually worked.  We have not, thus far, been able to&lt;br/&gt;&amp;gt; come up with a total ordering on transaction desirability.  Moreover, due&lt;br/&gt;&amp;gt; to all the DoS issues that exist with transaction relay, there are plenty&lt;br/&gt;&amp;gt; of seemingly legitimate ways to construct transactions that would not relay&lt;br/&gt;&amp;gt; well on the network.  Relay has only ever been a best-efforts concept,&lt;br/&gt;&amp;gt; where we carve out a small subset of the entire transaction universe for&lt;br/&gt;&amp;gt; which we try to optimize propagation.  The idea behind this approach is&lt;br/&gt;&amp;gt; that if every use case we can come up with has some way to achieve its&lt;br/&gt;&amp;gt; goals using transactions that should (eventually) be able to relay, then&lt;br/&gt;&amp;gt; users wouldn’t have much demand for transactions that would deviate from&lt;br/&gt;&amp;gt; the supported policies, and we therefore shouldn’t need to worry too much&lt;br/&gt;&amp;gt; about incentive compatibility concerns when it comes to transaction types&lt;br/&gt;&amp;gt; that wouldn’t relay at all, even if they are high feerate.  (And when those&lt;br/&gt;&amp;gt; situations arise where the standard transactions do not accommodate some&lt;br/&gt;&amp;gt; needed use case, developers typically work to define a policy that is&lt;br/&gt;&amp;gt; compatible with our anti-DoS goals to support such use cases, such as with&lt;br/&gt;&amp;gt; the recent proposal for version=3 transactions [2].)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; BIP 125&amp;#39;s RBF rules themselves were an effort to carve out just a subset&lt;br/&gt;&amp;gt; of situations where a transaction should evict conflicting ones -- it was&lt;br/&gt;&amp;gt; not a design that anyone thought would ensure that all replacements which&lt;br/&gt;&amp;gt; &amp;#34;should&amp;#34; be mined would always propagate.  And I don&amp;#39;t believe that we know&lt;br/&gt;&amp;gt; how to design policy rules that would achieve the goals of this kind of&lt;br/&gt;&amp;gt; multiparty protocol in a DoS resistant way, today.  Along those lines, I&lt;br/&gt;&amp;gt; would point out that even the BIP 125 design itself is not entirely&lt;br/&gt;&amp;gt; incentive compatible, in that it is possible to construct a replacement&lt;br/&gt;&amp;gt; transaction that would evict transactions which would be preferable to be&lt;br/&gt;&amp;gt; included in a block! [3]  (This has been known for years, but fixing this&lt;br/&gt;&amp;gt; has proven difficult, and the only way to fix it that I’m aware of would be&lt;br/&gt;&amp;gt; to make BIP 125 RBF even more restrictive than it is today. I do think this&lt;br/&gt;&amp;gt; is something that needs to be worked on.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given the limitations of RBF as we have it today, it appears to be&lt;br/&gt;&amp;gt; incorrect that a fullrbf network policy would solve the problems Antoine&lt;br/&gt;&amp;gt; raised.  And so absent any other examples, it does not seem to me that&lt;br/&gt;&amp;gt; fullrbf solves any problems for RBF users, who are already free to choose&lt;br/&gt;&amp;gt; to subject their transactions to BIP 125’s RBF policy.  From this&lt;br/&gt;&amp;gt; perspective, &amp;#34;enabling fullrbf&amp;#34; is really just taking away user choice to&lt;br/&gt;&amp;gt; opt a transaction into a non-replacement policy regime.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think we should ask, then, whether it is reasonable on its face that&lt;br/&gt;&amp;gt; users might want to opt-in to a non-replacement policy?  Or in other words,&lt;br/&gt;&amp;gt; is it reasonable for a user to mark a transaction as non-replaceable and&lt;br/&gt;&amp;gt; have that indication be enforced by the network? Note that these are two&lt;br/&gt;&amp;gt; different questions: you could imagine a world where fullrbf is a dominant&lt;br/&gt;&amp;gt; policy, but users still use the BIP 125 signaling method to indicate, in an&lt;br/&gt;&amp;gt; unenforced way, their intention to not replace a transaction.  This might&lt;br/&gt;&amp;gt; give useful information to the network or the recipient for how to interact&lt;br/&gt;&amp;gt; with such a transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And I think that it&amp;#39;s entirely possible that users would continue to use&lt;br/&gt;&amp;gt; the BIP 125 signaling to indicate that they do not intend to replace a&lt;br/&gt;&amp;gt; transaction.  For better or worse, this might be because zeroconf services&lt;br/&gt;&amp;gt; continue to differentiate their behavior based on such a signal (possibly&lt;br/&gt;&amp;gt; in conjunction with other factors), or it could be because there are other&lt;br/&gt;&amp;gt; behaviors that could be utilized more effectively if the transaction&lt;br/&gt;&amp;gt; originator has made such a signal, such as the recipient chaining an&lt;br/&gt;&amp;gt; unconfirmed transaction as a way to bump the fee (CPFP) [4].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If it were to be the case that users continued to use BIP 125-style&lt;br/&gt;&amp;gt; signaling to indicate that they do not plan to replace a transaction, would&lt;br/&gt;&amp;gt; that be harmful to the network?  This is not something we can stop in our&lt;br/&gt;&amp;gt; policy rules (short of censoring such transactions, an obviously bad&lt;br/&gt;&amp;gt; idea).  I think network actors can always do things that we might think are&lt;br/&gt;&amp;gt; harmful for the network, but that doesn’t mean that there are no legitimate&lt;br/&gt;&amp;gt; use cases for the tools that such actors might be using.  Just because&lt;br/&gt;&amp;gt; someone might use some policy to adopt a zeroconf model, doesn’t mean that&lt;br/&gt;&amp;gt; others aren’t using the same policy to achieve benign ends (such as better&lt;br/&gt;&amp;gt; CPFP behavior).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Moreover, while users might attempt to exploit services that offer&lt;br/&gt;&amp;gt; zeroconf or other differentiated behavior to non-replacement signaling&lt;br/&gt;&amp;gt; transactions, they also might not -- I think predicting user behavior in&lt;br/&gt;&amp;gt; this way (and specifically predicting the complexities of what a business&lt;br/&gt;&amp;gt; might do and whether users might try to subvert it) is beyond the scope of&lt;br/&gt;&amp;gt; what we can do as protocol developers.  Instead, I think we can try to&lt;br/&gt;&amp;gt; answer a different question: if a group of users were to want the ability&lt;br/&gt;&amp;gt; to opt-in to a non-replacement policy regime, is that a technically sound&lt;br/&gt;&amp;gt; option for us to have on the network and enforce in software?&lt;br/&gt;&amp;gt; Specifically, does that interfere with having a sensible anti-DoS mempool&lt;br/&gt;&amp;gt; acceptance algorithm, or interfere with other protocols on the network, or&lt;br/&gt;&amp;gt; necessarily run counter to the interests of miners or node operators?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And I think the answer to that question, in looking at the difference&lt;br/&gt;&amp;gt; between opt-in RBF and fullrbf, is no: offering the ability to opt-in to a&lt;br/&gt;&amp;gt; non-replacement regime for transactions doesn&amp;#39;t introduce any fundamental&lt;br/&gt;&amp;gt; issues with software or network policy or other protocols.  In a world&lt;br/&gt;&amp;gt; where we only had fullrbf, I could imagine at some point down the road&lt;br/&gt;&amp;gt; proposing a non-replacement signal myself, because the complexities around&lt;br/&gt;&amp;gt; transaction chains (and pinning) are more complex for the RBF case than for&lt;br/&gt;&amp;gt; the non-RBF case (and BIP 125 is not always incentive compatible to begin&lt;br/&gt;&amp;gt; with!).  Conceptually, this is no different to me than the version=3&lt;br/&gt;&amp;gt; transaction policy proposal that has been advancing, if we think of it as a&lt;br/&gt;&amp;gt; special set of restrictions on transactions designed to accommodate a&lt;br/&gt;&amp;gt; particular use case.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Philosophically, I think we should be looking to add non-interfering use&lt;br/&gt;&amp;gt; cases to what the network supports.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To those who argue for making fullrbf a default policy on the network (or&lt;br/&gt;&amp;gt; even just offering a flag for users to enable fullrbf), I pose this&lt;br/&gt;&amp;gt; hypothetical: suppose we deploy the v3 transaction policy proposal (which I&lt;br/&gt;&amp;gt; hope will happen in the near future).  That policy would restrict the ways&lt;br/&gt;&amp;gt; that outputs of a v3 transaction can be spent while the transaction is&lt;br/&gt;&amp;gt; unconfirmed, including by limiting the number and size of descendants that&lt;br/&gt;&amp;gt; such a transaction can have, and limiting the types of unconfirmed&lt;br/&gt;&amp;gt; ancestors that can be included.  Suppose in a few years someone proposes&lt;br/&gt;&amp;gt; that we add a &amp;#34;-disable_v3_transaction_enforcement&amp;#34; flag to our software,&lt;br/&gt;&amp;gt; to let users decide to turn off those policy restrictions and treat v3&lt;br/&gt;&amp;gt; transactions the same as v2, for all the same reasons that could be argued&lt;br/&gt;&amp;gt; today with fullrbf: miners might earn more revenue if we allowed multiple&lt;br/&gt;&amp;gt; descendant v3 transactions; it&amp;#39;s illogical for the recipient of a v3&lt;br/&gt;&amp;gt; transaction to believe what is a fundamentally unenforceable promise of a&lt;br/&gt;&amp;gt; sender to not issue more high value children that descend from an&lt;br/&gt;&amp;gt; unconfirmed transaction; it&amp;#39;s inappropriate for Bitcoin Core to dictate&lt;br/&gt;&amp;gt; policy on the network and we should honor user choice to turn off that flag&lt;br/&gt;&amp;gt; if that’s what users want; if users are relying on v3’s policy restrictions&lt;br/&gt;&amp;gt; for security then that is an unstable model and we should assume it will&lt;br/&gt;&amp;gt; get broken[5].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It’s obvious to me that adding a flag to disable v3 policy would be&lt;br/&gt;&amp;gt; subversive to making the lightning use case for v3 transactions work.  And&lt;br/&gt;&amp;gt; so my response to such a hypothetical proposal would be to argue that no,&lt;br/&gt;&amp;gt; we should not enable users to disable this policy, because as long as that&lt;br/&gt;&amp;gt; policy is just optional and working for those who want it, it shouldn’t&lt;br/&gt;&amp;gt; harm anyone that we offer a tighter set of rules for a particular use&lt;br/&gt;&amp;gt; case.  Adding a way to bypass those rules is just trying to break someone&lt;br/&gt;&amp;gt; else’s use case, not trying to add a new one.  We should not wield&lt;br/&gt;&amp;gt; &amp;#34;incentive compatibility&amp;#34; as a bludgeon for breaking things that appear to&lt;br/&gt;&amp;gt; be working and not causing others harm.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think this is exactly what is happening with fullrbf.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In comparing v3 transaction policy with opting out of transaction&lt;br/&gt;&amp;gt; replacement, there is of course one significant difference that I have&lt;br/&gt;&amp;gt; ignored thus far: I think the real difference is an opinion about whether&lt;br/&gt;&amp;gt; non-replacement transactions that are being used today are, overall, bad&lt;br/&gt;&amp;gt; for Bitcoin, and whether lightning’s use of v3 transactions in the future&lt;br/&gt;&amp;gt; would be bad for Bitcoin. If you think that zeroconf is unequivocally bad,&lt;br/&gt;&amp;gt; and that no one will be able to plausibly construct a case that lightning&lt;br/&gt;&amp;gt; is bad, then that qualitative judgment might sway you to not worrying about&lt;br/&gt;&amp;gt; the philosophical issues I&amp;#39;ve raised above, because these situations can be&lt;br/&gt;&amp;gt; distinguished.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However I am not personally willing to say that I think, overall,&lt;br/&gt;&amp;gt; non-rbf-signaling transactions in use on the network today are bad for&lt;br/&gt;&amp;gt; Bitcoin (or that fullrbf is definitely good – BIP 125’s rbf rules are&lt;br/&gt;&amp;gt; something we’ve been trying to improve upon for years, with little&lt;br/&gt;&amp;gt; success).  Nor am I convinced that someone couldn’t put together a cogent&lt;br/&gt;&amp;gt; argument for lightning being bad for Bitcoin, because of its reliance on&lt;br/&gt;&amp;gt; relay policies that are difficult to design and impossible to guarantee as&lt;br/&gt;&amp;gt; part of its security model.  So I choose instead to merely make a judgment&lt;br/&gt;&amp;gt; that seems more factually verifiable, which is that non-replacement is a&lt;br/&gt;&amp;gt; policy widely in use on the network today, and we largely don&amp;#39;t have reason&lt;br/&gt;&amp;gt; to think (as far as I know!) that the network is seeing a lot of&lt;br/&gt;&amp;gt; transactions that would violate that policy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If it did turn out that users were commonly signaling non-replacement, but&lt;br/&gt;&amp;gt; then signing and trying to relay doublespends, then I think that would be a&lt;br/&gt;&amp;gt; very good reason for Bitcoin Core to adopt fullrbf to reflect the reality&lt;br/&gt;&amp;gt; of what is happening.  In the meantime, I think it makes more sense to say&lt;br/&gt;&amp;gt; that because we have BIP 125, there seems to be no need for users to signal&lt;br/&gt;&amp;gt; one way and behave another, and therefore there is no need to offer&lt;br/&gt;&amp;gt; software that might break a policy that is working well for some users.&lt;br/&gt;&amp;gt; Other software projects might choose differently, and it is after all a&lt;br/&gt;&amp;gt; permissionless network, so if this is in fact an unstable equilibrium that&lt;br/&gt;&amp;gt; will not last, then presumably someday it will be apparent it is not&lt;br/&gt;&amp;gt; working and we’ll abandon it.  But I think the philosophy of transaction&lt;br/&gt;&amp;gt; relay policy in Bitcoin Core should be to support disparate use cases in&lt;br/&gt;&amp;gt; order to try to make everything work better, rather than break things&lt;br/&gt;&amp;gt; prematurely because we guess others will break them eventually anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For those that have read this long email and still favor a fullrbf network&lt;br/&gt;&amp;gt; policy (or even just the ability for users to be able to turn on fullrbf&lt;br/&gt;&amp;gt; for themselves), I’d ask for thoughts on the following questions, which&lt;br/&gt;&amp;gt; have guided my thinking on this:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Does fullrbf offer any benefits other than breaking zeroconf business&lt;br/&gt;&amp;gt; practices?  If so, what are they?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is it reasonable to enforce BIP 125&amp;#39;s rbf rules on all transactions, if&lt;br/&gt;&amp;gt; those rules themselves are not always incentive compatible?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If someone were to propose a command line option that breaks v3&lt;br/&gt;&amp;gt; transaction relay in the future, is there a logical basis for opposing that&lt;br/&gt;&amp;gt; which is consistent with moving towards fullrbf now?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Suhas&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020937.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020937.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] This is because under the BIP 125 rules, the feerate of the&lt;br/&gt;&amp;gt; replacement transaction is not compared to the individual feerates of all&lt;br/&gt;&amp;gt; transactions being evicted – we just compare feerates with the transactions&lt;br/&gt;&amp;gt; that are directly in conflict (and not their descendants). So it’s possible&lt;br/&gt;&amp;gt; for a transaction that would evict 2 or more transactions to have a higher&lt;br/&gt;&amp;gt; feerate than the direct conflicts, and higher total fee than the set being&lt;br/&gt;&amp;gt; evicted, but have a lower feerate (eg if it is larger) than that of some&lt;br/&gt;&amp;gt; subset of the set of transactions being evicted.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [4]  Chaining unconfirmed transactions when the sender might RBF the&lt;br/&gt;&amp;gt; parent is far riskier than if the sender indicates they don&amp;#39;t plan to do so&lt;br/&gt;&amp;gt; (chaining onto an RBF transaction creates pinning issues for the sender,&lt;br/&gt;&amp;gt; and risks having the child wiped out if the parent is replaced), so I think&lt;br/&gt;&amp;gt; this is a concrete reason why signaling that a transaction won’t be&lt;br/&gt;&amp;gt; replaced could be useful.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [5] This is a subtle point. I don’t think v3 transactions create an&lt;br/&gt;&amp;gt; unreasonable security assumption for the use case it is being designed for.&lt;br/&gt;&amp;gt; However, I don’t think anyone could rule out the possibility that someone&lt;br/&gt;&amp;gt; could adopt a usage pattern for v3 transactions that subverts the intent of&lt;br/&gt;&amp;gt; this policy.  For example, if users started using v3 transactions for all&lt;br/&gt;&amp;gt; their payments, then the limitations on the number of descendants could&lt;br/&gt;&amp;gt; directly interfere with CPFP by a recipient, and someone could argue that&lt;br/&gt;&amp;gt; we should break the policy in order to allow for this hypothetical&lt;br/&gt;&amp;gt; behavior. I think this is a similar form of argument as saying that&lt;br/&gt;&amp;gt; zeroconf practices &#43; BIP 125 create an incentive to double-spend non-rbf&lt;br/&gt;&amp;gt; signaling transactions.&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20221102/d2ff3925/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221102/d2ff3925/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:16:16&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs06n6t8tqzr2gag3xsu3tffm40zhpynsqenhzd6uavd4hc8uekp8szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zd3lusv</id>
    
      <title type="html">📅 Original date posted:2022-11-02 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs06n6t8tqzr2gag3xsu3tffm40zhpynsqenhzd6uavd4hc8uekp8szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zd3lusv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq8n5yqtydqru0ky4ke8mpc8qkl7l2n35d5z5e2zh36zvqwseu7cck0qxrt&#39;&gt;nevent1q…qxrt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-02&lt;br/&gt;📝 Original message:Hi list,&lt;br/&gt;&lt;br/&gt;Reading Suhas&amp;#39;s post on mempool policy consistency rules, and the grounded&lt;br/&gt;suggestion that as protocol developers we should work on special policy&lt;br/&gt;rules to support each reasonable use case on the network rather to arbiter&lt;br/&gt;between class of use-cases in the design of an&lt;br/&gt;unified set of rules, reminded me there is another solution to solve&lt;br/&gt;multi-party funding pinning rather than wide deployment of fullrbf. This&lt;br/&gt;was communicated to me a while back, and it was originally dismissed&lt;br/&gt;because of the privacy trade-offs (and potential slight fees overhead&lt;br/&gt;cost). However, if widely adopted, they might sound acceptable to&lt;br/&gt;contracting protocol developers and operators.&lt;br/&gt;&lt;br/&gt;## The Problem: Pinning Contracting Protocols Funding Flows with Opt-out&lt;br/&gt;Double-Spend&lt;br/&gt;&lt;br/&gt;As originally laid out [0], multi-party collaborative flows&lt;br/&gt;(coinjoin/dual-funding/swaps/splicing/etc), where every participant&lt;br/&gt;contributes at least one input, are suffering from a low-cost and&lt;br/&gt;high-success DoS vector with asymmetric damages. E.g with lightning&lt;br/&gt;interactive transaction construction protocols limits of 252 inputs, 1&lt;br/&gt;single input can bleed the timevalue of the remaining 251 inputs, or engage&lt;br/&gt;in a MEV attack where the fee-bumping entity is lured to inflate feerate&lt;br/&gt;beyond the current blockspace demand. The attack can be hidden and a&lt;br/&gt;posteriori assigning blame consistently stays an open question in the lack&lt;br/&gt;of a consensus mechanism between participants on the network mempools&lt;br/&gt;states.&lt;br/&gt;&lt;br/&gt;The issue lies in the fact that participants joining inputs together don&amp;#39;t&lt;br/&gt;have control, or even view, of the replacement signaling of any potential&lt;br/&gt;double-spend of the other participants inputs. Indeed the opt-in fullrbf&lt;br/&gt;signaling is enforced based on the nSequence field, and this one is fully&lt;br/&gt;malleable by the UTXO spender. There is no current mechanism to require&lt;br/&gt;replacement signaling provable to a third-party only on the knowledge of&lt;br/&gt;the UTXO spents.&lt;br/&gt;&lt;br/&gt;# The Solution: Opt-in Full-Replace-by-Fee Spent-nVersion Signaling&lt;br/&gt;&lt;br/&gt;A new policy is specified in a new way a transaction can signal that it is&lt;br/&gt;replaceable.&lt;br/&gt;&lt;br/&gt;1. A confirmed transaction is considered to have opted in to allowing&lt;br/&gt;replacement of any of its spends (or their descendants), if the last bit of&lt;br/&gt;the nVersion field is set.&lt;br/&gt;&lt;br/&gt;Rational: The future replacement status of any UTXO spend can be determined&lt;br/&gt;by inspecting the nVersion, therefore protecting the collaborative&lt;br/&gt;participants of a multi-party flows that the target transaction should&lt;br/&gt;propagate to the miners, if the fee/feerate offered are the best ones&lt;br/&gt;without opt-out based pinning. It can be required the UTXOs to have few&lt;br/&gt;confirmations in case of shallow reorgs to increase DoS protection.&lt;br/&gt;&lt;br/&gt;## Solution trade-offs&lt;br/&gt;&lt;br/&gt;On the validation-side, there is one engineering issue, as I think there is&lt;br/&gt;no access to the spent nversion fields by the mempool logic. This would&lt;br/&gt;presume we add some new cache of all the confirmed UTXOs, so ~50M * 4bytes,&lt;br/&gt;300 MB of additional state for policy-enforcing full-nodes. I don&amp;#39;t know if&lt;br/&gt;there is another strong drawback, even the reorg logic the replaceable&lt;br/&gt;spends shouldn&amp;#39;t be evicted if the confirmed ancestor is back to the&lt;br/&gt;mempool, as mempool validity shouldn&amp;#39;t be reevaluated before a replacement&lt;br/&gt;candidate shows up. A fee penalty could be requested for nVersion-signaling&lt;br/&gt;transactions to compensate for the additional state stored by full-node&lt;br/&gt;operators (even if obviously they&amp;#39;re not the ones earning the fees).&lt;br/&gt;&lt;br/&gt;For the contracting protocols wallets, as you don&amp;#39;t know in advance which&lt;br/&gt;coins are going to be used for a collaborative flow, you&amp;#39;re better off to&lt;br/&gt;mark all your coins nVersion fields opting fullrbf. Otherwise, you will&lt;br/&gt;have to go through an on-chain fee cost to change the replacement status of&lt;br/&gt;the spends of your coins. However, this policy bookmarking comes as a&lt;br/&gt;protocol fingerprint leak for an observer of the transaction logs. If all&lt;br/&gt;the second-layers used by default, this is constituting a single anonymity&lt;br/&gt;set, though it might still be the privacy gains we&amp;#39;re harvesting from&lt;br/&gt;Taproot output usage in the optimistic case (e.g in Lightning no commitment&lt;br/&gt;&#43; HTLC transactions broadcast).&lt;br/&gt;&lt;br/&gt;For the zeroconf operators, assuming they have access to the UTXO set, they&lt;br/&gt;can inspect the receiving transactions ancestors nVersion fields, and sort&lt;br/&gt;those transactions in the wider set of the replaceable ones, as they&amp;#39;re&lt;br/&gt;currently doing for BIP125 opt-in ones.&lt;br/&gt;&lt;br/&gt;Long-term, the annoying privacy issue and the assumption that any wallet&lt;br/&gt;will be a Lightning one could lead to the majority of wallets signaling RBF&lt;br/&gt;for their spends. Therefore making those wallets incompatible with zeroconf&lt;br/&gt;services, slowly economically outlawing them. From my perspective, though&lt;br/&gt;it might be a simplification, it sounds an alternative full rbf way&lt;br/&gt;forward, where rather than having miners deciding on the policy&lt;br/&gt;enforcement, we let the users decide with their coins. However, this new&lt;br/&gt;policy enforcement efficiency is still dependent on the existence of relay&lt;br/&gt;paths and support at the endpoints that matter, the miner mempools. So in&lt;br/&gt;fine we might have to realize incentive alignment with hashrate is what&lt;br/&gt;matters in terms of transaction-relay rules ?&lt;br/&gt;&lt;br/&gt;Credit to Greg Maxwell for this idea.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&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/20221101/7190a0df/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221101/7190a0df/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:16:11&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdf39sv82dxtvkgfw6a9ntm880e7q7d4m987s66tkm35fj8mk47jgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z52x6e2</id>
    
      <title type="html">📅 Original date posted:2022-10-20 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdf39sv82dxtvkgfw6a9ntm880e7q7d4m987s66tkm35fj8mk47jgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z52x6e2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdn2pd6jfsetmd087watmrt6flsqky035phgzk62q6xzy9jwy9dxqy0taq8&#39;&gt;nevent1q…taq8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-20&lt;br/&gt;📝 Original message:&amp;gt; There is a long list of countermeasures that can be built to reduce these&lt;br/&gt;&amp;gt; attacks, but to be frank we&amp;#39;ve only implemented a small subset of these&lt;br/&gt;and&lt;br/&gt;&amp;gt; not had any issues, so even a lower level of security is more than fine&lt;br/&gt;&amp;gt; today to have basically zero abuse. If issues arise we could implement&lt;br/&gt;more&lt;br/&gt;&amp;gt; of the countermeasures as appropriate to the abuse that has happened in&lt;br/&gt;the&lt;br/&gt;&amp;gt; wild.&lt;br/&gt;&lt;br/&gt;&amp;gt;From reading one of your other mail, apparently 60% of Bitrefill payments&lt;br/&gt;are non-rbfable on-chain transactions and as such fine for zeroconf. What&lt;br/&gt;I&amp;#39;m wondering is, in case of a wide majority of the full-nodes supporting&lt;br/&gt;full-rbf, if any incoming transaction traffic could be risk-managed&lt;br/&gt;well-enough thanks to some additional countermeasures to be&lt;br/&gt;zeroconf-acceptable ?&lt;br/&gt;&lt;br/&gt;We can be technically creative here. One could think of some overlay&lt;br/&gt;monitoring between zeroconf merchants, where mempooldiffs are exchanged to&lt;br/&gt;observe if any acceptance candidate is double-spent inside some other&lt;br/&gt;participant&amp;#39;s mempool. Of course, the reconciliation rate would need to be&lt;br/&gt;pretty high to still ensure an &amp;#34;instant payment&amp;#34; UX, though the bandwidth&lt;br/&gt;overhead should be okay as we assume full-node enterprise hosts. I don&amp;#39;t&lt;br/&gt;think such functionality would be used by any full-node, it might leverage&lt;br/&gt;p2p extensions but it would be some differentiated services on top of the&lt;br/&gt;usual messages. This is just an idea, and the concrete 0conf acceptance&lt;br/&gt;flow problem needs to be better specified.&lt;br/&gt;&lt;br/&gt;&amp;gt; Fundamentally, my view is that all the UX problems related to RBF alone&lt;br/&gt;are&lt;br/&gt;&amp;gt; sufficient of an issue to hold off on rolling out these upgrades for the&lt;br/&gt;&amp;gt; foreseeable future and think of other ways of solving the pinning issue&lt;br/&gt;and&lt;br/&gt;&amp;gt; other issues w the current policy. Might be that it&amp;#39;s just a fundamental&lt;br/&gt;&amp;gt; goal conflict that different people want different behavior but I remain&lt;br/&gt;&amp;gt; optimistic for creative solutions from both sides. UX issues are soft as&lt;br/&gt;&amp;gt; opposed to theoretical attack vectors which are hard and binary, we need&lt;br/&gt;&amp;gt; find a way to weigh &amp;#34;even though it doesn&amp;#39;t happen it can theoretically be&lt;br/&gt;&amp;gt; hacked&amp;#34; against &amp;#34;many users find it confusing and stressful&amp;#34; which is not&lt;br/&gt;a&lt;br/&gt;&amp;gt; trivial assessment to do.&lt;br/&gt;&lt;br/&gt;Seriously, solving the pinning issues for contracting protocols already&lt;br/&gt;busy few of the most brilliant bitcoin developers almost full-time. If we&lt;br/&gt;had straightforward and backward compatible with all classes of current&lt;br/&gt;Bitcoin applications, we would go for it. Of course, it doesn&amp;#39;t mean we&lt;br/&gt;should close the problem of space exploration, and if someone can come up&lt;br/&gt;with solutions offering equivalent trade-offs, I&amp;#39;m all to listen. This is&lt;br/&gt;still an open question if we would have to allow a subset of transactions&lt;br/&gt;to be full-rbf, to fully achieve the semantics of v3 transactions, or at&lt;br/&gt;least if we would like to protect currently open Lightning channels. Hard&lt;br/&gt;problems here.&lt;br/&gt;&lt;br/&gt;While I&amp;#39;m hearing the uncertainty of an easy assessment weighting between&lt;br/&gt;favoring UX issues or solving hard theoretical attacks, those latter&lt;br/&gt;concerns I&amp;#39;ve been serious enough among the Lightning development community&lt;br/&gt;to take it as one of the top engineering issues among all those last years.&lt;br/&gt;&amp;gt;From my experience, pentesting in a &amp;#34;black-box&amp;#34; fashion of some subset of&lt;br/&gt;LN vulnerabilities, they turn out as really practical after a few days of&lt;br/&gt;hacking if you know where to hit. Moreover, it should be underscored that&lt;br/&gt;the attacker incentive model between targeting a 0conf merchant like&lt;br/&gt;Bitrefill and a sizable Lightning infrastructure is a bit different. On one&lt;br/&gt;side, you will pocket free gift cards that are likely traceable to&lt;br/&gt;real-world identities, or cancellable by calling out the issuers. On the&lt;br/&gt;other side, you get a stack of free satoshis, easily fungible among all&lt;br/&gt;other coins. As such, we might foresee far more exploitations against LN,&lt;br/&gt;once the network has caught up in terms of volume and stakes to compare&lt;br/&gt;with the most advanced Defi smart contract platforms in the wider&lt;br/&gt;cryptocurrencies ecosystem, attracting today sophisticated attackers. Or at&lt;br/&gt;least, I&amp;#39;m worried by such an outcome playing out for LN if we&amp;#39;re too slow&lt;br/&gt;on rolling out mitigations...&lt;br/&gt;&lt;br/&gt;All that said, from my perspective upgrading mempool policy doesn&amp;#39;t seem&lt;br/&gt;incompatible with a parallel effort to improve the UX problems of RBF, by&lt;br/&gt;automatic fee-bumping logic in a transparent way for the end-users. Like&lt;br/&gt;you said, we should be all optimistic on creative solutions, and&lt;br/&gt;communicate better between merchants and devs on the problem space.&lt;br/&gt;&lt;br/&gt;Looking forward to having more interactions on these topics in the future!&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 20 oct. 2022 à 10:12, Sergej Kotliar &amp;lt;sergej at bitrefill.com&amp;gt; a&lt;br/&gt;écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, 20 Oct 2022 at 03:37, Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Sergej,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thanks for the insightful posting, especially highlighting the FX risk&lt;br/&gt;&amp;gt;&amp;gt; which was far from being evident on my side!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t know in details the security architecture of Bitrefill zeroconf&lt;br/&gt;&amp;gt;&amp;gt; acceptance system, though from what I suppose there is at least a set of&lt;br/&gt;&amp;gt;&amp;gt; full-nodes well-connected across the p2p network, on top of which some&lt;br/&gt;&amp;gt;&amp;gt; mempools reconciliation is exercised&lt;br/&gt;&amp;gt;&amp;gt; and zeroconf candidate sanitize against. While I believe this is a&lt;br/&gt;&amp;gt;&amp;gt; far-more robust deployment against double-spend attempts, there is still&lt;br/&gt;&amp;gt;&amp;gt; the ability for a sophisticated attacker to &amp;#34;taint&amp;#34; miner mempools, and&lt;br/&gt;&amp;gt;&amp;gt; from then partition judiciously the transaction-relay network to game such&lt;br/&gt;&amp;gt;&amp;gt; distributed mempool monitoring system. There is also the possibility of an&lt;br/&gt;&amp;gt;&amp;gt; attacker using some &amp;#34;divide-and-conquer&amp;#34; transaction broadcast algorithm to&lt;br/&gt;&amp;gt;&amp;gt; map Bitrefill monitoring point, though as far as I&amp;#39;m aware such algorithm&lt;br/&gt;&amp;gt;&amp;gt; has not been discussed. I agree with all of that, easier said than done.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is a long list of countermeasures that can be built to reduce these&lt;br/&gt;&amp;gt; attacks, but to be frank we&amp;#39;ve only implemented a small subset of these and&lt;br/&gt;&amp;gt; not had any issues, so even a lower level of security is more than fine&lt;br/&gt;&amp;gt; today to have basically zero abuse. If issues arise we could implement more&lt;br/&gt;&amp;gt; of the countermeasures as appropriate to the abuse that has happened in the&lt;br/&gt;&amp;gt; wild.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On the efficacy of RBF, I understand the current approach of assuming&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;manual&amp;#34; RBFing by power users ill UX thinking. I hope in the future to&lt;br/&gt;&amp;gt;&amp;gt; have automatic fee-bumping implemented by user wallets, where a fee-bumping&lt;br/&gt;&amp;gt;&amp;gt; budget and a confirmation preference are pre-defined for all payments, and&lt;br/&gt;&amp;gt;&amp;gt; the fee-bumping logic &amp;#34;simply&amp;#34; enforcing the user policy, ideally based on&lt;br/&gt;&amp;gt;&amp;gt; historical mempool data. True fact: we don&amp;#39;t have such logic in consumer&lt;br/&gt;&amp;gt;&amp;gt; wallets today.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In deed. And the vast majority of bitcoin users don&amp;#39;t even have access to&lt;br/&gt;&amp;gt; any RBF functionality today, so we&amp;#39;re not even seeing gradual development&lt;br/&gt;&amp;gt; of these things yet. I think this fact needs to be taken into account when&lt;br/&gt;&amp;gt; designing breaking changes to bitcoin policy. Had these things been in&lt;br/&gt;&amp;gt; place and widely used the conversation would have been much easier.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Fundamentally, my view is that all the UX problems related to RBF alone&lt;br/&gt;&amp;gt; are sufficient of an issue to hold off on rolling out these upgrades for&lt;br/&gt;&amp;gt; the foreseeable future and think of other ways of solving the pinning issue&lt;br/&gt;&amp;gt; and other issues w the current policy. Might be that it&amp;#39;s just a&lt;br/&gt;&amp;gt; fundamental goal conflict that different people want different behavior but&lt;br/&gt;&amp;gt; I remain optimistic for creative solutions from both sides. UX issues are&lt;br/&gt;&amp;gt; soft as opposed to theoretical attack vectors which are hard and binary, we&lt;br/&gt;&amp;gt; need find a way to weigh &amp;#34;even though it doesn&amp;#39;t happen it can&lt;br/&gt;&amp;gt; theoretically be hacked&amp;#34; against &amp;#34;many users find it confusing and&lt;br/&gt;&amp;gt; stressful&amp;#34; which is not a trivial assessment to do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All that said, I learn to converge that as a community we would be better&lt;br/&gt;&amp;gt;&amp;gt; off to weigh deeper the risks/costs between 0confs applications and&lt;br/&gt;&amp;gt;&amp;gt; contracting protocols in light of full-rbf.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In deed. And as you wrote in a different message, I agree that it&amp;#39;s&lt;br/&gt;&amp;gt; unfortunate that there isn&amp;#39;t more interaction between the mailing list and&lt;br/&gt;&amp;gt; services and companies using this stuff day-to-day. Not that it&amp;#39;s anyone&amp;#39;s&lt;br/&gt;&amp;gt; fault in particular, let&amp;#39;s try from all sides to find more ways to create&lt;br/&gt;&amp;gt; more interaction on these topics. I&amp;#39;ve pinged a few colleagues that work on&lt;br/&gt;&amp;gt; payments in the space and hope they will chime in more in this forum!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All the best,&lt;br/&gt;&amp;gt; Sergej&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Le mer. 19 oct. 2022 à 10:33, Sergej Kotliar via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Chiming in on this thread as I feel like the real dangers of RBF as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; default policy aren&amp;#39;t sufficiently elaborated here. It&amp;#39;s not only about the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; zero-conf (I&amp;#39;ll get to that) but there is an even bigger danger called the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; american call option, which risks endangering the entirety of BIP21 &amp;#34;Scan&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this QR code with your wallet to buy this product&amp;#34; model that I believe&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; we&amp;#39;ve all come to appreciate. Specifically, in a scenario with high&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; volatility and many transactions in the mempools (which is where RBF would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; come in handy), a user can make a low-fee transaction and then wait for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; hours, days or even longer, and see whether BTCUSD moves. If BTCUSD moves&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; up, user can cancel his transaction and make a new - cheaper one. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; biggest risk in accepting bitcoin payments is in fact not zeroconf risk&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (it&amp;#39;s actually quite easily managed), it&amp;#39;s FX risk as the merchant must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; commit to a certain BTCUSD rate ahead of time for a purchase. Over time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; some transactions lose money to FX and others earn money - that evens out&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in the end. But if there is an _easily accessible in the wallet_ feature to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;cancel transaction&amp;#34; that means it will eventually get systematically&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; abused. A risk of X% loss on many payments that&amp;#39;s easy to systematically&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; abuse is more scary than a rare risk of losing 100% of one occasional&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; payment. It&amp;#39;s already possible to execute this form of abuse with opt-in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; RBF, which may lead to us at some point refusing those payments (even with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; confirmation) or cumbersome UX to work around it, such as crediting the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin to a custodial account.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; To compare zeroconf risk with FX risk: I think we&amp;#39;ve had one incident in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 8 years of operation where a user successfully fooled our server to accept&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a payment that in the end didn&amp;#39;t confirm. To successfully fool (non-RBF)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; zeroconf one needs to have access to mining infrastructure and probability&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of success is the % of hash rate controlled. This is simply due to the fact&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that the network currently won&amp;#39;t propagage the replacement transaction to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the miner, which is what&amp;#39;s being discussed here. American call option risk&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would however be available to 100% of all users, needs nothing beyond the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallet app, and has no cost to the user - only upside.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Bitrefill currently processes 1500-2000 onchain payments every day. For&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; us, a world where bitcoin becomes de facto RBF by default, means that we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would likely turn off the BIP21 model for onchain payments, instruct&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Bitcoin users to use Lightning or deposit onchain BTC to a custodial&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; account that we have.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This option is however not available for your typical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BTCPayServer/CoinGate/Bitpay/IBEX/OpenNode et al. Would be great to hear&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; from other merchants or payment providers how they see this new behavior&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and how they would counteract it.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Currently Lightning is somewhere around 15% of our total bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; payments. This is very much not nothing, and all of us here want Lightning&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to grow, but I think it warrants a serious discussion on whether we want&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning adoption to go to 100% by means of disabling on-chain commerce.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; For me personally it would be an easier discussion to have when Lightning&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is at 80%&#43; of all bitcoin transactions. Currently far too many bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; users simply don&amp;#39;t have access to Lightning, and of those that do and hold&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; their own keys Muun is the biggest wallet per our data, not least due to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; their ease-of-use which is under threat per the OP. It&amp;#39;s hard to assess how&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; many users would switch to Lightning in such a scenario, the communication&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; around it would be hard. My intuition says that the majority of the current&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 85% of bitcoin users that pay onchain would just not use bitcoin anymore,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; probably shift to an alt. The benefits of Lightning are many and obvious,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; we don&amp;#39;t need to limit onchain to make Lightning more appealing. As an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; anecdote, we did experiment with defaulting to bech32 addresses some years&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; back. The result was that simply users of the wallets that weren&amp;#39;t able to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pay to bech32 didn&amp;#39;t complete the purchase, no support ticket or anything,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; just &amp;#34;it didn&amp;#39;t work 🤷‍♂️&amp;#34; and user moved on. We rolled it back, and later&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implemented a wallet selector to allow modern wallets to pay to bech32&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; while other wallets can pay to P2SH. This type of thing  is clunky, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; requires a certain level of scale to be able to do, we certainly wouldn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have had the manpower for that when we were starting out. This why I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; cautious about introducing more such clunkiness vectors as they are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; centralizing factors.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m well aware of the reason for this policy being suggested and the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; potential pinning attack vector for LN and other smart contracts, but I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; think these two risks/costs need to be weighed against eachother first and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; thoroughly discussed because the costs are non-trivial on both sides.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Sidenote: On the efficacy of RBF to &amp;#34;unstuck&amp;#34; stuck transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; After interacting with users during high-fee periods I&amp;#39;ve come to not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; appreciate RBF as a solution to that issue. Most users (80% or so) simply&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; don&amp;#39;t have access to that functionality, because their wallet doesn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; support it, or they use a custodial (exchange) wallet etc. Of those that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have the feature - only the power users understand how RBF works, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; explaining how to do RBF to a non-power-user is just too complex, for the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; same reason why it&amp;#39;s complex for wallets to make sensible non-power-user UI&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; around it. Current equilibrium is that mostly only power users have access&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to RBF and they know how to handle it, so things are somewhat working. But&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rolling this out to the broad market is something else and would likely&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; cause more confusion.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; CPFP is somewhat more viable but also not perfect as it would require&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; lots of edge case code to handle abuse vectors: What if users abuse a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; generous CPFP policy to unstuck past transactions or consolidate large&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallets. Best is for CPFP to be done on the wallet side, not the merchant&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; side, but there too are the same UX issues as with RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In the end a risk-based approach to decide on which payments are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; non-trivial to reverse is the easiest, taking account user experience and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; such. Remember that in the fiat world card payments have up to 5%&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; chargebacks, whereas we in zero-conf bitcoin land we deal with &amp;#34;fewer than&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1 in a million&amp;#34; accepted transactions successfully reversed. These days we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have very few support issues related to bitcoin payments. The few that do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; come in are due to accidental RBF users venting frustration about waiting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for their tx to confirm.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;In theory, theory and practice are the same. In practice, they are not&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; All the best,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; CEO Bitrefill.com&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; CEO&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Twitter: @ziggamon &amp;lt;&lt;a href=&#34;https://twitter.com/ziggamon&amp;gt&#34;&gt;https://twitter.com/ziggamon&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; www.bitrefill.com&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Twitter &amp;lt;&lt;a href=&#34;https://www.twitter.com/bitrefill&amp;gt&#34;&gt;https://www.twitter.com/bitrefill&amp;gt&lt;/a&gt;; | Blog&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://www.bitrefill.com/blog/&amp;gt&#34;&gt;https://www.bitrefill.com/blog/&amp;gt&lt;/a&gt;; | Angellist&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://angel.co/bitrefill&amp;gt&#34;&gt;https://angel.co/bitrefill&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; CEO&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Twitter: @ziggamon &amp;lt;&lt;a href=&#34;https://twitter.com/ziggamon&amp;gt&#34;&gt;https://twitter.com/ziggamon&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; www.bitrefill.com&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Twitter &amp;lt;&lt;a href=&#34;https://www.twitter.com/bitrefill&amp;gt&#34;&gt;https://www.twitter.com/bitrefill&amp;gt&lt;/a&gt;; | Blog&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://www.bitrefill.com/blog/&amp;gt&#34;&gt;https://www.bitrefill.com/blog/&amp;gt&lt;/a&gt;; | Angellist&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://angel.co/bitrefill&amp;gt&#34;&gt;https://angel.co/bitrefill&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; CEO&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter: @ziggamon &amp;lt;&lt;a href=&#34;https://twitter.com/ziggamon&amp;gt&#34;&gt;https://twitter.com/ziggamon&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; www.bitrefill.com&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter &amp;lt;&lt;a href=&#34;https://www.twitter.com/bitrefill&amp;gt&#34;&gt;https://www.twitter.com/bitrefill&amp;gt&lt;/a&gt;; | Blog&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://www.bitrefill.com/blog/&amp;gt&#34;&gt;https://www.bitrefill.com/blog/&amp;gt&lt;/a&gt;; | Angellist &amp;lt;&lt;a href=&#34;https://angel.co/bitrefill&amp;gt&#34;&gt;https://angel.co/bitrefill&amp;gt&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/20221020/70f554fa/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221020/70f554fa/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:14:44&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxwued068rqvj4k3qajkgm5vy2derzz4mhs932qdv5awzlmgtqh3gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zp8kncg</id>
    
      <title type="html">📅 Original date posted:2022-10-19 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxwued068rqvj4k3qajkgm5vy2derzz4mhs932qdv5awzlmgtqh3gzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zp8kncg" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfxxjkrr62ydj7y29f2j0gzyfrryhtuylltccl82vunuvac5h2k7cegmegv&#39;&gt;nevent1q…megv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-19&lt;br/&gt;📝 Original message:Hi Sergej,&lt;br/&gt;&lt;br/&gt;Thanks for the insightful posting, especially highlighting the FX risk&lt;br/&gt;which was far from being evident on my side!&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know in details the security architecture of Bitrefill zeroconf&lt;br/&gt;acceptance system, though from what I suppose there is at least a set of&lt;br/&gt;full-nodes well-connected across the p2p network, on top of which some&lt;br/&gt;mempools reconciliation is exercised&lt;br/&gt;and zeroconf candidate sanitize against. While I believe this is a far-more&lt;br/&gt;robust deployment against double-spend attempts, there is still the ability&lt;br/&gt;for a sophisticated attacker to &amp;#34;taint&amp;#34; miner mempools, and from then&lt;br/&gt;partition judiciously the transaction-relay network to game such&lt;br/&gt;distributed mempool monitoring system. There is also the possibility of an&lt;br/&gt;attacker using some &amp;#34;divide-and-conquer&amp;#34; transaction broadcast algorithm to&lt;br/&gt;map Bitrefill monitoring point, though as far as I&amp;#39;m aware such algorithm&lt;br/&gt;has not been discussed. I agree with all of that, easier said than done.&lt;br/&gt;&lt;br/&gt;(Which let me think that such distributed mempool monitoring system should&lt;br/&gt;be provide some enhanced security even in a full-rbf world, that they would&lt;br/&gt;require far more resources than the average node from the p2p network as a&lt;br/&gt;whole might be a counter-argument for their social acceptance, however I&amp;#39;m&lt;br/&gt;also thinking that a robust Lightning infrastructure of the future might&lt;br/&gt;require multiple mempool/transaction-relay endpoints, at least to reduce&lt;br/&gt;cross-layer mapping links, though conversation for another day...).&lt;br/&gt;&lt;br/&gt;About the FX risk itself, this is far from being isolated from 0conf, as&lt;br/&gt;Lightning payments themselves might still have a time lapse between the&lt;br/&gt;issuance of invoices and the settlement of the HTLC at the payee endpoint.&lt;br/&gt;In fact this volatility concern is endured by anyone using Bitcoin&lt;br/&gt;regularly in interface with the fiats worlds, i.e everyone excepted the&lt;br/&gt;long-term store of wealth crowd. From a merchant perspective, effectively,&lt;br/&gt;the options to cover themselves against this risk are simple. One could&lt;br/&gt;take positions directly in traditional financial derivatives, like doing&lt;br/&gt;participants in international trades, though it would require an educated&lt;br/&gt;manpower on the merchant side. Or leveraging some stablecoins derivatives&lt;br/&gt;system, coming with its own technical complexity and social trust hazards.&lt;br/&gt;Another direction would be to clearly define the responsibility between&lt;br/&gt;merchants or users, on whom is the FX risk. If it&amp;#39;s on users, they should&lt;br/&gt;be the one RBFing/CPFPing to increase the merchant address output, beyond&lt;br/&gt;the fact &amp;#34;dynamic pricing&amp;#34; would be a weird UX, it would require liveliness&lt;br/&gt;from the wallets until block confirmation (introducing here many&lt;br/&gt;requirements of a LN wallet). If it&amp;#39;s on the merchants, they could be the&lt;br/&gt;ones CPFPing thanks to package relay, though it would come again with some&lt;br/&gt;engineering complexity and overhead blockspace cost (and the first version&lt;br/&gt;of package relay likely won&amp;#39;t enable CPFP batching for concerns of&lt;br/&gt;potential bandwidth/CPU DoS).&lt;br/&gt;&lt;br/&gt;On the efficacy of RBF, I understand the current approach of assuming&lt;br/&gt;&amp;#34;manual&amp;#34; RBFing by power users ill UX thinking. I hope in the future to&lt;br/&gt;have automatic fee-bumping implemented by user wallets, where a fee-bumping&lt;br/&gt;budget and a confirmation preference are pre-defined for all payments, and&lt;br/&gt;the fee-bumping logic &amp;#34;simply&amp;#34; enforcing the user policy, ideally based on&lt;br/&gt;historical mempool data. True fact: we don&amp;#39;t have such logic in consumer&lt;br/&gt;wallets today. Or at least only rudimentary in the backend of LN&lt;br/&gt;implementations, and only for time-sensitive on-chain claims for now (or at&lt;br/&gt;least speaking for LDK). If we take the history of browsers as a&lt;br/&gt;comparison, while we might be out of the Lynx-style phase of wallets, we&lt;br/&gt;might still be more in the late Netscape kind of thing than something like&lt;br/&gt;Chrome today. In other words, there are many directions for improvements&lt;br/&gt;for users&amp;#39; wallets.&lt;br/&gt;&lt;br/&gt;All that said, I learn to converge that as a community we would be better&lt;br/&gt;off to weigh deeper the risks/costs between 0confs applications and&lt;br/&gt;contracting protocols in light of full-rbf.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le mer. 19 oct. 2022 à 10:33, Sergej Kotliar via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Chiming in on this thread as I feel like the real dangers of RBF as&lt;br/&gt;&amp;gt; default policy aren&amp;#39;t sufficiently elaborated here. It&amp;#39;s not only about the&lt;br/&gt;&amp;gt; zero-conf (I&amp;#39;ll get to that) but there is an even bigger danger called the&lt;br/&gt;&amp;gt; american call option, which risks endangering the entirety of BIP21 &amp;#34;Scan&lt;br/&gt;&amp;gt; this QR code with your wallet to buy this product&amp;#34; model that I believe&lt;br/&gt;&amp;gt; we&amp;#39;ve all come to appreciate. Specifically, in a scenario with high&lt;br/&gt;&amp;gt; volatility and many transactions in the mempools (which is where RBF would&lt;br/&gt;&amp;gt; come in handy), a user can make a low-fee transaction and then wait for&lt;br/&gt;&amp;gt; hours, days or even longer, and see whether BTCUSD moves. If BTCUSD moves&lt;br/&gt;&amp;gt; up, user can cancel his transaction and make a new - cheaper one. The&lt;br/&gt;&amp;gt; biggest risk in accepting bitcoin payments is in fact not zeroconf risk&lt;br/&gt;&amp;gt; (it&amp;#39;s actually quite easily managed), it&amp;#39;s FX risk as the merchant must&lt;br/&gt;&amp;gt; commit to a certain BTCUSD rate ahead of time for a purchase. Over time&lt;br/&gt;&amp;gt; some transactions lose money to FX and others earn money - that evens out&lt;br/&gt;&amp;gt; in the end. But if there is an _easily accessible in the wallet_ feature to&lt;br/&gt;&amp;gt; &amp;#34;cancel transaction&amp;#34; that means it will eventually get systematically&lt;br/&gt;&amp;gt; abused. A risk of X% loss on many payments that&amp;#39;s easy to systematically&lt;br/&gt;&amp;gt; abuse is more scary than a rare risk of losing 100% of one occasional&lt;br/&gt;&amp;gt; payment. It&amp;#39;s already possible to execute this form of abuse with opt-in&lt;br/&gt;&amp;gt; RBF, which may lead to us at some point refusing those payments (even with&lt;br/&gt;&amp;gt; confirmation) or cumbersome UX to work around it, such as crediting the&lt;br/&gt;&amp;gt; bitcoin to a custodial account.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To compare zeroconf risk with FX risk: I think we&amp;#39;ve had one incident in 8&lt;br/&gt;&amp;gt; years of operation where a user successfully fooled our server to accept a&lt;br/&gt;&amp;gt; payment that in the end didn&amp;#39;t confirm. To successfully fool (non-RBF)&lt;br/&gt;&amp;gt; zeroconf one needs to have access to mining infrastructure and probability&lt;br/&gt;&amp;gt; of success is the % of hash rate controlled. This is simply due to the fact&lt;br/&gt;&amp;gt; that the network currently won&amp;#39;t propagage the replacement transaction to&lt;br/&gt;&amp;gt; the miner, which is what&amp;#39;s being discussed here. American call option risk&lt;br/&gt;&amp;gt; would however be available to 100% of all users, needs nothing beyond the&lt;br/&gt;&amp;gt; wallet app, and has no cost to the user - only upside.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bitrefill currently processes 1500-2000 onchain payments every day. For&lt;br/&gt;&amp;gt; us, a world where bitcoin becomes de facto RBF by default, means that we&lt;br/&gt;&amp;gt; would likely turn off the BIP21 model for onchain payments, instruct&lt;br/&gt;&amp;gt; Bitcoin users to use Lightning or deposit onchain BTC to a custodial&lt;br/&gt;&amp;gt; account that we have.&lt;br/&gt;&amp;gt; This option is however not available for your typical&lt;br/&gt;&amp;gt; BTCPayServer/CoinGate/Bitpay/IBEX/OpenNode et al. Would be great to hear&lt;br/&gt;&amp;gt; from other merchants or payment providers how they see this new behavior&lt;br/&gt;&amp;gt; and how they would counteract it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Currently Lightning is somewhere around 15% of our total bitcoin payments.&lt;br/&gt;&amp;gt; This is very much not nothing, and all of us here want Lightning to grow,&lt;br/&gt;&amp;gt; but I think it warrants a serious discussion on whether we want Lightning&lt;br/&gt;&amp;gt; adoption to go to 100% by means of disabling on-chain commerce. For me&lt;br/&gt;&amp;gt; personally it would be an easier discussion to have when Lightning is at&lt;br/&gt;&amp;gt; 80%&#43; of all bitcoin transactions. Currently far too many bitcoin users&lt;br/&gt;&amp;gt; simply don&amp;#39;t have access to Lightning, and of those that do and hold their&lt;br/&gt;&amp;gt; own keys Muun is the biggest wallet per our data, not least due to their&lt;br/&gt;&amp;gt; ease-of-use which is under threat per the OP. It&amp;#39;s hard to assess how many&lt;br/&gt;&amp;gt; users would switch to Lightning in such a scenario, the communication&lt;br/&gt;&amp;gt; around it would be hard. My intuition says that the majority of the current&lt;br/&gt;&amp;gt; 85% of bitcoin users that pay onchain would just not use bitcoin anymore,&lt;br/&gt;&amp;gt; probably shift to an alt. The benefits of Lightning are many and obvious,&lt;br/&gt;&amp;gt; we don&amp;#39;t need to limit onchain to make Lightning more appealing. As an&lt;br/&gt;&amp;gt; anecdote, we did experiment with defaulting to bech32 addresses some years&lt;br/&gt;&amp;gt; back. The result was that simply users of the wallets that weren&amp;#39;t able to&lt;br/&gt;&amp;gt; pay to bech32 didn&amp;#39;t complete the purchase, no support ticket or anything,&lt;br/&gt;&amp;gt; just &amp;#34;it didn&amp;#39;t work 🤷‍♂️&amp;#34; and user moved on. We rolled it back, and later&lt;br/&gt;&amp;gt; implemented a wallet selector to allow modern wallets to pay to bech32&lt;br/&gt;&amp;gt; while other wallets can pay to P2SH. This type of thing  is clunky, and&lt;br/&gt;&amp;gt; requires a certain level of scale to be able to do, we certainly wouldn&amp;#39;t&lt;br/&gt;&amp;gt; have had the manpower for that when we were starting out. This why I&amp;#39;m&lt;br/&gt;&amp;gt; cautious about introducing more such clunkiness vectors as they are&lt;br/&gt;&amp;gt; centralizing factors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m well aware of the reason for this policy being suggested and the&lt;br/&gt;&amp;gt; potential pinning attack vector for LN and other smart contracts, but I&lt;br/&gt;&amp;gt; think these two risks/costs need to be weighed against eachother first and&lt;br/&gt;&amp;gt; thoroughly discussed because the costs are non-trivial on both sides.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sidenote: On the efficacy of RBF to &amp;#34;unstuck&amp;#34; stuck transactions&lt;br/&gt;&amp;gt; After interacting with users during high-fee periods I&amp;#39;ve come to not&lt;br/&gt;&amp;gt; appreciate RBF as a solution to that issue. Most users (80% or so) simply&lt;br/&gt;&amp;gt; don&amp;#39;t have access to that functionality, because their wallet doesn&amp;#39;t&lt;br/&gt;&amp;gt; support it, or they use a custodial (exchange) wallet etc. Of those that&lt;br/&gt;&amp;gt; have the feature - only the power users understand how RBF works, and&lt;br/&gt;&amp;gt; explaining how to do RBF to a non-power-user is just too complex, for the&lt;br/&gt;&amp;gt; same reason why it&amp;#39;s complex for wallets to make sensible non-power-user UI&lt;br/&gt;&amp;gt; around it. Current equilibrium is that mostly only power users have access&lt;br/&gt;&amp;gt; to RBF and they know how to handle it, so things are somewhat working. But&lt;br/&gt;&amp;gt; rolling this out to the broad market is something else and would likely&lt;br/&gt;&amp;gt; cause more confusion.&lt;br/&gt;&amp;gt; CPFP is somewhat more viable but also not perfect as it would require lots&lt;br/&gt;&amp;gt; of edge case code to handle abuse vectors: What if users abuse a generous&lt;br/&gt;&amp;gt; CPFP policy to unstuck past transactions or consolidate large wallets. Best&lt;br/&gt;&amp;gt; is for CPFP to be done on the wallet side, not the merchant side, but there&lt;br/&gt;&amp;gt; too are the same UX issues as with RBF.&lt;br/&gt;&amp;gt; In the end a risk-based approach to decide on which payments are&lt;br/&gt;&amp;gt; non-trivial to reverse is the easiest, taking account user experience and&lt;br/&gt;&amp;gt; such. Remember that in the fiat world card payments have up to 5%&lt;br/&gt;&amp;gt; chargebacks, whereas we in zero-conf bitcoin land we deal with &amp;#34;fewer than&lt;br/&gt;&amp;gt; 1 in a million&amp;#34; accepted transactions successfully reversed. These days we&lt;br/&gt;&amp;gt; have very few support issues related to bitcoin payments. The few that do&lt;br/&gt;&amp;gt; come in are due to accidental RBF users venting frustration about waiting&lt;br/&gt;&amp;gt; for their tx to confirm.&lt;br/&gt;&amp;gt; &amp;#34;In theory, theory and practice are the same. In practice, they are not&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All the best,&lt;br/&gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt; CEO Bitrefill.com&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; CEO&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter: @ziggamon &amp;lt;&lt;a href=&#34;https://twitter.com/ziggamon&amp;gt&#34;&gt;https://twitter.com/ziggamon&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; www.bitrefill.com&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter &amp;lt;&lt;a href=&#34;https://www.twitter.com/bitrefill&amp;gt&#34;&gt;https://www.twitter.com/bitrefill&amp;gt&lt;/a&gt;; | Blog&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://www.bitrefill.com/blog/&amp;gt&#34;&gt;https://www.bitrefill.com/blog/&amp;gt&lt;/a&gt;; | Angellist &amp;lt;&lt;a href=&#34;https://angel.co/bitrefill&amp;gt&#34;&gt;https://angel.co/bitrefill&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sergej Kotliar&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; CEO&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter: @ziggamon &amp;lt;&lt;a href=&#34;https://twitter.com/ziggamon&amp;gt&#34;&gt;https://twitter.com/ziggamon&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; www.bitrefill.com&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter &amp;lt;&lt;a href=&#34;https://www.twitter.com/bitrefill&amp;gt&#34;&gt;https://www.twitter.com/bitrefill&amp;gt&lt;/a&gt;; | Blog&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://www.bitrefill.com/blog/&amp;gt&#34;&gt;https://www.bitrefill.com/blog/&amp;gt&lt;/a&gt;; | Angellist &amp;lt;&lt;a href=&#34;https://angel.co/bitrefill&amp;gt&#34;&gt;https://angel.co/bitrefill&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20221019/5d40738b/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221019/5d40738b/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:14:42&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0avuf8nd29clhp4g3n8dlyx7hy2k9szr4hzrg23lqgp5zuqng3yszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zyjqv0p</id>
    
      <title type="html">📅 Original date posted:2022-10-17 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0avuf8nd29clhp4g3n8dlyx7hy2k9szr4hzrg23lqgp5zuqng3yszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zyjqv0p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs888sz7nc252k93txan7hr5s07xaaew59adezsykm0e0ektn55nac8vgftm&#39;&gt;nevent1q…gftm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-17&lt;br/&gt;📝 Original message:Hi John,&lt;br/&gt;&lt;br/&gt;I hear your worry about RBF issuing concerns for 0conf acceptance&lt;br/&gt;merchants. I don&amp;#39;t think it has been denied in the first communication of&lt;br/&gt;this opt-in rbf proposal back in June. Merchants/0confs builders have been&lt;br/&gt;invited to bring voices to the surface at that time [0]. So this new&lt;br/&gt;full-RBF proposal has at least tried to bind to best communication&lt;br/&gt;standards towards the community at large. If you think about more community&lt;br/&gt;venues (Reddit, podcast, newsletter, ...) that developers may weigh in when&lt;br/&gt;proposing Core policy changes, we can improve for next time.&lt;br/&gt;&lt;br/&gt;About the kernel of the concern I understand, I think the whole discussion&lt;br/&gt;would benefit from clarifications in precising zero-conf security bounds.&lt;br/&gt;Relying only on first-seen and lack of RBF as a solo ground to estimate the&lt;br/&gt;safety of an incoming transaction isn&amp;#39;t that robust in a distributed system&lt;br/&gt;like the p2p network. However, building management risks framework on top,&lt;br/&gt;as additional security layers sound a far more compelling approach from a&lt;br/&gt;developer perspective. A year ago, when I initially proposed full-rbf, I&lt;br/&gt;noted a few ideas that could be implemented such as double-spend monitoring&lt;br/&gt;or staked reputation to enhance zero-conf security [1]. For sure, there is&lt;br/&gt;a wide solution space to explore and build on to improve the 0conf flows,&lt;br/&gt;and it would marginally benefit LN, as we have now zero-conf channels [2].&lt;br/&gt;&lt;br/&gt;That said, saying RBF causes more problems than it resolves sounds hard to&lt;br/&gt;hold as a line from my perspective. As LN security relies on a reactive&lt;br/&gt;model, where time-sensitive transactions must be included before a given&lt;br/&gt;height to ensure funds safety, the ability to replace-by-fee previous bids&lt;br/&gt;and have them propagating well on the network is fundamental. While I think&lt;br/&gt;this is correct to say that today 0conf might be still a more significant&lt;br/&gt;economic traffic than Lightning, the bitcoin user of tomorrow is likely to&lt;br/&gt;expect both 0conf and Lightning, without caring that much about the&lt;br/&gt;quibbles of the security mechanisms backing them.&lt;br/&gt;&lt;br/&gt;Overall, RBF is far from being a &amp;#34;black-and-white&amp;#34; thing, dependending of&lt;br/&gt;the perspective you&amp;#39;re coming from, and thanks to everyone for patience in&lt;br/&gt;this discussion.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-June/019074.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-June/019074.html&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/lightning/bolts/pull/910&#34;&gt;https://github.com/lightning/bolts/pull/910&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le ven. 7 oct. 2022 à 12:43, Dario Sneidermanis via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hello list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m Dario, from Muun wallet, a mobile non-custodial bitcoin wallet. For&lt;br/&gt;&amp;gt; the past&lt;br/&gt;&amp;gt; few days we&amp;#39;ve been reviewing the latest bitcoin core release candidate,&lt;br/&gt;&amp;gt; and we&lt;br/&gt;&amp;gt; found some troubling facts related to the opt-in full-RBF deployment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We first learned about the opt-in full-RBF proposal last June when it was&lt;br/&gt;&amp;gt; announced on the mailing list. Closing the gap between the protocol&amp;#39;s relay&lt;br/&gt;&amp;gt; policies and the miner incentives is inevitable, so it was a welcomed&lt;br/&gt;&amp;gt; addition.&lt;br/&gt;&amp;gt; Furthermore, allowing transaction replacements that remove the opt-in RBF&lt;br/&gt;&amp;gt; flag&lt;br/&gt;&amp;gt; was deeply problematic.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At the time, we understood we had at least a year from the initial opt-in&lt;br/&gt;&amp;gt; deployment until opt-out was deployed, giving us enough time to adapt Muun&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; the new policies. However, when reviewing the 24.0 release candidate just&lt;br/&gt;&amp;gt; a few&lt;br/&gt;&amp;gt; days ago, we realized that zero-conf apps (like Muun) must *immediately&lt;br/&gt;&amp;gt; turn&lt;br/&gt;&amp;gt; off* their zero-conf features.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I understand this wasn&amp;#39;t the intention when designing the opt-in deployment&lt;br/&gt;&amp;gt; mechanism. Given this new information, do you see a path where we can&lt;br/&gt;&amp;gt; delay the&lt;br/&gt;&amp;gt; opt-in deployment and find a safer way to deploy full-RBF?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;d be great for this deployment to be a success so that we can continue&lt;br/&gt;&amp;gt; fixing&lt;br/&gt;&amp;gt; the remaining relay policy problems, such as package relay and the RBF&lt;br/&gt;&amp;gt; rules.&lt;br/&gt;&amp;gt; Maybe we could go straight to an opt-out deployment locked by code at a&lt;br/&gt;&amp;gt; certain&lt;br/&gt;&amp;gt; height in the future to give time to everyone and, at the same time, avoid&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; huge mempool divergence event?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Below is our analysis of how zero-conf apps break with opt-in full-RBF. I&lt;br/&gt;&amp;gt; hope&lt;br/&gt;&amp;gt; it helps.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Dario&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # How do zero-conf apps work&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While the workings and trade-offs of zero-conf applications might be known&lt;br/&gt;&amp;gt; by&lt;br/&gt;&amp;gt; many in this list, it&amp;#39;s useful to define precisely how they work to&lt;br/&gt;&amp;gt; understand&lt;br/&gt;&amp;gt; how they break.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We call zero-conf applications to entities that accept on-chain payments&lt;br/&gt;&amp;gt; from&lt;br/&gt;&amp;gt; *untrusted parties* and will sometimes deliver the paid-for product or&lt;br/&gt;&amp;gt; service&lt;br/&gt;&amp;gt; without waiting for the transaction to be included in a block.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some examples of zero-conf apps:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Muun&amp;#39;s submarine swaps for outgoing lightning payments&lt;br/&gt;&amp;gt; - Bitrefill&amp;#39;s on-chain payments for gift cards and phone top-ups&lt;br/&gt;&amp;gt; - Many bitcoin ATMs&amp;#39; on-chain deposits for selling bitcoin for cash (at&lt;br/&gt;&amp;gt; least&lt;br/&gt;&amp;gt;   the two biggest bitcoin ATM manufacturers support this: Genesis Coin and&lt;br/&gt;&amp;gt;   General Byte)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All of these applications are receiving incoming on-chain transactions for&lt;br/&gt;&amp;gt; which&lt;br/&gt;&amp;gt; they don&amp;#39;t control the inputs, and performing a risk analysis to decide&lt;br/&gt;&amp;gt; whether&lt;br/&gt;&amp;gt; they are ok with accepting the payment without confirmation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In practice, this works because once the bitcoin P2P network has fully&lt;br/&gt;&amp;gt; propagated a non-RBF transaction, you need the collaboration of a miner to&lt;br/&gt;&amp;gt; replace it, which isn&amp;#39;t easy to get today. Even though many of the biggest&lt;br/&gt;&amp;gt; miners offer off-band transaction broadcasting services, they currently&lt;br/&gt;&amp;gt; won&amp;#39;t&lt;br/&gt;&amp;gt; process conflicting transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Roughly, the risk analysis goes like this:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. if an incoming transaction is RBF (direct or inherited)&lt;br/&gt;&amp;gt;    --&amp;gt; too risky, wait for 1 conf (or more) since it can be replaced at&lt;br/&gt;&amp;gt; any time&lt;br/&gt;&amp;gt; 2. if the payment is for an amount greater than X&lt;br/&gt;&amp;gt;    --&amp;gt; too risky, wait for 1 conf (or more), since the amount is worthy of&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt;        sophisticated attacker&lt;br/&gt;&amp;gt; 3. wait for full(ish) propagation of the incoming transaction&lt;br/&gt;&amp;gt; 4. if there&amp;#39;s no double-spend attempt&lt;br/&gt;&amp;gt;    --&amp;gt; accept 0-conf&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As with any other risk analysis, there&amp;#39;s always a false-negative detection&lt;br/&gt;&amp;gt; rate,&lt;br/&gt;&amp;gt; leading to an expected loss, which the zero-conf app should be willing to&lt;br/&gt;&amp;gt; bear.&lt;br/&gt;&amp;gt; Notice that the expected loss is tunable via the amount X in the above&lt;br/&gt;&amp;gt; analysis.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Why are zero-conf apps not protected with an opt-in deployment&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Full-RBF adoption works on three different layers:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - The transaction application layer&lt;br/&gt;&amp;gt; - The transaction relaying layer&lt;br/&gt;&amp;gt; - The transaction mining layer&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If an application wants to replace with full-RBF an *outgoing*&lt;br/&gt;&amp;gt; transaction, it&lt;br/&gt;&amp;gt; will need:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - An upgraded node that opted into full-RBF, from which it can broadcast&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt;   replacement transaction&lt;br/&gt;&amp;gt; - A connected component of upgraded nodes that opted into full-RBF, that&lt;br/&gt;&amp;gt; can&lt;br/&gt;&amp;gt;   relay the replacement transaction&lt;br/&gt;&amp;gt; - A miner in that connected component with an upgraded node that opted into&lt;br/&gt;&amp;gt;   full-RBF, that can mine the replacement transaction&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, an application cannot control whether a replacement to an&lt;br/&gt;&amp;gt; *incoming*&lt;br/&gt;&amp;gt; transaction is relayed via full-RBF. As soon as a single application can&lt;br/&gt;&amp;gt; generate replacements easily via full-RBF, all other applications have to&lt;br/&gt;&amp;gt; assume&lt;br/&gt;&amp;gt; that any incoming transaction from an untrusted party might be replaced via&lt;br/&gt;&amp;gt; full-RBF. That is, for the application layer this is a forced upgrade.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As soon as an unsophisticated attacker can use opt-in full-RBF, the risk&lt;br/&gt;&amp;gt; analysis performed by zero-conf applications stops working because the&lt;br/&gt;&amp;gt; transactions to analyze are all incoming transactions from untrusted&lt;br/&gt;&amp;gt; parties.&lt;br/&gt;&amp;gt; Since some wallets already implement cancel functionality for opt-in RBF&lt;br/&gt;&amp;gt; transactions, enabling the same functionality for every transaction&lt;br/&gt;&amp;gt; wouldn&amp;#39;t&lt;br/&gt;&amp;gt; require much work, making canceling any unconfirmed transaction a one-click&lt;br/&gt;&amp;gt; experience. After this, the security model of zero-conf applications goes&lt;br/&gt;&amp;gt; from&lt;br/&gt;&amp;gt; &amp;#34;susceptible to attacks from miners&amp;#34; to &amp;#34;anyone can perform an attack,&lt;br/&gt;&amp;gt; with an&lt;br/&gt;&amp;gt; easy-to-use interface&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That is, the opt-in deployment of full-RBF doesn&amp;#39;t protect zero-conf&lt;br/&gt;&amp;gt; applications from having to turn off their zero-conf features very soon&lt;br/&gt;&amp;gt; after&lt;br/&gt;&amp;gt; the initial deployment. All mitigations are mostly ineffective against&lt;br/&gt;&amp;gt; untrusted parties.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Other things we have to fix&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While it&amp;#39;s clear how full-RBF breaks zero-conf applications, other more&lt;br/&gt;&amp;gt; subtle&lt;br/&gt;&amp;gt; things break in *many* wallets (Muun included). If given the opportunity,&lt;br/&gt;&amp;gt; we&lt;br/&gt;&amp;gt; would like to fix them before deployment. One could argue that these things&lt;br/&gt;&amp;gt; were already broken, but they get considerably worse as the network adopts&lt;br/&gt;&amp;gt; full-RBF (even with an opt-in deployment), so we should fix them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Mental model for unconfirmed incoming transactions&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Many wallets with support for on-chain payments (Muun included) show&lt;br/&gt;&amp;gt; incoming&lt;br/&gt;&amp;gt; external transactions in some way to their users before they confirm. This&lt;br/&gt;&amp;gt; is a&lt;br/&gt;&amp;gt; common practice because not showing them leads users to worry that their&lt;br/&gt;&amp;gt; money&lt;br/&gt;&amp;gt; disappeared (exchanges doing this is the #1 issue we have to deal with in&lt;br/&gt;&amp;gt; our&lt;br/&gt;&amp;gt; customer support channels).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With full-RBF, wallets should make it extremely clear to users that&lt;br/&gt;&amp;gt; unconfirmed&lt;br/&gt;&amp;gt; funds are not theirs (yet). Otherwise, protocol-unaware users that are&lt;br/&gt;&amp;gt; transacting on-chain with untrusted parties can be easily scammed if they&lt;br/&gt;&amp;gt; don&amp;#39;t&lt;br/&gt;&amp;gt; know they have to wait for a confirmation. Eg. in Argentina, it&amp;#39;s pretty&lt;br/&gt;&amp;gt; common&lt;br/&gt;&amp;gt; to meet someone in person to buy bitcoin P2P for cash, even for newcomers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Block explorers as payment receipts&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Most wallets with support for on-chain payments (Muun included) use the&lt;br/&gt;&amp;gt; transaction view of a block explorer as a shareable payment receipt. The&lt;br/&gt;&amp;gt; sender&lt;br/&gt;&amp;gt; of an on-chain transaction usually shares this link with the receiver to&lt;br/&gt;&amp;gt; let&lt;br/&gt;&amp;gt; them know they made a payment. Protocol-unaware receivers sometimes take&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; link as proof of payment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Most explorers currently don&amp;#39;t track payment replacements and, more&lt;br/&gt;&amp;gt; importantly,&lt;br/&gt;&amp;gt; don&amp;#39;t warn users that unconfirmed funds are not theirs (yet). With&lt;br/&gt;&amp;gt; full-RBF,&lt;br/&gt;&amp;gt; wallets should either stop relying on explorers for this functionality or&lt;br/&gt;&amp;gt; wait&lt;br/&gt;&amp;gt; for them to support it explicitly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Impact at Muun&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Work to transition Muun from using zero-conf submarine swaps to using&lt;br/&gt;&amp;gt; payment&lt;br/&gt;&amp;gt; channels is ongoing, but we are still several months away from being&lt;br/&gt;&amp;gt; production&lt;br/&gt;&amp;gt; ready. This means we would have to turn off outgoing lightning payments for&lt;br/&gt;&amp;gt; &#43;100k monthly active users, which is a good chunk of all users making&lt;br/&gt;&amp;gt; non-custodial lightning payments today.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Furthermore, the more subtle fixes imply non-trivial amounts of product&lt;br/&gt;&amp;gt; work&lt;br/&gt;&amp;gt; that we cannot reasonably deploy before they start affecting users.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While I cannot talk for other applications, there are many impacted in one&lt;br/&gt;&amp;gt; way&lt;br/&gt;&amp;gt; or another, and none of the ones I checked with were aware of this change,&lt;br/&gt;&amp;gt; or&lt;br/&gt;&amp;gt; its implications.&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20221017/28add9f9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221017/28add9f9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:14:35&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspg65q8rcht0es8rqduymajjmm7k535nf5w6xz54evcnknrfmh4tczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zv5l3lt</id>
    
      <title type="html">📅 Original date posted:2022-10-19 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspg65q8rcht0es8rqduymajjmm7k535nf5w6xz54evcnknrfmh4tczypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zv5l3lt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs85xuhc78dqy5x45y4l9ex54cg03vqwpykydwjftn3aqe8ujur7hch5mhh2&#39;&gt;nevent1q…mhh2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-19&lt;br/&gt;📝 Original message:&amp;gt; Full RBF doesn&amp;#39;t need a majority or unanimity to have an impact; it needs&lt;br/&gt;&amp;gt; adoption by perhaps 10% of hashrate (so a low fee tx at the bottom of&lt;br/&gt;&amp;gt; a 10MvB mempool can be replaced before being mined naturally), and some&lt;br/&gt;&amp;gt; way of finding a working path to relay txs to that hashrate.&lt;br/&gt;&lt;br/&gt;Yes, this has been the crux of the conceptual discussion in #25600.&lt;br/&gt;&lt;br/&gt;&amp;gt; I mean, I guess I can understand wanting to reduce that responsibility&lt;br/&gt;&amp;gt; for maintainers of the github repo, even if for no other reason than to&lt;br/&gt;&amp;gt; avoid frivolous lawsuits, but where do you expect people to find better&lt;br/&gt;&amp;gt; advice about what things are a good/bad idea if core devs as a whole&lt;br/&gt;&amp;gt; are avoiding that responsibility?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Core devs are supposedly top technical experts at bitcoin -- which means&lt;br/&gt;&amp;gt; they&amp;#39;re the ones that should have the best understanding of all the&lt;br/&gt;&amp;gt; implications of policy changes like this. Is opt-in RBF only fine? If&lt;br/&gt;&amp;gt; you look at the network today, it sure seems like it; it takes a pretty&lt;br/&gt;&amp;gt; good technical understanding to figure out what problems it has, and&lt;br/&gt;&amp;gt; an even better one to figure out whether those problems can be solved&lt;br/&gt;&amp;gt; while keeping an opt-in RBF regime, or if full RBF is needed.&lt;br/&gt;&lt;br/&gt;In the present case, I don&amp;#39;t think there is a real concern of a frivolous&lt;br/&gt;or half-baked lawsuit. My concern is rather the pretension to omniscience&lt;br/&gt;that we would adopt as Core devs w.r.t policy changes, as far from being a&lt;br/&gt;more closed, hermetic system like the p2p stack, it&amp;#39;s interfacing with the&lt;br/&gt;operations of a number of Bitcoin applications and second-layer contracting&lt;br/&gt;protocols. As of today, I think this is still a relatively short process to&lt;br/&gt;analyze the implications of any policy changes on the major Bitcoin&lt;br/&gt;applications&lt;br/&gt;flows and L2s of the day (i.e mainly Lightning and coinjoins). I&amp;#39;m not sure&lt;br/&gt;this statement will stay true in a future with a growing fauna of L2s (i.e&lt;br/&gt;vaults, DLC-over-channel, peerswaps, etc), each presenting unique&lt;br/&gt;characteristics.&lt;br/&gt;&lt;br/&gt;How do we minimize the odds of policy-based disruptions for current Bitcoin&lt;br/&gt;softwares and users ? I don&amp;#39;t have strong ideas, though I wish for the Core&lt;br/&gt;project to adopt a more open-ended and smooth approach to release&lt;br/&gt;context-rich policy changes. I aimed with #25353 and #25600 to experiment&lt;br/&gt;with such a smoother approach advocated for (rather than the last year&lt;br/&gt;proposal of turning on by default full-rbf, that was a wrong and missing&lt;br/&gt;context). I hope at least one good outcome of this gradual process has been&lt;br/&gt;to give time to Dario to publish a thoughtful standpoint for 0conf&lt;br/&gt;operators, of which at least I learnt a few interesting elements on the UX&lt;br/&gt;of such applications.&lt;br/&gt;&lt;br/&gt;&amp;gt; It&amp;#39;s a bit disappointing that the people that&amp;#39;s a problem for didn&amp;#39;t&lt;br/&gt;&amp;gt; engage earlier -- though looking back, I guess there wasn&amp;#39;t all that&lt;br/&gt;&amp;gt; much effort made to reach out, either. There were two mentions in the&lt;br/&gt;&amp;gt; optech newsletter [3] [4] but it wasn&amp;#39;t called out as an &amp;#34;action item&amp;#34;&lt;br/&gt;&amp;gt; (maybe those aren&amp;#39;t a thing anymore), so it may have been pretty missable,&lt;br/&gt;&amp;gt; especially given RBF has been discussed on and off for so long. And the&lt;br/&gt;&amp;gt; impression I got from the PR review club discussion more seemed like&lt;br/&gt;&amp;gt; devs making assumptions about businesses rather than having talked to&lt;br/&gt;&amp;gt; them (eg &amp;#34;[I] think there are fewer and fewer businesses who absolutely&lt;br/&gt;&amp;gt; cannot survive without relying on zeroconf. Or at least hope so&amp;#34;).&lt;br/&gt;&lt;br/&gt;Yeah, I&amp;#39;m still valuing the mailing list as a kind of &amp;#34;broadcast-all&amp;#34;&lt;br/&gt;communication channel towards all the community stakeholders, though this&lt;br/&gt;is the perspective of a developer and I&amp;#39;m not sure business/services&lt;br/&gt;operators have the same communication habits. There is definitely a&lt;br/&gt;reflection to hold, if we, as Core devs, we should follow a better&lt;br/&gt;communication standard when we propose significant policy changes. And go&lt;br/&gt;the full-tour of Reddit AMA, podcasts and newsletters as suggested in my&lt;br/&gt;reply to Dario. It&amp;#39;s hard to know if lack of vocal reactions on the mailing&lt;br/&gt;list or to the publication of optech newsletter signifies a lack of&lt;br/&gt;opposition, a lack of negatively impacted users or lack of interest from&lt;br/&gt;the wider community. Maybe we should have a formalized, bulletpoints -based&lt;br/&gt;for future policy changes, with clear time buffers and actions items, I&lt;br/&gt;don&amp;#39;t know.&lt;br/&gt;&lt;br/&gt;&amp;gt; If we&amp;#39;re happy to not get feedback until we start doing rcs, that&amp;#39;s fine;&lt;br/&gt;&amp;gt; but if we want to say &amp;#34;oops, we&amp;#39;re into release candidates, you should&lt;br/&gt;&amp;gt; have something earlier, it&amp;#39;s too late now&amp;#34;, that&amp;#39;s a pretty closed-off&lt;br/&gt;&amp;gt; way of doing things.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And I mean: all this is only about drawing a line in *sand*; if people&lt;br/&gt;&amp;gt; think core devs are wrong, they can still let that line blow away in&lt;br/&gt;&amp;gt; the wind, by running different software, configuring core differently,&lt;br/&gt;&amp;gt; patching core, or whatever else.&lt;br/&gt;&lt;br/&gt;In the present case, it&amp;#39;s more a lack of feedback showing up until we start&lt;br/&gt;doing rcs, rather than a pretty closed-off way of doing things. That we&lt;br/&gt;should amend expected and already-merged changes in the function of&lt;br/&gt;feedback, I&amp;#39;m all for it in principle. The hard question is the set of&lt;br/&gt;decision heuristics to converge on to qualify such feedback as worthy to&lt;br/&gt;react on. Again in this case, we&amp;#39;re doing some risk arbitrage (which I&lt;br/&gt;really dislike as a situation) between 0conf applications and multi-party&lt;br/&gt;funding flows of contracting protocols. Correcting our release process&lt;br/&gt;isn&amp;#39;t free of implications as we&amp;#39;re removing the risk burden on some class&lt;br/&gt;of use-case to pour it on a second class, in my opinion. Moreover, assuming&lt;br/&gt;we have to bind to reasonable communication standards which is an open&lt;br/&gt;question, I&amp;#39;m also worried we would also normalize the publication of very&lt;br/&gt;late feedback from community stakeholders.&lt;br/&gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think that&amp;#39;s remotely true: take a look at taproot activation:&lt;br/&gt;&amp;gt; it took two months between releasing code that supported signalling and&lt;br/&gt;&amp;gt; having 98% of hashrate signalling; with 40% of blocks signalling within&lt;br/&gt;&amp;gt; the first two weeks.&lt;br/&gt;&lt;br/&gt;First, without more visibility brought back on the 0confs operations&lt;br/&gt;necessary to adapt their operations, two months might be considered as&lt;br/&gt;enough. 8 weeks is sensibly the release schedule followed by few&lt;br/&gt;open-source projects in the ecosystem. Second, the communication machine&lt;br/&gt;behind softforks activation sounds to be far more fine-tuned, or at least&lt;br/&gt;gather spontaneously community self-coordination than policy changes, and&lt;br/&gt;it would be reasonable to expect things to be slower with policy changes.&lt;br/&gt;However, I would agree you can have a quick adoption a day from another&lt;br/&gt;with one single well-crafted meme buzzing on Twitter. Social phenomenas&lt;br/&gt;don&amp;#39;t offer the same degree of predictability than system engineering. How&lt;br/&gt;we cope up with that, as core devs, I don&amp;#39;t know.&lt;br/&gt;&lt;br/&gt;&amp;gt; But if the line in the sand is &amp;#34;we&amp;#39;re doing this, no matter how much that&lt;br/&gt;&amp;gt; increases the risk to existing businesses that weren&amp;#39;t expecting it&amp;#34; then&lt;br/&gt;&amp;gt; it seems *very* disingenuous not to make those risks very clear so that&lt;br/&gt;&amp;gt; people who weren&amp;#39;t expecting it actually take action to avoid those risks.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure if it has been established clearly, though as I announced on&lt;br/&gt;IRC two weeks ago, Dario reached out to me offline before publishing his&lt;br/&gt;mail. My recommendation to him have been immediately to adjoin 0confs&lt;br/&gt;services examples impacted, if possible with numbers on users affected and&lt;br/&gt;evaluation of engineering and operational effort if would request to adapt&lt;br/&gt;their use-cases, and inviting to publish on this venue, as business&lt;br/&gt;operators might not be used to with open-source process (I can disclose the&lt;br/&gt;correspondence if requested and with Dario approval).&lt;br/&gt;&lt;br/&gt;Goal was to collect the maximum of data points in our community&lt;br/&gt;decision-making process about full-rbf. Now this doesn&amp;#39;t relieve us of&lt;br/&gt;finding a common ground on what should be a minimal bar to accept those&lt;br/&gt;points, how to value those data&lt;br/&gt;points, if we should take operators on their raw numbers or request the&lt;br/&gt;publication of &amp;#34;light&amp;#34; proofs like on-chain transactions, lightning&lt;br/&gt;invoices (everyone in business would take the happy measure showing the&lt;br/&gt;most active users possible). The question of what signals we should&lt;br/&gt;collect, and how we process them is a hard question in a decentralized and&lt;br/&gt;trust-minimized process like the Bitcoin development one, from my&lt;br/&gt;perspective. I don&amp;#39;t have strong ideas there.&lt;br/&gt;&lt;br/&gt;Though speaking for myself, and not for other contributors, I&amp;#39;ve raised the&lt;br/&gt;warnings about potential impacts of full-rbfs in both my June 2021 [0] and&lt;br/&gt;June 2022 [1] mails, so I find the qualification of disingenuous is a bit&lt;br/&gt;ungrounded. Overall, I would remind all that it&amp;#39;s better to keep patience&lt;br/&gt;in face of complex changes in Core, rather than to fall quickly in a blame&lt;br/&gt;ascription position.&lt;br/&gt;&lt;br/&gt;[0]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-June/019074.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-June/019074.html&lt;/a&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;(I don&amp;#39;t deny &amp;#34;blame-and-reward&amp;#34; assignments can be worthy a posteriori,&lt;br/&gt;once we&amp;#39;re out of the &amp;#34;hot&amp;#34; discussion phase, especially to introspect on&lt;br/&gt;how we can improve our engineering process, though in the middle of a&lt;br/&gt;discussion... I don&amp;#39;t know, it sounds premature and noisy).&lt;br/&gt;&lt;br/&gt;&amp;gt; (More generally, that&amp;#39;s similar to one of the things I&amp;#39;ve hated&lt;br/&gt;&amp;gt; watching in mainstream economics over the past few years: &amp;#34;doing this&lt;br/&gt;&amp;gt; will cause massive inflation&amp;#34; &amp;#34;no it won&amp;#39;t, there&amp;#39;s no inflation risk&amp;#34;&lt;br/&gt;&amp;gt; &amp;#34;oops, inflation magically appeared, how did that happen? oh well, too&lt;br/&gt;&amp;gt; bad, we have to live with it now&amp;#34;. This looks pretty similar to me: &amp;#34;do&lt;br/&gt;&amp;gt; something risky, deny the risk, make sure nobody can hold us accountable&lt;br/&gt;&amp;gt; when the risk eventuates later&amp;#34; so it makes me really uncomfortable)&lt;br/&gt;&lt;br/&gt;I can share the sentiment about mainstream economics and the way&lt;br/&gt;risk-management impacts large-range of human beings is completely shrug&lt;br/&gt;on... Though again in the present case, I think it would be more productive&lt;br/&gt;to describe what engineering&lt;br/&gt;needs or standards expectations of you are not fulfilled rather than to&lt;br/&gt;fallback on the pure expression of an uncomfortableness and how as a&lt;br/&gt;community of contributors we could improve on that. Though to object,&lt;br/&gt;speaking of risk appreciation, not hardening the funding phase of&lt;br/&gt;multi-party funding protocols also lets the door open to DoS attacks by&lt;br/&gt;deanonymizing attackers targeting things like coinjoin.&lt;br/&gt;&lt;br/&gt;&amp;gt; Sure; that&amp;#39;s a fine reason to draw the line in the sand. But it&amp;#39;s not&lt;br/&gt;&amp;gt; a good reason to have it happen immediately, rather than giving people&lt;br/&gt;&amp;gt; time to react, and it&amp;#39;s not a good reason to understate the risk of&lt;br/&gt;&amp;gt; it happening now. Maybe there are good reasons for either or both of&lt;br/&gt;&amp;gt; those, though?&lt;br/&gt;&lt;br/&gt;I agree. I would like to observe that &amp;#34;reasonable time to react&amp;#34; and&lt;br/&gt;&amp;#34;adequate risk statement&amp;#34; is more an art than a science.&lt;br/&gt;&lt;br/&gt;&amp;gt; Using the passive voice there doesn&amp;#39;t seem helpful. Who learnt these&lt;br/&gt;&amp;gt; things? You, I and Dario all seem to agree with (a), but John Carvalho&lt;br/&gt;&amp;gt; certainly appears not to, for instance. I&amp;#39;m not sure who agrees with&lt;br/&gt;&amp;gt; (b) -- I know I do, and I think Dario does; but multiple people seem&lt;br/&gt;&amp;gt; opposed to the clear timeline offered in #26323, and your #26305 seems&lt;br/&gt;&amp;gt; more likely to encourage a &amp;#34;pollination&amp;#34; approach rather than discourage&lt;br/&gt;&amp;gt; it (&amp;#34;oh, this will be the default option for 25.0, might as well enable&lt;br/&gt;&amp;gt; it now like all the cool kids are&amp;#34;).&lt;br/&gt;&lt;br/&gt;About John Carvalho disagreeing about full-rbf, I think he voiced a concern&lt;br/&gt;during the summer on one of the PR introducing a full-rbf setting and I did&lt;br/&gt;invite to voice his concerns on the ML, invitation stayed without follow-up&lt;br/&gt;until the recent days [2] [3]. I would have loved to spend time back then&lt;br/&gt;arguing on the full-rbf and miners incentives compatibility.&lt;br/&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25373#issuecomment-1163422654&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25373#issuecomment-1163422654&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25373#issuecomment-1163815017&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25373#issuecomment-1163815017&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I know we all have busy agendas and a short timeline to react to all the&lt;br/&gt;changes happening in the Bitcoin ecosystem... I think I replied to John&lt;br/&gt;Carvalho answer on this thread, inviting him to develop his argumentation&lt;br/&gt;further and I&amp;#39;m staying available to discuss with any full-rbf opponents,&lt;br/&gt;in a calm and respectful fashion [4].&lt;br/&gt;&lt;br/&gt;[4]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021027.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/021027.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; For what it&amp;#39;s worth, my guess is that releasing core with full rbf&lt;br/&gt;&amp;gt; support and having you and Murch and others advocating for people to&lt;br/&gt;&amp;gt; try it out, will mean that full RBF is usable on mainnet within two&lt;br/&gt;&amp;gt; or three months, supported by perhaps 5%-20% hashpower, but probably&lt;br/&gt;&amp;gt; still requiring special effort to actually find a peer that can relay&lt;br/&gt;&amp;gt; full rbf txs to that hashpower (probably doing an addnode, despite the&lt;br/&gt;&amp;gt; privacy implications). Even if that happens, I&amp;#39;m not super confident&lt;br/&gt;&amp;gt; that it would mean people would actively steal from zeroconf businesses&lt;br/&gt;&amp;gt; in any volume, though. It&amp;#39;s not something I&amp;#39;d risk happening to me,&lt;br/&gt;&amp;gt; but accepting zeroconf from strangers isn&amp;#39;t something I&amp;#39;d risk anyway.&lt;br/&gt;&lt;br/&gt;Yeah I mean this could have been a forward process before Dario published&lt;br/&gt;his thoughts. Achieving 5%-20% hashpower and full-rbf relay paths would&lt;br/&gt;have assumed landing #25600 _and_ actually reach out to few mining pools to&lt;br/&gt;inform them about the potential economic benefits. Now, I think the best&lt;br/&gt;process is to keep listening to more feedback from the community, lay out&lt;br/&gt;all the deployment options in code we have done and think more before&lt;br/&gt;committing to something.&lt;br/&gt;&lt;br/&gt;&amp;gt; And if the choice is between &amp;#34;bikeshedding&amp;#34; and &amp;#34;merge a PR, then ignore&lt;br/&gt;&amp;gt; feedback that it&amp;#39;s harmful&amp;#34;, I&amp;#39;d much rather the bikeshedding. What&amp;#39;s&lt;br/&gt;&amp;gt; the point of having rcs if you&amp;#39;re going to ignore negative feedback?&lt;br/&gt;&lt;br/&gt;I think this might be the point where I could say we&amp;#39;re diverging. In&lt;br/&gt;principle, I agree we should listen to negative feedback raising harmful&lt;br/&gt;disruptions risks for users and services. The more open, practical question&lt;br/&gt;to me is more how we collect, qualify and sanitize such negative feedback&lt;br/&gt;in a way which is acceptable for the community at large. Giving concrete&lt;br/&gt;bounds to the immediate dangers in a consensual way, and asserting this&lt;br/&gt;danger results from a lack of communication of the Core project, I&amp;#39;m still&lt;br/&gt;wondering on those subjects. And note again, I didn&amp;#39;t deny the option 3)&lt;br/&gt;approach as you laid out was zero-risk for 0conf operators.&lt;br/&gt;&lt;br/&gt;All that said, if we think as a project we should offer a &amp;#34;zero-risk&amp;#34;&lt;br/&gt;process towards 0conf operators w.r.t full-rbf, at the detriment of the&lt;br/&gt;risk encumbered by contracting protocols, I think it can be wise to&lt;br/&gt;resurrect #26287.&lt;br/&gt;&lt;br/&gt;Best,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le mar. 18 oct. 2022 à 03:00, Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; On Mon, Oct 17, 2022 at 05:41:48PM -0400, Antoine Riard via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;  1) Continue supporting and encouraging accepting unconfirmed&lt;br/&gt;&amp;gt; &amp;#34;on-chain&amp;#34;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     payments indefinitely&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;  2) Draw a line in the sand now, but give people who are currently&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     accepting unconfirmed txs time to update their software and&lt;br/&gt;&amp;gt; business&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     model&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;  3) Encourage mainnet miners and relay nodes to support unconditional&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     RBF immediately, no matter how much that increases the risk to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     existing businesses that are still accepting unconfirmed txs&lt;br/&gt;&amp;gt; &amp;gt; To give more context, the initial approach of enabling full RBF through&lt;br/&gt;&amp;gt; &amp;gt; #25353 &#43; #25600 wasn&amp;#39;t making the assumption the enablement itself would&lt;br/&gt;&amp;gt; &amp;gt; reach agreement of the economic majority or unanimity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Full RBF doesn&amp;#39;t need a majority or unanimity to have an impact; it needs&lt;br/&gt;&amp;gt; adoption by perhaps 10% of hashrate (so a low fee tx at the bottom of&lt;br/&gt;&amp;gt; a 10MvB mempool can be replaced before being mined naturally), and some&lt;br/&gt;&amp;gt; way of finding a working path to relay txs to that hashrate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Having a majority of nodes/hashrate support it makes the upsides better,&lt;br/&gt;&amp;gt; but doesn&amp;#39;t change the downsides to the people who are relying on it&lt;br/&gt;&amp;gt; not being available.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Without denying that such equilibrium would be unstable, it was designed&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; &amp;gt; remove the responsibility of the Core project itself to &amp;#34;draw a hard&lt;br/&gt;&amp;gt; line&amp;#34;&lt;br/&gt;&amp;gt; &amp;gt; on the subject.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Removing responsibility from core developers seems like it&amp;#39;s very much&lt;br/&gt;&amp;gt; optimising for the wrong thing to me.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I mean, I guess I can understand wanting to reduce that responsibility&lt;br/&gt;&amp;gt; for maintainers of the github repo, even if for no other reason than to&lt;br/&gt;&amp;gt; avoid frivolous lawsuits, but where do you expect people to find better&lt;br/&gt;&amp;gt; advice about what things are a good/bad idea if core devs as a whole&lt;br/&gt;&amp;gt; are avoiding that responsibility?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Core devs are supposedly top technical experts at bitcoin -- which means&lt;br/&gt;&amp;gt; they&amp;#39;re the ones that should have the best understanding of all the&lt;br/&gt;&amp;gt; implications of policy changes like this. Is opt-in RBF only fine? If&lt;br/&gt;&amp;gt; you look at the network today, it sure seems like it; it takes a pretty&lt;br/&gt;&amp;gt; good technical understanding to figure out what problems it has, and&lt;br/&gt;&amp;gt; an even better one to figure out whether those problems can be solved&lt;br/&gt;&amp;gt; while keeping an opt-in RBF regime, or if full RBF is needed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At that point, the technical experts *should* be coming up with a&lt;br/&gt;&amp;gt; specific recommendation, and, personally, I think that&amp;#39;s exactly what&lt;br/&gt;&amp;gt; happened with [0] [1] and [2].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&amp;gt; [1] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25353&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25353&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-June/020557.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That did draw hard line in the sand: it said &amp;#34;hey, opt-in RBF had a good&lt;br/&gt;&amp;gt; run, but it&amp;#39;s time to switch over to full RBF, for these reasons&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s a bit disappointing that the people that&amp;#39;s a problem for didn&amp;#39;t&lt;br/&gt;&amp;gt; engage earlier -- though looking back, I guess there wasn&amp;#39;t all that&lt;br/&gt;&amp;gt; much effort made to reach out, either. There were two mentions in the&lt;br/&gt;&amp;gt; optech newsletter [3] [4] but it wasn&amp;#39;t called out as an &amp;#34;action item&amp;#34;&lt;br/&gt;&amp;gt; (maybe those aren&amp;#39;t a thing anymore), so it may have been pretty missable,&lt;br/&gt;&amp;gt; especially given RBF has been discussed on and off for so long. And the&lt;br/&gt;&amp;gt; impression I got from the PR review club discussion more seemed like&lt;br/&gt;&amp;gt; devs making assumptions about businesses rather than having talked to&lt;br/&gt;&amp;gt; them (eg &amp;#34;[I] think there are fewer and fewer businesses who absolutely&lt;br/&gt;&amp;gt; cannot survive without relying on zeroconf. Or at least hope so&amp;#34;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://bitcoinops.org/en/newsletters/2022/06/22/&#34;&gt;https://bitcoinops.org/en/newsletters/2022/06/22/&lt;/a&gt;&lt;br/&gt;&amp;gt; [4] &lt;a href=&#34;https://bitcoinops.org/en/newsletters/2022/07/13/&#34;&gt;https://bitcoinops.org/en/newsletters/2022/07/13/&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If we&amp;#39;re happy to not get feedback until we start doing rcs, that&amp;#39;s fine;&lt;br/&gt;&amp;gt; but if we want to say &amp;#34;oops, we&amp;#39;re into release candidates, you should&lt;br/&gt;&amp;gt; have something earlier, it&amp;#39;s too late now&amp;#34;, that&amp;#39;s a pretty closed-off&lt;br/&gt;&amp;gt; way of doing things.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And I mean: all this is only about drawing a line in *sand*; if people&lt;br/&gt;&amp;gt; think core devs are wrong, they can still let that line blow away in&lt;br/&gt;&amp;gt; the wind, by running different software, configuring core differently,&lt;br/&gt;&amp;gt; patching core, or whatever else.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Moreover, relying on node operators turning on the setting&lt;br/&gt;&amp;gt; &amp;gt; provides a smoother approach offering time to zero-conf services to react&lt;br/&gt;&amp;gt; &amp;gt; in consequence.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think that&amp;#39;s remotely true: take a look at taproot activation:&lt;br/&gt;&amp;gt; it took two months between releasing code that supported signalling and&lt;br/&gt;&amp;gt; having 98% of hashrate signalling; with 40% of blocks signalling within&lt;br/&gt;&amp;gt; the first two weeks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; So the current path definitely belongs more to a 3) approach.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;  3) Encourage mainnet miners and relay nodes to support unconditional&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     RBF immediately, no matter how much that increases the risk to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     existing businesses that are still accepting unconfirmed txs&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, that&amp;#39;s how it appears to me, too. It&amp;#39;s not my preference (giving&lt;br/&gt;&amp;gt; people clear warning of changes seems much better to me), but I can&lt;br/&gt;&amp;gt; certainly live with it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But if the line in the sand is &amp;#34;we&amp;#39;re doing this, no matter how much that&lt;br/&gt;&amp;gt; increases the risk to existing businesses that weren&amp;#39;t expecting it&amp;#34; then&lt;br/&gt;&amp;gt; it seems *very* disingenuous not to make those risks very clear so that&lt;br/&gt;&amp;gt; people who weren&amp;#39;t expecting it actually take action to avoid those risks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That is, it seems to me that Dario was exactly right in titling this&lt;br/&gt;&amp;gt; thread &amp;#34;Zero-conf apps in immediate danger&amp;#34;, and our co-developers who&lt;br/&gt;&amp;gt; are dismissing the risk by saying things along the lines of &amp;#34;probably&lt;br/&gt;&amp;gt; nothing will change anytime soon&amp;#34; are exactly wrong.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (More generally, that&amp;#39;s similar to one of the things I&amp;#39;ve hated&lt;br/&gt;&amp;gt; watching in mainstream economics over the past few years: &amp;#34;doing this&lt;br/&gt;&amp;gt; will cause massive inflation&amp;#34; &amp;#34;no it won&amp;#39;t, there&amp;#39;s no inflation risk&amp;#34;&lt;br/&gt;&amp;gt; &amp;#34;oops, inflation magically appeared, how did that happen? oh well, too&lt;br/&gt;&amp;gt; bad, we have to live with it now&amp;#34;. This looks pretty similar to me: &amp;#34;do&lt;br/&gt;&amp;gt; something risky, deny the risk, make sure nobody can hold us accountable&lt;br/&gt;&amp;gt; when the risk eventuates later&amp;#34; so it makes me really uncomfortable)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; While this&lt;br/&gt;&amp;gt; &amp;gt; way cannot be denied to be a zero-risk deployment for business accepting&lt;br/&gt;&amp;gt; &amp;gt; unconfirmed transactions, it should be weighed in face of multi-party&lt;br/&gt;&amp;gt; &amp;gt; contracting protocols encumbering an annoying pinning vector.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sure; that&amp;#39;s a fine reason to draw the line in the sand. But it&amp;#39;s not&lt;br/&gt;&amp;gt; a good reason to have it happen immediately, rather than giving people&lt;br/&gt;&amp;gt; time to react, and it&amp;#39;s not a good reason to understate the risk of&lt;br/&gt;&amp;gt; it happening now. Maybe there are good reasons for either or both of&lt;br/&gt;&amp;gt; those, though?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Since Dario&amp;#39;s mail, I think we have learnt new data points, a) on the&lt;br/&gt;&amp;gt; long&lt;br/&gt;&amp;gt; &amp;gt; term full RBF to align miner incentives is acknowledged and b) a clear&lt;br/&gt;&amp;gt; &amp;gt; timeline based on e.g a block height is favored over the pollination&lt;br/&gt;&amp;gt; &amp;gt; deployment.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Using the passive voice there doesn&amp;#39;t seem helpful. Who learnt these&lt;br/&gt;&amp;gt; things? You, I and Dario all seem to agree with (a), but John Carvalho&lt;br/&gt;&amp;gt; certainly appears not to, for instance. I&amp;#39;m not sure who agrees with&lt;br/&gt;&amp;gt; (b) -- I know I do, and I think Dario does; but multiple people seem&lt;br/&gt;&amp;gt; opposed to the clear timeline offered in #26323, and your #26305 seems&lt;br/&gt;&amp;gt; more likely to encourage a &amp;#34;pollination&amp;#34; approach rather than discourage&lt;br/&gt;&amp;gt; it (&amp;#34;oh, this will be the default option for 25.0, might as well enable&lt;br/&gt;&amp;gt; it now like all the cool kids are&amp;#34;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For what it&amp;#39;s worth, my guess is that releasing core with full rbf&lt;br/&gt;&amp;gt; support and having you and Murch and others advocating for people to&lt;br/&gt;&amp;gt; try it out, will mean that full RBF is usable on mainnet within two&lt;br/&gt;&amp;gt; or three months, supported by perhaps 5%-20% hashpower, but probably&lt;br/&gt;&amp;gt; still requiring special effort to actually find a peer that can relay&lt;br/&gt;&amp;gt; full rbf txs to that hashpower (probably doing an addnode, despite the&lt;br/&gt;&amp;gt; privacy implications). Even if that happens, I&amp;#39;m not super confident&lt;br/&gt;&amp;gt; that it would mean people would actively steal from zeroconf businesses&lt;br/&gt;&amp;gt; in any volume, though. It&amp;#39;s not something I&amp;#39;d risk happening to me,&lt;br/&gt;&amp;gt; but accepting zeroconf from strangers isn&amp;#39;t something I&amp;#39;d risk anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Slowing that down from January-ish to May seems like it ought to be a&lt;br/&gt;&amp;gt; big win for anyone who has been doing zeroconf, and having it be easy&lt;br/&gt;&amp;gt; to find a path to miners when it is supported seems like a big win even&lt;br/&gt;&amp;gt; given a cost of a few months delay.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OTOH, if we&amp;#39;re really not expecting full rbf to be available for many&lt;br/&gt;&amp;gt; months, then I would have expected the &amp;#34;disable this for mainnet,&lt;br/&gt;&amp;gt; reconsider after the release&amp;#34; PR (#26287) to have gone ahead already.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Tie-breaking between&lt;br/&gt;&amp;gt; &amp;gt; both, I believe I would favor something like #26323 though only post 24.0&lt;br/&gt;&amp;gt; &amp;gt; to avoid introducing a bikeshedding precedent in terms of release&lt;br/&gt;&amp;gt; process,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Doing something like #26323 only after 24.0 is out does nothing to&lt;br/&gt;&amp;gt; mitigate whatever immediate risk there is to bitcoin businesses/users...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And if the choice is between &amp;#34;bikeshedding&amp;#34; and &amp;#34;merge a PR, then ignore&lt;br/&gt;&amp;gt; feedback that it&amp;#39;s harmful&amp;#34;, I&amp;#39;d much rather the bikeshedding. What&amp;#39;s&lt;br/&gt;&amp;gt; the point of having rcs if you&amp;#39;re going to ignore negative feedback?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I mean, if you think the feedback is wrong, that&amp;#39;s different: maybe we&lt;br/&gt;&amp;gt; shouldn&amp;#39;t care that zeroconf apps are in immediate danger, and maybe&lt;br/&gt;&amp;gt; bitcoin would be better if any that don&amp;#39;t adapt immediately all die&lt;br/&gt;&amp;gt; horribly as a lesson to others not to make similarly bad assumptions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But saying &amp;#34;we don&amp;#39;t want them to be in danger&amp;#34; and also refusing to do&lt;br/&gt;&amp;gt; anything to avoid it?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221018/f492c8c2/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221018/f492c8c2/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:14:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszrr2nfuqn36cs0c64f2lgf03vwqw7gsjxm8cqejr0mp6n5ufhf0szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z8z957j</id>
    
      <title type="html">📅 Original date posted:2022-07-23 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszrr2nfuqn36cs0c64f2lgf03vwqw7gsjxm8cqejr0mp6n5ufhf0szypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z8z957j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8zx2ym0x44h09zkefyjm9s9vp7mqp6vx83qs6ncx0ru48866fgnctsmmak&#39;&gt;nevent1q…mmak&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-23&lt;br/&gt;📝 Original message:Hi Ryan,&lt;br/&gt;&lt;br/&gt;&amp;gt;  Certain human/organizational limitations prevent things being said in&lt;br/&gt;&amp;gt; logged channels that sometimes can be shared in person.  Sometimes&lt;br/&gt;&amp;gt; people break through misunderstandings in person, through either&lt;br/&gt;&amp;gt; informal mingling or the use of Chatham House rules.  So I would also&lt;br/&gt;&amp;gt; advocate restarting the Scaling Bitcoin conferences, twice a year.&lt;br/&gt;&lt;br/&gt;Just for clarity, I&amp;#39;m proposing online meetings on IRC, not in-person. But&lt;br/&gt;yes, logged channels can be really narrow on topics and in person sometimes&lt;br/&gt;let people grasp the bigger picture or wider context more easily. In my&lt;br/&gt;opinion, to build understanding and sync on a complex topic there is&lt;br/&gt;nothing like an old school whiteboard session. That being said,&lt;br/&gt;higher-bandwidth communication channels like invite-only events come at the&lt;br/&gt;price of openness and context-archiving, which matters a lot in Bitcoin. So&lt;br/&gt;I think it&amp;#39;s good to have a mix of both. It could be interesting to restart&lt;br/&gt;Scaling Bitcoin confs, the scaling landscape has grown wild in the past&lt;br/&gt;years (statechains, payment pools, federated chaumian banks, new types of&lt;br/&gt;sidechains, etc), though I&amp;#39;ve not heard about orgas kicking them again.&lt;br/&gt;&lt;br/&gt;&amp;gt; I perceived a lot of &amp;#34;Oh, well it&amp;#39;s also fine to just wait and see&lt;br/&gt;&amp;gt; what comes&amp;#34; in the prior discussions.  The idea that we should reopen&lt;br/&gt;&amp;gt; this discussion presumes that it is better to not wait, because having&lt;br/&gt;&amp;gt; even imperfect covenant designs will cause the ecosystem to explore&lt;br/&gt;&amp;gt; what use cases to allocate developer interest in (as long as the fees&lt;br/&gt;&amp;gt; are not too far off - yeah I&amp;#39;m looking at you, CSFS).  Because of&lt;br/&gt;&amp;gt; this, I also propose asking some of the more advanced scripting&lt;br/&gt;&amp;gt; technologists to reveal what of their work is currently science, what&lt;br/&gt;&amp;gt; is engineering, and what is product-oriented with understandable&lt;br/&gt;&amp;gt; delivery dates.  I think that if more people understood the answers to&lt;br/&gt;&amp;gt; these questions then there would be more room for incremental&lt;br/&gt;&amp;gt; exploration of the space.&lt;br/&gt;&lt;br/&gt;For sure, there is a &amp;#34;chicken-and-egg&amp;#34; issue, in the sense that lack of&lt;br/&gt;certainty on finding consensus on covenant designs can deter some of the&lt;br/&gt;most experienced and knowledgeable developers to invest time in building&lt;br/&gt;and maturing use-cases toolchains demonstrating the worthiness of such&lt;br/&gt;consensus change. One way to avoid this circular dependency can be to start&lt;br/&gt;with a state-of-Bitcoin-art version of the protocol, deploy then once there&lt;br/&gt;is economic traffic, propose protocol improvement requiring consensus&lt;br/&gt;changes back to the community. This is more or less what Lightning is doing&lt;br/&gt;with ANYPREVOUT, now there is like 4,300 BTC locked on the network, it&amp;#39;s&lt;br/&gt;easier to argue there is economic interest. Though ultimately, I don&amp;#39;t&lt;br/&gt;believe you will ever solve that dead-end risk of Bitcoin research&lt;br/&gt;to attract automatically more developers. It&amp;#39;s common to any scientific&lt;br/&gt;endeavor, as in the end it&amp;#39;s more an &amp;#34;inner taste&amp;#34; and exploration for its&lt;br/&gt;own sake that drives long-term research.&lt;br/&gt;&lt;br/&gt;On the second point, giving clarity on the state of advanced scripting&lt;br/&gt;use-cases, effectively I believe it would be an informative task to do for&lt;br/&gt;each use-case &amp;#34;champion&amp;#34;. Speaking for payments pools, solving the&lt;br/&gt;high-interactivity issue is still science [0], a pool design for like&lt;br/&gt;10-100 participants assuming liveliness we might have known engineering&lt;br/&gt;solutions [1], yet with still a lot of trade-offs to explore on the core&lt;br/&gt;pool tree mechanism, and now the real unknown and hard task might be to say&lt;br/&gt;a &amp;#34;product-oriented&amp;#34; with delivery dates. From my LDK experience, counts&lt;br/&gt;3/4 years at best to build and mature any FOSS production-ready Bitcoin&lt;br/&gt;codebase though in reality if you have to request other changes in the&lt;br/&gt;ecosystem like mempools ones for a L2, you don&amp;#39;t know.  So for discussion&lt;br/&gt;clarity, yes it&amp;#39;s good if champions give an honest account of knowns and&lt;br/&gt;unknowns of their use-cases. I would have loved all the mempool issues&lt;br/&gt;affecting Lightning to have been detected and mitigations development&lt;br/&gt;started earlier in the protocol genesis.&lt;br/&gt;&lt;br/&gt;Thanks for the feedback, keeping track of them.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le sam. 23 juil. 2022 à 06:10, Ryan Grant &amp;lt;bitcoin-dev at rgrant.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; &#43;1  I&amp;#39;d participate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Certain human/organizational limitations prevent things being said in&lt;br/&gt;&amp;gt; logged channels that sometimes can be shared in person.  Sometimes&lt;br/&gt;&amp;gt; people break through misunderstandings in person, through either&lt;br/&gt;&amp;gt; informal mingling or the use of Chatham House rules.  So I would also&lt;br/&gt;&amp;gt; advocate restarting the Scaling Bitcoin conferences, twice a year.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One request for the agenda:&lt;br/&gt;&amp;gt; I perceived a lot of &amp;#34;Oh, well it&amp;#39;s also fine to just wait and see&lt;br/&gt;&amp;gt; what comes&amp;#34; in the prior discussions.  The idea that we should reopen&lt;br/&gt;&amp;gt; this discussion presumes that it is better to not wait, because having&lt;br/&gt;&amp;gt; even imperfect covenant designs will cause the ecosystem to explore&lt;br/&gt;&amp;gt; what use cases to allocate developer interest in (as long as the fees&lt;br/&gt;&amp;gt; are not too far off - yeah I&amp;#39;m looking at you, CSFS).  Because of&lt;br/&gt;&amp;gt; this, I also propose asking some of the more advanced scripting&lt;br/&gt;&amp;gt; technologists to reveal what of their work is currently science, what&lt;br/&gt;&amp;gt; is engineering, and what is product-oriented with understandable&lt;br/&gt;&amp;gt; delivery dates.  I think that if more people understood the answers to&lt;br/&gt;&amp;gt; these questions then there would be more room for incremental&lt;br/&gt;&amp;gt; exploration of the space.&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/20220723/bacfa116/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220723/bacfa116/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:12:02&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfkl868mudw9g62dhh6up9x0wmejcmztxja9us7crnjep543kpscgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z90thxt</id>
    
      <title type="html">📅 Original date posted:2022-06-21 📝 Original message:HI ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfkl868mudw9g62dhh6up9x0wmejcmztxja9us7crnjep543kpscgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z90thxt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxyz6yx4mf4hmsv5xv6gykhx9wutmm5w82va2re7peas52clt6xnq9ffmcp&#39;&gt;nevent1q…fmcp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-06-21&lt;br/&gt;📝 Original message:HI alicexbt,&lt;br/&gt;&lt;br/&gt;&amp;gt; Lets consider there are 2 users with name Bob (normal LN user) and Carol&lt;br/&gt;(attacker running LN node) which I will use in this email for examples. In&lt;br/&gt;this case Bob and Carol can manage security of their OS and it is not&lt;br/&gt;affected by others using vulnerable systems or OS.&lt;br/&gt;&lt;br/&gt;Yes, I believe my argument was the set of components making the security of&lt;br/&gt;your LN node is far beyond Bitcoin softwares. Of course, you might review&lt;br/&gt;by yourself the millions lines of code entering in the trusted computing&lt;br/&gt;base (OS, bootloader, BIOS, device firmwares, essential utilities, ...) on&lt;br/&gt;which your cryptocurrency software stack lays out, and as such exercise an&lt;br/&gt;extended span of control on your personal computation. Though, while I hope&lt;br/&gt;we&amp;#39;ll have more LN node operators doing so, I&amp;#39;m not sure it&amp;#39;s realistic to&lt;br/&gt;expect it will be the behavior standard among them..&lt;br/&gt;&lt;br/&gt;&amp;gt; The odds are low as you said, this can be managed by Bob and Carol&lt;br/&gt;because they can use a better ISP. Others using ISP with some issues may&lt;br/&gt;not affect their LN usage.&lt;br/&gt;&lt;br/&gt;Sure, though as I would like to underscore being dependent on a Bitcoin&lt;br/&gt;node policy and being dependent on a ISP internet traffic routing policy&lt;br/&gt;could be analyzed as logically equivalent, all things are equal. That said,&lt;br/&gt;if your personal risk aversion is too high for the Lightning security&lt;br/&gt;model, once it&amp;#39;s well-understood there is a strong reliance on a&lt;br/&gt;censorship-resistant tx-relay network back to economically-rational miners,&lt;br/&gt;you&amp;#39;re free to not use it and satisfy yourself with the Bitcoin base layer.&lt;br/&gt;&lt;br/&gt;&amp;gt; Bob might use full-rbf as its suggested by LN developers for secure LN&lt;br/&gt;usage and better for miners. Carol could use a different RBF policy for&lt;br/&gt;some nodes and mining. In this case Bob may get affected at some point&lt;br/&gt;because of Carol&amp;#39;s choice to use a different RBF policy which was not true&lt;br/&gt;above.&lt;br/&gt;&lt;br/&gt;Indeed, your secure LN usage is going to be dependent of the number of p2p&lt;br/&gt;network nodes running an economically-rational policy like full-rbf. That&lt;br/&gt;said, I think it&amp;#39;s reasonable to assume that the players of the Bitcoin&lt;br/&gt;game are economically-rational, and as such incentived to pick up a policy&lt;br/&gt;such as full-rbf. I know the term &amp;#34;economically-rational&amp;#34; is poorly defined&lt;br/&gt;here, and I think it could be interesting for any academic with an economic&lt;br/&gt;background to study the incentives of Bitcoin actors.&lt;br/&gt;&lt;br/&gt;&amp;gt; Allowing users to create different mempool policies is great. My thought&lt;br/&gt;process is to code for happy path, where X policy is expected for&lt;br/&gt;replacement and edge cases where Y policy or no policy would be used. Users&lt;br/&gt;can try out different policies and even act as attackers. This is also true&lt;br/&gt;for other things in mempool, &amp;#39;spkreuse=conflict&amp;#39; prevents address reuse in&lt;br/&gt;the mempool when using knots. If I assume that address reuse is always&lt;br/&gt;relayed, this could become a problem if some users and miners adopt this&lt;br/&gt;setting in their mempool.&lt;br/&gt;&lt;br/&gt;Agree, I&amp;#39;m all in for people to experiment with mempool policies. Though at&lt;br/&gt;the end it&amp;#39;s a software engineering resource question. If users are&lt;br/&gt;interested in more features, they&amp;#39;re always free to implement themselves.&lt;br/&gt;Really, the binary distinction developers-vs-users doesn&amp;#39;t make sense and&lt;br/&gt;if we would like Bitcoin to be successful in the long-term, we should&lt;br/&gt;promote high degree of software literacy among bitcoiners.&lt;br/&gt;&lt;br/&gt;&amp;gt; This makes sense and I would be interested to follow two things once&lt;br/&gt;full-rbf is available in a bitcoin core release: 1. Percentage of&lt;br/&gt;transaction getting replaced 2. Miners profit (Fee for replaced Tx - Fee&lt;br/&gt;for original Tx)&lt;br/&gt;&lt;br/&gt;Yes, I would be interested too to have those metrics once full-rbf is&lt;br/&gt;available in a bitcoin core release. I think that&amp;#39;s something every&lt;br/&gt;full-rbf curious node operator could observe on its own with a few more&lt;br/&gt;loggers, at least for the first metric.&lt;br/&gt;&lt;br/&gt;&amp;gt; Can you explain how p2p coinjoin is affected with mempool DoS vector with&lt;br/&gt;some examples? What is considered a p2p coinjoin? Joinmarket or&lt;br/&gt;[Stonewall][1]?&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t remember the Joinmarket code right now and I don&amp;#39;t know the ins and&lt;br/&gt;outs of Samourai coinjoin as I&amp;#39;m not sure the code is open source. Though&lt;br/&gt;let&amp;#39;s say for a p2p coinjoin as one you can build once you have implemented&lt;br/&gt;LN&amp;#39;s interactive construction protocol [0].&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://github.com/lightning/bolts/pull/851&#34;&gt;https://github.com/lightning/bolts/pull/851&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Here the DoS attack situation :&lt;br/&gt;- Alice, Bob and Caroll would like to coinjoin 3 inputs to 3 outputs&lt;br/&gt;- Each of the input is singly controlled by one party, e.g Alice owns input&lt;br/&gt;A, Bob owns input B, ...&lt;br/&gt;- Alice, Bob and Caroll exchanges a PSBT to build a multi-party funded&lt;br/&gt;transaction (the coinjoin_tx)&lt;br/&gt;- Alice is elected as the multi-party transaction broadcaster once the&lt;br/&gt;signatures have been exchanged&lt;br/&gt;- The block feerate is around 10sat/vb&lt;br/&gt;- One of the transaction input signals opt-in RBF, the transaction is&lt;br/&gt;attached a compelling feerate 10sat/vb&lt;br/&gt;- Caroll broadcasts a double-spend of her own input C, the double-spend is&lt;br/&gt;attached with a low-fee (1sat/vb) and it does _not_ signal opt-in RBF&lt;br/&gt;- Alice broadcasts the multi-party transaction, it is rejected by the&lt;br/&gt;network mempools because Alice double-spend is already present&lt;br/&gt;- Two alternatives are offered to the coinjoin participants :&lt;br/&gt;&lt;br/&gt;Alternative A)&lt;br/&gt;- They estimate the multi-party feerate as not high enough&lt;br/&gt;- They fee-bump at 20sat/vb&lt;br/&gt;- Caroll double-spend one of the input of her malicious double-spend to&lt;br/&gt;eject it from the network mempools&lt;br/&gt;- The multi-party transaction is confirmed at a block feerare far above&lt;br/&gt;what was necessary&lt;br/&gt;- Alice, Bob, Caroll have loss fee-bumping value without compensation&lt;br/&gt;- Note, even if Caroll is attacker and assuming the fee-bumping burden is&lt;br/&gt;fairly spread among participants, the economic loss inflicted is asymmetric&lt;br/&gt;&lt;br/&gt;Alternative B)&lt;br/&gt;- They wait until some time-out&lt;br/&gt;- They double-spend their own inputs, Alice double-spend utxo A, Bob&lt;br/&gt;double-spend utxo B&lt;br/&gt;- They wasted the timevalue of their inputs for the time-out delay&lt;br/&gt;- Note, even if Caroll is attacker and loss some timevalue too, the&lt;br/&gt;economic loss inflicted is asymmetric&lt;br/&gt;&lt;br/&gt;Let me know if you see any error or wrong in this DoS scenario exposure. I&lt;br/&gt;believe it&amp;#39;s fairly simple to execute&lt;br/&gt;for a medium-skilled attacker.&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le ven. 17 juin 2022 à 00:54, alicexbt &amp;lt;alicexbt at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One could list the operating system on which is running your Lightning&lt;br/&gt;&amp;gt; process or the compiler toolchain turning out your Lightning source code&lt;br/&gt;&amp;gt; in a binary artifact. Some weird kernel&amp;#39;s memory mapping change could allow&lt;br/&gt;&amp;gt; access to your channel funding keys, _without_ breaking the Bitcoin&lt;br/&gt;&amp;gt; consensus rules [0].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Lets consider there are 2 users with name Bob (normal LN user) and Carol&lt;br/&gt;&amp;gt; (attacker running LN node) which I will use in this email for examples. In&lt;br/&gt;&amp;gt; this case Bob and Carol can manage security of their OS and it is not&lt;br/&gt;&amp;gt; affected by others using vulnerable systems or OS.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Moreover, your Lightning node is also relying on the existence of a&lt;br/&gt;&amp;gt; global Internet allowing your HTLC transaction to flow from your physical&lt;br/&gt;&amp;gt; host to the crowd of transactions confirming in the blockchain. Due to&lt;br/&gt;&amp;gt; this &amp;#34;protocol assumption&amp;#34; your channel balance would be vulnerable to&lt;br/&gt;&amp;gt; any change in your ISP routing policy, e.g refusing to accept your IPV4&lt;br/&gt;&amp;gt; traffic by a sudden desiderata to impose an IPV6 supremacy. Still&lt;br/&gt;&amp;gt; _without_ breaking the Bitcoin consensus rules. Of course, the odds of your&lt;br/&gt;&amp;gt; ISP operator adopting this behavior are really low, mostly because your&lt;br/&gt;&amp;gt; operator has to bind to social and economic constraints to stay in&lt;br/&gt;&amp;gt; business.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The odds are low as you said, this can be managed by Bob and Carol because&lt;br/&gt;&amp;gt; they can use a better ISP. Others using ISP with some issues may not affect&lt;br/&gt;&amp;gt; their LN usage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And I believe this imperative to stay in business is certainly not absent&lt;br/&gt;&amp;gt; in the incentives of the Bitcoin node operators. You&amp;#39;re free to run any&lt;br/&gt;&amp;gt; policy on your node, especially one hardening the safety of your operations&lt;br/&gt;&amp;gt;  beyond the default one. However, if you start to a transaction-relay&lt;br/&gt;&amp;gt; non-compatible with miner incentives, you won&amp;#39;t have an efficient view of&lt;br/&gt;&amp;gt; the blockspace demand, and from then won&amp;#39;t be able to offer compelling&lt;br/&gt;&amp;gt; feerates to execute your business transactions to satisfy your client&lt;br/&gt;&amp;gt; needs. Or you won&amp;#39;t consolidate your wallet UTXOs at times of low-demand.&lt;br/&gt;&amp;gt; Indeed, a sane visibility of the mempools might not be critical now for your&lt;br/&gt;&amp;gt; Bitcoin operations, but this is not likely to become true with miner&amp;#39;s&lt;br/&gt;&amp;gt; coinbase reward lowering with time and the system security relying on a&lt;br/&gt;&amp;gt; fruitful fee market.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bob might use full-rbf as its suggested by LN developers for secure LN&lt;br/&gt;&amp;gt; usage and better for miners. Carol could use a different RBF policy for&lt;br/&gt;&amp;gt; some nodes and mining. In this case Bob may get affected at some point&lt;br/&gt;&amp;gt; because of Carol&amp;#39;s choice to use a different RBF policy which was not true&lt;br/&gt;&amp;gt; above.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So assuming there is a significant number of economically rational&lt;br/&gt;&amp;gt; entities running p2p nodes, I think it&amp;#39;s a reasonable assumption for&lt;br/&gt;&amp;gt; Lightning developers that a policy maximizing miner&amp;#39;s income and economic&lt;br/&gt;&amp;gt; nodes operations will be widely run on the p2p network, and therefore lay&lt;br/&gt;&amp;gt; its security model on that. When there is a gap between the economically&lt;br/&gt;&amp;gt; optimal policy (full-rbf) and the effectively deployed one (optin), and&lt;br/&gt;&amp;gt; this gap constitutes a flaw for exploitation, I believe it&amp;#39;s better to&lt;br/&gt;&amp;gt; fix it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Agree with the assumption there is nothing wrong in experimenting with a&lt;br/&gt;&amp;gt; new RBF policy (non-default) if that helps some users and projects.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you have a different mode of thinking w.r.t how we should design&lt;br/&gt;&amp;gt; protocol in a trust-minimized, open, adversarial environment such as&lt;br/&gt;&amp;gt; Bitcoin, I&amp;#39;m curious to listen to it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Allowing users to create different mempool policies is great. My thought&lt;br/&gt;&amp;gt; process is to code for happy path, where X policy is expected for&lt;br/&gt;&amp;gt; replacement and edge cases where Y policy or no policy would be used. Users&lt;br/&gt;&amp;gt; can try out different policies and even act as attackers. This is also true&lt;br/&gt;&amp;gt; for other things in mempool, &amp;#39;spkreuse=conflict&amp;#39; prevents address reuse in&lt;br/&gt;&amp;gt; the mempool when using knots. If I assume that address reuse is always&lt;br/&gt;&amp;gt; relayed, this could become a problem if some users and miners adopt this&lt;br/&gt;&amp;gt; setting in their mempool.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course not. If you deliver any critical software, you should attach a&lt;br/&gt;&amp;gt; solid manual explaining all the corner cases and rough edges. Even better&lt;br/&gt;&amp;gt; would be to enshrine the manual directly in your software API to minimize&lt;br/&gt;&amp;gt; the footgunish behaviors. E.g, with any ECC library, forbidding to reuse&lt;br/&gt;&amp;gt; nonces. If your user still ignores or misread the manual and provides an&lt;br/&gt;&amp;gt; insecure input, there is not that much you can do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Agree with the documentation as it helps users.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given there are like 17000 public LN nodes, if half of them adopt full-rbf&lt;br/&gt;&amp;gt; it should give already a good number of full-rbf transaction-relay routes&lt;br/&gt;&amp;gt; across the p2p network graph. When we&amp;#39;re there, we can measure and think&lt;br/&gt;&amp;gt; more about how to tune the full-rbf sub-topology.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sounds good.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Because it&amp;#39;s breaking the reliability and security of their use-cases.&lt;br/&gt;&amp;gt; Use-cases which didn&amp;#39;t exist a few years ago. The mempool DoS vector is&lt;br/&gt;&amp;gt; described here [4]. To the best of my understanding, it might affect a&lt;br/&gt;&amp;gt; bunch of use-cases, such as dual-funded channels, on-chain DLCs, p2p&lt;br/&gt;&amp;gt; coinjoins, batched submarine swaps out. With the attack described, the&lt;br/&gt;&amp;gt; honest set of users might not have visibility of the network mempools&lt;br/&gt;&amp;gt; that there is a malicious, low-cost, opt-out double-spend preventing the&lt;br/&gt;&amp;gt; propagation of their multi-party transaction. With the existence of a&lt;br/&gt;&amp;gt; full-rbf transaction-relay topology, the multi-party transaction is able&lt;br/&gt;&amp;gt; to replace the optout.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This makes sense and I would be interested to follow two things once&lt;br/&gt;&amp;gt; full-rbf is available in a bitcoin core release: 1. Percentage of&lt;br/&gt;&amp;gt; transaction getting replaced 2. Miners profit (Fee for replaced Tx - Fee&lt;br/&gt;&amp;gt; for original Tx)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Can you explain how p2p coinjoin is affected with mempool DoS vector with&lt;br/&gt;&amp;gt; some examples? What is considered a p2p coinjoin? Joinmarket or&lt;br/&gt;&amp;gt; [Stonewall][1]?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Selecting a full-node to underpin any serious Bitcoin infrastructure or&lt;br/&gt;&amp;gt; secure a significant stack of coins should be submitted to a&lt;br/&gt;&amp;gt; fully-fledged decision-making process. Many factors are likely to matter such&lt;br/&gt;&amp;gt; as the level of activity of the contributor community, the chain of trust&lt;br/&gt;&amp;gt; w.r.t dependencies, the security incident track records, the quality of&lt;br/&gt;&amp;gt; the documentation, the exhaustivity and robustness of the set of features,&lt;br/&gt;&amp;gt; ...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree that contributor community and documentation could be improved in&lt;br/&gt;&amp;gt; Knots.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Developers are also Bitcoin users, and they&amp;#39;re modifying the software to&lt;br/&gt;&amp;gt; suit their use-case needs. And that&amp;#39;s exactly the purpose of the&lt;br/&gt;&amp;gt; &amp;#39;full-rbf&amp;#39; PR I&amp;#39;m proposing, aiming to propose a &amp;#34;good&amp;#34; policy for a&lt;br/&gt;&amp;gt; Lightning node, without actually seeking to change the default.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I like that default still remains opt-in and cool with different policies&lt;br/&gt;&amp;gt; being tried out if that helps some users.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  If they&amp;#39;re parties interested in implementing more RBF policy options in&lt;br/&gt;&amp;gt; Bitcoin Core, I think they&amp;#39;re free to propose such changes and invest the&lt;br/&gt;&amp;gt; engineering effort to do so. If you&amp;#39;re interested in advancing the state of&lt;br/&gt;&amp;gt;  policy options in Bitcoin Core, there are a lot of interesting resources available&lt;br/&gt;&amp;gt; and communities to encourage you in the learning process to contribute to&lt;br/&gt;&amp;gt; the codebase [6].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for sharing the link. I would love to see 5 RBF policies available&lt;br/&gt;&amp;gt; to use in bitcoin core. I have already tried experimenting with a few on&lt;br/&gt;&amp;gt; regtest and will try to open pull request if there are enough people&lt;br/&gt;&amp;gt; interested to test it on other chains (testnet3, signet, mainnet)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]: &lt;a href=&#34;https://docs.samourai.io/spend-tools&#34;&gt;https://docs.samourai.io/spend-tools&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; /dev/fd0&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with Proton Mail &amp;lt;&lt;a href=&#34;https://proton.me/&amp;gt&#34;&gt;https://proton.me/&amp;gt&lt;/a&gt;; secure email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt; On Friday, June 17th, 2022 at 7:04 AM, Antoine Riard &amp;lt;&lt;br/&gt;&amp;gt; antoine.riard at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi alicexbt,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for taking time to review the pull request,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1)If something relies on a policy which can be changed without breaking&lt;br/&gt;&amp;gt; consensus rules, how is it secure in any case with or without full rbf?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Your Lightning node software relies on far more software and hardware&lt;br/&gt;&amp;gt; components than the transaction-relay p2p network. One could list the&lt;br/&gt;&amp;gt; operating system on which is running your Lightning process or the compiler&lt;br/&gt;&amp;gt; toolchain turning out your Lightning source code in a binary artifact.&lt;br/&gt;&amp;gt; Some weird kernel&amp;#39;s memory mapping change could allow access to your&lt;br/&gt;&amp;gt; channel funding keys, _without_ breaking the Bitcoin consensus rules [0].&lt;br/&gt;&amp;gt; Moreover, your Lightning node is also relying on the existence of a&lt;br/&gt;&amp;gt; global Internet allowing your HTLC transaction to flow from your physical&lt;br/&gt;&amp;gt; host to the crowd of transactions confirming in the blockchain. Due to&lt;br/&gt;&amp;gt; this &amp;#34;protocol assumption&amp;#34; your channel balance would be vulnerable to&lt;br/&gt;&amp;gt; any change in your ISP routing policy, e.g refusing to accept your IPV4&lt;br/&gt;&amp;gt; traffic by a sudden desiderata to impose an IPV6 supremacy. Still&lt;br/&gt;&amp;gt; _without_ breaking the Bitcoin consensus rules. Of course, the odds of your&lt;br/&gt;&amp;gt; ISP operator adopting this behavior are really low, mostly because your&lt;br/&gt;&amp;gt; operator has to bind to social and economic constraints to stay in&lt;br/&gt;&amp;gt; business.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And I believe this imperative to stay in business is certainly not absent&lt;br/&gt;&amp;gt; in the incentives of the Bitcoin node operators. You&amp;#39;re free to run any&lt;br/&gt;&amp;gt; policy on your node, especially one hardening the safety of your operations beyond&lt;br/&gt;&amp;gt; the default one. However, if you start to a transaction-relay&lt;br/&gt;&amp;gt; non-compatible with miner incentives, you won&amp;#39;t have an efficient view of&lt;br/&gt;&amp;gt; the blockspace demand, and from then won&amp;#39;t be able to offer compelling&lt;br/&gt;&amp;gt; feerates to execute your business transactions to satisfy your client&lt;br/&gt;&amp;gt; needs. Or you won&amp;#39;t consolidate your wallet UTXOs at times of low-demand.&lt;br/&gt;&amp;gt; Indeed, a sane visibility of the mempools might not be critical now for your&lt;br/&gt;&amp;gt; Bitcoin operations, but this is not likely to become true with miner&amp;#39;s&lt;br/&gt;&amp;gt; coinbase reward lowering with time and the system security relying on a&lt;br/&gt;&amp;gt; fruitful fee market.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So assuming there is a significant number of economically rational&lt;br/&gt;&amp;gt; entities running p2p nodes, I think it&amp;#39;s a reasonable assumption for&lt;br/&gt;&amp;gt; Lightning developers that a policy maximizing miner&amp;#39;s income and economic&lt;br/&gt;&amp;gt; nodes operations will be widely run on the p2p network, and therefore lay&lt;br/&gt;&amp;gt; its security model on that. When there is a gap between the economically&lt;br/&gt;&amp;gt; optimal policy (full-rbf) and the effectively deployed one (optin), and&lt;br/&gt;&amp;gt; this gap constitutes a flaw for exploitation, I believe it&amp;#39;s better to&lt;br/&gt;&amp;gt; fix it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you have a different mode of thinking w.r.t how we should design&lt;br/&gt;&amp;gt; protocol in a trust-minimized, open, adversarial environment such as&lt;br/&gt;&amp;gt; Bitcoin, I&amp;#39;m curious to listen to it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If I write a python script that expects user to enter char &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39;&lt;br/&gt;&amp;gt; but user can enter &amp;#39;c&amp;#39; and there is no code to handle exceptions or other&lt;br/&gt;&amp;gt; chars, will it be secure?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course not. If you deliver any critical software, you should attach a&lt;br/&gt;&amp;gt; solid manual explaining all the corner cases and rough edges. Even better&lt;br/&gt;&amp;gt; would be to enshrine the manual directly in your software API to minimize&lt;br/&gt;&amp;gt; the footgunish behaviors. E.g, with any ECC library, forbidding to reuse&lt;br/&gt;&amp;gt; nonces. If your user still ignores or misread the manual and provides an&lt;br/&gt;&amp;gt; insecure input, there is not that much you can do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; By analogy, I believe that&amp;#39;s the same with Lightning. One recommendation&lt;br/&gt;&amp;gt; of the deployment manual would be to be always connected to a full-rbf&lt;br/&gt;&amp;gt; transaction-relay topology. Defaulting to this rule and your node exposes&lt;br/&gt;&amp;gt; far more surface of attacks. Assuming the manual has been well-written (big&lt;br/&gt;&amp;gt; assumption!), I don&amp;#39;t think the system designer would be to blame.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That said, one issue to confess with current Lightning is our lack of&lt;br/&gt;&amp;gt; understanding of what should be figured out in the LN user manual for&lt;br/&gt;&amp;gt; safe operations. I would say that&amp;#39;s an active area of research [1] [2] [3]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2)full-rbf is not default in the 2 open pull requests, so this&lt;br/&gt;&amp;gt; experiment still relies on users changing RBF policies manually. If&lt;br/&gt;&amp;gt; majority of nodes use default opt-in policy, how would this affect&lt;br/&gt;&amp;gt; vulnerable projects?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If we define the goal as ensuring there is a significant number of&lt;br/&gt;&amp;gt; transaction-relay routes between the L2s nodes requiring full-rbf and the&lt;br/&gt;&amp;gt; set of miners supporting this policy, and the set of miners is populated&lt;br/&gt;&amp;gt; enough, there is no need to convince the majority of nodes operators to&lt;br/&gt;&amp;gt; switch to full-rbf.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Beyond landing the &amp;#39;full-rbf&amp;#39; pull request, in pursuit of a partial&lt;br/&gt;&amp;gt; full-rbf deployment, I&amp;#39;m thinking of reaching out to Lightning vendors to&lt;br/&gt;&amp;gt; recommend running LN nodes operators run their full-node with the setting&lt;br/&gt;&amp;gt; enabled. And also to few mining pool operators to advocate the potential&lt;br/&gt;&amp;gt; increase in their income.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given there are like 17000 public LN nodes, if half of them adopt full-rbf&lt;br/&gt;&amp;gt; it should give already a good number of full-rbf transaction-relay routes&lt;br/&gt;&amp;gt; across the p2p network graph. When we&amp;#39;re there, we can measure and think&lt;br/&gt;&amp;gt; more about how to tune the full-rbf sub-topology.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2-3% transactions are replaced with opt-in RBF, if someone did not&lt;br/&gt;&amp;gt; replace earlier why would they do it with full RBF?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Because it&amp;#39;s breaking the reliability and security of their use-cases.&lt;br/&gt;&amp;gt; Use-cases which didn&amp;#39;t exist a few years ago. The mempool DoS vector is&lt;br/&gt;&amp;gt; described here [4]. To the best of my understanding, it might affect a&lt;br/&gt;&amp;gt; bunch of use-cases, such as dual-funded channels, on-chain DLCs, p2p&lt;br/&gt;&amp;gt; coinjoins, batched submarine swaps out. With the attack described, the&lt;br/&gt;&amp;gt; honest set of users might not have visibility of the network mempools&lt;br/&gt;&amp;gt; that there is a malicious, low-cost, opt-out double-spend preventing the&lt;br/&gt;&amp;gt; propagation of their multi-party transaction. With the existence of a&lt;br/&gt;&amp;gt; full-rbf transaction-relay topology, the multi-party transaction is able&lt;br/&gt;&amp;gt; to replace the optout.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; None of those use-cases were deployed a few years ago, and the&lt;br/&gt;&amp;gt; understanding of the interactions with the mempool policy is still&lt;br/&gt;&amp;gt; nascent among their operators. However, if we assume that layering is a way&lt;br/&gt;&amp;gt; to grow the Bitcoin ecosystem, as I do, it is reasonable to expect they&lt;br/&gt;&amp;gt; will constitute a notable share of the Bitcoin transaction traffic during&lt;br/&gt;&amp;gt; the next decade.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I am not opposed to full-rbf; rather, I am opposed to the notion that&lt;br/&gt;&amp;gt; full-rbf will solve all problems&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I wished we had a magic Silver Bullet (tm) solving all the Bitcoin&lt;br/&gt;&amp;gt; problems...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m only advocating a partial full-rbf deployment to solve a real precise&lt;br/&gt;&amp;gt; security issue affecting multi-party funded transactions. That said,&lt;br/&gt;&amp;gt; full-rbf is far from solving the known set of problems affecting the L2s&lt;br/&gt;&amp;gt; due to interactions with network mempools. E,g, see package relay&lt;br/&gt;&amp;gt; motivation [5]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I would suggest users to try Bitcoin Knots instead which already has an&lt;br/&gt;&amp;gt; option to disable all RBF policies if required, opt-in and full RBF policy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Selecting a full-node to underpin any serious Bitcoin infrastructure or&lt;br/&gt;&amp;gt; secure a significant stack of coins should be submitted to a&lt;br/&gt;&amp;gt; fully-fledged decision-making process. Many factors are likely to matter&lt;br/&gt;&amp;gt; such as the level of activity of the contributor community, the chain of&lt;br/&gt;&amp;gt; trust w.r.t dependencies, the security incident track records, the&lt;br/&gt;&amp;gt; quality of the documentation, the exhaustivity and robustness of the set of&lt;br/&gt;&amp;gt; features, ...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This process might take tens of hours, to be duplicated by the number of&lt;br/&gt;&amp;gt; node operators who would have to do the full-node vending switch. If you&lt;br/&gt;&amp;gt; consider the cognitive cost at the level of the Bitcoin ecosystem, it&amp;#39;s&lt;br/&gt;&amp;gt; far less costly to implement and review a few lines of codes in Bitcoin&lt;br/&gt;&amp;gt; Core.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Developers should provide basic RBF policy options rather than&lt;br/&gt;&amp;gt; attempting to define what constitutes a good policy and removing the&lt;br/&gt;&amp;gt; ability to disable something when necessary.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course, this statement assumes there is a clear line between the&lt;br/&gt;&amp;gt; developers and the users. Developers are also Bitcoin users, and they&amp;#39;re&lt;br/&gt;&amp;gt; modifying the software to suit their use-case needs. And that&amp;#39;s exactly the&lt;br/&gt;&amp;gt; purpose of the &amp;#39;full-rbf&amp;#39; PR I&amp;#39;m proposing, aiming to propose a &amp;#34;good&amp;#34;&lt;br/&gt;&amp;gt; policy for a Lightning node, without actually seeking to change the&lt;br/&gt;&amp;gt; default. If they&amp;#39;re parties interested in implementing more RBF policy&lt;br/&gt;&amp;gt; options in Bitcoin Core, I think they&amp;#39;re free to propose such changes and&lt;br/&gt;&amp;gt; invest the engineering effort to do so. If you&amp;#39;re interested in advancing&lt;br/&gt;&amp;gt; the state of policy options in Bitcoin Core, there are a lot of&lt;br/&gt;&amp;gt; interesting resources available and communities to encourage you in the&lt;br/&gt;&amp;gt; learning process to contribute to the codebase [6].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0] &lt;a href=&#34;https://dirtycow.ninja&#34;&gt;https://dirtycow.ninja&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/t-bast/lightning-docs/blob/master/pinning-attacks.md&#34;&gt;https://github.com/t-bast/lightning-docs/blob/master/pinning-attacks.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2] &lt;a href=&#34;https://arxiv.org/pdf/2006.01418.pdf&#34;&gt;https://arxiv.org/pdf/2006.01418.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://arxiv.org/pdf/2006.08513.pdf&#34;&gt;https://arxiv.org/pdf/2006.08513.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [4]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [5]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [6] &lt;a href=&#34;https://www.summerofbitcoin.org&#34;&gt;https://www.summerofbitcoin.org&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Le jeu. 16 juin 2022 à 00:15, alicexbt &amp;lt;alicexbt at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thanks for opening the pull request to add support for full-rbf in&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin Core. I have a disagreements with the approach and questions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Recent discussions among LN devs have brought back on the surface&lt;br/&gt;&amp;gt;&amp;gt; concerns about the security of multi-party funded transactions (coinjoins,&lt;br/&gt;&amp;gt;&amp;gt; dual-funded LN channels, on-chain DLCs, ...). It turns out there is a&lt;br/&gt;&amp;gt;&amp;gt; low-fruit, naive DoS vector playable against the funding flow of any such&lt;br/&gt;&amp;gt;&amp;gt; construction due to the lack of existent full-rbf transaction-relay&lt;br/&gt;&amp;gt;&amp;gt; topology on today&amp;#39;s p2p network [0] [1].&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1)If something relies on a policy which can be changed without breaking&lt;br/&gt;&amp;gt;&amp;gt; consensus rules, how is it secure in any case with or without full rbf? If&lt;br/&gt;&amp;gt;&amp;gt; I write a python script that expects user to enter char &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39; but user&lt;br/&gt;&amp;gt;&amp;gt; can enter &amp;#39;c&amp;#39; and there is no code to handle exceptions or other chars,&lt;br/&gt;&amp;gt;&amp;gt; will it be secure?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2)full-rbf is not default in the 2 open pull requests, so this experiment&lt;br/&gt;&amp;gt;&amp;gt; still relies on users changing RBF policies manually. If majority of nodes&lt;br/&gt;&amp;gt;&amp;gt; use default opt-in policy, how would this affect vulnerable projects?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you&amp;#39;re a mining operator looking to increase your income, you might be&lt;br/&gt;&amp;gt;&amp;gt; interested to experiment with full-rbf as a policy.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Miners can only increase their income if users replace transactions. 2-3%&lt;br/&gt;&amp;gt;&amp;gt; transactions are replaced with opt-in RBF, if someone did not replace&lt;br/&gt;&amp;gt;&amp;gt; earlier why would they do it now even with full RBF? Or even if we add some&lt;br/&gt;&amp;gt;&amp;gt; users in it who could not signal for some reasons, do you think it would be&lt;br/&gt;&amp;gt;&amp;gt; anything above 5%?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you&amp;#39;re a Bitcoin user or business and you don&amp;#39;t like full-rbf, please&lt;br/&gt;&amp;gt;&amp;gt; express an opinion on how it might affect your software/operations. I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt; always interested to learn more about mempool and transaction-relay&lt;br/&gt;&amp;gt;&amp;gt; interactions with upper-layers and applications and to listen to feedback&lt;br/&gt;&amp;gt;&amp;gt; in those areas, and I guess a lot of other Bitcoin researchers/devs too. I&lt;br/&gt;&amp;gt;&amp;gt; know there have been a lot of concerns about full-rbf in the past, however&lt;br/&gt;&amp;gt;&amp;gt; I believe the Bitcoin ecosystem has matured a lot since then.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I am not opposed to full-rbf; rather, I am opposed to the notion that&lt;br/&gt;&amp;gt;&amp;gt; full-rbf will solve all problems and the lack of basic options in Bitcoin&lt;br/&gt;&amp;gt;&amp;gt; Core to employ/disable different RBF policies. There is also a speculation&lt;br/&gt;&amp;gt;&amp;gt; about making full RBF default in an year which isn&amp;#39;t relevant to discuss at&lt;br/&gt;&amp;gt;&amp;gt; this point without trying different RBF policies.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I would suggest users to try Bitcoin Knots instead which already has an&lt;br/&gt;&amp;gt;&amp;gt; option to disable all RBF policies if required, opt-in and full RBF policy.&lt;br/&gt;&amp;gt;&amp;gt; This can also be done using GUI if not familiar with config option&lt;br/&gt;&amp;gt;&amp;gt; mempoolreplacement​.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The rationale in PR #16171 was insufficient to justify removing it in the&lt;br/&gt;&amp;gt;&amp;gt; first place, had 2 NACKs and was reopened to merge it. Why bother with a&lt;br/&gt;&amp;gt;&amp;gt; few lines of code that may allow someone disable it if required in local&lt;br/&gt;&amp;gt;&amp;gt; mempool since it&amp;#39;s only useful when a big percentage of miners utilize it&lt;br/&gt;&amp;gt;&amp;gt; and essentially underused according to the PR author? Developers should&lt;br/&gt;&amp;gt;&amp;gt; provide basic RBF policy options rather than attempting to define what&lt;br/&gt;&amp;gt;&amp;gt; constitutes a good policy and removing the ability to disable something&lt;br/&gt;&amp;gt;&amp;gt; when necessary.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; /dev/fd0&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Sent with Proton Mail &amp;lt;&lt;a href=&#34;https://proton.me/&amp;gt&#34;&gt;https://proton.me/&amp;gt&lt;/a&gt;; secure email.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt;&amp;gt; On Tuesday, June 14th, 2022 at 5:55 AM, Antoine Riard via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Recent discussions among LN devs have brought back on the surface&lt;br/&gt;&amp;gt;&amp;gt; concerns about the security of multi-party funded transactions (coinjoins,&lt;br/&gt;&amp;gt;&amp;gt; dual-funded LN channels, on-chain DLCs, ...). It turns out there is a&lt;br/&gt;&amp;gt;&amp;gt; low-fruit, naive DoS vector playable against the funding flow of any such&lt;br/&gt;&amp;gt;&amp;gt; construction due to the lack of existent full-rbf transaction-relay&lt;br/&gt;&amp;gt;&amp;gt; topology on today&amp;#39;s p2p network [0] [1]. While it does not consist in a&lt;br/&gt;&amp;gt;&amp;gt; direct loss of funds, if exploited well I think it&amp;#39;s annoying enough to&lt;br/&gt;&amp;gt;&amp;gt; inflict significant timevalue loss or fee-bumping waste&lt;br/&gt;&amp;gt;&amp;gt; to the future providers or distributed swarm of users doing multi-party&lt;br/&gt;&amp;gt;&amp;gt; funded transactions. Of course, it can be fixed one layer above by&lt;br/&gt;&amp;gt;&amp;gt; introducing either fidelity bonds or a reliable centralized coordinator,&lt;br/&gt;&amp;gt;&amp;gt; though at the price of an overhead per-participant ressources cost and loss&lt;br/&gt;&amp;gt;&amp;gt; in system openness [1].&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For that reason, I believe it would be beneficial to the flourishing of&lt;br/&gt;&amp;gt;&amp;gt; multi-party funded transactions to fix the Dos vector by seeing a subset of&lt;br/&gt;&amp;gt;&amp;gt; the network running full-rbf and enabling propagation of honest multi-party&lt;br/&gt;&amp;gt;&amp;gt; transactions to the interested miners, replacing potential non-signaling&lt;br/&gt;&amp;gt;&amp;gt; double-spend from a malicious counterparty. Moving towards that direction,&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;ve submitted a small patch against Bitcoin Core enabling it to turn on&lt;br/&gt;&amp;gt;&amp;gt; full-rbf as a policy, still under review [3]. The default setting stays&lt;br/&gt;&amp;gt;&amp;gt; **false**, i.e keeping opt-in RBF as a default replacement policy. I&amp;#39;ve&lt;br/&gt;&amp;gt;&amp;gt; started to run the patch on a public node at 146.190.224.15.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you&amp;#39;re a node operator curious to play with full-rbf, feel free to&lt;br/&gt;&amp;gt;&amp;gt; connect to this node or spawn up a toy, public node yourself. There is a&lt;br/&gt;&amp;gt;&amp;gt; ##uafrbf libera chat if you would like information on the settings or&lt;br/&gt;&amp;gt;&amp;gt; looking for full-rbf friends (though that step could be automated in the&lt;br/&gt;&amp;gt;&amp;gt; future by setting up a dedicated network bit and reserving a few outbound&lt;br/&gt;&amp;gt;&amp;gt; slots for them).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you&amp;#39;re a mining operator looking to increase your income, you might be&lt;br/&gt;&amp;gt;&amp;gt; interested to experiment with full-rbf as a policy. Indeed, in the future I&lt;br/&gt;&amp;gt;&amp;gt; believe the multi-party transactions issuers who need full-rbf to secure&lt;br/&gt;&amp;gt;&amp;gt; their funding flow should connect by default to full-rbf peers. One can&lt;br/&gt;&amp;gt;&amp;gt; conjecture that their transactions are likely to be more compelling in&lt;br/&gt;&amp;gt;&amp;gt; their feerate as their liquidity needs are higher than the simple&lt;br/&gt;&amp;gt;&amp;gt; transaction. For today, I think we have really few standards and bitcoin&lt;br/&gt;&amp;gt;&amp;gt; softwares relying on multi-party funded transactions [4].&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you&amp;#39;re a Bitcoin user or business and you don&amp;#39;t like full-rbf, please&lt;br/&gt;&amp;gt;&amp;gt; express an opinion on how it might affect your software/operations. I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt; always interested to learn more about mempool and transaction-relay&lt;br/&gt;&amp;gt;&amp;gt; interactions with upper-layers and applications and to listen to feedback&lt;br/&gt;&amp;gt;&amp;gt; in those areas, and I guess a lot of other Bitcoin researchers/devs too. I&lt;br/&gt;&amp;gt;&amp;gt; know there have been a lot of concerns about full-rbf in the past, however&lt;br/&gt;&amp;gt;&amp;gt; I believe the Bitcoin ecosystem has matured a lot since then.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Any mistakes or missing context is my own.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [0] For more info about replace-by-fee, see&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://bitcoinops.org/en/topics/replace-by-fee/&#34;&gt;https://bitcoinops.org/en/topics/replace-by-fee/&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [1] For more details about the DoS vector, see&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [2] E.g I think it does not affect the Lightning Pool service, as there&lt;br/&gt;&amp;gt;&amp;gt; is a preliminary step where the participant funds are locked first in a&lt;br/&gt;&amp;gt;&amp;gt; 2-of-2 with the coordinator before being committed in the multi-party batch&lt;br/&gt;&amp;gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25353&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25353&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [4] E.g DLCs :&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; ; Lightning dual-funded channel :&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/lightning/bolts/pull/851&#34;&gt;https://github.com/lightning/bolts/pull/851&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;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/bitcoin-dev/attachments/20220621/721b7e8e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220621/721b7e8e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:10:34&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrz2ncljmjac52g9d50quu9t97dh05uqkhk0rdmenz64dr962fprqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z3vvlkw</id>
    
      <title type="html">📅 Original date posted:2022-06-16 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrz2ncljmjac52g9d50quu9t97dh05uqkhk0rdmenz64dr962fprqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z3vvlkw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw5pl3t3yacjyzajyy269vnvfz9s3k8nlfyklwz2wudn04h26n8ags47yv8&#39;&gt;nevent1q…7yv8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-06-16&lt;br/&gt;📝 Original message:Hi alicexbt,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Thanks for taking time to review the pull request,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1)If something relies on a policy which can be changed without breaking&lt;br/&gt;consensus rules, how is it secure in any case with or without full rbf?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Your Lightning node software relies on far more software and hardware&lt;br/&gt;components than the transaction-relay p2p network. One could list the&lt;br/&gt;operating system on which is running your Lightning process or the compiler&lt;br/&gt;toolchain turning out your Lightning source code in a binary artifact. Some&lt;br/&gt;weird kernel&amp;#39;s memory mapping change could allow access to your channel&lt;br/&gt;funding keys, _without_ breaking the Bitcoin consensus rules [0]. Moreover,&lt;br/&gt;your Lightning node is also relying on the existence of a global Internet&lt;br/&gt;allowing your HTLC transaction to flow from your physical host to the crowd&lt;br/&gt;of transactions confirming in the blockchain. Due to this &amp;#34;protocol&lt;br/&gt;assumption&amp;#34; your channel balance would be vulnerable to any change in your&lt;br/&gt;ISP routing policy, e.g refusing to accept your IPV4 traffic by a&lt;br/&gt;sudden desiderata&lt;br/&gt;to impose an IPV6 supremacy. Still _without_ breaking the Bitcoin consensus&lt;br/&gt;rules. Of course, the odds of your ISP operator adopting this behavior are&lt;br/&gt;really low, mostly because your operator has to bind to social and economic&lt;br/&gt;constraints to stay in business.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;And I believe this imperative to stay in business is certainly not absent&lt;br/&gt;in the incentives of the Bitcoin node operators. You&amp;#39;re free to run any&lt;br/&gt;policy on your node, especially one hardening the safety of your&lt;br/&gt;operations beyond&lt;br/&gt;the default one. However, if you start to a transaction-relay&lt;br/&gt;non-compatible with miner incentives, you won&amp;#39;t have an efficient view of&lt;br/&gt;the blockspace demand, and from then won&amp;#39;t be able to offer compelling&lt;br/&gt;feerates to execute your business transactions to satisfy your client&lt;br/&gt;needs. Or you won&amp;#39;t consolidate your wallet UTXOs at times of low-demand.&lt;br/&gt;Indeed, a sane visibility of the mempools might not be critical now for your&lt;br/&gt;Bitcoin operations, but this is not likely to become true with miner&amp;#39;s&lt;br/&gt;coinbase reward lowering with time and the system security relying on a&lt;br/&gt;fruitful fee market.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;So assuming there is a significant number of economically rational entities&lt;br/&gt;running p2p nodes, I think it&amp;#39;s a reasonable assumption for Lightning&lt;br/&gt;developers that a policy maximizing miner&amp;#39;s income and economic nodes&lt;br/&gt;operations&lt;br/&gt;will be widely run on the p2p network, and therefore lay its security model&lt;br/&gt;on that. When there is a gap between the economically optimal policy&lt;br/&gt;(full-rbf) and the effectively deployed one (optin), and this gap constitutes&lt;br/&gt;a flaw for exploitation, I believe it&amp;#39;s better to fix it.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;If you have a different mode of thinking w.r.t how we should design&lt;br/&gt;protocol in a trust-minimized, open, adversarial environment such as&lt;br/&gt;Bitcoin, I&amp;#39;m curious to listen to it.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; If I write a python script that expects user to enter char &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39; but&lt;br/&gt;user can enter &amp;#39;c&amp;#39; and there is no code to handle exceptions or other&lt;br/&gt;chars, will it be secure?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Of course not. If you deliver any critical software, you should attach a&lt;br/&gt;solid manual explaining all the corner cases and rough edges. Even better&lt;br/&gt;would be to enshrine the manual directly in your software API to minimize&lt;br/&gt;the footgunish behaviors. E.g, with any ECC library, forbidding to reuse&lt;br/&gt;nonces. If your user still ignores or misread the manual and provides an&lt;br/&gt;insecure input, there is not that much you can do.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;By analogy, I believe that&amp;#39;s the same with Lightning. One recommendation of&lt;br/&gt;the deployment manual would be to be always connected to a full-rbf&lt;br/&gt;transaction-relay topology. Defaulting to this rule and your node exposes&lt;br/&gt;far more surface of attacks. Assuming the manual has been well-written (big&lt;br/&gt;assumption!), I don&amp;#39;t think the system designer would be to blame.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;That said, one issue to confess with current Lightning is our lack of&lt;br/&gt;understanding of what should be figured out in the LN user manual for safe&lt;br/&gt;operations. I would say that&amp;#39;s an active area of research [1] [2] [3]&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 2)full-rbf is not default in the 2 open pull requests, so this experiment&lt;br/&gt;still relies on users changing RBF policies manually. If majority of nodes&lt;br/&gt;use default opt-in policy, how would this affect vulnerable projects?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;If we define the goal as ensuring there is a significant number of&lt;br/&gt;transaction-relay routes between the L2s nodes requiring full-rbf and the&lt;br/&gt;set of miners supporting this policy, and the set of miners is populated&lt;br/&gt;enough, there is no need to convince the majority of nodes operators to&lt;br/&gt;switch to full-rbf.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Beyond landing the &amp;#39;full-rbf&amp;#39; pull request, in pursuit of a partial&lt;br/&gt;full-rbf deployment, I&amp;#39;m thinking of reaching out to Lightning vendors to&lt;br/&gt;recommend running LN nodes operators run their full-node with the setting&lt;br/&gt;enabled. And also to few mining pool operators to advocate the potential&lt;br/&gt;increase in their income.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Given there are like 17000 public LN nodes, if half of them adopt full-rbf&lt;br/&gt;it should give already a good number of full-rbf transaction-relay routes&lt;br/&gt;across the p2p network graph. When we&amp;#39;re there, we can measure and think&lt;br/&gt;more about how to tune the full-rbf sub-topology.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 2-3% transactions are replaced with opt-in RBF, if someone did not&lt;br/&gt;replace earlier why would they do it with full RBF?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Because it&amp;#39;s breaking the reliability and security of their use-cases.&lt;br/&gt;Use-cases which didn&amp;#39;t exist a few years ago. The mempool DoS vector is&lt;br/&gt;described here [4]. To the best of my understanding, it might affect a&lt;br/&gt;bunch of use-cases, such as dual-funded channels, on-chain DLCs, p2p&lt;br/&gt;coinjoins, batched submarine swaps out. With the attack described, the&lt;br/&gt;honest set of users might not have visibility of the network mempools that&lt;br/&gt;there is a malicious, low-cost, opt-out double-spend preventing the&lt;br/&gt;propagation of their multi-party transaction. With the existence of a&lt;br/&gt;full-rbf transaction-relay topology, the multi-party transaction is able to&lt;br/&gt;replace the optout.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;None of those use-cases were deployed a few years ago, and the&lt;br/&gt;understanding of the interactions with the mempool policy is still nascent&lt;br/&gt;among their operators. However, if we assume that layering is a way to grow the&lt;br/&gt;Bitcoin ecosystem, as I do, it is reasonable to expect they will constitute&lt;br/&gt;a notable share of the Bitcoin transaction traffic during the next decade.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I am not opposed to full-rbf; rather, I am opposed to the notion that&lt;br/&gt;full-rbf will solve all problems&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I wished we had a magic Silver Bullet (tm) solving all the Bitcoin&lt;br/&gt;problems...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m only advocating a partial full-rbf deployment to solve a real precise&lt;br/&gt;security issue affecting multi-party funded transactions. That said,&lt;br/&gt;full-rbf is far from solving the known set of problems affecting the L2s&lt;br/&gt;due to interactions with network mempools. E,g, see package relay&lt;br/&gt;motivation [5]&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I would suggest users to try Bitcoin Knots instead which already has an&lt;br/&gt;option to disable all RBF policies if required, opt-in and full RBF policy.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Selecting a full-node to underpin any serious Bitcoin infrastructure or&lt;br/&gt;secure a significant stack of coins should be submitted to a fully-fledged&lt;br/&gt;decision-making process. Many factors are likely to matter such as the&lt;br/&gt;level of activity of the contributor community, the chain of trust w.r.t&lt;br/&gt;dependencies, the security incident track records, the quality of the&lt;br/&gt;documentation, the exhaustivity and robustness of the set of features, ...&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;This process might take tens of hours, to be duplicated by the number of&lt;br/&gt;node operators who would have to do the full-node vending switch. If you&lt;br/&gt;consider the cognitive cost at the level of the Bitcoin ecosystem, it&amp;#39;s far&lt;br/&gt;less costly to implement and review a few lines of codes in Bitcoin Core.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Developers should provide basic RBF policy options rather than attempting&lt;br/&gt;to define what constitutes a good policy and removing the ability to&lt;br/&gt;disable something when necessary.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Of course, this statement assumes there is a clear line between the&lt;br/&gt;developers and the users. Developers are also Bitcoin users, and they&amp;#39;re&lt;br/&gt;modifying the software to suit their use-case needs. And that&amp;#39;s exactly the&lt;br/&gt;purpose of the &amp;#39;full-rbf&amp;#39; PR I&amp;#39;m proposing, aiming to propose a &amp;#34;good&amp;#34;&lt;br/&gt;policy for a Lightning node, without actually seeking to change the&lt;br/&gt;default. If they&amp;#39;re parties interested in implementing more RBF policy&lt;br/&gt;options in Bitcoin Core, I think they&amp;#39;re free to propose such changes and&lt;br/&gt;invest the engineering effort to do so. If you&amp;#39;re interested in advancing&lt;br/&gt;the state of policy options in Bitcoin Core, there are a lot of interesting&lt;br/&gt;resources available and communities to encourage you in the learning&lt;br/&gt;process to contribute to the codebase [6].&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;[0] &lt;a href=&#34;https://dirtycow.ninja&#34;&gt;https://dirtycow.ninja&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://github.com/t-bast/lightning-docs/blob/master/pinning-attacks.md&#34;&gt;https://github.com/t-bast/lightning-docs/blob/master/pinning-attacks.md&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://arxiv.org/pdf/2006.01418.pdf&#34;&gt;https://arxiv.org/pdf/2006.01418.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://arxiv.org/pdf/2006.08513.pdf&#34;&gt;https://arxiv.org/pdf/2006.08513.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[4]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[5]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-May/020493.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[6] &lt;a href=&#34;https://www.summerofbitcoin.org&#34;&gt;https://www.summerofbitcoin.org&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le jeu. 16 juin 2022 à 00:15, alicexbt &amp;lt;alicexbt at protonmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for opening the pull request to add support for full-rbf in Bitcoin&lt;br/&gt;&amp;gt; Core. I have a disagreements with the approach and questions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Recent discussions among LN devs have brought back on the surface concerns&lt;br/&gt;&amp;gt; about the security of multi-party funded transactions (coinjoins,&lt;br/&gt;&amp;gt; dual-funded LN channels, on-chain DLCs, ...). It turns out there is a&lt;br/&gt;&amp;gt; low-fruit, naive DoS vector playable against the funding flow of any such&lt;br/&gt;&amp;gt; construction due to the lack of existent full-rbf transaction-relay&lt;br/&gt;&amp;gt; topology on today&amp;#39;s p2p network [0] [1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1)If something relies on a policy which can be changed without breaking&lt;br/&gt;&amp;gt; consensus rules, how is it secure in any case with or without full rbf? If&lt;br/&gt;&amp;gt; I write a python script that expects user to enter char &amp;#39;a&amp;#39; or &amp;#39;b&amp;#39; but user&lt;br/&gt;&amp;gt; can enter &amp;#39;c&amp;#39; and there is no code to handle exceptions or other chars,&lt;br/&gt;&amp;gt; will it be secure?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2)full-rbf is not default in the 2 open pull requests, so this experiment&lt;br/&gt;&amp;gt; still relies on users changing RBF policies manually. If majority of nodes&lt;br/&gt;&amp;gt; use default opt-in policy, how would this affect vulnerable projects?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you&amp;#39;re a mining operator looking to increase your income, you might be&lt;br/&gt;&amp;gt; interested to experiment with full-rbf as a policy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Miners can only increase their income if users replace transactions. 2-3%&lt;br/&gt;&amp;gt; transactions are replaced with opt-in RBF, if someone did not replace&lt;br/&gt;&amp;gt; earlier why would they do it now even with full RBF? Or even if we add some&lt;br/&gt;&amp;gt; users in it who could not signal for some reasons, do you think it would be&lt;br/&gt;&amp;gt; anything above 5%?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you&amp;#39;re a Bitcoin user or business and you don&amp;#39;t like full-rbf, please&lt;br/&gt;&amp;gt; express an opinion on how it might affect your software/operations. I&amp;#39;m&lt;br/&gt;&amp;gt; always interested to learn more about mempool and transaction-relay&lt;br/&gt;&amp;gt; interactions with upper-layers and applications and to listen to feedback&lt;br/&gt;&amp;gt; in those areas, and I guess a lot of other Bitcoin researchers/devs too. I&lt;br/&gt;&amp;gt; know there have been a lot of concerns about full-rbf in the past, however&lt;br/&gt;&amp;gt; I believe the Bitcoin ecosystem has matured a lot since then.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am not opposed to full-rbf; rather, I am opposed to the notion that&lt;br/&gt;&amp;gt; full-rbf will solve all problems and the lack of basic options in Bitcoin&lt;br/&gt;&amp;gt; Core to employ/disable different RBF policies. There is also a speculation&lt;br/&gt;&amp;gt; about making full RBF default in an year which isn&amp;#39;t relevant to discuss at&lt;br/&gt;&amp;gt; this point without trying different RBF policies.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I would suggest users to try Bitcoin Knots instead which already has an&lt;br/&gt;&amp;gt; option to disable all RBF policies if required, opt-in and full RBF policy.&lt;br/&gt;&amp;gt; This can also be done using GUI if not familiar with config option&lt;br/&gt;&amp;gt; mempoolreplacement​.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The rationale in PR #16171 was insufficient to justify removing it in the&lt;br/&gt;&amp;gt; first place, had 2 NACKs and was reopened to merge it. Why bother with a&lt;br/&gt;&amp;gt; few lines of code that may allow someone disable it if required in local&lt;br/&gt;&amp;gt; mempool since it&amp;#39;s only useful when a big percentage of miners utilize it&lt;br/&gt;&amp;gt; and essentially underused according to the PR author? Developers should&lt;br/&gt;&amp;gt; provide basic RBF policy options rather than attempting to define what&lt;br/&gt;&amp;gt; constitutes a good policy and removing the ability to disable something&lt;br/&gt;&amp;gt; when necessary.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; /dev/fd0&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with Proton Mail &amp;lt;&lt;a href=&#34;https://proton.me/&amp;gt&#34;&gt;https://proton.me/&amp;gt&lt;/a&gt;; secure email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt; On Tuesday, June 14th, 2022 at 5:55 AM, Antoine Riard via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Recent discussions among LN devs have brought back on the surface concerns&lt;br/&gt;&amp;gt; about the security of multi-party funded transactions (coinjoins,&lt;br/&gt;&amp;gt; dual-funded LN channels, on-chain DLCs, ...). It turns out there is a&lt;br/&gt;&amp;gt; low-fruit, naive DoS vector playable against the funding flow of any such&lt;br/&gt;&amp;gt; construction due to the lack of existent full-rbf transaction-relay&lt;br/&gt;&amp;gt; topology on today&amp;#39;s p2p network [0] [1]. While it does not consist in a&lt;br/&gt;&amp;gt; direct loss of funds, if exploited well I think it&amp;#39;s annoying enough to&lt;br/&gt;&amp;gt; inflict significant timevalue loss or fee-bumping waste&lt;br/&gt;&amp;gt; to the future providers or distributed swarm of users doing multi-party&lt;br/&gt;&amp;gt; funded transactions. Of course, it can be fixed one layer above by&lt;br/&gt;&amp;gt; introducing either fidelity bonds or a reliable centralized coordinator,&lt;br/&gt;&amp;gt; though at the price of an overhead per-participant ressources cost and loss&lt;br/&gt;&amp;gt; in system openness [1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For that reason, I believe it would be beneficial to the flourishing of&lt;br/&gt;&amp;gt; multi-party funded transactions to fix the Dos vector by seeing a subset of&lt;br/&gt;&amp;gt; the network running full-rbf and enabling propagation of honest multi-party&lt;br/&gt;&amp;gt; transactions to the interested miners, replacing potential non-signaling&lt;br/&gt;&amp;gt; double-spend from a malicious counterparty. Moving towards that direction,&lt;br/&gt;&amp;gt; I&amp;#39;ve submitted a small patch against Bitcoin Core enabling it to turn on&lt;br/&gt;&amp;gt; full-rbf as a policy, still under review [3]. The default setting stays&lt;br/&gt;&amp;gt; **false**, i.e keeping opt-in RBF as a default replacement policy. I&amp;#39;ve&lt;br/&gt;&amp;gt; started to run the patch on a public node at 146.190.224.15.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you&amp;#39;re a node operator curious to play with full-rbf, feel free to&lt;br/&gt;&amp;gt; connect to this node or spawn up a toy, public node yourself. There is a&lt;br/&gt;&amp;gt; ##uafrbf libera chat if you would like information on the settings or&lt;br/&gt;&amp;gt; looking for full-rbf friends (though that step could be automated in the&lt;br/&gt;&amp;gt; future by setting up a dedicated network bit and reserving a few outbound&lt;br/&gt;&amp;gt; slots for them).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you&amp;#39;re a mining operator looking to increase your income, you might be&lt;br/&gt;&amp;gt; interested to experiment with full-rbf as a policy. Indeed, in the future I&lt;br/&gt;&amp;gt; believe the multi-party transactions issuers who need full-rbf to secure&lt;br/&gt;&amp;gt; their funding flow should connect by default to full-rbf peers. One can&lt;br/&gt;&amp;gt; conjecture that their transactions are likely to be more compelling in&lt;br/&gt;&amp;gt; their feerate as their liquidity needs are higher than the simple&lt;br/&gt;&amp;gt; transaction. For today, I think we have really few standards and bitcoin&lt;br/&gt;&amp;gt; softwares relying on multi-party funded transactions [4].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you&amp;#39;re a Bitcoin user or business and you don&amp;#39;t like full-rbf, please&lt;br/&gt;&amp;gt; express an opinion on how it might affect your software/operations. I&amp;#39;m&lt;br/&gt;&amp;gt; always interested to learn more about mempool and transaction-relay&lt;br/&gt;&amp;gt; interactions with upper-layers and applications and to listen to feedback&lt;br/&gt;&amp;gt; in those areas, and I guess a lot of other Bitcoin researchers/devs too. I&lt;br/&gt;&amp;gt; know there have been a lot of concerns about full-rbf in the past, however&lt;br/&gt;&amp;gt; I believe the Bitcoin ecosystem has matured a lot since then.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Any mistakes or missing context is my own.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0] For more info about replace-by-fee, see&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://bitcoinops.org/en/topics/replace-by-fee/&#34;&gt;https://bitcoinops.org/en/topics/replace-by-fee/&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] For more details about the DoS vector, see&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2] E.g I think it does not affect the Lightning Pool service, as there is&lt;br/&gt;&amp;gt; a preliminary step where the participant funds are locked first in a 2-of-2&lt;br/&gt;&amp;gt; with the coordinator before being committed in the multi-party batch&lt;br/&gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25353&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25353&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [4] E.g DLCs :&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md&lt;/a&gt;&lt;br/&gt;&amp;gt; ; Lightning dual-funded channel :&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/lightning/bolts/pull/851&#34;&gt;https://github.com/lightning/bolts/pull/851&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220617/6775746f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220617/6775746f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:10:32&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr5udgjj65nzdaez8e3ma4f79cp9cv9y3q8uj9swgcv0xvhnymhtszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z7tpf9d</id>
    
      <title type="html">📅 Original date posted:2022-06-13 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr5udgjj65nzdaez8e3ma4f79cp9cv9y3q8uj9swgcv0xvhnymhtszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z7tpf9d" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvf3rmey20p3pwvt5jxxaq2lu4ran7c5pmgdlx333rm2jmv3lzkrsm35lac&#39;&gt;nevent1q…5lac&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-06-13&lt;br/&gt;📝 Original message:Hi list,&lt;br/&gt;&lt;br/&gt;Recent discussions among LN devs have brought back on the surface concerns&lt;br/&gt;about the security of multi-party funded transactions (coinjoins,&lt;br/&gt;dual-funded LN channels, on-chain DLCs, ...). It turns out there is a&lt;br/&gt;low-fruit, naive DoS vector playable against the funding flow of any such&lt;br/&gt;construction due to the lack of existent full-rbf transaction-relay&lt;br/&gt;topology on today&amp;#39;s p2p network [0] [1]. While it does not consist in a&lt;br/&gt;direct loss of funds, if exploited well I think it&amp;#39;s annoying enough to&lt;br/&gt;inflict significant timevalue loss or fee-bumping waste&lt;br/&gt;to the future providers or distributed swarm of users doing multi-party&lt;br/&gt;funded transactions. Of course, it can be fixed one layer above by&lt;br/&gt;introducing either fidelity bonds or a reliable centralized coordinator,&lt;br/&gt;though at the price of an overhead per-participant ressources cost and loss&lt;br/&gt;in system openness [1].&lt;br/&gt;&lt;br/&gt;For that reason, I believe it would be beneficial to the flourishing of&lt;br/&gt;multi-party funded transactions to fix the Dos vector by seeing a subset of&lt;br/&gt;the network running full-rbf and enabling propagation of honest multi-party&lt;br/&gt;transactions to the interested miners, replacing potential non-signaling&lt;br/&gt;double-spend from a malicious counterparty. Moving towards that direction,&lt;br/&gt;I&amp;#39;ve submitted a small patch against Bitcoin Core enabling it to turn on&lt;br/&gt;full-rbf as a policy, still under review [3]. The default setting stays&lt;br/&gt;**false**, i.e keeping opt-in RBF as a default replacement policy. I&amp;#39;ve&lt;br/&gt;started to run the patch on a public node at 146.190.224.15.&lt;br/&gt;&lt;br/&gt;If you&amp;#39;re a node operator curious to play with full-rbf, feel free to&lt;br/&gt;connect to this node or spawn up a toy, public node yourself. There is a&lt;br/&gt;##uafrbf libera chat if you would like information on the settings or&lt;br/&gt;looking for full-rbf friends (though that step could be automated in the&lt;br/&gt;future by setting up a dedicated network bit and reserving a few outbound&lt;br/&gt;slots for them).&lt;br/&gt;&lt;br/&gt;If you&amp;#39;re a mining operator looking to increase your income, you might be&lt;br/&gt;interested to experiment with full-rbf as a policy. Indeed, in the future I&lt;br/&gt;believe the multi-party transactions issuers who need full-rbf to secure&lt;br/&gt;their funding flow should connect by default to full-rbf peers. One can&lt;br/&gt;conjecture that their transactions are likely to be more compelling in&lt;br/&gt;their feerate as their liquidity needs are higher than the simple&lt;br/&gt;transaction. For today, I think we have really few standards and bitcoin&lt;br/&gt;softwares relying on multi-party funded transactions [4].&lt;br/&gt;&lt;br/&gt;If you&amp;#39;re a Bitcoin user or business and you don&amp;#39;t like full-rbf, please&lt;br/&gt;express an opinion on how it might affect your software/operations. I&amp;#39;m&lt;br/&gt;always interested to learn more about mempool and transaction-relay&lt;br/&gt;interactions with upper-layers and applications and to listen to feedback&lt;br/&gt;in those areas, and I guess a lot of other Bitcoin researchers/devs too. I&lt;br/&gt;know there have been a lot of concerns about full-rbf in the past, however&lt;br/&gt;I believe the Bitcoin ecosystem has matured a lot since then.&lt;br/&gt;&lt;br/&gt;Any mistakes or missing context is my own.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] For more info about replace-by-fee, see&lt;br/&gt;&lt;a href=&#34;https://bitcoinops.org/en/topics/replace-by-fee/&#34;&gt;https://bitcoinops.org/en/topics/replace-by-fee/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] For more details about the DoS vector, see&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[2] E.g I think it does not affect the Lightning Pool service, as there is&lt;br/&gt;a preliminary step where the participant funds are locked first in a 2-of-2&lt;br/&gt;with the coordinator before being committed in the multi-party batch&lt;br/&gt;transaction.&lt;br/&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25353&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25353&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[4] E.g DLCs :&lt;br/&gt;&lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs/blob/master/Transactions.md&lt;/a&gt;&lt;br/&gt;; Lightning dual-funded channel :&lt;br/&gt;&lt;a href=&#34;https://github.com/lightning/bolts/pull/851&#34;&gt;https://github.com/lightning/bolts/pull/851&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/20220613/1a047265/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220613/1a047265/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:10:27&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvmtezxdpal3p3wzgcrw6aemnw35dsahkapwhhuynytu8y05agyegzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z62kgx7</id>
    
      <title type="html">📅 Original date posted:2021-09-26 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvmtezxdpal3p3wzgcrw6aemnw35dsahkapwhhuynytu8y05agyegzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z62kgx7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsff5vwfgaskw6t39fc93uy4xwkh0zt27u8kq23rwq0t4d4lk5405sp4t696&#39;&gt;nevent1q…t696&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-09-26&lt;br/&gt;📝 Original message:Hi Gloria,&lt;br/&gt;&lt;br/&gt;Thanks for your answers,&lt;br/&gt;&lt;br/&gt;&amp;gt; In summary, it seems that the decisions that might still need&lt;br/&gt;&amp;gt; attention/input from devs on this mailing list are:&lt;br/&gt;&amp;gt; 1. Whether we should start with multiple-parent-1-child or&lt;br/&gt;1-parent-1-child.&lt;br/&gt;&amp;gt; 2. Whether it&amp;#39;s ok to require that the child not have conflicts with&lt;br/&gt;&amp;gt; mempool transactions.&lt;br/&gt;&lt;br/&gt;Yes 1) it would be good to have inputs of more potential users of package&lt;br/&gt;acceptance . And 2) I think it&amp;#39;s more a matter of clearer wording of the&lt;br/&gt;proposal.&lt;br/&gt;&lt;br/&gt;However, see my final point on the relaxation around &amp;#34;unconfirmed inputs&amp;#34;&lt;br/&gt;which might in fact alter our current block construction strategy.&lt;br/&gt;&lt;br/&gt;&amp;gt; Right, the fact that we essentially always choose the first-seen witness&lt;br/&gt;is&lt;br/&gt;&amp;gt; an unfortunate limitation that exists already. Adding package mempool&lt;br/&gt;&amp;gt; accept doesn&amp;#39;t worsen this, but the procedure in the future is to replace&lt;br/&gt;&amp;gt; the witness when it makes sense economically. We can also add logic to&lt;br/&gt;&amp;gt; allow package feerate to pay for witness replacements as well. This is&lt;br/&gt;&amp;gt; pretty far into the future, though.&lt;br/&gt;&lt;br/&gt;Yes I agree package mempool doesn&amp;#39;t worsen this. And it&amp;#39;s not an issue for&lt;br/&gt;current LN as you can&amp;#39;t significantly inflate a spending witness for the&lt;br/&gt;2-of-2 funding output.&lt;br/&gt;However, it might be an issue for multi-party protocol where the spending&lt;br/&gt;script has alternative branches with asymmetric valid witness weights.&lt;br/&gt;Taproot should ease that kind of script so hopefully we would deploy&lt;br/&gt;wtxid-replacement not too far in the future.&lt;br/&gt;&lt;br/&gt;&amp;gt; I could be misunderstanding, but an attacker wouldn&amp;#39;t be able to&lt;br/&gt;&amp;gt; batch-attack like this. Alice&amp;#39;s package only conflicts with A&amp;#39; &#43; D&amp;#39;, not&lt;br/&gt;A&amp;#39;&lt;br/&gt;&amp;gt; &#43; B&amp;#39; &#43; C&amp;#39; &#43; D&amp;#39;. She only needs to pay for evicting 2 transactions.&lt;br/&gt;&lt;br/&gt;Yeah I can be clearer, I think you have 2 pinning attacks scenarios to&lt;br/&gt;consider.&lt;br/&gt;&lt;br/&gt;In LN, if you&amp;#39;re trying to confirm a commitment transaction to time-out or&lt;br/&gt;claim on-chain a HTLC and the timelock is near-expiration, you should be&lt;br/&gt;ready to pay in commitment&#43;2nd-stage HTLC transaction fees as much as the&lt;br/&gt;value offered by the HTLC.&lt;br/&gt;&lt;br/&gt;Following this security assumption, an attacker can exploit it by targeting&lt;br/&gt;together commitment transactions from different channels by blocking them&lt;br/&gt;under a high-fee child, of which the fee value&lt;br/&gt;is equal to the top-value HTLC &#43; 1. Victims&amp;#39;s fee-bumping logics won&amp;#39;t&lt;br/&gt;overbid as it&amp;#39;s not worthy to offer fees beyond their competed HTLCs. Apart&lt;br/&gt;from observing mempools state, victims can&amp;#39;t learn they&amp;#39;re targeted by the&lt;br/&gt;same attacker.&lt;br/&gt;&lt;br/&gt;To draw from the aforementioned topology, Mallory broadcasts A&amp;#39; &#43; B&amp;#39; &#43; C&amp;#39; &#43;&lt;br/&gt;D&amp;#39;, where A&amp;#39; conflicts with Alice&amp;#39;s P1, B&amp;#39; conflicts with Bob&amp;#39;s P2, C&amp;#39;&lt;br/&gt;conflicts with Caroll&amp;#39;s P3. Let&amp;#39;s assume P1 is confirming the top-value&lt;br/&gt;HTLC of the set. If D&amp;#39; fees is higher than P1 &#43; 1, it won&amp;#39;t be rational for&lt;br/&gt;Alice or Bob or Caroll to keep offering competing feerates. Mallory will be&lt;br/&gt;at loss on stealing P1, as she has paid more in fees but will realize a&lt;br/&gt;gain on P2&#43;P3.&lt;br/&gt;&lt;br/&gt;In this model, Alice is allowed to evict those 2 transactions (A&amp;#39; &#43; D&amp;#39;) but&lt;br/&gt;as she is economically-bounded she won&amp;#39;t succeed.&lt;br/&gt;&lt;br/&gt;Mallory is maliciously exploiting RBF rule 3 on absolute fee. I think this&lt;br/&gt;1st pinning scenario is correct and &amp;#34;lucractive&amp;#34; when you sum the global&lt;br/&gt;gain/loss.&lt;br/&gt;&lt;br/&gt;There is a 2nd attack scenario where A &#43; B &#43; C &#43; D, where D is the child of&lt;br/&gt;A,B,C. All those transactions are honestly issued by Alice. Once A &#43; B &#43; C&lt;br/&gt;&#43; D are propagated in network mempools, Mallory is able to replace A &#43; D&lt;br/&gt;with  A&amp;#39; &#43; D&amp;#39; where D&amp;#39; is paying a higher fee. This package A&amp;#39; &#43; D&amp;#39; will&lt;br/&gt;confirm soon if D feerate was compelling but Mallory succeeds in delaying&lt;br/&gt;the confirmation&lt;br/&gt;of B &#43; C for one or more blocks. As B &#43; C are pre-signed commitments with a&lt;br/&gt;low-fee rate they won&amp;#39;t confirm without Alice issuing a new child E.&lt;br/&gt;Mallory can repeat the same trick by broadcasting&lt;br/&gt;B&amp;#39; &#43; E&amp;#39; and delay again the confirmation of C.&lt;br/&gt;&lt;br/&gt;If the remaining package pending HTLC has a higher-value than all the&lt;br/&gt;malicious fees over-bid, Mallory should realize a gain. With this 2nd&lt;br/&gt;pinning attack, the malicious entity buys confirmation delay of your&lt;br/&gt;packaged-together commitments.&lt;br/&gt;&lt;br/&gt;Assuming those attacks are correct, I&amp;#39;m leaning towards being conservative&lt;br/&gt;with the LDK broadcast backend. Though once again, other L2 devs have&lt;br/&gt;likely other use-cases and opinions :)&lt;br/&gt;&lt;br/&gt;&amp;gt;  B&amp;#39; only needs to pay for itself in this case.&lt;br/&gt;&lt;br/&gt;Yes I think it&amp;#39;s a nice discount when UTXO is single-owned. In the context&lt;br/&gt;of shared-owned UTXO (e.g LN), you might not if there is an in-mempool&lt;br/&gt;package already spending the UTXO and have to assume the worst-case&lt;br/&gt;scenario. I.e have B&amp;#39; committing enough fee to pay for A&amp;#39; replacement&lt;br/&gt;bandwidth. I think we can&amp;#39;t do that much for this case...&lt;br/&gt;&lt;br/&gt;&amp;gt; If a package meets feerate requirements as a&lt;br/&gt;package, the parents in the transaction are allowed to replace-by-fee&lt;br/&gt;mempool transactions. The child cannot replace mempool transactions.&amp;#34;&lt;br/&gt;&lt;br/&gt;I agree with the Mallory-vs-Alice case. Though if Alice broadcasts A&#43;B&amp;#39; to&lt;br/&gt;replace A&#43;B because the first broadcast isn&amp;#39;t satisfying anymore due to&lt;br/&gt;mempool spikes ? Assuming B&amp;#39; fees is enough, I think that case as child B&amp;#39;&lt;br/&gt;replacing in-mempool transaction B. Which I understand going against  &amp;#34;The&lt;br/&gt;child cannot replace mempool transactions&amp;#34;.&lt;br/&gt;&lt;br/&gt;Maybe wording could be a bit clearer ?&lt;br/&gt;&lt;br/&gt;&amp;gt; While it would be nice to have full RBF, malleability of the child won&amp;#39;t&lt;br/&gt;&amp;gt; block RBF here. If we&amp;#39;re trying to replace A&amp;#39;, we only require that A&amp;#39;&lt;br/&gt;&amp;gt; signals replaceability, and don&amp;#39;t mind if its child doesn&amp;#39;t.&lt;br/&gt;&lt;br/&gt;Yes, it sounds good.&lt;br/&gt;&lt;br/&gt;&amp;gt; Yes, A&#43;C&#43;D pays 2500sat more in fees, but it is also 1000vB larger. A&lt;br/&gt;miner&lt;br/&gt;&amp;gt; should prefer to utilize their block space more effectively.&lt;br/&gt;&lt;br/&gt;If your mempool is empty and only composed of A&#43;C&#43;D or A&#43;B, I think taking&lt;br/&gt;A&#43;C&#43;D is the most efficient block construction you can come up with as a&lt;br/&gt;miner ?&lt;br/&gt;&lt;br/&gt;&amp;gt; No, because we don&amp;#39;t use that model.&lt;br/&gt;&lt;br/&gt;Can you describe what miner model we are using ? Like the block&lt;br/&gt;construction strategy implemented by `addPackagesTxs` or also encompassing&lt;br/&gt;our current mempool acceptance policy, which I think rely on absolute fee&lt;br/&gt;over ancestor score in case of replacement ?&lt;br/&gt;&lt;br/&gt;I think this point is worthy to discuss as otherwise we might downgrade the&lt;br/&gt;efficiency of our current block construction strategy in periods of&lt;br/&gt;near-empty mempools. A knowledge which could be discreetly leveraged by a&lt;br/&gt;miner to gain an advantage on the rest of the mining ecosystem.&lt;br/&gt;&lt;br/&gt;Note, I think we *might* have to go in this direction if we want to replace&lt;br/&gt;replace-by-fee by replace-by-feerate or replace-by-ancestor and solve&lt;br/&gt;in-depth pinning attacks. Though if we do so,&lt;br/&gt;IMO we would need more thoughts.&lt;br/&gt;&lt;br/&gt;I think we could restrain package acceptance to only confirmed inputs for&lt;br/&gt;now and revisit later this point ? For LN-anchor, you can assume that the&lt;br/&gt;fee-bumping UTXO feeding the CPFP is already&lt;br/&gt;confirmed. Or are there currently-deployed use-cases which would benefit&lt;br/&gt;from your proposed Rule #2 ?&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 23 sept. 2021 à 11:36, Gloria Zhao &amp;lt;gloriajzhao at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks as always for your input. I&amp;#39;m glad we agree on so much!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In summary, it seems that the decisions that might still need&lt;br/&gt;&amp;gt; attention/input from devs on this mailing list are:&lt;br/&gt;&amp;gt; 1. Whether we should start with multiple-parent-1-child or&lt;br/&gt;&amp;gt; 1-parent-1-child.&lt;br/&gt;&amp;gt; 2. Whether it&amp;#39;s ok to require that the child not have conflicts with&lt;br/&gt;&amp;gt; mempool transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Responding to your comments...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; IIUC, you have package A&#43;B, during the dedup phase early in&lt;br/&gt;&amp;gt; `AcceptMultipleTransactions` if you observe same-txid-different-wtixd A&amp;#39;&lt;br/&gt;&amp;gt; and A&amp;#39; is higher feerate than A, you trim A and replace by A&amp;#39; ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think this approach is safe, the one who appears unsafe to me is when&lt;br/&gt;&amp;gt; A&amp;#39; has a _lower_ feerate, even if A&amp;#39; is already accepted by our mempool ?&lt;br/&gt;&amp;gt; In that case iirc that would be a pinning.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Right, the fact that we essentially always choose the first-seen witness&lt;br/&gt;&amp;gt; is an unfortunate limitation that exists already. Adding package mempool&lt;br/&gt;&amp;gt; accept doesn&amp;#39;t worsen this, but the procedure in the future is to replace&lt;br/&gt;&amp;gt; the witness when it makes sense economically. We can also add logic to&lt;br/&gt;&amp;gt; allow package feerate to pay for witness replacements as well. This is&lt;br/&gt;&amp;gt; pretty far into the future, though.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; It sounds uneconomical for an attacker but I think it&amp;#39;s not when you&lt;br/&gt;&amp;gt; consider than you can &amp;#34;batch&amp;#34; attack against multiple honest&lt;br/&gt;&amp;gt; counterparties. E.g, Mallory broadcast A&amp;#39; &#43; B&amp;#39; &#43; C&amp;#39; &#43; D&amp;#39; where A&amp;#39; conflicts&lt;br/&gt;&amp;gt; with Alice&amp;#39;s honest package P1, B&amp;#39; conflicts with Bob&amp;#39;s honest package P2,&lt;br/&gt;&amp;gt; C&amp;#39; conflicts with Caroll&amp;#39;s honest package P3. And D&amp;#39; is a high-fee child of&lt;br/&gt;&amp;gt; A&amp;#39; &#43; B&amp;#39; &#43; C&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If D&amp;#39; is higher-fee than P1 or P2 or P3 but inferior to the sum of HTLCs&lt;br/&gt;&amp;gt; confirmed by P1&#43;P2&#43;P3, I think it&amp;#39;s lucrative for the attacker ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I could be misunderstanding, but an attacker wouldn&amp;#39;t be able to&lt;br/&gt;&amp;gt; batch-attack like this. Alice&amp;#39;s package only conflicts with A&amp;#39; &#43; D&amp;#39;, not A&amp;#39;&lt;br/&gt;&amp;gt; &#43; B&amp;#39; &#43; C&amp;#39; &#43; D&amp;#39;. She only needs to pay for evicting 2 transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Do we assume that broadcasted packages are &amp;#34;honest&amp;#34; by default and that&lt;br/&gt;&amp;gt; the parent(s) always need the child to pass the fee checks, that way saving&lt;br/&gt;&amp;gt; the processing of individual transactions which are expected to fail in 99%&lt;br/&gt;&amp;gt; of cases or more ad hoc composition of packages at relay ?&lt;br/&gt;&amp;gt; &amp;gt; I think this point is quite dependent on the p2p packages format/logic&lt;br/&gt;&amp;gt; we&amp;#39;ll end up on and that we should feel free to revisit it later ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think it&amp;#39;s the opposite; there&amp;#39;s no way for us to assume that p2p&lt;br/&gt;&amp;gt; packages will be &amp;#34;honest.&amp;#34; I&amp;#39;d like to have two things before we expose on&lt;br/&gt;&amp;gt; P2P: (1) ensure that the amount of resources potentially allocated for&lt;br/&gt;&amp;gt; package validation isn&amp;#39;t disproportionately higher than that of single&lt;br/&gt;&amp;gt; transaction validation and (2) only use package validation when we&amp;#39;re&lt;br/&gt;&amp;gt; unsatisifed with the single validation result, e.g. we might get better&lt;br/&gt;&amp;gt; fees.&lt;br/&gt;&amp;gt; Yes, let&amp;#39;s revisit this later :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  &amp;gt; Yes, if you receive A&#43;B, and A is already in-mempoo, I agree you can&lt;br/&gt;&amp;gt; discard its feerate as B should pay for all fees checked on its own. Where&lt;br/&gt;&amp;gt; I&amp;#39;m unclear is when you have in-mempool A&#43;B and receive A&#43;B&amp;#39;. Should B&amp;#39;&lt;br/&gt;&amp;gt; have a fee high enough to cover the bandwidth penalty replacement&lt;br/&gt;&amp;gt; (`PaysForRBF`, 2nd check) of both A&#43;B&amp;#39; or only B&amp;#39; ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  B&amp;#39; only needs to pay for itself in this case.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Do we want the child to be able to replace mempool transactions as&lt;br/&gt;&amp;gt; well?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If we mean when you have replaceable A&#43;B then A&amp;#39;&#43;B&amp;#39; try to replace with&lt;br/&gt;&amp;gt; a higher-feerate ? I think that&amp;#39;s exactly the case we need for Lightning as&lt;br/&gt;&amp;gt; A&#43;B is coming from Alice and A&amp;#39;&#43;B&amp;#39; is coming from Bob :/&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let me clarify this because I can see that my wording was ambiguous, and&lt;br/&gt;&amp;gt; then please let me know if it fits Lightning&amp;#39;s needs?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In my proposal, I wrote &amp;#34;If a package meets feerate requirements as a&lt;br/&gt;&amp;gt; package, the parents in the transaction are allowed to replace-by-fee&lt;br/&gt;&amp;gt; mempool transactions. The child cannot replace mempool transactions.&amp;#34; What&lt;br/&gt;&amp;gt; I meant was: the package can replace mempool transactions if any of the&lt;br/&gt;&amp;gt; parents conflict with mempool transactions. The child cannot not conflict&lt;br/&gt;&amp;gt; with any mempool transactions.&lt;br/&gt;&amp;gt; The Lightning use case this attempts to address is: Alice and Mallory are&lt;br/&gt;&amp;gt; LN counterparties, and have packages A&#43;B and A&amp;#39;&#43;B&amp;#39;, respectively. A and A&amp;#39;&lt;br/&gt;&amp;gt; are their commitment transactions and conflict with each other; they have&lt;br/&gt;&amp;gt; shared inputs and different txids.&lt;br/&gt;&amp;gt; B spends Alice&amp;#39;s anchor output from A. B&amp;#39; spends Mallory&amp;#39;s anchor output&lt;br/&gt;&amp;gt; from A&amp;#39;. Thus, B and B&amp;#39; do not conflict with each other.&lt;br/&gt;&amp;gt; Alice can broadcast her package, A&#43;B, to replace Mallory&amp;#39;s package, A&amp;#39;&#43;B&amp;#39;,&lt;br/&gt;&amp;gt; since B doesn&amp;#39;t conflict with the mempool.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Would this be ok?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The second option, a child of A&amp;#39;, In the LN case I think the CPFP is&lt;br/&gt;&amp;gt; attached on one&amp;#39;s anchor output.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While it would be nice to have full RBF, malleability of the child won&amp;#39;t&lt;br/&gt;&amp;gt; block RBF here. If we&amp;#39;re trying to replace A&amp;#39;, we only require that A&amp;#39;&lt;br/&gt;&amp;gt; signals replaceability, and don&amp;#39;t mind if its child doesn&amp;#39;t.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; B has an ancestor score of 10sat/vb and D has an&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; ancestor score of ~2.9sat/vb. Since D&amp;#39;s ancestor score is lower than&lt;br/&gt;&amp;gt; B&amp;#39;s,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; it fails the proposed package RBF Rule #2, so this package would be&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; rejected. Does this meet your expectations?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Well what sounds odd to me, in my example, we fail D even if it has a&lt;br/&gt;&amp;gt; higher-fee than B. Like A&#43;B absolute fees are 2000 sats and A&#43;C&#43;D absolute&lt;br/&gt;&amp;gt; fees are 4500 sats ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, A&#43;C&#43;D pays 2500sat more in fees, but it is also 1000vB larger. A&lt;br/&gt;&amp;gt; miner should prefer to utilize their block space more effectively.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Is this compatible with a model where a miner prioritizes absolute fees&lt;br/&gt;&amp;gt; over ancestor score, in the case that mempools aren&amp;#39;t full-enough to&lt;br/&gt;&amp;gt; fulfill a block ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, because we don&amp;#39;t use that model.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Gloria&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Sep 23, 2021 at 5:29 AM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Correct, if B&#43;C is too low feerate to be accepted, we will reject it. I&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; prefer this because it is incentive compatible: A can be mined by&lt;br/&gt;&amp;gt;&amp;gt; itself,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; so there&amp;#39;s no reason to prefer A&#43;B&#43;C instead of A.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; As another way of looking at this, consider the case where we do accept&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; A&#43;B&#43;C and it sits at the &amp;#34;bottom&amp;#34; of our mempool. If our mempool reaches&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; capacity, we evict the lowest descendant feerate transactions, which are&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; B&#43;C in this case. This gives us the same resulting mempool, with A and&lt;br/&gt;&amp;gt;&amp;gt; not&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; B&#43;C.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I agree here. Doing otherwise, we might evict other transactions mempool&lt;br/&gt;&amp;gt;&amp;gt; in `MempoolAccept::Finalize` with a higher-feerate than B&#43;C while those&lt;br/&gt;&amp;gt;&amp;gt; evicted transactions are the most compelling for block construction.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I thought at first missing this acceptance requirement would break a&lt;br/&gt;&amp;gt;&amp;gt; fee-bumping scheme like Parent-Pay-For-Child where a high-fee parent is&lt;br/&gt;&amp;gt;&amp;gt; attached to a child signed with SIGHASH_ANYONECANPAY but in this case the&lt;br/&gt;&amp;gt;&amp;gt; child fee is capturing the parent value. I can&amp;#39;t think of other fee-bumping&lt;br/&gt;&amp;gt;&amp;gt; schemes potentially affected. If they do exist I would say they&amp;#39;re wrong in&lt;br/&gt;&amp;gt;&amp;gt; their design assumptions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; If or when we have witness replacement, the logic is: if the individual&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; transaction is enough to replace the mempool one, the replacement will&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; happen during the preceding individual transaction acceptance, and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; deduplication logic will work. Otherwise, we will try to deduplicate by&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; wtxid, see that we need a package witness replacement, and use the&lt;br/&gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; feerate to evaluate whether this is economically rational.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; IIUC, you have package A&#43;B, during the dedup phase early in&lt;br/&gt;&amp;gt;&amp;gt; `AcceptMultipleTransactions` if you observe same-txid-different-wtixd A&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt; and A&amp;#39; is higher feerate than A, you trim A and replace by A&amp;#39; ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this approach is safe, the one who appears unsafe to me is when&lt;br/&gt;&amp;gt;&amp;gt; A&amp;#39; has a _lower_ feerate, even if A&amp;#39; is already accepted by our mempool ?&lt;br/&gt;&amp;gt;&amp;gt; In that case iirc that would be a pinning.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good to see progress on witness replacement before we see usage of&lt;br/&gt;&amp;gt;&amp;gt; Taproot tree in the context of multi-party, where a malicious counterparty&lt;br/&gt;&amp;gt;&amp;gt; inflates its witness to jam a honest spending.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; (Note, the commit linked currently points nowhere :))&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Please note that A may replace A&amp;#39; even if A&amp;#39; has higher fees than A&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; individually, because the proposed package RBF utilizes the fees and&lt;br/&gt;&amp;gt;&amp;gt; size&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; of the entire package. This just requires E to pay enough fees, although&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; this can be pretty high if there are also potential B&amp;#39; and C&amp;#39; competing&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; commitment transactions that we don&amp;#39;t know about.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Ah right, if the package acceptance waives `PaysMoreThanConflicts` for&lt;br/&gt;&amp;gt;&amp;gt; the individual check on A, the honest package should replace the pinning&lt;br/&gt;&amp;gt;&amp;gt; attempt. I&amp;#39;ve not fully parsed the proposed implementation yet.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Though note, I think it&amp;#39;s still unsafe for a Lightning&lt;br/&gt;&amp;gt;&amp;gt; multi-commitment-broadcast-as-one-package as a malicious A&amp;#39; might have an&lt;br/&gt;&amp;gt;&amp;gt; absolute fee higher than E. It sounds uneconomical for&lt;br/&gt;&amp;gt;&amp;gt; an attacker but I think it&amp;#39;s not when you consider than you can &amp;#34;batch&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; attack against multiple honest counterparties. E.g, Mallory broadcast A&amp;#39; &#43;&lt;br/&gt;&amp;gt;&amp;gt; B&amp;#39; &#43; C&amp;#39; &#43; D&amp;#39; where A&amp;#39; conflicts with Alice&amp;#39;s honest package P1, B&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt; conflicts with Bob&amp;#39;s honest package P2, C&amp;#39; conflicts with Caroll&amp;#39;s honest&lt;br/&gt;&amp;gt;&amp;gt; package P3. And D&amp;#39; is a high-fee child of A&amp;#39; &#43; B&amp;#39; &#43; C&amp;#39;.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If D&amp;#39; is higher-fee than P1 or P2 or P3 but inferior to the sum of HTLCs&lt;br/&gt;&amp;gt;&amp;gt; confirmed by P1&#43;P2&#43;P3, I think it&amp;#39;s lucrative for the attacker ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So far, my understanding is that multi-parent-1-child is desired for&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; batched fee-bumping (&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I&amp;#39;ve also seen your response which I have less context on (&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&lt;/a&gt;).&lt;br/&gt;&amp;gt;&amp;gt; That&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; being said, I am happy to create a new proposal for 1 parent &#43; 1 child&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; (which would be slightly simpler) and plan for moving to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; multi-parent-1-child later if that is preferred. I am very interested in&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; hearing feedback on that approach.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think batched fee-bumping is okay as long as you don&amp;#39;t have&lt;br/&gt;&amp;gt;&amp;gt; time-sensitive outputs encumbering your commitment transactions. For the&lt;br/&gt;&amp;gt;&amp;gt; reasons mentioned above, I think that&amp;#39;s unsafe.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; What I&amp;#39;m worried about is  L2 developers, potentially not aware about all&lt;br/&gt;&amp;gt;&amp;gt; the mempool subtleties blurring the difference and always batching their&lt;br/&gt;&amp;gt;&amp;gt; broadcast by default.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; IMO, a good thing by restraining to 1-parent &#43; 1 child,  we artificially&lt;br/&gt;&amp;gt;&amp;gt; constraint L2 design space for now and minimize risks of unsafe usage of&lt;br/&gt;&amp;gt;&amp;gt; the package API :)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think that&amp;#39;s a point where it would be relevant to have the opinion of&lt;br/&gt;&amp;gt;&amp;gt; more L2 devs.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I think there is a misunderstanding here - let me describe what I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; proposing we&amp;#39;d do in this situation: we&amp;#39;ll try individual submission&lt;br/&gt;&amp;gt;&amp;gt; for A,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; see that it fails due to &amp;#34;insufficient fees.&amp;#34; Then, we&amp;#39;ll try package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; validation for A&#43;B and use package RBF. If A&#43;B pays enough, it can still&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; replace A&amp;#39;. If A fails for a bad signature, we won&amp;#39;t look at B or A&#43;B.&lt;br/&gt;&amp;gt;&amp;gt; Does&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; this meet your expectations?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes there was a misunderstanding, I think this approach is correct, it&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; more a question of performance. Do we assume that broadcasted packages are&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;honest&amp;#34; by default and that the parent(s) always need the child to pass&lt;br/&gt;&amp;gt;&amp;gt; the fee checks, that way saving the processing of individual transactions&lt;br/&gt;&amp;gt;&amp;gt; which are expected to fail in 99% of cases or more ad hoc composition of&lt;br/&gt;&amp;gt;&amp;gt; packages at relay ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this point is quite dependent on the p2p packages format/logic&lt;br/&gt;&amp;gt;&amp;gt; we&amp;#39;ll end up on and that we should feel free to revisit it later ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; What problem are you trying to solve by the package feerate *after*&lt;br/&gt;&amp;gt;&amp;gt; dedup&lt;br/&gt;&amp;gt;&amp;gt; rule ?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; My understanding is that an in-package transaction might be already in&lt;br/&gt;&amp;gt;&amp;gt; the mempool. Therefore, to compute a correct RBF penalty replacement, the&lt;br/&gt;&amp;gt;&amp;gt; vsize of this transaction could be discarded lowering the cost of package&lt;br/&gt;&amp;gt;&amp;gt; RBF.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I&amp;#39;m proposing that, when a transaction has already been submitted to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; mempool, we would ignore both its fees and vsize when calculating&lt;br/&gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; feerate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes, if you receive A&#43;B, and A is already in-mempoo, I agree you can&lt;br/&gt;&amp;gt;&amp;gt; discard its feerate as B should pay for all fees checked on its own. Where&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m unclear is when you have in-mempool A&#43;B and receive A&#43;B&amp;#39;. Should B&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt; have a fee high enough to cover the bandwidth penalty replacement&lt;br/&gt;&amp;gt;&amp;gt; (`PaysForRBF`, 2nd check) of both A&#43;B&amp;#39; or only B&amp;#39; ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you have a second-layer like current Lightning, you might have a&lt;br/&gt;&amp;gt;&amp;gt; counterparty commitment to replace and should always expect to have to pay&lt;br/&gt;&amp;gt;&amp;gt; for parent replacement bandwidth.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Where a potential discount sounds interesting is when you have an&lt;br/&gt;&amp;gt;&amp;gt; univoque state on the first-stage of transactions. E.g DLC&amp;#39;s funding&lt;br/&gt;&amp;gt;&amp;gt; transaction which might be CPFP by any participant iirc.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Note that, if C&amp;#39; conflicts with C, it also conflicts with D, since D is&lt;br/&gt;&amp;gt;&amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; descendant of C and would thus need to be evicted along with it.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Ah once again I think it&amp;#39;s a misunderstanding without the code under my&lt;br/&gt;&amp;gt;&amp;gt; eyes! If we do C&amp;#39; `PreChecks`, solve the conflicts provoked by it, i.e mark&lt;br/&gt;&amp;gt;&amp;gt; for potential eviction D and don&amp;#39;t consider it for future conflicts in the&lt;br/&gt;&amp;gt;&amp;gt; rest of the package, I think D&amp;#39; `PreChecks` should be good ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; More generally, this example is surprising to me because I didn&amp;#39;t think&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; packages would be used to fee-bump replaceable transactions. Do we want&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; child to be able to replace mempool transactions as well?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If we mean when you have replaceable A&#43;B then A&amp;#39;&#43;B&amp;#39; try to replace with a&lt;br/&gt;&amp;gt;&amp;gt; higher-feerate ? I think that&amp;#39;s exactly the case we need for Lightning as&lt;br/&gt;&amp;gt;&amp;gt; A&#43;B is coming from Alice and A&amp;#39;&#43;B&amp;#39; is coming from Bob :/&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I&amp;#39;m not sure what you mean? Let&amp;#39;s say we have a package of parent A &#43;&lt;br/&gt;&amp;gt;&amp;gt; child&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; B, where A is supposed to replace a mempool transaction A&amp;#39;. Are you&lt;br/&gt;&amp;gt;&amp;gt; saying&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; that counterparties are able to malleate the package child B, or a&lt;br/&gt;&amp;gt;&amp;gt; child of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; A&amp;#39;?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The second option, a child of A&amp;#39;, In the LN case I think the CPFP is&lt;br/&gt;&amp;gt;&amp;gt; attached on one&amp;#39;s anchor output.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think it&amp;#39;s good if we assume the&lt;br/&gt;&amp;gt;&amp;gt; solve-conflicts-after-parent&amp;#39;s`&amp;#39;PreChecks` mentioned above or fixing&lt;br/&gt;&amp;gt;&amp;gt; inherited signaling or full-rbf ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Sorry, I don&amp;#39;t understand what you mean by &amp;#34;preserve the package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; integrity?&amp;#34; Could you elaborate?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; After thinking the relaxation about the &amp;#34;new&amp;#34; unconfirmed input is not&lt;br/&gt;&amp;gt;&amp;gt; linked to trimming but I would say more to the multi-parent support.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Let&amp;#39;s say you have A&#43;B trying to replace C&#43;D where B is also spending&lt;br/&gt;&amp;gt;&amp;gt; already in-mempool E. To succeed, you need to waive the no-new-unconfirmed&lt;br/&gt;&amp;gt;&amp;gt; input as D isn&amp;#39;t spending E.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; So good, I think we agree on the problem description here.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I am in agreement with your calculations but unsure if we disagree on&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; expected outcome. Yes, B has an ancestor score of 10sat/vb and D has an&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; ancestor score of ~2.9sat/vb. Since D&amp;#39;s ancestor score is lower than&lt;br/&gt;&amp;gt;&amp;gt; B&amp;#39;s,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; it fails the proposed package RBF Rule #2, so this package would be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; rejected. Does this meet your expectations?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Well what sounds odd to me, in my example, we fail D even if it has a&lt;br/&gt;&amp;gt;&amp;gt; higher-fee than B. Like A&#43;B absolute fees are 2000 sats and A&#43;C&#43;D absolute&lt;br/&gt;&amp;gt;&amp;gt; fees are 4500 sats ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Is this compatible with a model where a miner prioritizes absolute fees&lt;br/&gt;&amp;gt;&amp;gt; over ancestor score, in the case that mempools aren&amp;#39;t full-enough to&lt;br/&gt;&amp;gt;&amp;gt; fulfill a block ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Let me know if I can clarify a point.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Le lun. 20 sept. 2021 à 11:10, Gloria Zhao &amp;lt;gloriajzhao at gmail.com&amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt; écrit :&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; First of all, thank you for the thorough review. I appreciate your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; insight on LN requirements.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; IIUC, you have a package A&#43;B&#43;C submitted for acceptance and A is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; already in your mempool. You trim out A from the package and then evaluate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; B&#43;C.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I think this might be an issue if A is the higher-fee element of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ABC package. B&#43;C package fees might be under the mempool min fee and will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be rejected, potentially breaking the acceptance expectations of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package issuer ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Correct, if B&#43;C is too low feerate to be accepted, we will reject it. I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; prefer this because it is incentive compatible: A can be mined by itself,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; so there&amp;#39;s no reason to prefer A&#43;B&#43;C instead of A.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As another way of looking at this, consider the case where we do accept&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A&#43;B&#43;C and it sits at the &amp;#34;bottom&amp;#34; of our mempool. If our mempool reaches&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; capacity, we evict the lowest descendant feerate transactions, which are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; B&#43;C in this case. This gives us the same resulting mempool, with A and not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; B&#43;C.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Further, I think the dedup should be done on wtxid, as you might have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; multiple valid witnesses. Though with varying vsizes and as such offering&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; different feerates.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I agree that variations of the same package with different witnesses is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a case that must be handled. I consider witness replacement to be a project&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that can be done in parallel to package mempool acceptance because being&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; able to accept packages does not worsen the problem of a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; same-txid-different-witness &amp;#34;pinning&amp;#34; attack.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If or when we have witness replacement, the logic is: if the individual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction is enough to replace the mempool one, the replacement will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; happen during the preceding individual transaction acceptance, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; deduplication logic will work. Otherwise, we will try to deduplicate by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wtxid, see that we need a package witness replacement, and use the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate to evaluate whether this is economically rational.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; See the #22290 &amp;#34;handle package transactions already in mempool&amp;#34; commit (&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22290/commits/fea75a2237b46cf76145242fecad7e274bfcb5ff&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22290/commits/fea75a2237b46cf76145242fecad7e274bfcb5ff&lt;/a&gt;),&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; which handles the case of same-txid-different-witness by simply using the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction in the mempool for now, with TODOs for what I just described.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I&amp;#39;m not clearly understanding the accepted topologies. By &amp;#34;parent and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child to share a parent&amp;#34;, do you mean the set of transactions A, B, C,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; where B is spending A and C is spending A and B would be correct ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Yes, that is what I meant. Yes, that would a valid package under these&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rules.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; If yes, is there a width-limit introduced or we fallback on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; MAX_PACKAGE_COUNT=25 ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; No, there is no limit on connectivity other than &amp;#34;child with all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; unconfirmed parents.&amp;#34; We will enforce MAX_PACKAGE_COUNT=25 and child&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in-mempool &#43; in-package ancestor limits.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Considering the current Core&amp;#39;s mempool acceptance rules, I think CPFP&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; batching is unsafe for LN time-sensitive closure. A malicious tx-relay&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; jamming successful on one channel commitment transaction would contamine&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the remaining commitments sharing the same package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; E.g, you broadcast the package A&#43;B&#43;C&#43;D&#43;E where A,B,C,D are commitment&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions and E a shared CPFP. If a malicious A&amp;#39; transaction has a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; better feerate than A, the whole package acceptance will fail. Even if A&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; confirms in the following block,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the propagation and confirmation of B&#43;C&#43;D have been delayed. This could&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; carry on a loss of funds.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Please note that A may replace A&amp;#39; even if A&amp;#39; has higher fees than A&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; individually, because the proposed package RBF utilizes the fees and size&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of the entire package. This just requires E to pay enough fees, although&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this can be pretty high if there are also potential B&amp;#39; and C&amp;#39; competing&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; commitment transactions that we don&amp;#39;t know about.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; IMHO, I&amp;#39;m leaning towards deploying during a first phase&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1-parent/1-child. I think it&amp;#39;s the most conservative step still improving&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; second-layer safety.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; So far, my understanding is that multi-parent-1-child is desired for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; batched fee-bumping (&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and I&amp;#39;ve also seen your response which I have less context on (&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&lt;/a&gt;).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; That being said, I am happy to create a new proposal for 1 parent &#43; 1 child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (which would be slightly simpler) and plan for moving to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; multi-parent-1-child later if that is preferred. I am very interested in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; hearing feedback on that approach.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; If A&#43;B is submitted to replace A&amp;#39;, where A pays 0 sats, B pays 200&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sats and A&amp;#39; pays 100 sats. If we apply the individual RBF on A, A&#43;B&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; acceptance fails. For this reason I think the individual RBF should be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bypassed and only the package RBF apply ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I think there is a misunderstanding here - let me describe what I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; proposing we&amp;#39;d do in this situation: we&amp;#39;ll try individual submission for A,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; see that it fails due to &amp;#34;insufficient fees.&amp;#34; Then, we&amp;#39;ll try package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; validation for A&#43;B and use package RBF. If A&#43;B pays enough, it can still&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replace A&amp;#39;. If A fails for a bad signature, we won&amp;#39;t look at B or A&#43;B. Does&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this meet your expectations?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; What problem are you trying to solve by the package feerate *after*&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; dedup rule ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; My understanding is that an in-package transaction might be already in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the mempool. Therefore, to compute a correct RBF penalty replacement, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; vsize of this transaction could be discarded lowering the cost of package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m proposing that, when a transaction has already been submitted to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool, we would ignore both its fees and vsize when calculating package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate. In example G2, we shouldn&amp;#39;t count M1 fees after its submission to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool, since M1&amp;#39;s fees have already been used to pay for its individual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bandwidth, and it shouldn&amp;#39;t be used again to pay for P2 and P3&amp;#39;s bandwidth.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We also shouldn&amp;#39;t count its vsize, since it has already been paid for.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I think this is a footgunish API, as if a package issuer send the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; multiple-parent-one-child package A,B,C,D where D is the child of A,B,C.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Then try to broadcast the higher-feerate C&amp;#39;&#43;D&amp;#39; package, it should be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rejected. So it&amp;#39;s breaking the naive broadcaster assumption that a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; higher-feerate/higher-fee package always replaces ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Note that, if C&amp;#39; conflicts with C, it also conflicts with D, since D is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a descendant of C and would thus need to be evicted along with it.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Implicitly, D&amp;#39; would not be in conflict with D.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; More generally, this example is surprising to me because I didn&amp;#39;t think&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; packages would be used to fee-bump replaceable transactions. Do we want the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child to be able to replace mempool transactions as well? This can be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implemented with a bit of additional logic.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I think this is unsafe for L2s if counterparties have malleability of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the child transaction. They can block your package replacement by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; opting-out from RBF signaling. IIRC, LN&amp;#39;s &amp;#34;anchor output&amp;#34; presents such an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ability.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m not sure what you mean? Let&amp;#39;s say we have a package of parent A &#43;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child B, where A is supposed to replace a mempool transaction A&amp;#39;. Are you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; saying that counterparties are able to malleate the package child B, or a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child of A&amp;#39;? If they can malleate a child of A&amp;#39;, that shouldn&amp;#39;t matter as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; long as A&amp;#39; is signaling replacement. This would be handled identically with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; full RBF and what Core currently implements.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I think this is an issue brought by the trimming during the dedup&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; phase. If we preserve the package integrity, only re-using the tx-level&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; checks results of already in-mempool transactions to gain in CPU time we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; won&amp;#39;t have this issue. Package childs can add unconfirmed inputs as long as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; they&amp;#39;re in-package, the bip125 rule2 is only evaluated against parents ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Sorry, I don&amp;#39;t understand what you mean by &amp;#34;preserve the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; integrity?&amp;#34; Could you elaborate?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Let&amp;#39;s say you have in-mempool A, B where A pays 10 sat/vb for 100&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; vbytes and B pays 10 sat/vb for 100 vbytes. You have the candidate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replacement D spending both A and C where D pays 15sat/vb for 100 vbytes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and C pays 1 sat/vb for 1000 vbytes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Package A &#43; B ancestor score is 10 sat/vb.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; D has a higher feerate/absolute fee than B.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Package A &#43; C &#43; D ancestor score is ~ 3 sat/vb ((A&amp;#39;s 1000 sats &#43; C&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1000 sats &#43; D&amp;#39;s 1500 sats) / A&amp;#39;s 100 vb &#43; C&amp;#39;s 1000 vb &#43; D&amp;#39;s 100 vb)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I am in agreement with your calculations but unsure if we disagree on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the expected outcome. Yes, B has an ancestor score of 10sat/vb and D has an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ancestor score of ~2.9sat/vb. Since D&amp;#39;s ancestor score is lower than B&amp;#39;s,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; it fails the proposed package RBF Rule #2, so this package would be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; rejected. Does this meet your expectations?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thank you for linking to projects that might be interested in package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relay :)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Gloria&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Mon, Sep 20, 2021 at 12:16 AM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Gloria,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; A package may contain transactions that are already in the mempool. We&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; remove&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (&amp;#34;deduplicate&amp;#34;) those transactions from the package for the purposes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; mempool acceptance. If a package is empty after deduplication, we do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; nothing.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IIUC, you have a package A&#43;B&#43;C submitted for acceptance and A is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already in your mempool. You trim out A from the package and then evaluate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; B&#43;C.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think this might be an issue if A is the higher-fee element of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ABC package. B&#43;C package fees might be under the mempool min fee and will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be rejected, potentially breaking the acceptance expectations of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package issuer ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Further, I think the dedup should be done on wtxid, as you might have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; multiple valid witnesses. Though with varying vsizes and as such offering&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; different feerates.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; E.g you&amp;#39;re going to evaluate the package A&#43;B and A&amp;#39; is already in your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool with a bigger valid witness. You trim A based on txid, then you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; evaluate A&amp;#39;&#43;B, which fails the fee checks. However, evaluating A&#43;B would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; have been a success.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AFAICT, the dedup rationale would be to save on CPU time/IO disk, to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; avoid repeated signatures verification and parent UTXOs fetches ? Can we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; achieve the same goal by bypassing tx-level checks for already-in txn while&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; conserving the package integrity for package-level checks ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Note that it&amp;#39;s possible for the parents to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; indirect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; descendants/ancestors of one another, or for parent and child to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; share a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; parent,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; so we cannot make any other topology assumptions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m not clearly understanding the accepted topologies. By &amp;#34;parent and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child to share a parent&amp;#34;, do you mean the set of transactions A, B, C,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; where B is spending A and C is spending A and B would be correct ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If yes, is there a width-limit introduced or we fallback on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; MAX_PACKAGE_COUNT=25 ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IIRC, one rationale to come with this topology limitation was to lower&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the DoS risks when potentially deploying p2p packages.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Considering the current Core&amp;#39;s mempool acceptance rules, I think CPFP&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; batching is unsafe for LN time-sensitive closure. A malicious tx-relay&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; jamming successful on one channel commitment transaction would contamine&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the remaining commitments sharing the same package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; E.g, you broadcast the package A&#43;B&#43;C&#43;D&#43;E where A,B,C,D are commitment&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions and E a shared CPFP. If a malicious A&amp;#39; transaction has a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; better feerate than A, the whole package acceptance will fail. Even if A&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; confirms in the following block,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the propagation and confirmation of B&#43;C&#43;D have been delayed. This could&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; carry on a loss of funds.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; That said, if you&amp;#39;re broadcasting commitment transactions without&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; time-sensitive HTLC outputs, I think the batching is effectively a fee&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; saving as you don&amp;#39;t have to duplicate the CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; IMHO, I&amp;#39;m leaning towards deploying during a first phase&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1-parent/1-child. I think it&amp;#39;s the most conservative step still improving&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; second-layer safety.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; *Rationale*:  It would be incorrect to use the fees of transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; already in the mempool, as we do not want a transaction&amp;#39;s fees to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; double-counted for both its individual RBF and package RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m unsure about the logical order of the checks proposed.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If A&#43;B is submitted to replace A&amp;#39;, where A pays 0 sats, B pays 200 sats&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and A&amp;#39; pays 100 sats. If we apply the individual RBF on A, A&#43;B acceptance&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fails. For this reason I think the individual RBF should be bypassed and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; only the package RBF apply ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Note this situation is plausible, with current LN design, your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; counterparty can have a commitment transaction with a better fee just by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; selecting a higher `dust_limit_satoshis` than yours.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Examples F and G [14] show the same package, but P1 is submitted&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; individually before&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the package in example G. In example F, we can see that the 300vB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; an additional 200sat in fees, which is not enough to pay for its own&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; bandwidth&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; (BIP125#4). In example G, we can see that P1 pays enough to replace&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; M1, but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; using P1&amp;#39;s fees again during package submission would make it look&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; like a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; 300sat&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; increase for a 200vB package. Even including its fees and size would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; not be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; sufficient in this example, since the 300sat looks like enough for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the 300vB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; package. The calculcation after deduplication is 100sat increase for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; of size 200vB, which correctly fails BIP125#4. Assume all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; size of 100vB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What problem are you trying to solve by the package feerate *after*&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; dedup rule ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; My understanding is that an in-package transaction might be already in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the mempool. Therefore, to compute a correct RBF penalty replacement, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; vsize of this transaction could be discarded lowering the cost of package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If we keep a &amp;#34;safe&amp;#34; dedup mechanism (see my point above), I think this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; discount is justified, as the validation cost of node operators is paid for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; The child cannot replace mempool transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Let&amp;#39;s say you issue package A&#43;B, then package C&#43;B&amp;#39;, where B&amp;#39; is a child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of both A and C. This rule fails the acceptance of C&#43;B&amp;#39; ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think this is a footgunish API, as if a package issuer send the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; multiple-parent-one-child package A,B,C,D where D is the child of A,B,C.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Then try to broadcast the higher-feerate C&amp;#39;&#43;D&amp;#39; package, it should be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; rejected. So it&amp;#39;s breaking the naive broadcaster assumption that a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; higher-feerate/higher-fee package always replaces ? And it might be unsafe&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in protocols where states are symmetric. E.g a malicious counterparty&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; broadcasts first S&#43;A, then you honestly broadcast S&#43;B, where B pays better&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fees.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; All mempool transactions to be replaced must signal replaceability.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think this is unsafe for L2s if counterparties have malleability of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the child transaction. They can block your package replacement by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; opting-out from RBF signaling. IIRC, LN&amp;#39;s &amp;#34;anchor output&amp;#34; presents such an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ability.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think it&amp;#39;s better to either fix inherited signaling or move towards&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; full-rbf.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; if a package parent has already been submitted, it would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; look&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;like the child is spending a &amp;#34;new&amp;#34; unconfirmed input.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I think this is an issue brought by the trimming during the dedup&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; phase. If we preserve the package integrity, only re-using the tx-level&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; checks results of already in-mempool transactions to gain in CPU time we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; won&amp;#39;t have this issue. Package childs can add unconfirmed inputs as long as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; they&amp;#39;re in-package, the bip125 rule2 is only evaluated against parents ?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; However, we still achieve the same goal of requiring the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; transactions to have a ancestor score at least as high as the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; ones.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m not sure if this holds...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Let&amp;#39;s say you have in-mempool A, B where A pays 10 sat/vb for 100&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; vbytes and B pays 10 sat/vb for 100 vbytes. You have the candidate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replacement D spending both A and C where D pays 15sat/vb for 100 vbytes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and C pays 1 sat/vb for 1000 vbytes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Package A &#43; B ancestor score is 10 sat/vb.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; D has a higher feerate/absolute fee than B.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Package A &#43; C &#43; D ancestor score is ~ 3 sat/vb ((A&amp;#39;s 1000 sats &#43; C&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1000 sats &#43; D&amp;#39;s 1500 sats) /&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; A&amp;#39;s 100 vb &#43; C&amp;#39;s 1000 vb &#43; D&amp;#39;s 100 vb)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Overall, this is a review through the lenses of LN requirements. I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; think other L2 protocols/applications&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; could be candidates to using package accept/relay such as:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/lightninglabs/pool&#34;&gt;https://github.com/lightninglabs/pool&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/bitcoin-teleport/teleport-transactions/&#34;&gt;https://github.com/bitcoin-teleport/teleport-transactions/&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/sapio-lang/sapio&#34;&gt;https://github.com/sapio-lang/sapio&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/commerceblock/mercury/blob/master/doc/statechains.md&#34;&gt;https://github.com/commerceblock/mercury/blob/master/doc/statechains.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/revault/practical-revault&#34;&gt;https://github.com/revault/practical-revault&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks for rolling forward the ball on this subject.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Le jeu. 16 sept. 2021 à 03:55, Gloria Zhao via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi there,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m writing to propose a set of mempool policy changes to enable&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; validation (in preparation for package relay) in Bitcoin Core. These&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be consensus or P2P protocol changes. However, since mempool policy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; significantly affects transaction propagation, I believe this is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relevant for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the mailing list.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; My proposal enables packages consisting of multiple parents and 1&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child. If you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; develop software that relies on specific transaction relay assumptions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and/or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; are interested in using package relay in the future, I&amp;#39;m very&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; interested to hear&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; your feedback on the utility or restrictiveness of these package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; policies for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; your use cases.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; A draft implementation of this proposal can be found in [Bitcoin Core&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; PR#22290][1].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; An illustrated version of this post can be found at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/glozow/dc4e9d5c5b14ade7cdfac40f43adb18a&#34;&gt;https://gist.github.com/glozow/dc4e9d5c5b14ade7cdfac40f43adb18a&lt;/a&gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I have also linked the images below.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ## Background&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Feel free to skip this section if you are already familiar with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool policy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and package relay terminology.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Terminology Clarifications&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Package = an ordered list of related transactions, representable by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a Directed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   Acyclic Graph.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Package Feerate = the total modified fees divided by the total&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; virtual size of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   all transactions in the package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     - Modified fees = a transaction&amp;#39;s base fees &#43; fee delta applied by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the user&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;       with `prioritisetransaction`. As such, we expect this to vary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; across&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempools.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     - Virtual Size = the maximum of virtual sizes calculated using&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [BIP141&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;       virtual size][2] and sigop weight. [Implemented here in Bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Core][3].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     - Note that feerate is not necessarily based on the base fees and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; serialized&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;       size.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Fee-Bumping = user/wallet actions that take advantage of miner&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; incentives to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   boost a transaction&amp;#39;s candidacy for inclusion in a block, including&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Child Pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; for Parent (CPFP) and [BIP125][12] Replace-by-Fee (RBF). Our intention&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool policy is to recognize when the new transaction is more&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; economical to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mine than the original one(s) but not open DoS vectors, so there are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; limitations.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Policy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The purpose of the mempool is to store the best (to be most&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; incentive-compatible&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; with miners, highest feerate) candidates for inclusion in a block.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Miners use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the mempool to build block templates. The mempool is also useful as a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cache for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; boosting block relay and validation performance, aiding transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relay, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; generating feerate estimations.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Ideally, all consensus-valid transactions paying reasonable fees&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; should make it&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to miners through normal transaction relay, without any special&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; connectivity or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relationships with miners. On the other hand, nodes do not have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; unlimited&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; resources, and a P2P network designed to let any honest node broadcast&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions also exposes the transaction validation engine to DoS&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; attacks from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; malicious peers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; As such, for unconfirmed transactions we are considering for our&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool, we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; apply a set of validation rules in addition to consensus, primarily to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; protect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; us from resource exhaustion and aid our efforts to keep the highest fee&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions. We call this mempool _policy_: a set of (configurable,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; node-specific) rules that transactions must abide by in order to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accepted&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; into our mempool. Transaction &amp;#34;Standardness&amp;#34; rules and mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; restrictions such&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; as &amp;#34;too-long-mempool-chain&amp;#34; are both examples of policy.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Package Relay and Package Mempool Accept&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; In transaction relay, we currently consider transactions one at a time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; submission to the mempool. This creates a limitation in the node&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ability to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; determine which transactions have the highest feerates, since we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cannot take&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; into account descendants (i.e. cannot use CPFP) until all the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the mempool. Similarly, we cannot use a transaction&amp;#39;s descendants&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; when&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; considering it for RBF. When an individual transaction does not meet&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; minimum feerate and the user isn&amp;#39;t able to create a replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; directly, it will not be accepted by mempools.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This limitation presents a security issue for applications and users&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relying on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; time-sensitive transactions. For example, Lightning and other&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; protocols create&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; UTXOs with multiple spending paths, where one counterparty&amp;#39;s spending&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; path opens&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; up after a timelock, and users are protected from cheating scenarios&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; as long as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; they redeem on-chain in time. A key security assumption is that all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; parties&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions will propagate and confirm in a timely manner. This&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; assumption can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be broken if fee-bumping does not work as intended.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The end goal for Package Relay is to consider multiple transactions at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the same&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; time, e.g. a transaction with its high-fee child. This may help us&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; better&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; determine whether transactions should be accepted to our mempool,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; especially if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; they don&amp;#39;t meet fee requirements individually or are better RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; candidates as a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package. A combination of changes to mempool validation logic, policy,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction relay allows us to better propagate the transactions with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; highest package feerates to miners, and makes fee-bumping tools more&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; powerful&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; for users.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The &amp;#34;relay&amp;#34; part of Package Relay suggests P2P messaging changes, but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a large&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; part of the changes are in the mempool&amp;#39;s package validation logic. We&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; call this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Package Mempool Accept*.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Previous Work&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Given that mempool validation is DoS-sensitive and complex, it would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   dangerous to haphazardly tack on package validation logic. Many&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; efforts have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; been made to make mempool validation less opaque (see [#16400][4],&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [#21062][5],&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [#22675][6], [#22796][7]).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * [#20833][8] Added basic capabilities for package validation, test&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accepts only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   (no submission to mempool).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * [#21800][9] Implemented package ancestor/descendant limit checks for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; arbitrary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   packages. Still test accepts only.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; * Previous package relay proposals (see [#16401][10], [#19621][11]).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Existing Package Rules&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; These are in master as introduced in [#20833][8] and [#21800][9]. I&amp;#39;ll&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; consider&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; them as &amp;#34;given&amp;#34; in the rest of this document, though they can be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changed, since&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package validation is test-accept only right now.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. A package cannot exceed `MAX_PACKAGE_COUNT=25` count and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; `MAX_PACKAGE_SIZE=101KvB` total size [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;    *Rationale*: This is already enforced as mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor/descendant limits.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Presumably, transactions in a package are all related, so exceeding&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; this limit&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would mean that the package can either be split up or it wouldn&amp;#39;t pass&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool policy.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. Packages must be topologically sorted: if any dependencies exist&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; between&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions, parents must appear somewhere before children. [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 3. A package cannot have conflicting transactions, i.e. none of them&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; can spend&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the same inputs. This also means there cannot be duplicate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions. [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 4. When packages are evaluated against ancestor/descendant limits in a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; test&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accept, the union of all of their descendants and ancestors is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; considered. This&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is essentially a &amp;#34;worst case&amp;#34; heuristic where every transaction in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is treated as each other&amp;#39;s ancestor and descendant. [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Packages for which ancestor/descendant limits are accurately captured&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; by this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; heuristic: [19]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There are also limitations such as the fact that CPFP carve out is not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; applied&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to package transactions. #20833 also disables RBF in package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; validation; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; proposal overrides that to allow packages to use RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ## Proposed Changes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The next step in the Package Mempool Accept project is to implement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; submission&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to mempool, initially through RPC only. This allows us to test the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; submission&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; logic before exposing it on P2P.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Summary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - Packages may contain already-in-mempool transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - Packages are 2 generations, Multi-Parent-1-Child.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - Fee-related checks use the package feerate. This means that wallets&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; create a package that utilizes CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - Parents are allowed to RBF mempool transactions with a set of rules&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; similar&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   to BIP125. This enables a combination of CPFP and RBF, where a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction&amp;#39;s descendant fees pay for replacing mempool conflicts.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There is a draft implementation in [#22290][1]. It is WIP, but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feedback is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; always welcome.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Details&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #### Packages May Contain Already-in-Mempool Transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; A package may contain transactions that are already in the mempool. We&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; remove&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (&amp;#34;deduplicate&amp;#34;) those transactions from the package for the purposes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool acceptance. If a package is empty after deduplication, we do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; nothing.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Mempools vary across the network. It&amp;#39;s possible for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; parent to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; accepted to the mempool of a peer on its own due to differences in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; policy and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fee market fluctuations. We should not reject or penalize the entire&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; an individual transaction as that could be a censorship vector.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #### Packages Are Multi-Parent-1-Child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Only packages of a specific topology are permitted. Namely, a package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is exactly&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1 child with all of its unconfirmed parents. After deduplication, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; may be exactly the same, empty, 1 child, 1 child with just some of its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; unconfirmed parents, etc. Note that it&amp;#39;s possible for the parents to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be indirect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; descendants/ancestors of one another, or for parent and child to share&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a parent,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; so we cannot make any other topology assumptions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: This allows for fee-bumping by CPFP. Allowing multiple&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; parents&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; makes it possible to fee-bump a batch of transactions. Restricting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; packages to a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; defined topology is also easier to reason about and simplifies the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; validation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; logic greatly. Multi-parent-1-child allows us to think of the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; as one big&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction, where:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - Inputs = all the inputs of parents &#43; inputs of the child that come&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   confirmed UTXOs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - Outputs = all the outputs of the child &#43; all outputs of the parents&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   aren&amp;#39;t spent by other transactions in the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Examples of packages that follow this rule (variations of example A&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; show some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; possibilities after deduplication): ![image][15]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #### Fee-Related Checks Use Package Feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Package Feerate = the total modified fees divided by the total virtual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; size of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; all transactions in the package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To meet the two feerate requirements of a mempool, i.e., the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; pre-configured&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; minimum relay feerate (`minRelayTxFee`) and dynamic mempool minimum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; total package feerate is used instead of the individual feerate. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; individual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions are allowed to be below feerate requirements if the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package meets&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the feerate requirements. For example, the parent(s) in the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; can have 0&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; fees but be paid for by the child.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: This can be thought of as &amp;#34;CPFP within a package,&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; solving the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; issue of a parent not meeting minimum fees on its own. This allows L2&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; applications to adjust their fees at broadcast time instead of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; overshooting or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; risking getting stuck/pinned.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; We use the package feerate of the package *after deduplication*.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*:  It would be incorrect to use the fees of transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already in the mempool, as we do not want a transaction&amp;#39;s fees to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; double-counted for both its individual RBF and package RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Examples F and G [14] show the same package, but P1 is submitted&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; individually before&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the package in example G. In example F, we can see that the 300vB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; an additional 200sat in fees, which is not enough to pay for its own&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bandwidth&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (BIP125#4). In example G, we can see that P1 pays enough to replace&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; M1, but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; using P1&amp;#39;s fees again during package submission would make it look&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; like a 300sat&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; increase for a 200vB package. Even including its fees and size would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; not be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; sufficient in this example, since the 300sat looks like enough for the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 300vB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package. The calculcation after deduplication is 100sat increase for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of size 200vB, which correctly fails BIP125#4. Assume all transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; have a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; size of 100vB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #### Package RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If a package meets feerate requirements as a package, the parents in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction are allowed to replace-by-fee mempool transactions. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child cannot&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replace mempool transactions. Multiple transactions can replace the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; same&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction, but in order to be valid, none of the transactions can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; try to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replace an ancestor of another transaction in the same package (which&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would thus&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; make its inputs unavailable).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Even if we are using package feerate, a package will not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; propagate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; as intended if RBF still requires each individual transaction to meet&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate requirements.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; We use a set of rules slightly modified from BIP125 as follows:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ##### Signaling (Rule #1)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; All mempool transactions to be replaced must signal replaceability.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Package RBF signaling logic should be the same for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package RBF and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; single transaction acceptance. This would be updated if single&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; validation moves to full RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ##### New Unconfirmed Inputs (Rule #2)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; A package may include new unconfirmed inputs, but the ancestor feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child must be at least as high as the ancestor feerates of every&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; being replaced. This is contrary to BIP125#2, which states &amp;#34;The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction may only include an unconfirmed input if that input was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; included in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; one of the original transactions. (An unconfirmed input spends an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; output from a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; currently-unconfirmed transaction.)&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: The purpose of BIP125#2 is to ensure that the replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction has a higher ancestor score than the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transaction(s) (see&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [comment][13]). Example H [16] shows how adding a new unconfirmed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; input can lower the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor score of the replacement transaction. P1 is trying to replace&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; M1, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; spends an unconfirmed output of M2. P1 pays 800sat, M1 pays 600sat,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and M2 pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 100sat. Assume all transactions have a size of 100vB. While, in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; isolation, P1&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; looks like a better mining candidate than M1, it must be mined with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; M2, so its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor feerate is actually 4.5sat/vB.  This is lower than M1&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate, which is 6sat/vB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; In package RBF, the rule analogous to BIP125#2 would be &amp;#34;none of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions in the package can spend new unconfirmed inputs.&amp;#34; Example&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; J [17] shows&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; why, if any of the package transactions have ancestors, package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate is no&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; longer accurate. Even though M2 and M3 are not ancestors of P1 (which&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replacement transaction in an RBF), we&amp;#39;re actually interested in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; entire&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package. A miner should mine M1 which is 5sat/vB instead of M2, M3,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; P1, P2, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; P3, which is only 4sat/vB. The Package RBF rule cannot be loosened to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; only allow&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the child to have new unconfirmed inputs, either, because it can still&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cause us&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to overestimate the package&amp;#39;s ancestor score.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; However, enforcing a rule analogous to BIP125#2 would not only make&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Package RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; less useful, but would also break Package RBF for packages with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; parents already&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in the mempool: if a package parent has already been submitted, it&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; would look&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; like the child is spending a &amp;#34;new&amp;#34; unconfirmed input. In example K&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [18], we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; looking to replace M1 with the entire package including P1, P2, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; P3. We must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; consider the case where one of the parents is already in the mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (in this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; case, P2), which means we must allow P3 to have new unconfirmed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; inputs. However,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; M2 lowers the ancestor score of P3 to 4.3sat/vB, so we should not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replace M1&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; with this package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thus, the package RBF rule regarding new unconfirmed inputs is less&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; strict than&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BIP125#2. However, we still achieve the same goal of requiring the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions to have a ancestor score at least as high as the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ones. As&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; a result, the entire package is required to be a higher feerate mining&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; candidate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; than each of the replaced transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Another note: the [comment][13] above the BIP125#2 code in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; original RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; implementation suggests that the rule was intended to be temporary.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ##### Absolute Fee (Rule #3)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The package must increase the absolute fee of the mempool, i.e. the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; total fees&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; of the package must be higher than the absolute fees of the mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; it replaces. Combined with the CPFP rule above, this differs from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BIP125 Rule #3&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - an individual transaction in the package may have lower fees than the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;   transaction(s) it is replacing. In fact, it may have 0 fees, and the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; pays for RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ##### Feerate (Rule #4)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The package must pay for its own bandwidth; the package feerate must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be higher&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; than the replaced transactions by at least minimum relay feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (`incrementalRelayFee`). Combined with the CPFP rule above, this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; differs from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BIP125 Rule #4 - an individual transaction in the package can have a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; lower&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate than the transaction(s) it is replacing. In fact, it may have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 0 fees,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and the child pays for RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ##### Total Number of Replaced Transactions (Rule #5)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The package cannot replace more than 100 mempool transactions. This is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; identical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; to BIP125 Rule #5.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ### Expected FAQs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1. Is it possible for only some of the package to make it into the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; mempool?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;    Yes, it is. However, since we evict transactions from the mempool by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; descendant score and the package child is supposed to be sponsoring&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the fees of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; its parents, the most common scenario would be all-or-nothing. This is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; incentive-compatible. In fact, to be conservative, package validation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; begin by trying to submit all of the transactions individually, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; only use the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; package mempool acceptance logic if the parents fail due to low&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feerate.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2. Should we allow packages to contain already-confirmed transactions?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;     No, for practical reasons. In mempool validation, we actually&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; aren&amp;#39;t able to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tell with 100% confidence if we are looking at a transaction that has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; confirmed, because we look up inputs using a UTXO set. If we have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; historical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; block data, it&amp;#39;s possible to look for it, but this is inefficient, not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; always&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; possible for pruning nodes, and unnecessary because we&amp;#39;re not going to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; anything with the transaction anyway. As such, we already have the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; expectation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; that transaction relay is somewhat &amp;#34;stateful&amp;#34; i.e. nobody should be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relaying&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; transactions that have already been confirmed. Similarly, we shouldn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; relaying packages that contain already-confirmed transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [1]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22290&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22290&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [2]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/1f0b563738199ca60d32b4ba779797fc97d040fe/bip-0141.mediawiki#transaction-size-calculations&#34;&gt;https://github.com/bitcoin/bips/blob/1f0b563738199ca60d32b4ba779797fc97d040fe/bip-0141.mediawiki#transaction-size-calculations&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [3]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/94f83534e4b771944af7d9ed0f40746f392eb75e/src/policy/policy.cpp#L282&#34;&gt;https://github.com/bitcoin/bitcoin/blob/94f83534e4b771944af7d9ed0f40746f392eb75e/src/policy/policy.cpp#L282&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [4]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16400&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16400&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [5]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/21062&#34;&gt;https://github.com/bitcoin/bitcoin/pull/21062&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [6]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22675&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22675&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [7]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22796&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22796&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [8]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/20833&#34;&gt;https://github.com/bitcoin/bitcoin/pull/20833&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [9]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/21800&#34;&gt;https://github.com/bitcoin/bitcoin/pull/21800&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [10]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16401&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16401&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [11]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/19621&#34;&gt;https://github.com/bitcoin/bitcoin/pull/19621&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [12]: &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;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [13]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/6871/files#diff-34d21af3c614ea3cee120df276c9c4ae95053830d7f1d3deaf009a4625409ad2R1101-R1104&#34;&gt;https://github.com/bitcoin/bitcoin/pull/6871/files#diff-34d21af3c614ea3cee120df276c9c4ae95053830d7f1d3deaf009a4625409ad2R1101-R1104&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [14]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567078-075a971c-0619-4339-9168-b41fd2b90c28.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [15]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/132856734-fc17da75-f875-44bb-b954-cb7a1725cc0d.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [16]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567347-a3e2e4a8-ae9c-49f8-abb9-81e8e0aba224.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [17]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567370-21566d0e-36c8-4831-b1a8-706634540af3.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [18]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567444-bfff1142-439f-4547-800a-2ba2b0242bcb.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [19]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133456219-0bb447cb-dcb4-4a31-b9c1-7d86205b68bc.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [20]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/132857787-7b7c6f56-af96-44c8-8d78-983719888c19.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;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/20210926/16f08de9/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210926/16f08de9/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:59:20&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv3ugsfntv7d7kdj3xk634za9eex8vaeu6fhepzn5vhlk7jgqu0aqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zaur835</id>
    
      <title type="html">📅 Original date posted:2021-09-23 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv3ugsfntv7d7kdj3xk634za9eex8vaeu6fhepzn5vhlk7jgqu0aqzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zaur835" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsddc6c6t6rj96akpec5agz8s4khlm3l5nqhnv6phruzu2qdw3ju7czpx33f&#39;&gt;nevent1q…x33f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-09-23&lt;br/&gt;📝 Original message:&amp;gt; Correct, if B&#43;C is too low feerate to be accepted, we will reject it. I&lt;br/&gt;&amp;gt; prefer this because it is incentive compatible: A can be mined by itself,&lt;br/&gt;&amp;gt; so there&amp;#39;s no reason to prefer A&#43;B&#43;C instead of A.&lt;br/&gt;&amp;gt; As another way of looking at this, consider the case where we do accept&lt;br/&gt;&amp;gt; A&#43;B&#43;C and it sits at the &amp;#34;bottom&amp;#34; of our mempool. If our mempool reaches&lt;br/&gt;&amp;gt; capacity, we evict the lowest descendant feerate transactions, which are&lt;br/&gt;&amp;gt; B&#43;C in this case. This gives us the same resulting mempool, with A and not&lt;br/&gt;&amp;gt; B&#43;C.&lt;br/&gt;&lt;br/&gt;I agree here. Doing otherwise, we might evict other transactions mempool in&lt;br/&gt;`MempoolAccept::Finalize` with a higher-feerate than B&#43;C while those&lt;br/&gt;evicted transactions are the most compelling for block construction.&lt;br/&gt;&lt;br/&gt;I thought at first missing this acceptance requirement would break a&lt;br/&gt;fee-bumping scheme like Parent-Pay-For-Child where a high-fee parent is&lt;br/&gt;attached to a child signed with SIGHASH_ANYONECANPAY but in this case the&lt;br/&gt;child fee is capturing the parent value. I can&amp;#39;t think of other fee-bumping&lt;br/&gt;schemes potentially affected. If they do exist I would say they&amp;#39;re wrong in&lt;br/&gt;their design assumptions.&lt;br/&gt;&lt;br/&gt;&amp;gt; If or when we have witness replacement, the logic is: if the individual&lt;br/&gt;&amp;gt; transaction is enough to replace the mempool one, the replacement will&lt;br/&gt;&amp;gt; happen during the preceding individual transaction acceptance, and&lt;br/&gt;&amp;gt; deduplication logic will work. Otherwise, we will try to deduplicate by&lt;br/&gt;&amp;gt; wtxid, see that we need a package witness replacement, and use the package&lt;br/&gt;&amp;gt; feerate to evaluate whether this is economically rational.&lt;br/&gt;&lt;br/&gt;IIUC, you have package A&#43;B, during the dedup phase early in&lt;br/&gt;`AcceptMultipleTransactions` if you observe same-txid-different-wtixd A&amp;#39;&lt;br/&gt;and A&amp;#39; is higher feerate than A, you trim A and replace by A&amp;#39; ?&lt;br/&gt;&lt;br/&gt;I think this approach is safe, the one who appears unsafe to me is when A&amp;#39;&lt;br/&gt;has a _lower_ feerate, even if A&amp;#39; is already accepted by our mempool ? In&lt;br/&gt;that case iirc that would be a pinning.&lt;br/&gt;&lt;br/&gt;Good to see progress on witness replacement before we see usage of Taproot&lt;br/&gt;tree in the context of multi-party, where a malicious counterparty inflates&lt;br/&gt;its witness to jam a honest spending.&lt;br/&gt;&lt;br/&gt;(Note, the commit linked currently points nowhere :))&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Please note that A may replace A&amp;#39; even if A&amp;#39; has higher fees than A&lt;br/&gt;&amp;gt; individually, because the proposed package RBF utilizes the fees and size&lt;br/&gt;&amp;gt; of the entire package. This just requires E to pay enough fees, although&lt;br/&gt;&amp;gt; this can be pretty high if there are also potential B&amp;#39; and C&amp;#39; competing&lt;br/&gt;&amp;gt; commitment transactions that we don&amp;#39;t know about.&lt;br/&gt;&lt;br/&gt;Ah right, if the package acceptance waives `PaysMoreThanConflicts` for the&lt;br/&gt;individual check on A, the honest package should replace the pinning&lt;br/&gt;attempt. I&amp;#39;ve not fully parsed the proposed implementation yet.&lt;br/&gt;&lt;br/&gt;Though note, I think it&amp;#39;s still unsafe for a Lightning&lt;br/&gt;multi-commitment-broadcast-as-one-package as a malicious A&amp;#39; might have an&lt;br/&gt;absolute fee higher than E. It sounds uneconomical for&lt;br/&gt;an attacker but I think it&amp;#39;s not when you consider than you can &amp;#34;batch&amp;#34;&lt;br/&gt;attack against multiple honest counterparties. E.g, Mallory broadcast A&amp;#39; &#43;&lt;br/&gt;B&amp;#39; &#43; C&amp;#39; &#43; D&amp;#39; where A&amp;#39; conflicts with Alice&amp;#39;s honest package P1, B&amp;#39;&lt;br/&gt;conflicts with Bob&amp;#39;s honest package P2, C&amp;#39; conflicts with Caroll&amp;#39;s honest&lt;br/&gt;package P3. And D&amp;#39; is a high-fee child of A&amp;#39; &#43; B&amp;#39; &#43; C&amp;#39;.&lt;br/&gt;&lt;br/&gt;If D&amp;#39; is higher-fee than P1 or P2 or P3 but inferior to the sum of HTLCs&lt;br/&gt;confirmed by P1&#43;P2&#43;P3, I think it&amp;#39;s lucrative for the attacker ?&lt;br/&gt;&lt;br/&gt;&amp;gt; So far, my understanding is that multi-parent-1-child is desired for&lt;br/&gt;&amp;gt; batched fee-bumping (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&lt;/a&gt;) and&lt;br/&gt;&amp;gt; I&amp;#39;ve also seen your response which I have less context on (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&lt;/a&gt;).&lt;br/&gt;That&lt;br/&gt;&amp;gt; being said, I am happy to create a new proposal for 1 parent &#43; 1 child&lt;br/&gt;&amp;gt; (which would be slightly simpler) and plan for moving to&lt;br/&gt;&amp;gt; multi-parent-1-child later if that is preferred. I am very interested in&lt;br/&gt;&amp;gt; hearing feedback on that approach.&lt;br/&gt;&lt;br/&gt;I think batched fee-bumping is okay as long as you don&amp;#39;t have&lt;br/&gt;time-sensitive outputs encumbering your commitment transactions. For the&lt;br/&gt;reasons mentioned above, I think that&amp;#39;s unsafe.&lt;br/&gt;&lt;br/&gt;What I&amp;#39;m worried about is  L2 developers, potentially not aware about all&lt;br/&gt;the mempool subtleties blurring the difference and always batching their&lt;br/&gt;broadcast by default.&lt;br/&gt;&lt;br/&gt;IMO, a good thing by restraining to 1-parent &#43; 1 child,  we artificially&lt;br/&gt;constraint L2 design space for now and minimize risks of unsafe usage of&lt;br/&gt;the package API :)&lt;br/&gt;&lt;br/&gt;I think that&amp;#39;s a point where it would be relevant to have the opinion of&lt;br/&gt;more L2 devs.&lt;br/&gt;&lt;br/&gt;&amp;gt; I think there is a misunderstanding here - let me describe what I&amp;#39;m&lt;br/&gt;&amp;gt; proposing we&amp;#39;d do in this situation: we&amp;#39;ll try individual submission for&lt;br/&gt;A,&lt;br/&gt;&amp;gt; see that it fails due to &amp;#34;insufficient fees.&amp;#34; Then, we&amp;#39;ll try package&lt;br/&gt;&amp;gt; validation for A&#43;B and use package RBF. If A&#43;B pays enough, it can still&lt;br/&gt;&amp;gt; replace A&amp;#39;. If A fails for a bad signature, we won&amp;#39;t look at B or A&#43;B.&lt;br/&gt;Does&lt;br/&gt;&amp;gt; this meet your expectations?&lt;br/&gt;&lt;br/&gt;Yes there was a misunderstanding, I think this approach is correct, it&amp;#39;s&lt;br/&gt;more a question of performance. Do we assume that broadcasted packages are&lt;br/&gt;&amp;#34;honest&amp;#34; by default and that the parent(s) always need the child to pass&lt;br/&gt;the fee checks, that way saving the processing of individual transactions&lt;br/&gt;which are expected to fail in 99% of cases or more ad hoc composition of&lt;br/&gt;packages at relay ?&lt;br/&gt;&lt;br/&gt;I think this point is quite dependent on the p2p packages format/logic&lt;br/&gt;we&amp;#39;ll end up on and that we should feel free to revisit it later ?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; What problem are you trying to solve by the package feerate *after* dedup&lt;br/&gt;rule ?&lt;br/&gt;&amp;gt; My understanding is that an in-package transaction might be already in&lt;br/&gt;the mempool. Therefore, to compute a correct RBF penalty replacement, the&lt;br/&gt;vsize of this transaction could be discarded lowering the cost of package&lt;br/&gt;RBF.&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m proposing that, when a transaction has already been submitted to&lt;br/&gt;&amp;gt; mempool, we would ignore both its fees and vsize when calculating package&lt;br/&gt;&amp;gt; feerate.&lt;br/&gt;&lt;br/&gt;Yes, if you receive A&#43;B, and A is already in-mempoo, I agree you can&lt;br/&gt;discard its feerate as B should pay for all fees checked on its own. Where&lt;br/&gt;I&amp;#39;m unclear is when you have in-mempool A&#43;B and receive A&#43;B&amp;#39;. Should B&amp;#39;&lt;br/&gt;have a fee high enough to cover the bandwidth penalty replacement&lt;br/&gt;(`PaysForRBF`, 2nd check) of both A&#43;B&amp;#39; or only B&amp;#39; ?&lt;br/&gt;&lt;br/&gt;If you have a second-layer like current Lightning, you might have a&lt;br/&gt;counterparty commitment to replace and should always expect to have to pay&lt;br/&gt;for parent replacement bandwidth.&lt;br/&gt;&lt;br/&gt;Where a potential discount sounds interesting is when you have an univoque&lt;br/&gt;state on the first-stage of transactions. E.g DLC&amp;#39;s funding transaction&lt;br/&gt;which might be CPFP by any participant iirc.&lt;br/&gt;&lt;br/&gt;&amp;gt; Note that, if C&amp;#39; conflicts with C, it also conflicts with D, since D is a&lt;br/&gt;&amp;gt; descendant of C and would thus need to be evicted along with it.&lt;br/&gt;&lt;br/&gt;Ah once again I think it&amp;#39;s a misunderstanding without the code under my&lt;br/&gt;eyes! If we do C&amp;#39; `PreChecks`, solve the conflicts provoked by it, i.e mark&lt;br/&gt;for potential eviction D and don&amp;#39;t consider it for future conflicts in the&lt;br/&gt;rest of the package, I think D&amp;#39; `PreChecks` should be good ?&lt;br/&gt;&lt;br/&gt;&amp;gt; More generally, this example is surprising to me because I didn&amp;#39;t think&lt;br/&gt;&amp;gt; packages would be used to fee-bump replaceable transactions. Do we want&lt;br/&gt;the&lt;br/&gt;&amp;gt; child to be able to replace mempool transactions as well?&lt;br/&gt;&lt;br/&gt;If we mean when you have replaceable A&#43;B then A&amp;#39;&#43;B&amp;#39; try to replace with a&lt;br/&gt;higher-feerate ? I think that&amp;#39;s exactly the case we need for Lightning as&lt;br/&gt;A&#43;B is coming from Alice and A&amp;#39;&#43;B&amp;#39; is coming from Bob :/&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m not sure what you mean? Let&amp;#39;s say we have a package of parent A &#43;&lt;br/&gt;child&lt;br/&gt;&amp;gt; B, where A is supposed to replace a mempool transaction A&amp;#39;. Are you saying&lt;br/&gt;&amp;gt; that counterparties are able to malleate the package child B, or a child&lt;br/&gt;of&lt;br/&gt;&amp;gt; A&amp;#39;?&lt;br/&gt;&lt;br/&gt;The second option, a child of A&amp;#39;, In the LN case I think the CPFP is&lt;br/&gt;attached on one&amp;#39;s anchor output.&lt;br/&gt;&lt;br/&gt;I think it&amp;#39;s good if we assume the&lt;br/&gt;solve-conflicts-after-parent&amp;#39;s`&amp;#39;PreChecks` mentioned above or fixing&lt;br/&gt;inherited signaling or full-rbf ?&lt;br/&gt;&lt;br/&gt;&amp;gt; Sorry, I don&amp;#39;t understand what you mean by &amp;#34;preserve the package&lt;br/&gt;&amp;gt; integrity?&amp;#34; Could you elaborate?&lt;br/&gt;&lt;br/&gt;After thinking the relaxation about the &amp;#34;new&amp;#34; unconfirmed input is not&lt;br/&gt;linked to trimming but I would say more to the multi-parent support.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say you have A&#43;B trying to replace C&#43;D where B is also spending&lt;br/&gt;already in-mempool E. To succeed, you need to waive the no-new-unconfirmed&lt;br/&gt;input as D isn&amp;#39;t spending E.&lt;br/&gt;&lt;br/&gt;So good, I think we agree on the problem description here.&lt;br/&gt;&lt;br/&gt;&amp;gt; I am in agreement with your calculations but unsure if we disagree on the&lt;br/&gt;&amp;gt; expected outcome. Yes, B has an ancestor score of 10sat/vb and D has an&lt;br/&gt;&amp;gt; ancestor score of ~2.9sat/vb. Since D&amp;#39;s ancestor score is lower than B&amp;#39;s,&lt;br/&gt;&amp;gt; it fails the proposed package RBF Rule #2, so this package would be&lt;br/&gt;&amp;gt; rejected. Does this meet your expectations?&lt;br/&gt;&lt;br/&gt;Well what sounds odd to me, in my example, we fail D even if it has a&lt;br/&gt;higher-fee than B. Like A&#43;B absolute fees are 2000 sats and A&#43;C&#43;D absolute&lt;br/&gt;fees are 4500 sats ?&lt;br/&gt;&lt;br/&gt;Is this compatible with a model where a miner prioritizes absolute fees&lt;br/&gt;over ancestor score, in the case that mempools aren&amp;#39;t full-enough to&lt;br/&gt;fulfill a block ?&lt;br/&gt;&lt;br/&gt;Let me know if I can clarify a point.&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le lun. 20 sept. 2021 à 11:10, Gloria Zhao &amp;lt;gloriajzhao at gmail.com&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First of all, thank you for the thorough review. I appreciate your insight&lt;br/&gt;&amp;gt; on LN requirements.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; IIUC, you have a package A&#43;B&#43;C submitted for acceptance and A is already&lt;br/&gt;&amp;gt; in your mempool. You trim out A from the package and then evaluate B&#43;C.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think this might be an issue if A is the higher-fee element of the ABC&lt;br/&gt;&amp;gt; package. B&#43;C package fees might be under the mempool min fee and will be&lt;br/&gt;&amp;gt; rejected, potentially breaking the acceptance expectations of the package&lt;br/&gt;&amp;gt; issuer ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Correct, if B&#43;C is too low feerate to be accepted, we will reject it. I&lt;br/&gt;&amp;gt; prefer this because it is incentive compatible: A can be mined by itself,&lt;br/&gt;&amp;gt; so there&amp;#39;s no reason to prefer A&#43;B&#43;C instead of A.&lt;br/&gt;&amp;gt; As another way of looking at this, consider the case where we do accept&lt;br/&gt;&amp;gt; A&#43;B&#43;C and it sits at the &amp;#34;bottom&amp;#34; of our mempool. If our mempool reaches&lt;br/&gt;&amp;gt; capacity, we evict the lowest descendant feerate transactions, which are&lt;br/&gt;&amp;gt; B&#43;C in this case. This gives us the same resulting mempool, with A and not&lt;br/&gt;&amp;gt; B&#43;C.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Further, I think the dedup should be done on wtxid, as you might have&lt;br/&gt;&amp;gt; multiple valid witnesses. Though with varying vsizes and as such offering&lt;br/&gt;&amp;gt; different feerates.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree that variations of the same package with different witnesses is a&lt;br/&gt;&amp;gt; case that must be handled. I consider witness replacement to be a project&lt;br/&gt;&amp;gt; that can be done in parallel to package mempool acceptance because being&lt;br/&gt;&amp;gt; able to accept packages does not worsen the problem of a&lt;br/&gt;&amp;gt; same-txid-different-witness &amp;#34;pinning&amp;#34; attack.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If or when we have witness replacement, the logic is: if the individual&lt;br/&gt;&amp;gt; transaction is enough to replace the mempool one, the replacement will&lt;br/&gt;&amp;gt; happen during the preceding individual transaction acceptance, and&lt;br/&gt;&amp;gt; deduplication logic will work. Otherwise, we will try to deduplicate by&lt;br/&gt;&amp;gt; wtxid, see that we need a package witness replacement, and use the package&lt;br/&gt;&amp;gt; feerate to evaluate whether this is economically rational.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; See the #22290 &amp;#34;handle package transactions already in mempool&amp;#34; commit (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22290/commits/fea75a2237b46cf76145242fecad7e274bfcb5ff&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22290/commits/fea75a2237b46cf76145242fecad7e274bfcb5ff&lt;/a&gt;),&lt;br/&gt;&amp;gt; which handles the case of same-txid-different-witness by simply using the&lt;br/&gt;&amp;gt; transaction in the mempool for now, with TODOs for what I just described.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I&amp;#39;m not clearly understanding the accepted topologies. By &amp;#34;parent and&lt;br/&gt;&amp;gt; child to share a parent&amp;#34;, do you mean the set of transactions A, B, C,&lt;br/&gt;&amp;gt; where B is spending A and C is spending A and B would be correct ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, that is what I meant. Yes, that would a valid package under these&lt;br/&gt;&amp;gt; rules.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If yes, is there a width-limit introduced or we fallback on&lt;br/&gt;&amp;gt; MAX_PACKAGE_COUNT=25 ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, there is no limit on connectivity other than &amp;#34;child with all&lt;br/&gt;&amp;gt; unconfirmed parents.&amp;#34; We will enforce MAX_PACKAGE_COUNT=25 and child&amp;#39;s&lt;br/&gt;&amp;gt; in-mempool &#43; in-package ancestor limits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Considering the current Core&amp;#39;s mempool acceptance rules, I think CPFP&lt;br/&gt;&amp;gt; batching is unsafe for LN time-sensitive closure. A malicious tx-relay&lt;br/&gt;&amp;gt; jamming successful on one channel commitment transaction would contamine&lt;br/&gt;&amp;gt; the remaining commitments sharing the same package.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; E.g, you broadcast the package A&#43;B&#43;C&#43;D&#43;E where A,B,C,D are commitment&lt;br/&gt;&amp;gt; transactions and E a shared CPFP. If a malicious A&amp;#39; transaction has a&lt;br/&gt;&amp;gt; better feerate than A, the whole package acceptance will fail. Even if A&amp;#39;&lt;br/&gt;&amp;gt; confirms in the following block,&lt;br/&gt;&amp;gt; the propagation and confirmation of B&#43;C&#43;D have been delayed. This could&lt;br/&gt;&amp;gt; carry on a loss of funds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please note that A may replace A&amp;#39; even if A&amp;#39; has higher fees than A&lt;br/&gt;&amp;gt; individually, because the proposed package RBF utilizes the fees and size&lt;br/&gt;&amp;gt; of the entire package. This just requires E to pay enough fees, although&lt;br/&gt;&amp;gt; this can be pretty high if there are also potential B&amp;#39; and C&amp;#39; competing&lt;br/&gt;&amp;gt; commitment transactions that we don&amp;#39;t know about.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; IMHO, I&amp;#39;m leaning towards deploying during a first phase&lt;br/&gt;&amp;gt; 1-parent/1-child. I think it&amp;#39;s the most conservative step still improving&lt;br/&gt;&amp;gt; second-layer safety.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So far, my understanding is that multi-parent-1-child is desired for&lt;br/&gt;&amp;gt; batched fee-bumping (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-897951289&lt;/a&gt;) and&lt;br/&gt;&amp;gt; I&amp;#39;ve also seen your response which I have less context on (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22674#issuecomment-900352202&lt;/a&gt;).&lt;br/&gt;&amp;gt; That being said, I am happy to create a new proposal for 1 parent &#43; 1 child&lt;br/&gt;&amp;gt; (which would be slightly simpler) and plan for moving to&lt;br/&gt;&amp;gt; multi-parent-1-child later if that is preferred. I am very interested in&lt;br/&gt;&amp;gt; hearing feedback on that approach.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If A&#43;B is submitted to replace A&amp;#39;, where A pays 0 sats, B pays 200 sats&lt;br/&gt;&amp;gt; and A&amp;#39; pays 100 sats. If we apply the individual RBF on A, A&#43;B acceptance&lt;br/&gt;&amp;gt; fails. For this reason I think the individual RBF should be bypassed and&lt;br/&gt;&amp;gt; only the package RBF apply ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think there is a misunderstanding here - let me describe what I&amp;#39;m&lt;br/&gt;&amp;gt; proposing we&amp;#39;d do in this situation: we&amp;#39;ll try individual submission for A,&lt;br/&gt;&amp;gt; see that it fails due to &amp;#34;insufficient fees.&amp;#34; Then, we&amp;#39;ll try package&lt;br/&gt;&amp;gt; validation for A&#43;B and use package RBF. If A&#43;B pays enough, it can still&lt;br/&gt;&amp;gt; replace A&amp;#39;. If A fails for a bad signature, we won&amp;#39;t look at B or A&#43;B. Does&lt;br/&gt;&amp;gt; this meet your expectations?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; What problem are you trying to solve by the package feerate *after*&lt;br/&gt;&amp;gt; dedup rule ?&lt;br/&gt;&amp;gt; &amp;gt; My understanding is that an in-package transaction might be already in&lt;br/&gt;&amp;gt; the mempool. Therefore, to compute a correct RBF penalty replacement, the&lt;br/&gt;&amp;gt; vsize of this transaction could be discarded lowering the cost of package&lt;br/&gt;&amp;gt; RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m proposing that, when a transaction has already been submitted to&lt;br/&gt;&amp;gt; mempool, we would ignore both its fees and vsize when calculating package&lt;br/&gt;&amp;gt; feerate. In example G2, we shouldn&amp;#39;t count M1 fees after its submission to&lt;br/&gt;&amp;gt; mempool, since M1&amp;#39;s fees have already been used to pay for its individual&lt;br/&gt;&amp;gt; bandwidth, and it shouldn&amp;#39;t be used again to pay for P2 and P3&amp;#39;s bandwidth.&lt;br/&gt;&amp;gt; We also shouldn&amp;#39;t count its vsize, since it has already been paid for.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think this is a footgunish API, as if a package issuer send the&lt;br/&gt;&amp;gt; multiple-parent-one-child package A,B,C,D where D is the child of A,B,C.&lt;br/&gt;&amp;gt; Then try to broadcast the higher-feerate C&amp;#39;&#43;D&amp;#39; package, it should be&lt;br/&gt;&amp;gt; rejected. So it&amp;#39;s breaking the naive broadcaster assumption that a&lt;br/&gt;&amp;gt; higher-feerate/higher-fee package always replaces ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that, if C&amp;#39; conflicts with C, it also conflicts with D, since D is a&lt;br/&gt;&amp;gt; descendant of C and would thus need to be evicted along with it.&lt;br/&gt;&amp;gt; Implicitly, D&amp;#39; would not be in conflict with D.&lt;br/&gt;&amp;gt; More generally, this example is surprising to me because I didn&amp;#39;t think&lt;br/&gt;&amp;gt; packages would be used to fee-bump replaceable transactions. Do we want the&lt;br/&gt;&amp;gt; child to be able to replace mempool transactions as well? This can be&lt;br/&gt;&amp;gt; implemented with a bit of additional logic.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think this is unsafe for L2s if counterparties have malleability of&lt;br/&gt;&amp;gt; the child transaction. They can block your package replacement by&lt;br/&gt;&amp;gt; opting-out from RBF signaling. IIRC, LN&amp;#39;s &amp;#34;anchor output&amp;#34; presents such an&lt;br/&gt;&amp;gt; ability.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m not sure what you mean? Let&amp;#39;s say we have a package of parent A &#43;&lt;br/&gt;&amp;gt; child B, where A is supposed to replace a mempool transaction A&amp;#39;. Are you&lt;br/&gt;&amp;gt; saying that counterparties are able to malleate the package child B, or a&lt;br/&gt;&amp;gt; child of A&amp;#39;? If they can malleate a child of A&amp;#39;, that shouldn&amp;#39;t matter as&lt;br/&gt;&amp;gt; long as A&amp;#39; is signaling replacement. This would be handled identically with&lt;br/&gt;&amp;gt; full RBF and what Core currently implements.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think this is an issue brought by the trimming during the dedup phase.&lt;br/&gt;&amp;gt; If we preserve the package integrity, only re-using the tx-level checks&lt;br/&gt;&amp;gt; results of already in-mempool transactions to gain in CPU time we won&amp;#39;t&lt;br/&gt;&amp;gt; have this issue. Package childs can add unconfirmed inputs as long as&lt;br/&gt;&amp;gt; they&amp;#39;re in-package, the bip125 rule2 is only evaluated against parents ?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sorry, I don&amp;#39;t understand what you mean by &amp;#34;preserve the package&lt;br/&gt;&amp;gt; integrity?&amp;#34; Could you elaborate?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Let&amp;#39;s say you have in-mempool A, B where A pays 10 sat/vb for 100 vbytes&lt;br/&gt;&amp;gt; and B pays 10 sat/vb for 100 vbytes. You have the candidate replacement D&lt;br/&gt;&amp;gt; spending both A and C where D pays 15sat/vb for 100 vbytes and C pays 1&lt;br/&gt;&amp;gt; sat/vb for 1000 vbytes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Package A &#43; B ancestor score is 10 sat/vb.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; D has a higher feerate/absolute fee than B.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Package A &#43; C &#43; D ancestor score is ~ 3 sat/vb ((A&amp;#39;s 1000 sats &#43; C&amp;#39;s&lt;br/&gt;&amp;gt; 1000 sats &#43; D&amp;#39;s 1500 sats) / A&amp;#39;s 100 vb &#43; C&amp;#39;s 1000 vb &#43; D&amp;#39;s 100 vb)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am in agreement with your calculations but unsure if we disagree on the&lt;br/&gt;&amp;gt; expected outcome. Yes, B has an ancestor score of 10sat/vb and D has an&lt;br/&gt;&amp;gt; ancestor score of ~2.9sat/vb. Since D&amp;#39;s ancestor score is lower than B&amp;#39;s,&lt;br/&gt;&amp;gt; it fails the proposed package RBF Rule #2, so this package would be&lt;br/&gt;&amp;gt; rejected. Does this meet your expectations?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you for linking to projects that might be interested in package&lt;br/&gt;&amp;gt; relay :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Gloria&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Sep 20, 2021 at 12:16 AM Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Gloria,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; A package may contain transactions that are already in the mempool. We&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; remove&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; (&amp;#34;deduplicate&amp;#34;) those transactions from the package for the purposes of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; mempool acceptance. If a package is empty after deduplication, we do&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; nothing.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; IIUC, you have a package A&#43;B&#43;C submitted for acceptance and A is already&lt;br/&gt;&amp;gt;&amp;gt; in your mempool. You trim out A from the package and then evaluate B&#43;C.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this might be an issue if A is the higher-fee element of the ABC&lt;br/&gt;&amp;gt;&amp;gt; package. B&#43;C package fees might be under the mempool min fee and will be&lt;br/&gt;&amp;gt;&amp;gt; rejected, potentially breaking the acceptance expectations of the package&lt;br/&gt;&amp;gt;&amp;gt; issuer ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Further, I think the dedup should be done on wtxid, as you might have&lt;br/&gt;&amp;gt;&amp;gt; multiple valid witnesses. Though with varying vsizes and as such offering&lt;br/&gt;&amp;gt;&amp;gt; different feerates.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; E.g you&amp;#39;re going to evaluate the package A&#43;B and A&amp;#39; is already in your&lt;br/&gt;&amp;gt;&amp;gt; mempool with a bigger valid witness. You trim A based on txid, then you&lt;br/&gt;&amp;gt;&amp;gt; evaluate A&amp;#39;&#43;B, which fails the fee checks. However, evaluating A&#43;B would&lt;br/&gt;&amp;gt;&amp;gt; have been a success.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; AFAICT, the dedup rationale would be to save on CPU time/IO disk, to&lt;br/&gt;&amp;gt;&amp;gt; avoid repeated signatures verification and parent UTXOs fetches ? Can we&lt;br/&gt;&amp;gt;&amp;gt; achieve the same goal by bypassing tx-level checks for already-in txn while&lt;br/&gt;&amp;gt;&amp;gt; conserving the package integrity for package-level checks ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Note that it&amp;#39;s possible for the parents to be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; indirect&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; descendants/ancestors of one another, or for parent and child to share a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; parent,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; so we cannot make any other topology assumptions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m not clearly understanding the accepted topologies. By &amp;#34;parent and&lt;br/&gt;&amp;gt;&amp;gt; child to share a parent&amp;#34;, do you mean the set of transactions A, B, C,&lt;br/&gt;&amp;gt;&amp;gt; where B is spending A and C is spending A and B would be correct ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If yes, is there a width-limit introduced or we fallback on&lt;br/&gt;&amp;gt;&amp;gt; MAX_PACKAGE_COUNT=25 ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; IIRC, one rationale to come with this topology limitation was to lower&lt;br/&gt;&amp;gt;&amp;gt; the DoS risks when potentially deploying p2p packages.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Considering the current Core&amp;#39;s mempool acceptance rules, I think CPFP&lt;br/&gt;&amp;gt;&amp;gt; batching is unsafe for LN time-sensitive closure. A malicious tx-relay&lt;br/&gt;&amp;gt;&amp;gt; jamming successful on one channel commitment transaction would contamine&lt;br/&gt;&amp;gt;&amp;gt; the remaining commitments sharing the same package.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; E.g, you broadcast the package A&#43;B&#43;C&#43;D&#43;E where A,B,C,D are commitment&lt;br/&gt;&amp;gt;&amp;gt; transactions and E a shared CPFP. If a malicious A&amp;#39; transaction has a&lt;br/&gt;&amp;gt;&amp;gt; better feerate than A, the whole package acceptance will fail. Even if A&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt; confirms in the following block,&lt;br/&gt;&amp;gt;&amp;gt; the propagation and confirmation of B&#43;C&#43;D have been delayed. This could&lt;br/&gt;&amp;gt;&amp;gt; carry on a loss of funds.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; That said, if you&amp;#39;re broadcasting commitment transactions without&lt;br/&gt;&amp;gt;&amp;gt; time-sensitive HTLC outputs, I think the batching is effectively a fee&lt;br/&gt;&amp;gt;&amp;gt; saving as you don&amp;#39;t have to duplicate the CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; IMHO, I&amp;#39;m leaning towards deploying during a first phase&lt;br/&gt;&amp;gt;&amp;gt; 1-parent/1-child. I think it&amp;#39;s the most conservative step still improving&lt;br/&gt;&amp;gt;&amp;gt; second-layer safety.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; *Rationale*:  It would be incorrect to use the fees of transactions&lt;br/&gt;&amp;gt;&amp;gt; that are&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; already in the mempool, as we do not want a transaction&amp;#39;s fees to be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; double-counted for both its individual RBF and package RBF.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m unsure about the logical order of the checks proposed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If A&#43;B is submitted to replace A&amp;#39;, where A pays 0 sats, B pays 200 sats&lt;br/&gt;&amp;gt;&amp;gt; and A&amp;#39; pays 100 sats. If we apply the individual RBF on A, A&#43;B acceptance&lt;br/&gt;&amp;gt;&amp;gt; fails. For this reason I think the individual RBF should be bypassed and&lt;br/&gt;&amp;gt;&amp;gt; only the package RBF apply ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Note this situation is plausible, with current LN design, your&lt;br/&gt;&amp;gt;&amp;gt; counterparty can have a commitment transaction with a better fee just by&lt;br/&gt;&amp;gt;&amp;gt; selecting a higher `dust_limit_satoshis` than yours.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Examples F and G [14] show the same package, but P1 is submitted&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; individually before&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the package in example G. In example F, we can see that the 300vB&lt;br/&gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; pays&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; an additional 200sat in fees, which is not enough to pay for its own&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bandwidth&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; (BIP125#4). In example G, we can see that P1 pays enough to replace M1,&lt;br/&gt;&amp;gt;&amp;gt; but&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; using P1&amp;#39;s fees again during package submission would make it look like&lt;br/&gt;&amp;gt;&amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; 300sat&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; increase for a 200vB package. Even including its fees and size would&lt;br/&gt;&amp;gt;&amp;gt; not be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; sufficient in this example, since the 300sat looks like enough for the&lt;br/&gt;&amp;gt;&amp;gt; 300vB&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; package. The calculcation after deduplication is 100sat increase for a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; of size 200vB, which correctly fails BIP125#4. Assume all transactions&lt;br/&gt;&amp;gt;&amp;gt; have&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; size of 100vB.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; What problem are you trying to solve by the package feerate *after* dedup&lt;br/&gt;&amp;gt;&amp;gt; rule ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; My understanding is that an in-package transaction might be already in&lt;br/&gt;&amp;gt;&amp;gt; the mempool. Therefore, to compute a correct RBF penalty replacement, the&lt;br/&gt;&amp;gt;&amp;gt; vsize of this transaction could be discarded lowering the cost of package&lt;br/&gt;&amp;gt;&amp;gt; RBF.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If we keep a &amp;#34;safe&amp;#34; dedup mechanism (see my point above), I think this&lt;br/&gt;&amp;gt;&amp;gt; discount is justified, as the validation cost of node operators is paid for&lt;br/&gt;&amp;gt;&amp;gt; ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; The child cannot replace mempool transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Let&amp;#39;s say you issue package A&#43;B, then package C&#43;B&amp;#39;, where B&amp;#39; is a child&lt;br/&gt;&amp;gt;&amp;gt; of both A and C. This rule fails the acceptance of C&#43;B&amp;#39; ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this is a footgunish API, as if a package issuer send the&lt;br/&gt;&amp;gt;&amp;gt; multiple-parent-one-child package A,B,C,D where D is the child of A,B,C.&lt;br/&gt;&amp;gt;&amp;gt; Then try to broadcast the higher-feerate C&amp;#39;&#43;D&amp;#39; package, it should be&lt;br/&gt;&amp;gt;&amp;gt; rejected. So it&amp;#39;s breaking the naive broadcaster assumption that a&lt;br/&gt;&amp;gt;&amp;gt; higher-feerate/higher-fee package always replaces ? And it might be unsafe&lt;br/&gt;&amp;gt;&amp;gt; in protocols where states are symmetric. E.g a malicious counterparty&lt;br/&gt;&amp;gt;&amp;gt; broadcasts first S&#43;A, then you honestly broadcast S&#43;B, where B pays better&lt;br/&gt;&amp;gt;&amp;gt; fees.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; All mempool transactions to be replaced must signal replaceability.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this is unsafe for L2s if counterparties have malleability of the&lt;br/&gt;&amp;gt;&amp;gt; child transaction. They can block your package replacement by opting-out&lt;br/&gt;&amp;gt;&amp;gt; from RBF signaling. IIRC, LN&amp;#39;s &amp;#34;anchor output&amp;#34; presents such an ability.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think it&amp;#39;s better to either fix inherited signaling or move towards&lt;br/&gt;&amp;gt;&amp;gt; full-rbf.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; if a package parent has already been submitted, it would&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; look&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;like the child is spending a &amp;#34;new&amp;#34; unconfirmed input.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this is an issue brought by the trimming during the dedup phase.&lt;br/&gt;&amp;gt;&amp;gt; If we preserve the package integrity, only re-using the tx-level checks&lt;br/&gt;&amp;gt;&amp;gt; results of already in-mempool transactions to gain in CPU time we won&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; have this issue. Package childs can add unconfirmed inputs as long as&lt;br/&gt;&amp;gt;&amp;gt; they&amp;#39;re in-package, the bip125 rule2 is only evaluated against parents ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; However, we still achieve the same goal of requiring the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; replacement&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; transactions to have a ancestor score at least as high as the original&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; ones.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m not sure if this holds...&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Let&amp;#39;s say you have in-mempool A, B where A pays 10 sat/vb for 100 vbytes&lt;br/&gt;&amp;gt;&amp;gt; and B pays 10 sat/vb for 100 vbytes. You have the candidate replacement D&lt;br/&gt;&amp;gt;&amp;gt; spending both A and C where D pays 15sat/vb for 100 vbytes and C pays 1&lt;br/&gt;&amp;gt;&amp;gt; sat/vb for 1000 vbytes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Package A &#43; B ancestor score is 10 sat/vb.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; D has a higher feerate/absolute fee than B.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Package A &#43; C &#43; D ancestor score is ~ 3 sat/vb ((A&amp;#39;s 1000 sats &#43; C&amp;#39;s 1000&lt;br/&gt;&amp;gt;&amp;gt; sats &#43; D&amp;#39;s 1500 sats) /&lt;br/&gt;&amp;gt;&amp;gt; A&amp;#39;s 100 vb &#43; C&amp;#39;s 1000 vb &#43; D&amp;#39;s 100 vb)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Overall, this is a review through the lenses of LN requirements. I think&lt;br/&gt;&amp;gt;&amp;gt; other L2 protocols/applications&lt;br/&gt;&amp;gt;&amp;gt; could be candidates to using package accept/relay such as:&lt;br/&gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/lightninglabs/pool&#34;&gt;https://github.com/lightninglabs/pool&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/bitcoin-teleport/teleport-transactions/&#34;&gt;https://github.com/bitcoin-teleport/teleport-transactions/&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/sapio-lang/sapio&#34;&gt;https://github.com/sapio-lang/sapio&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/commerceblock/mercury/blob/master/doc/statechains.md&#34;&gt;https://github.com/commerceblock/mercury/blob/master/doc/statechains.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; * &lt;a href=&#34;https://github.com/revault/practical-revault&#34;&gt;https://github.com/revault/practical-revault&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thanks for rolling forward the ball on this subject.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Le jeu. 16 sept. 2021 à 03:55, Gloria Zhao via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi there,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m writing to propose a set of mempool policy changes to enable package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; validation (in preparation for package relay) in Bitcoin Core. These&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be consensus or P2P protocol changes. However, since mempool policy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; significantly affects transaction propagation, I believe this is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relevant for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the mailing list.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; My proposal enables packages consisting of multiple parents and 1 child.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; develop software that relies on specific transaction relay assumptions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and/or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; are interested in using package relay in the future, I&amp;#39;m very interested&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to hear&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; your feedback on the utility or restrictiveness of these package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; policies for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; your use cases.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A draft implementation of this proposal can be found in [Bitcoin Core&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; PR#22290][1].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; An illustrated version of this post can be found at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/glozow/dc4e9d5c5b14ade7cdfac40f43adb18a&#34;&gt;https://gist.github.com/glozow/dc4e9d5c5b14ade7cdfac40f43adb18a&lt;/a&gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I have also linked the images below.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ## Background&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Feel free to skip this section if you are already familiar with mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; policy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and package relay terminology.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Terminology Clarifications&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Package = an ordered list of related transactions, representable by a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Directed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   Acyclic Graph.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Package Feerate = the total modified fees divided by the total virtual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; size of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   all transactions in the package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     - Modified fees = a transaction&amp;#39;s base fees &#43; fee delta applied by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the user&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;       with `prioritisetransaction`. As such, we expect this to vary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; across&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempools.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     - Virtual Size = the maximum of virtual sizes calculated using&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [BIP141&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;       virtual size][2] and sigop weight. [Implemented here in Bitcoin&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Core][3].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     - Note that feerate is not necessarily based on the base fees and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; serialized&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;       size.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Fee-Bumping = user/wallet actions that take advantage of miner&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; incentives to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   boost a transaction&amp;#39;s candidacy for inclusion in a block, including&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Child Pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for Parent (CPFP) and [BIP125][12] Replace-by-Fee (RBF). Our intention in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool policy is to recognize when the new transaction is more&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; economical to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mine than the original one(s) but not open DoS vectors, so there are some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; limitations.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Policy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The purpose of the mempool is to store the best (to be most&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; incentive-compatible&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; with miners, highest feerate) candidates for inclusion in a block.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Miners use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the mempool to build block templates. The mempool is also useful as a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; cache for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; boosting block relay and validation performance, aiding transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relay, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; generating feerate estimations.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Ideally, all consensus-valid transactions paying reasonable fees should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; make it&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to miners through normal transaction relay, without any special&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; connectivity or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relationships with miners. On the other hand, nodes do not have unlimited&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; resources, and a P2P network designed to let any honest node broadcast&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions also exposes the transaction validation engine to DoS&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; attacks from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; malicious peers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; As such, for unconfirmed transactions we are considering for our&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool, we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; apply a set of validation rules in addition to consensus, primarily to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; protect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; us from resource exhaustion and aid our efforts to keep the highest fee&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions. We call this mempool _policy_: a set of (configurable,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; node-specific) rules that transactions must abide by in order to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; accepted&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; into our mempool. Transaction &amp;#34;Standardness&amp;#34; rules and mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; restrictions such&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; as &amp;#34;too-long-mempool-chain&amp;#34; are both examples of policy.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Package Relay and Package Mempool Accept&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In transaction relay, we currently consider transactions one at a time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; submission to the mempool. This creates a limitation in the node&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ability to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; determine which transactions have the highest feerates, since we cannot&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; take&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; into account descendants (i.e. cannot use CPFP) until all the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in the mempool. Similarly, we cannot use a transaction&amp;#39;s descendants when&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; considering it for RBF. When an individual transaction does not meet the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; minimum feerate and the user isn&amp;#39;t able to create a replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; directly, it will not be accepted by mempools.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This limitation presents a security issue for applications and users&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relying on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; time-sensitive transactions. For example, Lightning and other protocols&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; create&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; UTXOs with multiple spending paths, where one counterparty&amp;#39;s spending&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; path opens&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; up after a timelock, and users are protected from cheating scenarios as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; long as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; they redeem on-chain in time. A key security assumption is that all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; parties&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions will propagate and confirm in a timely manner. This&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; assumption can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be broken if fee-bumping does not work as intended.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The end goal for Package Relay is to consider multiple transactions at&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the same&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; time, e.g. a transaction with its high-fee child. This may help us better&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; determine whether transactions should be accepted to our mempool,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; especially if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; they don&amp;#39;t meet fee requirements individually or are better RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; candidates as a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package. A combination of changes to mempool validation logic, policy,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction relay allows us to better propagate the transactions with the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; highest package feerates to miners, and makes fee-bumping tools more&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; powerful&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for users.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The &amp;#34;relay&amp;#34; part of Package Relay suggests P2P messaging changes, but a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; large&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; part of the changes are in the mempool&amp;#39;s package validation logic. We&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; call this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Package Mempool Accept*.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Previous Work&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Given that mempool validation is DoS-sensitive and complex, it would be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   dangerous to haphazardly tack on package validation logic. Many&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; efforts have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; been made to make mempool validation less opaque (see [#16400][4],&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [#21062][5],&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [#22675][6], [#22796][7]).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * [#20833][8] Added basic capabilities for package validation, test&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; accepts only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   (no submission to mempool).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * [#21800][9] Implemented package ancestor/descendant limit checks for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; arbitrary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   packages. Still test accepts only.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; * Previous package relay proposals (see [#16401][10], [#19621][11]).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Existing Package Rules&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; These are in master as introduced in [#20833][8] and [#21800][9]. I&amp;#39;ll&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; consider&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; them as &amp;#34;given&amp;#34; in the rest of this document, though they can be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; changed, since&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package validation is test-accept only right now.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1. A package cannot exceed `MAX_PACKAGE_COUNT=25` count and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; `MAX_PACKAGE_SIZE=101KvB` total size [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;    *Rationale*: This is already enforced as mempool ancestor/descendant&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; limits.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Presumably, transactions in a package are all related, so exceeding this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; limit&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would mean that the package can either be split up or it wouldn&amp;#39;t pass&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool policy.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2. Packages must be topologically sorted: if any dependencies exist&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; between&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions, parents must appear somewhere before children. [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 3. A package cannot have conflicting transactions, i.e. none of them can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; spend&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the same inputs. This also means there cannot be duplicate transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 4. When packages are evaluated against ancestor/descendant limits in a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; test&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; accept, the union of all of their descendants and ancestors is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; considered. This&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is essentially a &amp;#34;worst case&amp;#34; heuristic where every transaction in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is treated as each other&amp;#39;s ancestor and descendant. [8]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Packages for which ancestor/descendant limits are accurately captured by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; heuristic: [19]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; There are also limitations such as the fact that CPFP carve out is not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; applied&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to package transactions. #20833 also disables RBF in package validation;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; proposal overrides that to allow packages to use RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ## Proposed Changes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The next step in the Package Mempool Accept project is to implement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; submission&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to mempool, initially through RPC only. This allows us to test the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; submission&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; logic before exposing it on P2P.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Summary&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Packages may contain already-in-mempool transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Packages are 2 generations, Multi-Parent-1-Child.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Fee-related checks use the package feerate. This means that wallets can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; create a package that utilizes CPFP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Parents are allowed to RBF mempool transactions with a set of rules&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; similar&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   to BIP125. This enables a combination of CPFP and RBF, where a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction&amp;#39;s descendant fees pay for replacing mempool conflicts.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; There is a draft implementation in [#22290][1]. It is WIP, but feedback&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; always welcome.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Details&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; #### Packages May Contain Already-in-Mempool Transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A package may contain transactions that are already in the mempool. We&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; remove&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (&amp;#34;deduplicate&amp;#34;) those transactions from the package for the purposes of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool acceptance. If a package is empty after deduplication, we do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; nothing.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Mempools vary across the network. It&amp;#39;s possible for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; parent to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; accepted to the mempool of a peer on its own due to differences in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; policy and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fee market fluctuations. We should not reject or penalize the entire&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; an individual transaction as that could be a censorship vector.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; #### Packages Are Multi-Parent-1-Child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Only packages of a specific topology are permitted. Namely, a package is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; exactly&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1 child with all of its unconfirmed parents. After deduplication, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; may be exactly the same, empty, 1 child, 1 child with just some of its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; unconfirmed parents, etc. Note that it&amp;#39;s possible for the parents to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; indirect&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; descendants/ancestors of one another, or for parent and child to share a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; parent,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; so we cannot make any other topology assumptions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: This allows for fee-bumping by CPFP. Allowing multiple&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; parents&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; makes it possible to fee-bump a batch of transactions. Restricting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; packages to a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; defined topology is also easier to reason about and simplifies the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; validation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; logic greatly. Multi-parent-1-child allows us to think of the package as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; one big&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction, where:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Inputs = all the inputs of parents &#43; inputs of the child that come from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   confirmed UTXOs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Outputs = all the outputs of the child &#43; all outputs of the parents&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   aren&amp;#39;t spent by other transactions in the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Examples of packages that follow this rule (variations of example A show&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; possibilities after deduplication): ![image][15]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; #### Fee-Related Checks Use Package Feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Package Feerate = the total modified fees divided by the total virtual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; size of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; all transactions in the package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; To meet the two feerate requirements of a mempool, i.e., the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pre-configured&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; minimum relay feerate (`minRelayTxFee`) and dynamic mempool minimum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate, the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; total package feerate is used instead of the individual feerate. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; individual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions are allowed to be below feerate requirements if the package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; meets&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the feerate requirements. For example, the parent(s) in the package can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have 0&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fees but be paid for by the child.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: This can be thought of as &amp;#34;CPFP within a package,&amp;#34; solving&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; issue of a parent not meeting minimum fees on its own. This allows L2&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; applications to adjust their fees at broadcast time instead of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; overshooting or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; risking getting stuck/pinned.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We use the package feerate of the package *after deduplication*.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*:  It would be incorrect to use the fees of transactions that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; already in the mempool, as we do not want a transaction&amp;#39;s fees to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; double-counted for both its individual RBF and package RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Examples F and G [14] show the same package, but P1 is submitted&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; individually before&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the package in example G. In example F, we can see that the 300vB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; an additional 200sat in fees, which is not enough to pay for its own&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bandwidth&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (BIP125#4). In example G, we can see that P1 pays enough to replace M1,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; using P1&amp;#39;s fees again during package submission would make it look like&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a 300sat&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; increase for a 200vB package. Even including its fees and size would not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sufficient in this example, since the 300sat looks like enough for the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 300vB&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package. The calculcation after deduplication is 100sat increase for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of size 200vB, which correctly fails BIP125#4. Assume all transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; size of 100vB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; #### Package RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If a package meets feerate requirements as a package, the parents in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction are allowed to replace-by-fee mempool transactions. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child cannot&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replace mempool transactions. Multiple transactions can replace the same&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction, but in order to be valid, none of the transactions can try&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replace an ancestor of another transaction in the same package (which&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; would thus&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; make its inputs unavailable).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Even if we are using package feerate, a package will not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; propagate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; as intended if RBF still requires each individual transaction to meet the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate requirements.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We use a set of rules slightly modified from BIP125 as follows:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ##### Signaling (Rule #1)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; All mempool transactions to be replaced must signal replaceability.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: Package RBF signaling logic should be the same for package&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; RBF and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; single transaction acceptance. This would be updated if single&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; validation moves to full RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ##### New Unconfirmed Inputs (Rule #2)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A package may include new unconfirmed inputs, but the ancestor feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child must be at least as high as the ancestor feerates of every&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; being replaced. This is contrary to BIP125#2, which states &amp;#34;The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction may only include an unconfirmed input if that input was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; included in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; one of the original transactions. (An unconfirmed input spends an output&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; from a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; currently-unconfirmed transaction.)&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *Rationale*: The purpose of BIP125#2 is to ensure that the replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction has a higher ancestor score than the original transaction(s)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (see&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [comment][13]). Example H [16] shows how adding a new unconfirmed input&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; can lower the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ancestor score of the replacement transaction. P1 is trying to replace&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; M1, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; spends an unconfirmed output of M2. P1 pays 800sat, M1 pays 600sat, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; M2 pays&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 100sat. Assume all transactions have a size of 100vB. While, in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; isolation, P1&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; looks like a better mining candidate than M1, it must be mined with M2,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; so its&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ancestor feerate is actually 4.5sat/vB.  This is lower than M1&amp;#39;s ancestor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate, which is 6sat/vB.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In package RBF, the rule analogous to BIP125#2 would be &amp;#34;none of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions in the package can spend new unconfirmed inputs.&amp;#34; Example J&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [17] shows&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; why, if any of the package transactions have ancestors, package feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; is no&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; longer accurate. Even though M2 and M3 are not ancestors of P1 (which is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replacement transaction in an RBF), we&amp;#39;re actually interested in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; entire&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package. A miner should mine M1 which is 5sat/vB instead of M2, M3, P1,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; P2, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; P3, which is only 4sat/vB. The Package RBF rule cannot be loosened to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; only allow&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the child to have new unconfirmed inputs, either, because it can still&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; cause us&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to overestimate the package&amp;#39;s ancestor score.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; However, enforcing a rule analogous to BIP125#2 would not only make&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Package RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; less useful, but would also break Package RBF for packages with parents&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; already&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in the mempool: if a package parent has already been submitted, it would&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; look&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; like the child is spending a &amp;#34;new&amp;#34; unconfirmed input. In example K [18],&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; looking to replace M1 with the entire package including P1, P2, and P3.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; consider the case where one of the parents is already in the mempool (in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; case, P2), which means we must allow P3 to have new unconfirmed inputs.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; However,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; M2 lowers the ancestor score of P3 to 4.3sat/vB, so we should not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replace M1&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; with this package.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thus, the package RBF rule regarding new unconfirmed inputs is less&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; strict than&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BIP125#2. However, we still achieve the same goal of requiring the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; replacement&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions to have a ancestor score at least as high as the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ones. As&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a result, the entire package is required to be a higher feerate mining&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; candidate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; than each of the replaced transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Another note: the [comment][13] above the BIP125#2 code in the original&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; RBF&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implementation suggests that the rule was intended to be temporary.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ##### Absolute Fee (Rule #3)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The package must increase the absolute fee of the mempool, i.e. the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; total fees&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of the package must be higher than the absolute fees of the mempool&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; it replaces. Combined with the CPFP rule above, this differs from BIP125&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Rule #3&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - an individual transaction in the package may have lower fees than the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   transaction(s) it is replacing. In fact, it may have 0 fees, and the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; child&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pays for RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ##### Feerate (Rule #4)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The package must pay for its own bandwidth; the package feerate must be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; higher&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; than the replaced transactions by at least minimum relay feerate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (`incrementalRelayFee`). Combined with the CPFP rule above, this differs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BIP125 Rule #4 - an individual transaction in the package can have a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; lower&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feerate than the transaction(s) it is replacing. In fact, it may have 0&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fees,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and the child pays for RBF.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ##### Total Number of Replaced Transactions (Rule #5)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The package cannot replace more than 100 mempool transactions. This is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; identical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to BIP125 Rule #5.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Expected FAQs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1. Is it possible for only some of the package to make it into the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mempool?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;    Yes, it is. However, since we evict transactions from the mempool by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; descendant score and the package child is supposed to be sponsoring the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; fees of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; its parents, the most common scenario would be all-or-nothing. This is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; incentive-compatible. In fact, to be conservative, package validation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; begin by trying to submit all of the transactions individually, and only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; use the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; package mempool acceptance logic if the parents fail due to low feerate.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2. Should we allow packages to contain already-confirmed transactions?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     No, for practical reasons. In mempool validation, we actually aren&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; able to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; tell with 100% confidence if we are looking at a transaction that has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; already&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; confirmed, because we look up inputs using a UTXO set. If we have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; historical&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; block data, it&amp;#39;s possible to look for it, but this is inefficient, not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; always&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; possible for pruning nodes, and unnecessary because we&amp;#39;re not going to do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; anything with the transaction anyway. As such, we already have the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; expectation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that transaction relay is somewhat &amp;#34;stateful&amp;#34; i.e. nobody should be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relaying&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions that have already been confirmed. Similarly, we shouldn&amp;#39;t be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; relaying packages that contain already-confirmed transactions.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [1]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22290&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22290&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [2]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/1f0b563738199ca60d32b4ba779797fc97d040fe/bip-0141.mediawiki#transaction-size-calculations&#34;&gt;https://github.com/bitcoin/bips/blob/1f0b563738199ca60d32b4ba779797fc97d040fe/bip-0141.mediawiki#transaction-size-calculations&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [3]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/94f83534e4b771944af7d9ed0f40746f392eb75e/src/policy/policy.cpp#L282&#34;&gt;https://github.com/bitcoin/bitcoin/blob/94f83534e4b771944af7d9ed0f40746f392eb75e/src/policy/policy.cpp#L282&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [4]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16400&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16400&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [5]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/21062&#34;&gt;https://github.com/bitcoin/bitcoin/pull/21062&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [6]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22675&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22675&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [7]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22796&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22796&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [8]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/20833&#34;&gt;https://github.com/bitcoin/bitcoin/pull/20833&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [9]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/21800&#34;&gt;https://github.com/bitcoin/bitcoin/pull/21800&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [10]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16401&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16401&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [11]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/19621&#34;&gt;https://github.com/bitcoin/bitcoin/pull/19621&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [12]: &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;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [13]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/6871/files#diff-34d21af3c614ea3cee120df276c9c4ae95053830d7f1d3deaf009a4625409ad2R1101-R1104&#34;&gt;https://github.com/bitcoin/bitcoin/pull/6871/files#diff-34d21af3c614ea3cee120df276c9c4ae95053830d7f1d3deaf009a4625409ad2R1101-R1104&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [14]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567078-075a971c-0619-4339-9168-b41fd2b90c28.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [15]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/132856734-fc17da75-f875-44bb-b954-cb7a1725cc0d.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [16]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567347-a3e2e4a8-ae9c-49f8-abb9-81e8e0aba224.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [17]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567370-21566d0e-36c8-4831-b1a8-706634540af3.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [18]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567444-bfff1142-439f-4547-800a-2ba2b0242bcb.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [19]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133456219-0bb447cb-dcb4-4a31-b9c1-7d86205b68bc.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [20]:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/132857787-7b7c6f56-af96-44c8-8d78-983719888c19.png&#34;&gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;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/20210923/f8611b91/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210923/f8611b91/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:59:18&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqstgcrezrfgrtjvvgfe6nn5f5cp09x58hph8gkju8v94tmx6h9zz6qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zx2xer5</id>
    
      <title type="html">📅 Original date posted:2021-09-19 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqstgcrezrfgrtjvvgfe6nn5f5cp09x58hph8gkju8v94tmx6h9zz6qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zx2xer5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqgxky2s8mesrvzksc3n286xykqce8gjvy68rpq2t5r7jegm37degn87gga&#39;&gt;nevent1q…7gga&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-09-19&lt;br/&gt;📝 Original message:Hi Gloria,&lt;br/&gt;&lt;br/&gt;&amp;gt; A package may contain transactions that are already in the mempool. We&lt;br/&gt;&amp;gt; remove&lt;br/&gt;&amp;gt; (&amp;#34;deduplicate&amp;#34;) those transactions from the package for the purposes of&lt;br/&gt;&amp;gt; package&lt;br/&gt;&amp;gt; mempool acceptance. If a package is empty after deduplication, we do&lt;br/&gt;&amp;gt; nothing.&lt;br/&gt;&lt;br/&gt;IIUC, you have a package A&#43;B&#43;C submitted for acceptance and A is already in&lt;br/&gt;your mempool. You trim out A from the package and then evaluate B&#43;C.&lt;br/&gt;&lt;br/&gt;I think this might be an issue if A is the higher-fee element of the ABC&lt;br/&gt;package. B&#43;C package fees might be under the mempool min fee and will be&lt;br/&gt;rejected, potentially breaking the acceptance expectations of the package&lt;br/&gt;issuer ?&lt;br/&gt;&lt;br/&gt;Further, I think the dedup should be done on wtxid, as you might have&lt;br/&gt;multiple valid witnesses. Though with varying vsizes and as such offering&lt;br/&gt;different feerates.&lt;br/&gt;&lt;br/&gt;E.g you&amp;#39;re going to evaluate the package A&#43;B and A&amp;#39; is already in your&lt;br/&gt;mempool with a bigger valid witness. You trim A based on txid, then you&lt;br/&gt;evaluate A&amp;#39;&#43;B, which fails the fee checks. However, evaluating A&#43;B would&lt;br/&gt;have been a success.&lt;br/&gt;&lt;br/&gt;AFAICT, the dedup rationale would be to save on CPU time/IO disk, to avoid&lt;br/&gt;repeated signatures verification and parent UTXOs fetches ? Can we achieve&lt;br/&gt;the same goal by bypassing tx-level checks for already-in txn while&lt;br/&gt;conserving the package integrity for package-level checks ?&lt;br/&gt;&lt;br/&gt;&amp;gt; Note that it&amp;#39;s possible for the parents to be&lt;br/&gt;&amp;gt; indirect&lt;br/&gt;&amp;gt; descendants/ancestors of one another, or for parent and child to share a&lt;br/&gt;&amp;gt; parent,&lt;br/&gt;&amp;gt; so we cannot make any other topology assumptions.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not clearly understanding the accepted topologies. By &amp;#34;parent and child&lt;br/&gt;to share a parent&amp;#34;, do you mean the set of transactions A, B, C, where B is&lt;br/&gt;spending A and C is spending A and B would be correct ?&lt;br/&gt;&lt;br/&gt;If yes, is there a width-limit introduced or we fallback on&lt;br/&gt;MAX_PACKAGE_COUNT=25 ?&lt;br/&gt;&lt;br/&gt;IIRC, one rationale to come with this topology limitation was to lower the&lt;br/&gt;DoS risks when potentially deploying p2p packages.&lt;br/&gt;&lt;br/&gt;Considering the current Core&amp;#39;s mempool acceptance rules, I think CPFP&lt;br/&gt;batching is unsafe for LN time-sensitive closure. A malicious tx-relay&lt;br/&gt;jamming successful on one channel commitment transaction would contamine&lt;br/&gt;the remaining commitments sharing the same package.&lt;br/&gt;&lt;br/&gt;E.g, you broadcast the package A&#43;B&#43;C&#43;D&#43;E where A,B,C,D are commitment&lt;br/&gt;transactions and E a shared CPFP. If a malicious A&amp;#39; transaction has a&lt;br/&gt;better feerate than A, the whole package acceptance will fail. Even if A&amp;#39;&lt;br/&gt;confirms in the following block,&lt;br/&gt;the propagation and confirmation of B&#43;C&#43;D have been delayed. This could&lt;br/&gt;carry on a loss of funds.&lt;br/&gt;&lt;br/&gt;That said, if you&amp;#39;re broadcasting commitment transactions without&lt;br/&gt;time-sensitive HTLC outputs, I think the batching is effectively a fee&lt;br/&gt;saving as you don&amp;#39;t have to duplicate the CPFP.&lt;br/&gt;&lt;br/&gt;IMHO, I&amp;#39;m leaning towards deploying during a first phase 1-parent/1-child.&lt;br/&gt;I think it&amp;#39;s the most conservative step still improving second-layer safety.&lt;br/&gt;&lt;br/&gt;&amp;gt; *Rationale*:  It would be incorrect to use the fees of transactions that&lt;br/&gt;are&lt;br/&gt;&amp;gt; already in the mempool, as we do not want a transaction&amp;#39;s fees to be&lt;br/&gt;&amp;gt; double-counted for both its individual RBF and package RBF.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m unsure about the logical order of the checks proposed.&lt;br/&gt;&lt;br/&gt;If A&#43;B is submitted to replace A&amp;#39;, where A pays 0 sats, B pays 200 sats and&lt;br/&gt;A&amp;#39; pays 100 sats. If we apply the individual RBF on A, A&#43;B acceptance&lt;br/&gt;fails. For this reason I think the individual RBF should be bypassed and&lt;br/&gt;only the package RBF apply ?&lt;br/&gt;&lt;br/&gt;Note this situation is plausible, with current LN design, your counterparty&lt;br/&gt;can have a commitment transaction with a better fee just by selecting a&lt;br/&gt;higher `dust_limit_satoshis` than yours.&lt;br/&gt;&lt;br/&gt;&amp;gt; Examples F and G [14] show the same package, but P1 is submitted&lt;br/&gt;&amp;gt; individually before&lt;br/&gt;&amp;gt; the package in example G. In example F, we can see that the 300vB package&lt;br/&gt;&amp;gt; pays&lt;br/&gt;&amp;gt; an additional 200sat in fees, which is not enough to pay for its own&lt;br/&gt;&amp;gt; bandwidth&lt;br/&gt;&amp;gt; (BIP125#4). In example G, we can see that P1 pays enough to replace M1,&lt;br/&gt;but&lt;br/&gt;&amp;gt; using P1&amp;#39;s fees again during package submission would make it look like a&lt;br/&gt;&amp;gt; 300sat&lt;br/&gt;&amp;gt; increase for a 200vB package. Even including its fees and size would not&lt;br/&gt;be&lt;br/&gt;&amp;gt; sufficient in this example, since the 300sat looks like enough for the&lt;br/&gt;300vB&lt;br/&gt;&amp;gt; package. The calculcation after deduplication is 100sat increase for a&lt;br/&gt;&amp;gt; package&lt;br/&gt;&amp;gt; of size 200vB, which correctly fails BIP125#4. Assume all transactions&lt;br/&gt;have&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; size of 100vB.&lt;br/&gt;&lt;br/&gt;What problem are you trying to solve by the package feerate *after* dedup&lt;br/&gt;rule ?&lt;br/&gt;&lt;br/&gt;My understanding is that an in-package transaction might be already in the&lt;br/&gt;mempool. Therefore, to compute a correct RBF penalty replacement, the vsize&lt;br/&gt;of this transaction could be discarded lowering the cost of package RBF.&lt;br/&gt;&lt;br/&gt;If we keep a &amp;#34;safe&amp;#34; dedup mechanism (see my point above), I think this&lt;br/&gt;discount is justified, as the validation cost of node operators is paid for&lt;br/&gt;?&lt;br/&gt;&lt;br/&gt;&amp;gt; The child cannot replace mempool transactions.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say you issue package A&#43;B, then package C&#43;B&amp;#39;, where B&amp;#39; is a child of&lt;br/&gt;both A and C. This rule fails the acceptance of C&#43;B&amp;#39; ?&lt;br/&gt;&lt;br/&gt;I think this is a footgunish API, as if a package issuer send the&lt;br/&gt;multiple-parent-one-child package A,B,C,D where D is the child of A,B,C.&lt;br/&gt;Then try to broadcast the higher-feerate C&amp;#39;&#43;D&amp;#39; package, it should be&lt;br/&gt;rejected. So it&amp;#39;s breaking the naive broadcaster assumption that a&lt;br/&gt;higher-feerate/higher-fee package always replaces ? And it might be unsafe&lt;br/&gt;in protocols where states are symmetric. E.g a malicious counterparty&lt;br/&gt;broadcasts first S&#43;A, then you honestly broadcast S&#43;B, where B pays better&lt;br/&gt;fees.&lt;br/&gt;&lt;br/&gt;&amp;gt; All mempool transactions to be replaced must signal replaceability.&lt;br/&gt;&lt;br/&gt;I think this is unsafe for L2s if counterparties have malleability of the&lt;br/&gt;child transaction. They can block your package replacement by opting-out&lt;br/&gt;from RBF signaling. IIRC, LN&amp;#39;s &amp;#34;anchor output&amp;#34; presents such an ability.&lt;br/&gt;&lt;br/&gt;I think it&amp;#39;s better to either fix inherited signaling or move towards&lt;br/&gt;full-rbf.&lt;br/&gt;&lt;br/&gt;&amp;gt; if a package parent has already been submitted, it would&lt;br/&gt;&amp;gt; look&lt;br/&gt;&amp;gt;like the child is spending a &amp;#34;new&amp;#34; unconfirmed input.&lt;br/&gt;&lt;br/&gt;I think this is an issue brought by the trimming during the dedup phase. If&lt;br/&gt;we preserve the package integrity, only re-using the tx-level checks&lt;br/&gt;results of already in-mempool transactions to gain in CPU time we won&amp;#39;t&lt;br/&gt;have this issue. Package childs can add unconfirmed inputs as long as&lt;br/&gt;they&amp;#39;re in-package, the bip125 rule2 is only evaluated against parents ?&lt;br/&gt;&lt;br/&gt;&amp;gt; However, we still achieve the same goal of requiring the&lt;br/&gt;&amp;gt; replacement&lt;br/&gt;&amp;gt; transactions to have a ancestor score at least as high as the original&lt;br/&gt;&amp;gt; ones.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure if this holds...&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say you have in-mempool A, B where A pays 10 sat/vb for 100 vbytes&lt;br/&gt;and B pays 10 sat/vb for 100 vbytes. You have the candidate replacement D&lt;br/&gt;spending both A and C where D pays 15sat/vb for 100 vbytes and C pays 1&lt;br/&gt;sat/vb for 1000 vbytes.&lt;br/&gt;&lt;br/&gt;Package A &#43; B ancestor score is 10 sat/vb.&lt;br/&gt;&lt;br/&gt;D has a higher feerate/absolute fee than B.&lt;br/&gt;&lt;br/&gt;Package A &#43; C &#43; D ancestor score is ~ 3 sat/vb ((A&amp;#39;s 1000 sats &#43; C&amp;#39;s 1000&lt;br/&gt;sats &#43; D&amp;#39;s 1500 sats) /&lt;br/&gt;A&amp;#39;s 100 vb &#43; C&amp;#39;s 1000 vb &#43; D&amp;#39;s 100 vb)&lt;br/&gt;&lt;br/&gt;Overall, this is a review through the lenses of LN requirements. I think&lt;br/&gt;other L2 protocols/applications&lt;br/&gt;could be candidates to using package accept/relay such as:&lt;br/&gt;* &lt;a href=&#34;https://github.com/lightninglabs/pool&#34;&gt;https://github.com/lightninglabs/pool&lt;/a&gt;&lt;br/&gt;* &lt;a href=&#34;https://github.com/discreetlogcontracts/dlcspecs&#34;&gt;https://github.com/discreetlogcontracts/dlcspecs&lt;/a&gt;&lt;br/&gt;* &lt;a href=&#34;https://github.com/bitcoin-teleport/teleport-transactions/&#34;&gt;https://github.com/bitcoin-teleport/teleport-transactions/&lt;/a&gt;&lt;br/&gt;* &lt;a href=&#34;https://github.com/sapio-lang/sapio&#34;&gt;https://github.com/sapio-lang/sapio&lt;/a&gt;&lt;br/&gt;* &lt;a href=&#34;https://github.com/commerceblock/mercury/blob/master/doc/statechains.md&#34;&gt;https://github.com/commerceblock/mercury/blob/master/doc/statechains.md&lt;/a&gt;&lt;br/&gt;* &lt;a href=&#34;https://github.com/revault/practical-revault&#34;&gt;https://github.com/revault/practical-revault&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Thanks for rolling forward the ball on this subject.&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le jeu. 16 sept. 2021 à 03:55, Gloria Zhao via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi there,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m writing to propose a set of mempool policy changes to enable package&lt;br/&gt;&amp;gt; validation (in preparation for package relay) in Bitcoin Core. These would&lt;br/&gt;&amp;gt; not&lt;br/&gt;&amp;gt; be consensus or P2P protocol changes. However, since mempool policy&lt;br/&gt;&amp;gt; significantly affects transaction propagation, I believe this is relevant&lt;br/&gt;&amp;gt; for&lt;br/&gt;&amp;gt; the mailing list.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My proposal enables packages consisting of multiple parents and 1 child.&lt;br/&gt;&amp;gt; If you&lt;br/&gt;&amp;gt; develop software that relies on specific transaction relay assumptions&lt;br/&gt;&amp;gt; and/or&lt;br/&gt;&amp;gt; are interested in using package relay in the future, I&amp;#39;m very interested&lt;br/&gt;&amp;gt; to hear&lt;br/&gt;&amp;gt; your feedback on the utility or restrictiveness of these package policies&lt;br/&gt;&amp;gt; for&lt;br/&gt;&amp;gt; your use cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A draft implementation of this proposal can be found in [Bitcoin Core&lt;br/&gt;&amp;gt; PR#22290][1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An illustrated version of this post can be found at&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/glozow/dc4e9d5c5b14ade7cdfac40f43adb18a&#34;&gt;https://gist.github.com/glozow/dc4e9d5c5b14ade7cdfac40f43adb18a&lt;/a&gt;.&lt;br/&gt;&amp;gt; I have also linked the images below.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Background&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Feel free to skip this section if you are already familiar with mempool&lt;br/&gt;&amp;gt; policy&lt;br/&gt;&amp;gt; and package relay terminology.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Terminology Clarifications&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Package = an ordered list of related transactions, representable by a&lt;br/&gt;&amp;gt; Directed&lt;br/&gt;&amp;gt;   Acyclic Graph.&lt;br/&gt;&amp;gt; * Package Feerate = the total modified fees divided by the total virtual&lt;br/&gt;&amp;gt; size of&lt;br/&gt;&amp;gt;   all transactions in the package.&lt;br/&gt;&amp;gt;     - Modified fees = a transaction&amp;#39;s base fees &#43; fee delta applied by the&lt;br/&gt;&amp;gt; user&lt;br/&gt;&amp;gt;       with `prioritisetransaction`. As such, we expect this to vary across&lt;br/&gt;&amp;gt; mempools.&lt;br/&gt;&amp;gt;     - Virtual Size = the maximum of virtual sizes calculated using [BIP141&lt;br/&gt;&amp;gt;       virtual size][2] and sigop weight. [Implemented here in Bitcoin&lt;br/&gt;&amp;gt; Core][3].&lt;br/&gt;&amp;gt;     - Note that feerate is not necessarily based on the base fees and&lt;br/&gt;&amp;gt; serialized&lt;br/&gt;&amp;gt;       size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Fee-Bumping = user/wallet actions that take advantage of miner&lt;br/&gt;&amp;gt; incentives to&lt;br/&gt;&amp;gt;   boost a transaction&amp;#39;s candidacy for inclusion in a block, including&lt;br/&gt;&amp;gt; Child Pays&lt;br/&gt;&amp;gt; for Parent (CPFP) and [BIP125][12] Replace-by-Fee (RBF). Our intention in&lt;br/&gt;&amp;gt; mempool policy is to recognize when the new transaction is more economical&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; mine than the original one(s) but not open DoS vectors, so there are some&lt;br/&gt;&amp;gt; limitations.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Policy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The purpose of the mempool is to store the best (to be most&lt;br/&gt;&amp;gt; incentive-compatible&lt;br/&gt;&amp;gt; with miners, highest feerate) candidates for inclusion in a block. Miners&lt;br/&gt;&amp;gt; use&lt;br/&gt;&amp;gt; the mempool to build block templates. The mempool is also useful as a&lt;br/&gt;&amp;gt; cache for&lt;br/&gt;&amp;gt; boosting block relay and validation performance, aiding transaction relay,&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; generating feerate estimations.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ideally, all consensus-valid transactions paying reasonable fees should&lt;br/&gt;&amp;gt; make it&lt;br/&gt;&amp;gt; to miners through normal transaction relay, without any special&lt;br/&gt;&amp;gt; connectivity or&lt;br/&gt;&amp;gt; relationships with miners. On the other hand, nodes do not have unlimited&lt;br/&gt;&amp;gt; resources, and a P2P network designed to let any honest node broadcast&lt;br/&gt;&amp;gt; their&lt;br/&gt;&amp;gt; transactions also exposes the transaction validation engine to DoS attacks&lt;br/&gt;&amp;gt; from&lt;br/&gt;&amp;gt; malicious peers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As such, for unconfirmed transactions we are considering for our mempool,&lt;br/&gt;&amp;gt; we&lt;br/&gt;&amp;gt; apply a set of validation rules in addition to consensus, primarily to&lt;br/&gt;&amp;gt; protect&lt;br/&gt;&amp;gt; us from resource exhaustion and aid our efforts to keep the highest fee&lt;br/&gt;&amp;gt; transactions. We call this mempool _policy_: a set of (configurable,&lt;br/&gt;&amp;gt; node-specific) rules that transactions must abide by in order to be&lt;br/&gt;&amp;gt; accepted&lt;br/&gt;&amp;gt; into our mempool. Transaction &amp;#34;Standardness&amp;#34; rules and mempool&lt;br/&gt;&amp;gt; restrictions such&lt;br/&gt;&amp;gt; as &amp;#34;too-long-mempool-chain&amp;#34; are both examples of policy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Package Relay and Package Mempool Accept&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In transaction relay, we currently consider transactions one at a time for&lt;br/&gt;&amp;gt; submission to the mempool. This creates a limitation in the node&amp;#39;s ability&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; determine which transactions have the highest feerates, since we cannot&lt;br/&gt;&amp;gt; take&lt;br/&gt;&amp;gt; into account descendants (i.e. cannot use CPFP) until all the transactions&lt;br/&gt;&amp;gt; are&lt;br/&gt;&amp;gt; in the mempool. Similarly, we cannot use a transaction&amp;#39;s descendants when&lt;br/&gt;&amp;gt; considering it for RBF. When an individual transaction does not meet the&lt;br/&gt;&amp;gt; mempool&lt;br/&gt;&amp;gt; minimum feerate and the user isn&amp;#39;t able to create a replacement transaction&lt;br/&gt;&amp;gt; directly, it will not be accepted by mempools.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This limitation presents a security issue for applications and users&lt;br/&gt;&amp;gt; relying on&lt;br/&gt;&amp;gt; time-sensitive transactions. For example, Lightning and other protocols&lt;br/&gt;&amp;gt; create&lt;br/&gt;&amp;gt; UTXOs with multiple spending paths, where one counterparty&amp;#39;s spending path&lt;br/&gt;&amp;gt; opens&lt;br/&gt;&amp;gt; up after a timelock, and users are protected from cheating scenarios as&lt;br/&gt;&amp;gt; long as&lt;br/&gt;&amp;gt; they redeem on-chain in time. A key security assumption is that all&lt;br/&gt;&amp;gt; parties&amp;#39;&lt;br/&gt;&amp;gt; transactions will propagate and confirm in a timely manner. This&lt;br/&gt;&amp;gt; assumption can&lt;br/&gt;&amp;gt; be broken if fee-bumping does not work as intended.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The end goal for Package Relay is to consider multiple transactions at the&lt;br/&gt;&amp;gt; same&lt;br/&gt;&amp;gt; time, e.g. a transaction with its high-fee child. This may help us better&lt;br/&gt;&amp;gt; determine whether transactions should be accepted to our mempool,&lt;br/&gt;&amp;gt; especially if&lt;br/&gt;&amp;gt; they don&amp;#39;t meet fee requirements individually or are better RBF candidates&lt;br/&gt;&amp;gt; as a&lt;br/&gt;&amp;gt; package. A combination of changes to mempool validation logic, policy, and&lt;br/&gt;&amp;gt; transaction relay allows us to better propagate the transactions with the&lt;br/&gt;&amp;gt; highest package feerates to miners, and makes fee-bumping tools more&lt;br/&gt;&amp;gt; powerful&lt;br/&gt;&amp;gt; for users.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The &amp;#34;relay&amp;#34; part of Package Relay suggests P2P messaging changes, but a&lt;br/&gt;&amp;gt; large&lt;br/&gt;&amp;gt; part of the changes are in the mempool&amp;#39;s package validation logic. We call&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; *Package Mempool Accept*.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Previous Work&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Given that mempool validation is DoS-sensitive and complex, it would be&lt;br/&gt;&amp;gt;   dangerous to haphazardly tack on package validation logic. Many efforts&lt;br/&gt;&amp;gt; have&lt;br/&gt;&amp;gt; been made to make mempool validation less opaque (see [#16400][4],&lt;br/&gt;&amp;gt; [#21062][5],&lt;br/&gt;&amp;gt; [#22675][6], [#22796][7]).&lt;br/&gt;&amp;gt; * [#20833][8] Added basic capabilities for package validation, test&lt;br/&gt;&amp;gt; accepts only&lt;br/&gt;&amp;gt;   (no submission to mempool).&lt;br/&gt;&amp;gt; * [#21800][9] Implemented package ancestor/descendant limit checks for&lt;br/&gt;&amp;gt; arbitrary&lt;br/&gt;&amp;gt;   packages. Still test accepts only.&lt;br/&gt;&amp;gt; * Previous package relay proposals (see [#16401][10], [#19621][11]).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Existing Package Rules&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; These are in master as introduced in [#20833][8] and [#21800][9]. I&amp;#39;ll&lt;br/&gt;&amp;gt; consider&lt;br/&gt;&amp;gt; them as &amp;#34;given&amp;#34; in the rest of this document, though they can be changed,&lt;br/&gt;&amp;gt; since&lt;br/&gt;&amp;gt; package validation is test-accept only right now.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. A package cannot exceed `MAX_PACKAGE_COUNT=25` count and&lt;br/&gt;&amp;gt; `MAX_PACKAGE_SIZE=101KvB` total size [8]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    *Rationale*: This is already enforced as mempool ancestor/descendant&lt;br/&gt;&amp;gt; limits.&lt;br/&gt;&amp;gt; Presumably, transactions in a package are all related, so exceeding this&lt;br/&gt;&amp;gt; limit&lt;br/&gt;&amp;gt; would mean that the package can either be split up or it wouldn&amp;#39;t pass this&lt;br/&gt;&amp;gt; mempool policy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. Packages must be topologically sorted: if any dependencies exist between&lt;br/&gt;&amp;gt; transactions, parents must appear somewhere before children. [8]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 3. A package cannot have conflicting transactions, i.e. none of them can&lt;br/&gt;&amp;gt; spend&lt;br/&gt;&amp;gt; the same inputs. This also means there cannot be duplicate transactions.&lt;br/&gt;&amp;gt; [8]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 4. When packages are evaluated against ancestor/descendant limits in a test&lt;br/&gt;&amp;gt; accept, the union of all of their descendants and ancestors is considered.&lt;br/&gt;&amp;gt; This&lt;br/&gt;&amp;gt; is essentially a &amp;#34;worst case&amp;#34; heuristic where every transaction in the&lt;br/&gt;&amp;gt; package&lt;br/&gt;&amp;gt; is treated as each other&amp;#39;s ancestor and descendant. [8]&lt;br/&gt;&amp;gt; Packages for which ancestor/descendant limits are accurately captured by&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; heuristic: [19]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are also limitations such as the fact that CPFP carve out is not&lt;br/&gt;&amp;gt; applied&lt;br/&gt;&amp;gt; to package transactions. #20833 also disables RBF in package validation;&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; proposal overrides that to allow packages to use RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Proposed Changes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The next step in the Package Mempool Accept project is to implement&lt;br/&gt;&amp;gt; submission&lt;br/&gt;&amp;gt; to mempool, initially through RPC only. This allows us to test the&lt;br/&gt;&amp;gt; submission&lt;br/&gt;&amp;gt; logic before exposing it on P2P.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Summary&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Packages may contain already-in-mempool transactions.&lt;br/&gt;&amp;gt; - Packages are 2 generations, Multi-Parent-1-Child.&lt;br/&gt;&amp;gt; - Fee-related checks use the package feerate. This means that wallets can&lt;br/&gt;&amp;gt; create a package that utilizes CPFP.&lt;br/&gt;&amp;gt; - Parents are allowed to RBF mempool transactions with a set of rules&lt;br/&gt;&amp;gt; similar&lt;br/&gt;&amp;gt;   to BIP125. This enables a combination of CPFP and RBF, where a&lt;br/&gt;&amp;gt; transaction&amp;#39;s descendant fees pay for replacing mempool conflicts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is a draft implementation in [#22290][1]. It is WIP, but feedback is&lt;br/&gt;&amp;gt; always welcome.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Details&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #### Packages May Contain Already-in-Mempool Transactions&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A package may contain transactions that are already in the mempool. We&lt;br/&gt;&amp;gt; remove&lt;br/&gt;&amp;gt; (&amp;#34;deduplicate&amp;#34;) those transactions from the package for the purposes of&lt;br/&gt;&amp;gt; package&lt;br/&gt;&amp;gt; mempool acceptance. If a package is empty after deduplication, we do&lt;br/&gt;&amp;gt; nothing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*: Mempools vary across the network. It&amp;#39;s possible for a parent&lt;br/&gt;&amp;gt; to be&lt;br/&gt;&amp;gt; accepted to the mempool of a peer on its own due to differences in policy&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; fee market fluctuations. We should not reject or penalize the entire&lt;br/&gt;&amp;gt; package for&lt;br/&gt;&amp;gt; an individual transaction as that could be a censorship vector.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #### Packages Are Multi-Parent-1-Child&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Only packages of a specific topology are permitted. Namely, a package is&lt;br/&gt;&amp;gt; exactly&lt;br/&gt;&amp;gt; 1 child with all of its unconfirmed parents. After deduplication, the&lt;br/&gt;&amp;gt; package&lt;br/&gt;&amp;gt; may be exactly the same, empty, 1 child, 1 child with just some of its&lt;br/&gt;&amp;gt; unconfirmed parents, etc. Note that it&amp;#39;s possible for the parents to be&lt;br/&gt;&amp;gt; indirect&lt;br/&gt;&amp;gt; descendants/ancestors of one another, or for parent and child to share a&lt;br/&gt;&amp;gt; parent,&lt;br/&gt;&amp;gt; so we cannot make any other topology assumptions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*: This allows for fee-bumping by CPFP. Allowing multiple parents&lt;br/&gt;&amp;gt; makes it possible to fee-bump a batch of transactions. Restricting&lt;br/&gt;&amp;gt; packages to a&lt;br/&gt;&amp;gt; defined topology is also easier to reason about and simplifies the&lt;br/&gt;&amp;gt; validation&lt;br/&gt;&amp;gt; logic greatly. Multi-parent-1-child allows us to think of the package as&lt;br/&gt;&amp;gt; one big&lt;br/&gt;&amp;gt; transaction, where:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Inputs = all the inputs of parents &#43; inputs of the child that come from&lt;br/&gt;&amp;gt;   confirmed UTXOs&lt;br/&gt;&amp;gt; - Outputs = all the outputs of the child &#43; all outputs of the parents that&lt;br/&gt;&amp;gt;   aren&amp;#39;t spent by other transactions in the package&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Examples of packages that follow this rule (variations of example A show&lt;br/&gt;&amp;gt; some&lt;br/&gt;&amp;gt; possibilities after deduplication): ![image][15]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #### Fee-Related Checks Use Package Feerate&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Package Feerate = the total modified fees divided by the total virtual&lt;br/&gt;&amp;gt; size of&lt;br/&gt;&amp;gt; all transactions in the package.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To meet the two feerate requirements of a mempool, i.e., the pre-configured&lt;br/&gt;&amp;gt; minimum relay feerate (`minRelayTxFee`) and dynamic mempool minimum&lt;br/&gt;&amp;gt; feerate, the&lt;br/&gt;&amp;gt; total package feerate is used instead of the individual feerate. The&lt;br/&gt;&amp;gt; individual&lt;br/&gt;&amp;gt; transactions are allowed to be below feerate requirements if the package&lt;br/&gt;&amp;gt; meets&lt;br/&gt;&amp;gt; the feerate requirements. For example, the parent(s) in the package can&lt;br/&gt;&amp;gt; have 0&lt;br/&gt;&amp;gt; fees but be paid for by the child.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*: This can be thought of as &amp;#34;CPFP within a package,&amp;#34; solving the&lt;br/&gt;&amp;gt; issue of a parent not meeting minimum fees on its own. This allows L2&lt;br/&gt;&amp;gt; applications to adjust their fees at broadcast time instead of&lt;br/&gt;&amp;gt; overshooting or&lt;br/&gt;&amp;gt; risking getting stuck/pinned.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We use the package feerate of the package *after deduplication*.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*:  It would be incorrect to use the fees of transactions that&lt;br/&gt;&amp;gt; are&lt;br/&gt;&amp;gt; already in the mempool, as we do not want a transaction&amp;#39;s fees to be&lt;br/&gt;&amp;gt; double-counted for both its individual RBF and package RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Examples F and G [14] show the same package, but P1 is submitted&lt;br/&gt;&amp;gt; individually before&lt;br/&gt;&amp;gt; the package in example G. In example F, we can see that the 300vB package&lt;br/&gt;&amp;gt; pays&lt;br/&gt;&amp;gt; an additional 200sat in fees, which is not enough to pay for its own&lt;br/&gt;&amp;gt; bandwidth&lt;br/&gt;&amp;gt; (BIP125#4). In example G, we can see that P1 pays enough to replace M1, but&lt;br/&gt;&amp;gt; using P1&amp;#39;s fees again during package submission would make it look like a&lt;br/&gt;&amp;gt; 300sat&lt;br/&gt;&amp;gt; increase for a 200vB package. Even including its fees and size would not be&lt;br/&gt;&amp;gt; sufficient in this example, since the 300sat looks like enough for the&lt;br/&gt;&amp;gt; 300vB&lt;br/&gt;&amp;gt; package. The calculcation after deduplication is 100sat increase for a&lt;br/&gt;&amp;gt; package&lt;br/&gt;&amp;gt; of size 200vB, which correctly fails BIP125#4. Assume all transactions&lt;br/&gt;&amp;gt; have a&lt;br/&gt;&amp;gt; size of 100vB.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #### Package RBF&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If a package meets feerate requirements as a package, the parents in the&lt;br/&gt;&amp;gt; transaction are allowed to replace-by-fee mempool transactions. The child&lt;br/&gt;&amp;gt; cannot&lt;br/&gt;&amp;gt; replace mempool transactions. Multiple transactions can replace the same&lt;br/&gt;&amp;gt; transaction, but in order to be valid, none of the transactions can try to&lt;br/&gt;&amp;gt; replace an ancestor of another transaction in the same package (which&lt;br/&gt;&amp;gt; would thus&lt;br/&gt;&amp;gt; make its inputs unavailable).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*: Even if we are using package feerate, a package will not&lt;br/&gt;&amp;gt; propagate&lt;br/&gt;&amp;gt; as intended if RBF still requires each individual transaction to meet the&lt;br/&gt;&amp;gt; feerate requirements.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We use a set of rules slightly modified from BIP125 as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ##### Signaling (Rule #1)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All mempool transactions to be replaced must signal replaceability.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*: Package RBF signaling logic should be the same for package&lt;br/&gt;&amp;gt; RBF and&lt;br/&gt;&amp;gt; single transaction acceptance. This would be updated if single transaction&lt;br/&gt;&amp;gt; validation moves to full RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ##### New Unconfirmed Inputs (Rule #2)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A package may include new unconfirmed inputs, but the ancestor feerate of&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; child must be at least as high as the ancestor feerates of every&lt;br/&gt;&amp;gt; transaction&lt;br/&gt;&amp;gt; being replaced. This is contrary to BIP125#2, which states &amp;#34;The replacement&lt;br/&gt;&amp;gt; transaction may only include an unconfirmed input if that input was&lt;br/&gt;&amp;gt; included in&lt;br/&gt;&amp;gt; one of the original transactions. (An unconfirmed input spends an output&lt;br/&gt;&amp;gt; from a&lt;br/&gt;&amp;gt; currently-unconfirmed transaction.)&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *Rationale*: The purpose of BIP125#2 is to ensure that the replacement&lt;br/&gt;&amp;gt; transaction has a higher ancestor score than the original transaction(s)&lt;br/&gt;&amp;gt; (see&lt;br/&gt;&amp;gt; [comment][13]). Example H [16] shows how adding a new unconfirmed input&lt;br/&gt;&amp;gt; can lower the&lt;br/&gt;&amp;gt; ancestor score of the replacement transaction. P1 is trying to replace M1,&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; spends an unconfirmed output of M2. P1 pays 800sat, M1 pays 600sat, and M2&lt;br/&gt;&amp;gt; pays&lt;br/&gt;&amp;gt; 100sat. Assume all transactions have a size of 100vB. While, in isolation,&lt;br/&gt;&amp;gt; P1&lt;br/&gt;&amp;gt; looks like a better mining candidate than M1, it must be mined with M2, so&lt;br/&gt;&amp;gt; its&lt;br/&gt;&amp;gt; ancestor feerate is actually 4.5sat/vB.  This is lower than M1&amp;#39;s ancestor&lt;br/&gt;&amp;gt; feerate, which is 6sat/vB.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In package RBF, the rule analogous to BIP125#2 would be &amp;#34;none of the&lt;br/&gt;&amp;gt; transactions in the package can spend new unconfirmed inputs.&amp;#34; Example J&lt;br/&gt;&amp;gt; [17] shows&lt;br/&gt;&amp;gt; why, if any of the package transactions have ancestors, package feerate is&lt;br/&gt;&amp;gt; no&lt;br/&gt;&amp;gt; longer accurate. Even though M2 and M3 are not ancestors of P1 (which is&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; replacement transaction in an RBF), we&amp;#39;re actually interested in the entire&lt;br/&gt;&amp;gt; package. A miner should mine M1 which is 5sat/vB instead of M2, M3, P1,&lt;br/&gt;&amp;gt; P2, and&lt;br/&gt;&amp;gt; P3, which is only 4sat/vB. The Package RBF rule cannot be loosened to only&lt;br/&gt;&amp;gt; allow&lt;br/&gt;&amp;gt; the child to have new unconfirmed inputs, either, because it can still&lt;br/&gt;&amp;gt; cause us&lt;br/&gt;&amp;gt; to overestimate the package&amp;#39;s ancestor score.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, enforcing a rule analogous to BIP125#2 would not only make&lt;br/&gt;&amp;gt; Package RBF&lt;br/&gt;&amp;gt; less useful, but would also break Package RBF for packages with parents&lt;br/&gt;&amp;gt; already&lt;br/&gt;&amp;gt; in the mempool: if a package parent has already been submitted, it would&lt;br/&gt;&amp;gt; look&lt;br/&gt;&amp;gt; like the child is spending a &amp;#34;new&amp;#34; unconfirmed input. In example K [18],&lt;br/&gt;&amp;gt; we&amp;#39;re&lt;br/&gt;&amp;gt; looking to replace M1 with the entire package including P1, P2, and P3. We&lt;br/&gt;&amp;gt; must&lt;br/&gt;&amp;gt; consider the case where one of the parents is already in the mempool (in&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; case, P2), which means we must allow P3 to have new unconfirmed inputs.&lt;br/&gt;&amp;gt; However,&lt;br/&gt;&amp;gt; M2 lowers the ancestor score of P3 to 4.3sat/vB, so we should not replace&lt;br/&gt;&amp;gt; M1&lt;br/&gt;&amp;gt; with this package.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, the package RBF rule regarding new unconfirmed inputs is less strict&lt;br/&gt;&amp;gt; than&lt;br/&gt;&amp;gt; BIP125#2. However, we still achieve the same goal of requiring the&lt;br/&gt;&amp;gt; replacement&lt;br/&gt;&amp;gt; transactions to have a ancestor score at least as high as the original&lt;br/&gt;&amp;gt; ones. As&lt;br/&gt;&amp;gt; a result, the entire package is required to be a higher feerate mining&lt;br/&gt;&amp;gt; candidate&lt;br/&gt;&amp;gt; than each of the replaced transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Another note: the [comment][13] above the BIP125#2 code in the original RBF&lt;br/&gt;&amp;gt; implementation suggests that the rule was intended to be temporary.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ##### Absolute Fee (Rule #3)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The package must increase the absolute fee of the mempool, i.e. the total&lt;br/&gt;&amp;gt; fees&lt;br/&gt;&amp;gt; of the package must be higher than the absolute fees of the mempool&lt;br/&gt;&amp;gt; transactions&lt;br/&gt;&amp;gt; it replaces. Combined with the CPFP rule above, this differs from BIP125&lt;br/&gt;&amp;gt; Rule #3&lt;br/&gt;&amp;gt; - an individual transaction in the package may have lower fees than the&lt;br/&gt;&amp;gt;   transaction(s) it is replacing. In fact, it may have 0 fees, and the&lt;br/&gt;&amp;gt; child&lt;br/&gt;&amp;gt; pays for RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ##### Feerate (Rule #4)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The package must pay for its own bandwidth; the package feerate must be&lt;br/&gt;&amp;gt; higher&lt;br/&gt;&amp;gt; than the replaced transactions by at least minimum relay feerate&lt;br/&gt;&amp;gt; (`incrementalRelayFee`). Combined with the CPFP rule above, this differs&lt;br/&gt;&amp;gt; from&lt;br/&gt;&amp;gt; BIP125 Rule #4 - an individual transaction in the package can have a lower&lt;br/&gt;&amp;gt; feerate than the transaction(s) it is replacing. In fact, it may have 0&lt;br/&gt;&amp;gt; fees,&lt;br/&gt;&amp;gt; and the child pays for RBF.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ##### Total Number of Replaced Transactions (Rule #5)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The package cannot replace more than 100 mempool transactions. This is&lt;br/&gt;&amp;gt; identical&lt;br/&gt;&amp;gt; to BIP125 Rule #5.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Expected FAQs&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Is it possible for only some of the package to make it into the mempool?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    Yes, it is. However, since we evict transactions from the mempool by&lt;br/&gt;&amp;gt; descendant score and the package child is supposed to be sponsoring the&lt;br/&gt;&amp;gt; fees of&lt;br/&gt;&amp;gt; its parents, the most common scenario would be all-or-nothing. This is&lt;br/&gt;&amp;gt; incentive-compatible. In fact, to be conservative, package validation&lt;br/&gt;&amp;gt; should&lt;br/&gt;&amp;gt; begin by trying to submit all of the transactions individually, and only&lt;br/&gt;&amp;gt; use the&lt;br/&gt;&amp;gt; package mempool acceptance logic if the parents fail due to low feerate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. Should we allow packages to contain already-confirmed transactions?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     No, for practical reasons. In mempool validation, we actually aren&amp;#39;t&lt;br/&gt;&amp;gt; able to&lt;br/&gt;&amp;gt; tell with 100% confidence if we are looking at a transaction that has&lt;br/&gt;&amp;gt; already&lt;br/&gt;&amp;gt; confirmed, because we look up inputs using a UTXO set. If we have&lt;br/&gt;&amp;gt; historical&lt;br/&gt;&amp;gt; block data, it&amp;#39;s possible to look for it, but this is inefficient, not&lt;br/&gt;&amp;gt; always&lt;br/&gt;&amp;gt; possible for pruning nodes, and unnecessary because we&amp;#39;re not going to do&lt;br/&gt;&amp;gt; anything with the transaction anyway. As such, we already have the&lt;br/&gt;&amp;gt; expectation&lt;br/&gt;&amp;gt; that transaction relay is somewhat &amp;#34;stateful&amp;#34; i.e. nobody should be&lt;br/&gt;&amp;gt; relaying&lt;br/&gt;&amp;gt; transactions that have already been confirmed. Similarly, we shouldn&amp;#39;t be&lt;br/&gt;&amp;gt; relaying packages that contain already-confirmed transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22290&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22290&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/1f0b563738199ca60d32b4ba779797fc97d040fe/bip-0141.mediawiki#transaction-size-calculations&#34;&gt;https://github.com/bitcoin/bips/blob/1f0b563738199ca60d32b4ba779797fc97d040fe/bip-0141.mediawiki#transaction-size-calculations&lt;/a&gt;&lt;br/&gt;&amp;gt; [3]:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/94f83534e4b771944af7d9ed0f40746f392eb75e/src/policy/policy.cpp#L282&#34;&gt;https://github.com/bitcoin/bitcoin/blob/94f83534e4b771944af7d9ed0f40746f392eb75e/src/policy/policy.cpp#L282&lt;/a&gt;&lt;br/&gt;&amp;gt; [4]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16400&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16400&lt;/a&gt;&lt;br/&gt;&amp;gt; [5]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/21062&#34;&gt;https://github.com/bitcoin/bitcoin/pull/21062&lt;/a&gt;&lt;br/&gt;&amp;gt; [6]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22675&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22675&lt;/a&gt;&lt;br/&gt;&amp;gt; [7]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/22796&#34;&gt;https://github.com/bitcoin/bitcoin/pull/22796&lt;/a&gt;&lt;br/&gt;&amp;gt; [8]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/20833&#34;&gt;https://github.com/bitcoin/bitcoin/pull/20833&lt;/a&gt;&lt;br/&gt;&amp;gt; [9]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/21800&#34;&gt;https://github.com/bitcoin/bitcoin/pull/21800&lt;/a&gt;&lt;br/&gt;&amp;gt; [10]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16401&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16401&lt;/a&gt;&lt;br/&gt;&amp;gt; [11]: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/19621&#34;&gt;https://github.com/bitcoin/bitcoin/pull/19621&lt;/a&gt;&lt;br/&gt;&amp;gt; [12]: &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;&lt;br/&gt;&amp;gt; [13]:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/6871/files#diff-34d21af3c614ea3cee120df276c9c4ae95053830d7f1d3deaf009a4625409ad2R1101-R1104&#34;&gt;https://github.com/bitcoin/bitcoin/pull/6871/files#diff-34d21af3c614ea3cee120df276c9c4ae95053830d7f1d3deaf009a4625409ad2R1101-R1104&lt;/a&gt;&lt;br/&gt;&amp;gt; [14]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567078-075a971c-0619-4339-9168-b41fd2b90c28.png&#34;&gt; &lt;br/&gt;&amp;gt; [15]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/132856734-fc17da75-f875-44bb-b954-cb7a1725cc0d.png&#34;&gt; &lt;br/&gt;&amp;gt; [16]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567347-a3e2e4a8-ae9c-49f8-abb9-81e8e0aba224.png&#34;&gt; &lt;br/&gt;&amp;gt; [17]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567370-21566d0e-36c8-4831-b1a8-706634540af3.png&#34;&gt; &lt;br/&gt;&amp;gt; [18]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133567444-bfff1142-439f-4547-800a-2ba2b0242bcb.png&#34;&gt; &lt;br/&gt;&amp;gt; [19]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/133456219-0bb447cb-dcb4-4a31-b9c1-7d86205b68bc.png&#34;&gt; &lt;br/&gt;&amp;gt; [20]:&lt;br/&gt;&amp;gt;  &lt;img src=&#34;https://user-images.githubusercontent.com/25183001/132857787-7b7c6f56-af96-44c8-8d78-983719888c19.png&#34;&gt; &lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20210919/f11e1976/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210919/f11e1976/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:59:16&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0gh3z0vc9wskqpwfgzl0cjfgxzqvkwfqrrp30kya8777n95vc5qgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z036acw</id>
    
      <title type="html">📅 Original date posted:2021-04-23 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0gh3z0vc9wskqpwfgzl0cjfgxzqvkwfqrrp30kya8777n95vc5qgzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z036acw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspyltuj4rxejk8cglnm7f572cx9fsw2fjncp2patt8v23mvzf08acy894nu&#39;&gt;nevent1q…94nu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-23&lt;br/&gt;📝 Original message:Hi Luke,&lt;br/&gt;&lt;br/&gt;For the records and the subscribers of this list not following&lt;br/&gt;#bitcoin-core-dev, this mail follows a discussion which did happen during&lt;br/&gt;yesterday irc meetings.&lt;br/&gt;Logs here : &lt;a href=&#34;http://gnusha.org/bitcoin-core-dev/2021-04-22.log&#34;&gt;http://gnusha.org/bitcoin-core-dev/2021-04-22.log&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;ll reiterate my opinion expressed during the meeting. If this proposal to&lt;br/&gt;extend the bip editorship membership doesn&amp;#39;t satisfy parties involved or&lt;br/&gt;anyone in the community, I&amp;#39;m strongly opposed to have the matter sliced by&lt;br/&gt;admins of the Bitcoin github org. I believe that defect or uncertainty in&lt;br/&gt;the BIP Process shouldn&amp;#39;t be solved by GH janitorial roles and I think&lt;br/&gt;their roles don&amp;#39;t bestow to intervene in case of loopholes. Further, you&lt;br/&gt;have far more contributors involved in the BIP Process rather than only&lt;br/&gt;Bitcoin Core ones. FWIW, such precedent merits would be quite similar to&lt;br/&gt;lobby directly GH staff...&lt;br/&gt;&lt;br/&gt;Unless we harm Bitcoin users by not acting, I think we should always be&lt;br/&gt;respectful of procedural forms. And in the lack of such forms, stay patient&lt;br/&gt;until a solution satisfy everyone.&lt;br/&gt;&lt;br/&gt;I would recommend the BIP editorship, once extended or not, to move in its&lt;br/&gt;own repository in the future.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le jeu. 22 avr. 2021 à 22:09, Luke Dashjr via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Unless there are objections, I intend to add Kalle Alm as a BIP editor to&lt;br/&gt;&amp;gt; assist in merging PRs into the bips git repo.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since there is no explicit process to adding BIP editors, IMO it should be&lt;br/&gt;&amp;gt; fine to use BIP 2&amp;#39;s Process BIP progression:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A process BIP may change status from Draft to Active when it achieves&lt;br/&gt;&amp;gt; &amp;gt; rough consensus on the mailing list. Such a proposal is said to have&lt;br/&gt;&amp;gt; &amp;gt; rough consensus if it has been open to discussion on the development&lt;br/&gt;&amp;gt; &amp;gt; mailing list for at least one month, and no person maintains any&lt;br/&gt;&amp;gt; &amp;gt; unaddressed substantiated objections to it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A Process BIP could be opened for each new editor, but IMO that is&lt;br/&gt;&amp;gt; unnecessary. If anyone feels there is a need for a new Process BIP, we can&lt;br/&gt;&amp;gt; go&lt;br/&gt;&amp;gt; that route, but there is prior precedent for BIP editors appointing new&lt;br/&gt;&amp;gt; BIP&lt;br/&gt;&amp;gt; editors, so I think this should be fine.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please speak up soon if you disagree.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Luke&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20210423/fb5bccd8/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210423/fb5bccd8/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T00:52:04&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswzcxelat96d2vwgpzrjzk9v7297wfcnqakstw9pe3ykwaxu007pszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zkhlrqh</id>
    
      <title type="html">📅 Original date posted:2020-09-20 📝 Original message:Right, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswzcxelat96d2vwgpzrjzk9v7297wfcnqakstw9pe3ykwaxu007pszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zkhlrqh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyfhhssazchdm27dar5qu369jsjm5cyfpv9nd6cayeuxzwgnycpws3khlz9&#39;&gt;nevent1q…hlz9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-09-20&lt;br/&gt;📝 Original message:Right, I was off the shot. Thanks for the explanation.&lt;br/&gt;&lt;br/&gt;As you mentioned, if the goal of the sponsor mechanism is to let any party&lt;br/&gt;drive a state N&amp;#39;s first tx to completion, you still have the issue of&lt;br/&gt;concurrent states being pinned and thus non-observable for sponsoring by an&lt;br/&gt;honest party.&lt;br/&gt;&lt;br/&gt;E.g, Bob can broadcast a thousand of revoked LN states and pin them with&lt;br/&gt;low-feerate sponsors such as these malicious packages absolute fee are&lt;br/&gt;higher than the honest state N. Alice can&amp;#39;t fee-sponsor&lt;br/&gt;them as we can assume she hasn&amp;#39;t a global view of network mempools. Due to&lt;br/&gt;the proposed policy rule &amp;#34;The Sponsor Vector&amp;#39;s entry must be present in the&lt;br/&gt;mempool&amp;#34;, Alice&amp;#39;s sponsors won&amp;#39;t propagate. Even amending this rule, we&lt;br/&gt;can&amp;#39;t assume Alice has a thousand of sponsoring utxos to avoid conflict&lt;br/&gt;between her own broadcast.&lt;br/&gt;&lt;br/&gt;Of course, offchain protocols designers can limit a participant&amp;#39;s&lt;br/&gt;capability to construct a pinning package by constraining its malleability&lt;br/&gt;and thus to always have a compelling feerate. E.g in Lightning you can bind&lt;br/&gt;the size of a commitment transaction by refusing relayed HTLCs and thus&lt;br/&gt;have less HTLC outputs. This security increase comes at the price of less&lt;br/&gt;protocol flexibility, e.g reducing payments throughput.&lt;br/&gt;&lt;br/&gt;Further, a malicious counterparty can still take advantage of&lt;br/&gt;mempool-congestion spikes. Even if the pinning package has a compelling&lt;br/&gt;feerate, high enough to bounce off a honest broadcast, there is no&lt;br/&gt;guarantee it stays such. Just after the pinning, congestion can increase&lt;br/&gt;and bury it for long-enough until a timelock expires.&lt;br/&gt;&lt;br/&gt;If we want to solve the hard cases of pinning, I still think mempool&lt;br/&gt;acceptance of a whole package only on the merits of feerate is the easiest&lt;br/&gt;solution to reason on.&lt;br/&gt;&lt;br/&gt;Le sam. 19 sept. 2020 à 15:46, Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes I think you&amp;#39;re a bit confused on where the actual sponsor vector is.&lt;br/&gt;&amp;gt; If you have a transaction chain A-&amp;gt;B-&amp;gt;C and a sponsor S_A, S_A commits to&lt;br/&gt;&amp;gt; txid A and A is unaware of S.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; W.r.t your other points, I fully agree that the 1-to-N sponsored case is&lt;br/&gt;&amp;gt; very compelling. The consensus rules are clear that sponsor commitments are&lt;br/&gt;&amp;gt; non-rival, so there&amp;#39;s no issue with allowing as many sponsors as possible&lt;br/&gt;&amp;gt; and including them in aggregate. E.g., if S_A and S&amp;#39;_A both sponsor A with&lt;br/&gt;&amp;gt; feerate(S*) &amp;gt; feerate(A), there&amp;#39;s no reason not to include all of them in a&lt;br/&gt;&amp;gt; block. The only issue is denial of service in the mempool. In the future,&lt;br/&gt;&amp;gt; it would definitely be desirable to figure out rules that allow mempools to&lt;br/&gt;&amp;gt; track both multiple sponsors and multiple sponsor targets. But in the&lt;br/&gt;&amp;gt; interest of KISS, the current policy rules are designed to be minimally&lt;br/&gt;&amp;gt; invasive and maximally functional.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In terms of location for the sponsor vector, I&amp;#39;m relatively indifferent.&lt;br/&gt;&amp;gt; The annex is a possible location, but it&amp;#39;s a bit odd as we really only need&lt;br/&gt;&amp;gt; to allow one such vector per tx, not one per input, and one per input would&lt;br/&gt;&amp;gt; enable some new use cases (maybe good, maybe bad). Further, being in the&lt;br/&gt;&amp;gt; witness space would mean that if two parties create a 2 input transaction&lt;br/&gt;&amp;gt; with a desired sponsor vector they would both need to specify it as you&lt;br/&gt;&amp;gt; can&amp;#39;t sign another input&amp;#39;s witness data. I wholeheartedly agree with the&lt;br/&gt;&amp;gt; sentiment though; there could be a more efficient place to put this data,&lt;br/&gt;&amp;gt; but nothing jumps out to me as both efficient and simple in implementation&lt;br/&gt;&amp;gt; (a new tx-level field sounds like a lot of complexity).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; n &amp;gt;=1 ? I think you can have at least one vector and this is matching&lt;br/&gt;&amp;gt; the code&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; yes, this has been fixed in the gist (cred to Dmitry Petukhov for pointing&lt;br/&gt;&amp;gt; it out first), but is correct in the code. Thank you for your careful&lt;br/&gt;&amp;gt; reading.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200920/d9355f8d/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200920/d9355f8d/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:26:57&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs285fcuvl0dh2wfzr8clj39r58lu7r25qaeapdm450708vapha34qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2ekjwm</id>
    
      <title type="html">📅 Original date posted:2020-09-19 📝 Original message:EDIT: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs285fcuvl0dh2wfzr8clj39r58lu7r25qaeapdm450708vapha34qzypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24z2ekjwm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswugq36lz4eqmla94t7mexqvlxrzvs8d2pc2d403vd937nsvk9mhsr3y4vw&#39;&gt;nevent1q…y4vw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-09-19&lt;br/&gt;📝 Original message:EDIT: I misunderstood the emplacement of the sponsor vector, please&lt;br/&gt;disregard previous review :( Beyond where the convenient place should live,&lt;br/&gt;which is still accurate I think.&lt;br/&gt;&lt;br/&gt;&amp;gt; The&lt;br/&gt;&amp;gt; Sponsor Vector TXIDs  must also be&lt;br/&gt;&amp;gt; in the block the transaction is validated in, with no restriction on&lt;br/&gt;&amp;gt; order or on specifying a TXID&lt;br/&gt;&amp;gt; more than once.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Le sam. 19 sept. 2020 à 14:39, Antoine Riard &amp;lt;antoine.riard at gmail.com&amp;gt; a&lt;br/&gt;écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Jeremy,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is a really interesting proposal to widen the scope of fee&lt;br/&gt;&amp;gt; mechanisms.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First, a wider point on what this proposal brings with regards to pinning,&lt;br/&gt;&amp;gt; to the best of my knowledge.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A pinning may have different vectors by exploiting a) mempools limits (e.g&lt;br/&gt;&amp;gt; descendants) or b) mempools absolute-fee/feerate/conflicts logic. The lack&lt;br/&gt;&amp;gt; of a global mempool means you can creatively combine them to provoke&lt;br/&gt;&amp;gt; mempools-partitions [0]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As far as I understand this proposal, it aims to solve the class a) of&lt;br/&gt;&amp;gt; pinnings by allowing fee-bumping with a new definition of dependencies. I&amp;#39;m&lt;br/&gt;&amp;gt; not sure it achieves to do  so as the Sponsor Vector TXIDs being committed&lt;br/&gt;&amp;gt; in the Sponsoree signature hash means the Sponsor feerate is part of this&lt;br/&gt;&amp;gt; commitment and can&amp;#39;t be unilaterally adjusted to actual mempool-congestion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After broadcasting the Sponsor/Sponsoree pair, mempools feerate may&lt;br/&gt;&amp;gt; increase again and thus obsoleting the previous fee-bump. Or you need a&lt;br/&gt;&amp;gt; Sponsor Vector for every blockspace feerate, in the worst-case bound by the&lt;br/&gt;&amp;gt; value of the Sponsoree funds.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Further, I would say this proposal won&amp;#39;t solve class b) of pinnings for&lt;br/&gt;&amp;gt; multi-party time-sensitive protocols without further modifications. E.g in&lt;br/&gt;&amp;gt; a LN-channel, assuming the commitment transaction is the Sponsoree, Alice&lt;br/&gt;&amp;gt; the honest party can&amp;#39;t increase Sponsor feerate by mal eating its outputs&lt;br/&gt;&amp;gt; without breaking the sponsoring dependency. And thus evict a Bob&amp;#39;s&lt;br/&gt;&amp;gt; malicious pin across network mempools.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think a further softfork proposal with regards to sighash malleability&lt;br/&gt;&amp;gt; is needed to achieve the security semantic for Lightning type of protocols.&lt;br/&gt;&amp;gt; Roughly, a SIGHASH_IOVECTOR allows N-inputs to commit to N-outputs, thus&lt;br/&gt;&amp;gt; committing to all the balance/HTLC outputs minus the last output Vector,&lt;br/&gt;&amp;gt; non-interactively malleable by channel participants. This would be a form&lt;br/&gt;&amp;gt; of transaction finalization delegation, allowing Alice to direct the&lt;br/&gt;&amp;gt; Sponsor vector to a good-feerate adjusted transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note, I may have misunderstood completely the proposal as the feerate&lt;br/&gt;&amp;gt; observed might be the Sponsor _package_ one and each party could have a&lt;br/&gt;&amp;gt; pair of outputs to spend from to non-interactively increase the Sponsoree.&lt;br/&gt;&amp;gt; Though sounds like re-introducing the limits issues...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That said, see following review points.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is insufficient because if new attacks are found, there is&lt;br/&gt;&amp;gt; &amp;gt; limited ability to deploy fixes for&lt;br/&gt;&amp;gt; &amp;gt; them against deployed contract instances (such as open lightning&lt;br/&gt;&amp;gt; &amp;gt; channels). What is required is a&lt;br/&gt;&amp;gt; &amp;gt; fully abstracted primitive that requires no special structure from an&lt;br/&gt;&amp;gt; &amp;gt; underlying transaction in&lt;br/&gt;&amp;gt; &amp;gt; order to increase fees to confirm the transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is really true, in case of vulnerability discovered mass closing of&lt;br/&gt;&amp;gt; the channel would be in itself a concern as it would congest mempools and&lt;br/&gt;&amp;gt; open to looter behaviors [1]. Though I don&amp;#39;t think a special structure can&lt;br/&gt;&amp;gt; claim covering every potential source of vulnerability for  off-chain&lt;br/&gt;&amp;gt; protocols as some of them might be tx-relay based (e.g reject-filters for&lt;br/&gt;&amp;gt; segwit txn).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Further, a &amp;#34;fully abstracted primitive&amp;#34; is loosely defined, one could&lt;br/&gt;&amp;gt; argue that anchor outputs don&amp;#39;t require special structure from an&lt;br/&gt;&amp;gt; underlying transaction (i.e on the order of outputs ?).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;  where&lt;br/&gt;&amp;gt; n&amp;gt;1, it is interpreted as a vector of TXIDs (Sponsor Vector).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; n &amp;gt;=1 ? I think you can have at least one vector and this is matching the&lt;br/&gt;&amp;gt; code&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If there is another convenient place to put the TXID vector, that&amp;#39;s fine&lt;br/&gt;&amp;gt; too.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You might use the per-input future Taproot annex, and even apply a witness&lt;br/&gt;&amp;gt; discount as this mechanism could be argued to be less blockspace expensive&lt;br/&gt;&amp;gt; than a CPFP for the same semantic.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An alternative could be a new transaction field like a new `stxid` :&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; `[nVersion][marker][flag][txins][txouts][witness][nLockTime][nSponsor][nVersion][n*STXID]`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It would be cheaper as you likely save the output amount size and OP_VER.&lt;br/&gt;&amp;gt; And you don&amp;#39;t have to subtract a dust output &#43; 1 from the other output&lt;br/&gt;&amp;gt; amount to make sure the Sponsor output meets dust propagation requirements.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Though it&amp;#39;s more demanding on the tx-relay layer (new serialization and&lt;br/&gt;&amp;gt; transaction identifier) and new a version bump of the signature digest algo&lt;br/&gt;&amp;gt; to avoid a third-party malleating the per-transaction sponsor field&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; To prevent garbage sponsors, we also require that:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Does the reverse hold ? Garbage Sponsoree by breaking the dependency and&lt;br/&gt;&amp;gt; double-spending the utxo spent by the Sponsor and thus decreasing&lt;br/&gt;&amp;gt; Sponsoree&amp;#39;s feerate to mempool bottom. AFAIK you can&amp;#39;t do this with CPFP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; rational miners may wish to permit multiple sponsor&lt;br/&gt;&amp;gt; &amp;gt; targets, or multiple sponsoring&lt;br/&gt;&amp;gt; &amp;gt; transactions,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m not sure if your policy sktech prevents multiple&lt;br/&gt;&amp;gt; 1-Sponsor-to-N-Sponsoree. Such a scheme would have some edges. A mempool&lt;br/&gt;&amp;gt; might receive Sponsoree in different order than evaluated by original&lt;br/&gt;&amp;gt; sender and thus allocate the Sponsor feerate to the less-urgent Sponsoree.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is treated as a separate&lt;br/&gt;&amp;gt; &amp;gt; concern, as any strides on&lt;br/&gt;&amp;gt; &amp;gt; package relay generally should be able to support sponsors trivially.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is one more reason to carefully version package relay, beyond the&lt;br/&gt;&amp;gt; transaction package complexity, you now have a new type of graph dependency&lt;br/&gt;&amp;gt; to scope. What we should be worried about is network mempools partitions&lt;br/&gt;&amp;gt; between different mechanisms of incompatible package relay if we implement&lt;br/&gt;&amp;gt; one.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Overall, a missing point which is making this proposal compelling is the&lt;br/&gt;&amp;gt; fact that you may have one 1-Sponsor-for-N-Sponsoree which is a far reduced&lt;br/&gt;&amp;gt; cost compared to N-Parent-1-CPFP as the CPFP must include an input for each&lt;br/&gt;&amp;gt; bumped parent. Here you only have the Sponsor output. Thus observing&lt;br/&gt;&amp;gt; input_size &amp;gt; output_size, this proposal is better for multi-transactions&lt;br/&gt;&amp;gt; bumping (but not for N=1 as you have to bear the input spending of the&lt;br/&gt;&amp;gt; Sponsor).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Antoine&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0] Within LN-context, for class b) see&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] See the recent Dynamic Commitments proposal to ponder this concern&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-July/002763.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-July/002763.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Le ven. 18 sept. 2020 à 20:52, Jeremy via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Bitcoin Devs,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;d like to share with you a draft proposal for a mechanism to replace CPFP and RBF for&lt;br/&gt;&amp;gt;&amp;gt; increasing fees on transactions in the mempool that should be more robust against attacks.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A reference implementation demonstrating these rules is available&lt;br/&gt;&amp;gt;&amp;gt; [here](&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&lt;/a&gt;) for those who&lt;br/&gt;&amp;gt;&amp;gt; prefer to not read specs.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Should the mailing list formatting be bungled, it is also available as a gist [here](&lt;a href=&#34;https://gist.github.com/JeremyRubin/92a9fc4c6531817f66c2934282e71fdf&#34;&gt;https://gist.github.com/JeremyRubin/92a9fc4c6531817f66c2934282e71fdf&lt;/a&gt;).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Non-Destructive TXID Dependencies for Fee Sponsoring&lt;br/&gt;&amp;gt;&amp;gt; ====================================================&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This BIP proposes a general purpose mechanism for expressing non-destructive (i.e., not requiring&lt;br/&gt;&amp;gt;&amp;gt; the spending of a coin) dependencies on specific transactions being in the same block that can be&lt;br/&gt;&amp;gt;&amp;gt; used to sponsor fees of remote transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Motivation&lt;br/&gt;&amp;gt;&amp;gt; ==========&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mempool has a variety of protections and guards in place to ensure that miners are economic and&lt;br/&gt;&amp;gt;&amp;gt; to protect the network from denial of service.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The rough surface of these policies has some unintended consequences for second layer protocol&lt;br/&gt;&amp;gt;&amp;gt; developers. Applications are either vulnerable to attacks (such as transaction pinning) or must go&lt;br/&gt;&amp;gt;&amp;gt; through great amounts of careful protocol engineering to guard against known mempool attacks.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is insufficient because if new attacks are found, there is limited ability to deploy fixes for&lt;br/&gt;&amp;gt;&amp;gt; them against deployed contract instances (such as open lightning channels). What is required is a&lt;br/&gt;&amp;gt;&amp;gt; fully abstracted primitive that requires no special structure from an underlying transaction in&lt;br/&gt;&amp;gt;&amp;gt; order to increase fees to confirm the transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Consensus Specification&lt;br/&gt;&amp;gt;&amp;gt; =======================&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If a transaction&amp;#39;s last output&amp;#39;s scripPubKey is of the form OP_VER followed by n*32 bytes, where&lt;br/&gt;&amp;gt;&amp;gt; n&amp;gt;1, it is interpreted as a vector of TXIDs (Sponsor Vector). The Sponsor Vector TXIDs  must also be&lt;br/&gt;&amp;gt;&amp;gt; in the block the transaction is validated in, with no restriction on order or on specifying a TXID&lt;br/&gt;&amp;gt;&amp;gt; more than once. This can be accomplished simply with the following patch:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ```diff&lt;br/&gt;&amp;gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;&amp;gt; &#43;    // Extract all required fee dependencies&lt;br/&gt;&amp;gt;&amp;gt; &#43;    std::unordered_set&amp;lt;uint256, SaltedTxidHasher&amp;gt; dependencies;&lt;br/&gt;&amp;gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;&amp;gt; &#43;    const bool dependencies_enabled = VersionBitsState(pindex-&amp;gt;pprev, chainparams.GetConsensus(), Consensus::DeploymentPos::DEPLOYMENT_TXID_DEPENDENCY, versionbitscache) == ThresholdState::ACTIVE;&lt;br/&gt;&amp;gt;&amp;gt; &#43;    if (dependencies_enabled) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;        for (const auto&amp;amp; tx : block.vtx) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;            // dependency output is if the last output of a txn is OP_VER followed by a sequence of 32*n&lt;br/&gt;&amp;gt;&amp;gt; &#43;            // bytes&lt;br/&gt;&amp;gt;&amp;gt; &#43;            // vout.back() must exist because it is checked in CheckBlock&lt;br/&gt;&amp;gt;&amp;gt; &#43;            const CScript&amp;amp; dependencies_script = tx-&amp;gt;vout.back().scriptPubKey;&lt;br/&gt;&amp;gt;&amp;gt; &#43;            // empty scripts are valid, so be sure we have at least one byte&lt;br/&gt;&amp;gt;&amp;gt; &#43;            if (dependencies_script.size() &amp;amp;&amp;amp; dependencies_script[0] == OP_VER) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;                const size_t size = dependencies_script.size() - 1;&lt;br/&gt;&amp;gt;&amp;gt; &#43;                if (size % 32 == 0 &amp;amp;&amp;amp; size &amp;gt; 0) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;                    for (auto start = dependencies_script.begin() &#43;1, stop = start &#43; 32; start &amp;lt; dependencies_script.end(); start = stop, stop &#43;= 32) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;                        uint256 txid;&lt;br/&gt;&amp;gt;&amp;gt; &#43;                        std::copy(start, stop, txid.begin());&lt;br/&gt;&amp;gt;&amp;gt; &#43;                        dependencies.emplace(txid);&lt;br/&gt;&amp;gt;&amp;gt; &#43;                    }&lt;br/&gt;&amp;gt;&amp;gt; &#43;                }&lt;br/&gt;&amp;gt;&amp;gt; &#43;                // No rules applied otherwise, open for future upgrades&lt;br/&gt;&amp;gt;&amp;gt; &#43;            }&lt;br/&gt;&amp;gt;&amp;gt; &#43;        }&lt;br/&gt;&amp;gt;&amp;gt; &#43;        if (dependencies.size() &amp;gt; block.vtx.size()) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;            return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, &amp;#34;bad-dependencies-too-many-target-txid&amp;#34;);&lt;br/&gt;&amp;gt;&amp;gt; &#43;        }&lt;br/&gt;&amp;gt;&amp;gt; &#43;    }&lt;br/&gt;&amp;gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;&amp;gt;      for (unsigned int i = 0; i &amp;lt; block.vtx.size(); i&#43;&#43;)&lt;br/&gt;&amp;gt;&amp;gt;      {&lt;br/&gt;&amp;gt;&amp;gt;          const CTransaction &amp;amp;tx = *(block.vtx[i]);&lt;br/&gt;&amp;gt;&amp;gt; &#43;        if (!dependencies.empty()) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;            dependencies.erase(tx.GetHash());&lt;br/&gt;&amp;gt;&amp;gt; &#43;        }&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;          nInputs &#43;= tx.vin.size();&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; @@ -2190,6 &#43;2308,9 @@ bool CChainState::ConnectBlock(const CBlock&amp;amp; block, BlockValidationState&amp;amp; state,&lt;br/&gt;&amp;gt;&amp;gt;          }&lt;br/&gt;&amp;gt;&amp;gt;          UpdateCoins(tx, view, i == 0 ? undoDummy : blockundo.vtxundo.back(), pindex-&amp;gt;nHeight);&lt;br/&gt;&amp;gt;&amp;gt;      }&lt;br/&gt;&amp;gt;&amp;gt; &#43;    if (!dependencies.empty()) {&lt;br/&gt;&amp;gt;&amp;gt; &#43;        return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, &amp;#34;bad-dependency-missing-target-txid&amp;#34;);&lt;br/&gt;&amp;gt;&amp;gt; &#43;    }&lt;br/&gt;&amp;gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ### Design Motivation&lt;br/&gt;&amp;gt;&amp;gt; The final output of a transaction is an unambiguous location to attach metadata to a transaction&lt;br/&gt;&amp;gt;&amp;gt; such that the data is available for transaction validation. This data could be committed to anywhere,&lt;br/&gt;&amp;gt;&amp;gt; with added implementation complexity, or in the case of Taproot annexes, incompatibility with&lt;br/&gt;&amp;gt;&amp;gt; non-Taproot addresses (although this is not a concern for sponsoring a transaction that does not use&lt;br/&gt;&amp;gt;&amp;gt; Taproot).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A bare scriptPubKey prefixed with OP_VER is defined to be invalid in any context, and is trivially&lt;br/&gt;&amp;gt;&amp;gt; provably unspendable and therefore pruneable.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If there is another convenient place to put the TXID vector, that&amp;#39;s fine too.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As the output type is non-standard, unupgraded nodes will by default not include Transactions&lt;br/&gt;&amp;gt;&amp;gt; containing them in the mempool, limiting risk of an upgrade via this mechanism.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Policy Specification&lt;br/&gt;&amp;gt;&amp;gt; ====================&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mechanism proposed above is a general specification for inter-transaction dependencies.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In this BIP, we only care to ensure a subset of behavior sufficient to replace CPFP and RBF for fee&lt;br/&gt;&amp;gt;&amp;gt; bumping.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thus we restrict the mempool policy such that:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. No Transaction with a Sponsor Vector may have any child spends; and&lt;br/&gt;&amp;gt;&amp;gt; 1. No Transaction with a Sponsor Vector may have any unconfirmed parents; and&lt;br/&gt;&amp;gt;&amp;gt; 1. The Sponsor Vector must have exactly 1 entry; and&lt;br/&gt;&amp;gt;&amp;gt; 1. The Sponsor Vector&amp;#39;s entry must be present in the mempool; and&lt;br/&gt;&amp;gt;&amp;gt; 1. Every Transaction may have exactly 1 sponsor in the mempool; except&lt;br/&gt;&amp;gt;&amp;gt; 1. Transactions with a Sponsor Vector may not be sponsored.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The mempool treats ancestors and descendants limits as follows:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. Sponsors are counted as children transactions for descendants; but&lt;br/&gt;&amp;gt;&amp;gt; 1. Sponsoring transactions are exempted from any limits saturated at the time of submission.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This ensures that within a given package, every child transaction may have a sponsor, but that the&lt;br/&gt;&amp;gt;&amp;gt; mempool prefers to not accept new true children while there are parents that can be cleared.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; To prevent garbage sponsors, we also require that:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 1. The Sponsor&amp;#39;s feerate must be greater than the Sponsored&amp;#39;s ancestor fee rate&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We allow one Sponsor to replace another subject to normal replacement policies, they are treated as&lt;br/&gt;&amp;gt;&amp;gt; conflicts.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ### Design Motivation&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are a few other ways to use OP_VER sponsors that are not included. For instance, one could&lt;br/&gt;&amp;gt;&amp;gt; make child chains that are only valid if their parent is in the same block (this is incompatible&lt;br/&gt;&amp;gt;&amp;gt; with CTV, exercise left to reader). These use cases are in a sense incidental to the motivation&lt;br/&gt;&amp;gt;&amp;gt; of this mechanism, and add a lot of implementation complexity.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; What is wanted is a minimal mechanism that allows arbitrary unconnected third parties to attach&lt;br/&gt;&amp;gt;&amp;gt; fees to an arbitrary transaction. The set of rules given tightly bounds how much extra work the&lt;br/&gt;&amp;gt;&amp;gt; mempool might have to do to account for the new sponsors in the worst case, while providing a &amp;#34;it&lt;br/&gt;&amp;gt;&amp;gt; always works&amp;#34; API for end users that is not subject to traditional issues around pinning.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Eventually, rational miners may wish to permit multiple sponsor targets, or multiple sponsoring&lt;br/&gt;&amp;gt;&amp;gt; transactions, but they are not required for the mechanism to work. This is a benefit of the&lt;br/&gt;&amp;gt;&amp;gt; minimality of the consensus rule, it is compatible with future policy should it be implemented.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; #### Attack Analysis of new Policy&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In the worst case the new policy can lead to a 1/2 reduction in the number of children allowed&lt;br/&gt;&amp;gt;&amp;gt; (e.g., if there are 13 children submitted, then 12 sponsors, the 25 child limit will saturate&lt;br/&gt;&amp;gt;&amp;gt; before) and a 2x increase in the maximum children (e.g., if there are 25 children submitted, and&lt;br/&gt;&amp;gt;&amp;gt; then each are sponsored). Importantly, even in the latter attack scenario, the DoS surface is not&lt;br/&gt;&amp;gt;&amp;gt; great because the sponsor transactions have no children nor parents.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; #### Package Relay/Orphan Pool&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Future policy work might be able to insert sponsors into a special sponsor pool with an eviction&lt;br/&gt;&amp;gt;&amp;gt; policy that would enable sponsors to be queried and tracked for transactions that have too low fee&lt;br/&gt;&amp;gt;&amp;gt; to enter the mempool in the first place. This is treated as a separate concern, as any strides on&lt;br/&gt;&amp;gt;&amp;gt; package relay generally should be able to support sponsors trivially.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Reference Implementation&lt;br/&gt;&amp;gt;&amp;gt; ========================&lt;br/&gt;&amp;gt;&amp;gt; A reference implementation demonstrating these rules is available&lt;br/&gt;&amp;gt;&amp;gt; [here](&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&lt;/a&gt;). This is a best&lt;br/&gt;&amp;gt;&amp;gt; effort implementation, but has not been carefully audited for correctness and likely diverges from&lt;br/&gt;&amp;gt;&amp;gt; this document in ways that should either be reflected in this document or amended in the code.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Jeremy&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20200919/7b4110fb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200919/7b4110fb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:26:56&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswugq36lz4eqmla94t7mexqvlxrzvs8d2pc2d403vd937nsvk9mhszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zckvsy2</id>
    
      <title type="html">📅 Original date posted:2020-09-19 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswugq36lz4eqmla94t7mexqvlxrzvs8d2pc2d403vd937nsvk9mhszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zckvsy2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8swpegfxu7jrdjfkafk8hq0ew2ayk6hvqug8t80h5atrct57jrzsvxh4eq&#39;&gt;nevent1q…h4eq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-09-19&lt;br/&gt;📝 Original message:Hi Jeremy,&lt;br/&gt;&lt;br/&gt;This is a really interesting proposal to widen the scope of fee mechanisms.&lt;br/&gt;&lt;br/&gt;First, a wider point on what this proposal brings with regards to pinning,&lt;br/&gt;to the best of my knowledge.&lt;br/&gt;&lt;br/&gt;A pinning may have different vectors by exploiting a) mempools limits (e.g&lt;br/&gt;descendants) or b) mempools absolute-fee/feerate/conflicts logic. The lack&lt;br/&gt;of a global mempool means you can creatively combine them to provoke&lt;br/&gt;mempools-partitions [0]&lt;br/&gt;&lt;br/&gt;As far as I understand this proposal, it aims to solve the class a) of&lt;br/&gt;pinnings by allowing fee-bumping with a new definition of dependencies. I&amp;#39;m&lt;br/&gt;not sure it achieves to do  so as the Sponsor Vector TXIDs being committed&lt;br/&gt;in the Sponsoree signature hash means the Sponsor feerate is part of this&lt;br/&gt;commitment and can&amp;#39;t be unilaterally adjusted to actual mempool-congestion.&lt;br/&gt;&lt;br/&gt;After broadcasting the Sponsor/Sponsoree pair, mempools feerate may&lt;br/&gt;increase again and thus obsoleting the previous fee-bump. Or you need a&lt;br/&gt;Sponsor Vector for every blockspace feerate, in the worst-case bound by the&lt;br/&gt;value of the Sponsoree funds.&lt;br/&gt;&lt;br/&gt;Further, I would say this proposal won&amp;#39;t solve class b) of pinnings for&lt;br/&gt;multi-party time-sensitive protocols without further modifications. E.g in&lt;br/&gt;a LN-channel, assuming the commitment transaction is the Sponsoree, Alice&lt;br/&gt;the honest party can&amp;#39;t increase Sponsor feerate by mal eating its outputs&lt;br/&gt;without breaking the sponsoring dependency. And thus evict a Bob&amp;#39;s&lt;br/&gt;malicious pin across network mempools.&lt;br/&gt;&lt;br/&gt;I think a further softfork proposal with regards to sighash malleability is&lt;br/&gt;needed to achieve the security semantic for Lightning type of protocols.&lt;br/&gt;Roughly, a SIGHASH_IOVECTOR allows N-inputs to commit to N-outputs, thus&lt;br/&gt;committing to all the balance/HTLC outputs minus the last output Vector,&lt;br/&gt;non-interactively malleable by channel participants. This would be a form&lt;br/&gt;of transaction finalization delegation, allowing Alice to direct the&lt;br/&gt;Sponsor vector to a good-feerate adjusted transaction.&lt;br/&gt;&lt;br/&gt;Note, I may have misunderstood completely the proposal as the feerate&lt;br/&gt;observed might be the Sponsor _package_ one and each party could have a&lt;br/&gt;pair of outputs to spend from to non-interactively increase the Sponsoree.&lt;br/&gt;Though sounds like re-introducing the limits issues...&lt;br/&gt;&lt;br/&gt;That said, see following review points.&lt;br/&gt;&lt;br/&gt;&amp;gt; This is insufficient because if new attacks are found, there is&lt;br/&gt;&amp;gt; limited ability to deploy fixes for&lt;br/&gt;&amp;gt; them against deployed contract instances (such as open lightning&lt;br/&gt;&amp;gt; channels). What is required is a&lt;br/&gt;&amp;gt; fully abstracted primitive that requires no special structure from an&lt;br/&gt;&amp;gt; underlying transaction in&lt;br/&gt;&amp;gt; order to increase fees to confirm the transactions.&lt;br/&gt;&lt;br/&gt;This is really true, in case of vulnerability discovered mass closing of&lt;br/&gt;the channel would be in itself a concern as it would congest mempools and&lt;br/&gt;open to looter behaviors [1]. Though I don&amp;#39;t think a special structure can&lt;br/&gt;claim covering every potential source of vulnerability for  off-chain&lt;br/&gt;protocols as some of them might be tx-relay based (e.g reject-filters for&lt;br/&gt;segwit txn).&lt;br/&gt;&lt;br/&gt;Further, a &amp;#34;fully abstracted primitive&amp;#34; is loosely defined, one could argue&lt;br/&gt;that anchor outputs don&amp;#39;t require special structure from an underlying&lt;br/&gt;transaction (i.e on the order of outputs ?).&lt;br/&gt;&lt;br/&gt;&amp;gt;  where&lt;br/&gt;n&amp;gt;1, it is interpreted as a vector of TXIDs (Sponsor Vector).&lt;br/&gt;&lt;br/&gt;n &amp;gt;=1 ? I think you can have at least one vector and this is matching the&lt;br/&gt;code&lt;br/&gt;&lt;br/&gt;&amp;gt; If there is another convenient place to put the TXID vector, that&amp;#39;s fine&lt;br/&gt;too.&lt;br/&gt;&lt;br/&gt;You might use the per-input future Taproot annex, and even apply a witness&lt;br/&gt;discount as this mechanism could be argued to be less blockspace expensive&lt;br/&gt;than a CPFP for the same semantic.&lt;br/&gt;&lt;br/&gt;An alternative could be a new transaction field like a new `stxid` :&lt;br/&gt;&lt;br/&gt;`[nVersion][marker][flag][txins][txouts][witness][nLockTime][nSponsor][nVersion][n*STXID]`&lt;br/&gt;&lt;br/&gt;It would be cheaper as you likely save the output amount size and OP_VER.&lt;br/&gt;And you don&amp;#39;t have to subtract a dust output &#43; 1 from the other output&lt;br/&gt;amount to make sure the Sponsor output meets dust propagation requirements.&lt;br/&gt;&lt;br/&gt;Though it&amp;#39;s more demanding on the tx-relay layer (new serialization and&lt;br/&gt;transaction identifier) and new a version bump of the signature digest algo&lt;br/&gt;to avoid a third-party malleating the per-transaction sponsor field&lt;br/&gt;&lt;br/&gt;&amp;gt; To prevent garbage sponsors, we also require that:&lt;br/&gt;&lt;br/&gt;Does the reverse hold ? Garbage Sponsoree by breaking the dependency and&lt;br/&gt;double-spending the utxo spent by the Sponsor and thus decreasing&lt;br/&gt;Sponsoree&amp;#39;s feerate to mempool bottom. AFAIK you can&amp;#39;t do this with CPFP.&lt;br/&gt;&lt;br/&gt;&amp;gt; rational miners may wish to permit multiple sponsor&lt;br/&gt;&amp;gt; targets, or multiple sponsoring&lt;br/&gt;&amp;gt; transactions,&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure if your policy sktech prevents multiple&lt;br/&gt;1-Sponsor-to-N-Sponsoree. Such a scheme would have some edges. A mempool&lt;br/&gt;might receive Sponsoree in different order than evaluated by original&lt;br/&gt;sender and thus allocate the Sponsor feerate to the less-urgent Sponsoree.&lt;br/&gt;&lt;br/&gt;&amp;gt; This is treated as a separate&lt;br/&gt;&amp;gt; concern, as any strides on&lt;br/&gt;&amp;gt; package relay generally should be able to support sponsors trivially.&lt;br/&gt;&lt;br/&gt;This is one more reason to carefully version package relay, beyond the&lt;br/&gt;transaction package complexity, you now have a new type of graph dependency&lt;br/&gt;to scope. What we should be worried about is network mempools partitions&lt;br/&gt;between different mechanisms of incompatible package relay if we implement&lt;br/&gt;one.&lt;br/&gt;&lt;br/&gt;Overall, a missing point which is making this proposal compelling is the&lt;br/&gt;fact that you may have one 1-Sponsor-for-N-Sponsoree which is a far reduced&lt;br/&gt;cost compared to N-Parent-1-CPFP as the CPFP must include an input for each&lt;br/&gt;bumped parent. Here you only have the Sponsor output. Thus observing&lt;br/&gt;input_size &amp;gt; output_size, this proposal is better for multi-transactions&lt;br/&gt;bumping (but not for N=1 as you have to bear the input spending of the&lt;br/&gt;Sponsor).&lt;br/&gt;&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;[0] Within LN-context, for class b) see&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-June/002758.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;[1] See the recent Dynamic Commitments proposal to ponder this concern&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-July/002763.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-July/002763.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Le ven. 18 sept. 2020 à 20:52, Jeremy via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Bitcoin Devs,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d like to share with you a draft proposal for a mechanism to replace CPFP and RBF for&lt;br/&gt;&amp;gt; increasing fees on transactions in the mempool that should be more robust against attacks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A reference implementation demonstrating these rules is available&lt;br/&gt;&amp;gt; [here](&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&lt;/a&gt;) for those who&lt;br/&gt;&amp;gt; prefer to not read specs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Should the mailing list formatting be bungled, it is also available as a gist [here](&lt;a href=&#34;https://gist.github.com/JeremyRubin/92a9fc4c6531817f66c2934282e71fdf&#34;&gt;https://gist.github.com/JeremyRubin/92a9fc4c6531817f66c2934282e71fdf&lt;/a&gt;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Non-Destructive TXID Dependencies for Fee Sponsoring&lt;br/&gt;&amp;gt; ====================================================&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This BIP proposes a general purpose mechanism for expressing non-destructive (i.e., not requiring&lt;br/&gt;&amp;gt; the spending of a coin) dependencies on specific transactions being in the same block that can be&lt;br/&gt;&amp;gt; used to sponsor fees of remote transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Motivation&lt;br/&gt;&amp;gt; ==========&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mempool has a variety of protections and guards in place to ensure that miners are economic and&lt;br/&gt;&amp;gt; to protect the network from denial of service.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The rough surface of these policies has some unintended consequences for second layer protocol&lt;br/&gt;&amp;gt; developers. Applications are either vulnerable to attacks (such as transaction pinning) or must go&lt;br/&gt;&amp;gt; through great amounts of careful protocol engineering to guard against known mempool attacks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is insufficient because if new attacks are found, there is limited ability to deploy fixes for&lt;br/&gt;&amp;gt; them against deployed contract instances (such as open lightning channels). What is required is a&lt;br/&gt;&amp;gt; fully abstracted primitive that requires no special structure from an underlying transaction in&lt;br/&gt;&amp;gt; order to increase fees to confirm the transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Consensus Specification&lt;br/&gt;&amp;gt; =======================&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If a transaction&amp;#39;s last output&amp;#39;s scripPubKey is of the form OP_VER followed by n*32 bytes, where&lt;br/&gt;&amp;gt; n&amp;gt;1, it is interpreted as a vector of TXIDs (Sponsor Vector). The Sponsor Vector TXIDs  must also be&lt;br/&gt;&amp;gt; in the block the transaction is validated in, with no restriction on order or on specifying a TXID&lt;br/&gt;&amp;gt; more than once. This can be accomplished simply with the following patch:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ```diff&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;    // Extract all required fee dependencies&lt;br/&gt;&amp;gt; &#43;    std::unordered_set&amp;lt;uint256, SaltedTxidHasher&amp;gt; dependencies;&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt; &#43;    const bool dependencies_enabled = VersionBitsState(pindex-&amp;gt;pprev, chainparams.GetConsensus(), Consensus::DeploymentPos::DEPLOYMENT_TXID_DEPENDENCY, versionbitscache) == ThresholdState::ACTIVE;&lt;br/&gt;&amp;gt; &#43;    if (dependencies_enabled) {&lt;br/&gt;&amp;gt; &#43;        for (const auto&amp;amp; tx : block.vtx) {&lt;br/&gt;&amp;gt; &#43;            // dependency output is if the last output of a txn is OP_VER followed by a sequence of 32*n&lt;br/&gt;&amp;gt; &#43;            // bytes&lt;br/&gt;&amp;gt; &#43;            // vout.back() must exist because it is checked in CheckBlock&lt;br/&gt;&amp;gt; &#43;            const CScript&amp;amp; dependencies_script = tx-&amp;gt;vout.back().scriptPubKey;&lt;br/&gt;&amp;gt; &#43;            // empty scripts are valid, so be sure we have at least one byte&lt;br/&gt;&amp;gt; &#43;            if (dependencies_script.size() &amp;amp;&amp;amp; dependencies_script[0] == OP_VER) {&lt;br/&gt;&amp;gt; &#43;                const size_t size = dependencies_script.size() - 1;&lt;br/&gt;&amp;gt; &#43;                if (size % 32 == 0 &amp;amp;&amp;amp; size &amp;gt; 0) {&lt;br/&gt;&amp;gt; &#43;                    for (auto start = dependencies_script.begin() &#43;1, stop = start &#43; 32; start &amp;lt; dependencies_script.end(); start = stop, stop &#43;= 32) {&lt;br/&gt;&amp;gt; &#43;                        uint256 txid;&lt;br/&gt;&amp;gt; &#43;                        std::copy(start, stop, txid.begin());&lt;br/&gt;&amp;gt; &#43;                        dependencies.emplace(txid);&lt;br/&gt;&amp;gt; &#43;                    }&lt;br/&gt;&amp;gt; &#43;                }&lt;br/&gt;&amp;gt; &#43;                // No rules applied otherwise, open for future upgrades&lt;br/&gt;&amp;gt; &#43;            }&lt;br/&gt;&amp;gt; &#43;        }&lt;br/&gt;&amp;gt; &#43;        if (dependencies.size() &amp;gt; block.vtx.size()) {&lt;br/&gt;&amp;gt; &#43;            return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, &amp;#34;bad-dependencies-too-many-target-txid&amp;#34;);&lt;br/&gt;&amp;gt; &#43;        }&lt;br/&gt;&amp;gt; &#43;    }&lt;br/&gt;&amp;gt; &#43;&lt;br/&gt;&amp;gt;      for (unsigned int i = 0; i &amp;lt; block.vtx.size(); i&#43;&#43;)&lt;br/&gt;&amp;gt;      {&lt;br/&gt;&amp;gt;          const CTransaction &amp;amp;tx = *(block.vtx[i]);&lt;br/&gt;&amp;gt; &#43;        if (!dependencies.empty()) {&lt;br/&gt;&amp;gt; &#43;            dependencies.erase(tx.GetHash());&lt;br/&gt;&amp;gt; &#43;        }&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;          nInputs &#43;= tx.vin.size();&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @@ -2190,6 &#43;2308,9 @@ bool CChainState::ConnectBlock(const CBlock&amp;amp; block, BlockValidationState&amp;amp; state,&lt;br/&gt;&amp;gt;          }&lt;br/&gt;&amp;gt;          UpdateCoins(tx, view, i == 0 ? undoDummy : blockundo.vtxundo.back(), pindex-&amp;gt;nHeight);&lt;br/&gt;&amp;gt;      }&lt;br/&gt;&amp;gt; &#43;    if (!dependencies.empty()) {&lt;br/&gt;&amp;gt; &#43;        return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, &amp;#34;bad-dependency-missing-target-txid&amp;#34;);&lt;br/&gt;&amp;gt; &#43;    }&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Design Motivation&lt;br/&gt;&amp;gt; The final output of a transaction is an unambiguous location to attach metadata to a transaction&lt;br/&gt;&amp;gt; such that the data is available for transaction validation. This data could be committed to anywhere,&lt;br/&gt;&amp;gt; with added implementation complexity, or in the case of Taproot annexes, incompatibility with&lt;br/&gt;&amp;gt; non-Taproot addresses (although this is not a concern for sponsoring a transaction that does not use&lt;br/&gt;&amp;gt; Taproot).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A bare scriptPubKey prefixed with OP_VER is defined to be invalid in any context, and is trivially&lt;br/&gt;&amp;gt; provably unspendable and therefore pruneable.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If there is another convenient place to put the TXID vector, that&amp;#39;s fine too.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As the output type is non-standard, unupgraded nodes will by default not include Transactions&lt;br/&gt;&amp;gt; containing them in the mempool, limiting risk of an upgrade via this mechanism.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Policy Specification&lt;br/&gt;&amp;gt; ====================&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mechanism proposed above is a general specification for inter-transaction dependencies.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In this BIP, we only care to ensure a subset of behavior sufficient to replace CPFP and RBF for fee&lt;br/&gt;&amp;gt; bumping.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus we restrict the mempool policy such that:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. No Transaction with a Sponsor Vector may have any child spends; and&lt;br/&gt;&amp;gt; 1. No Transaction with a Sponsor Vector may have any unconfirmed parents; and&lt;br/&gt;&amp;gt; 1. The Sponsor Vector must have exactly 1 entry; and&lt;br/&gt;&amp;gt; 1. The Sponsor Vector&amp;#39;s entry must be present in the mempool; and&lt;br/&gt;&amp;gt; 1. Every Transaction may have exactly 1 sponsor in the mempool; except&lt;br/&gt;&amp;gt; 1. Transactions with a Sponsor Vector may not be sponsored.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mempool treats ancestors and descendants limits as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Sponsors are counted as children transactions for descendants; but&lt;br/&gt;&amp;gt; 1. Sponsoring transactions are exempted from any limits saturated at the time of submission.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This ensures that within a given package, every child transaction may have a sponsor, but that the&lt;br/&gt;&amp;gt; mempool prefers to not accept new true children while there are parents that can be cleared.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To prevent garbage sponsors, we also require that:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. The Sponsor&amp;#39;s feerate must be greater than the Sponsored&amp;#39;s ancestor fee rate&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We allow one Sponsor to replace another subject to normal replacement policies, they are treated as&lt;br/&gt;&amp;gt; conflicts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Design Motivation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are a few other ways to use OP_VER sponsors that are not included. For instance, one could&lt;br/&gt;&amp;gt; make child chains that are only valid if their parent is in the same block (this is incompatible&lt;br/&gt;&amp;gt; with CTV, exercise left to reader). These use cases are in a sense incidental to the motivation&lt;br/&gt;&amp;gt; of this mechanism, and add a lot of implementation complexity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What is wanted is a minimal mechanism that allows arbitrary unconnected third parties to attach&lt;br/&gt;&amp;gt; fees to an arbitrary transaction. The set of rules given tightly bounds how much extra work the&lt;br/&gt;&amp;gt; mempool might have to do to account for the new sponsors in the worst case, while providing a &amp;#34;it&lt;br/&gt;&amp;gt; always works&amp;#34; API for end users that is not subject to traditional issues around pinning.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Eventually, rational miners may wish to permit multiple sponsor targets, or multiple sponsoring&lt;br/&gt;&amp;gt; transactions, but they are not required for the mechanism to work. This is a benefit of the&lt;br/&gt;&amp;gt; minimality of the consensus rule, it is compatible with future policy should it be implemented.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #### Attack Analysis of new Policy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the worst case the new policy can lead to a 1/2 reduction in the number of children allowed&lt;br/&gt;&amp;gt; (e.g., if there are 13 children submitted, then 12 sponsors, the 25 child limit will saturate&lt;br/&gt;&amp;gt; before) and a 2x increase in the maximum children (e.g., if there are 25 children submitted, and&lt;br/&gt;&amp;gt; then each are sponsored). Importantly, even in the latter attack scenario, the DoS surface is not&lt;br/&gt;&amp;gt; great because the sponsor transactions have no children nor parents.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #### Package Relay/Orphan Pool&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Future policy work might be able to insert sponsors into a special sponsor pool with an eviction&lt;br/&gt;&amp;gt; policy that would enable sponsors to be queried and tracked for transactions that have too low fee&lt;br/&gt;&amp;gt; to enter the mempool in the first place. This is treated as a separate concern, as any strides on&lt;br/&gt;&amp;gt; package relay generally should be able to support sponsors trivially.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reference Implementation&lt;br/&gt;&amp;gt; ========================&lt;br/&gt;&amp;gt; A reference implementation demonstrating these rules is available&lt;br/&gt;&amp;gt; [here](&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...JeremyRubin:subsidy-tx&lt;/a&gt;). This is a best&lt;br/&gt;&amp;gt; effort implementation, but has not been carefully audited for correctness and likely diverges from&lt;br/&gt;&amp;gt; this document in ways that should either be reflected in this document or amended in the code.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jeremy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20200919/6e143592/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200919/6e143592/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:26:55&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxjv79ulea4ul6x95rmyhzswvqh59rcxcytxm7c522snmffyj2ugszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zp7yat2</id>
    
      <title type="html">📅 Original date posted:2020-06-07 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxjv79ulea4ul6x95rmyhzswvqh59rcxcytxm7c522snmffyj2ugszypjgt0zkjca4rjgy85y9tn9f778uh5xwzddpjhplj60p3jj55r24zp7yat2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvkpl8g7znqwymmtqust0w5ea5e6mhe6mkut5s8yx795mkcq4t4xsrhwamm&#39;&gt;nevent1q…wamm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-06-07&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;&amp;gt; (Of note as well, is that the onchain contract provided by such services&lt;br/&gt;is the same in spirit as those instantiated in channels of the Lightning&lt;br/&gt;Network, thus the same attack schema works on the onchain side.)&lt;br/&gt;&lt;br/&gt;If you onchain contract uses a timelock and has concurrent transactions&lt;br/&gt;arbiter by this one , it&amp;#39;s subject to time-dilation attack. So yes&lt;br/&gt;submarine swaps, or any kind of atomic swap is concerned. We note this in&lt;br/&gt;discussion.&lt;br/&gt;But you&amp;#39;re right for the attack cost, you don&amp;#39;t need a channel to these&lt;br/&gt;services, which is also concerning for their attack surface.&lt;br/&gt;&lt;br/&gt;&amp;gt; Since the issue here is that eclipsing of Bitcoin nodes is risky, it&lt;br/&gt;strikes me that a mitigation would be to run your Bitcoin fullnode on&lt;br/&gt;clearnet while running your Lightning node over Tor&lt;br/&gt;&lt;br/&gt;We clearly mention that risk of running a Bitcoin node over Tor, where do&lt;br/&gt;we recommend running a LN node over Tor ?&lt;br/&gt;&lt;br/&gt;&amp;gt;   And this seems to tie with what you propose: that the LN node should&lt;br/&gt;use a different view-fullnode from the broadcast-fullnode.&lt;br/&gt;&lt;br/&gt;Yes in Countermeasures - Link layer diversity, specially if it&amp;#39;s easy for&lt;br/&gt;an attacker to provoke a transaction broadcast by buying a channel to the&lt;br/&gt;LN node.&lt;br/&gt;&lt;br/&gt;&amp;gt; A mitigation to this would be to run a background process which sleeps&lt;br/&gt;for 20 minutes, then does `bitcoin-cli addnode ${BITCOINNODE} onetry`.&lt;br/&gt;&lt;br/&gt;Yeah instead of having every node operator running their own hacky scripts,&lt;br/&gt;without them being bulletproofs on detection, I&amp;#39;m working on getting such&lt;br/&gt;mitigations directly in Core, easily deployable for everyone.&lt;br/&gt;&lt;br/&gt;&amp;gt; The victim *could* instead check that the absolute timelocks seem very&lt;br/&gt;far in the future relative to its own view of the current blockheight.&lt;br/&gt;&lt;br/&gt;I think you&amp;#39;re right it&amp;#39;s really dependent on CLTV_delta deployed on the&lt;br/&gt;path and time-dilation offset. The alternative you&amp;#39;re proposing is a good&lt;br/&gt;one, but you shouldn&amp;#39;t know where you&amp;#39;re in the path and max CLTV is 2048&lt;br/&gt;blocks IIRC.&lt;br/&gt;&lt;br/&gt;Thanks for your reading and review,&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;Antoine&lt;br/&gt;&lt;br/&gt;Le mer. 3 juin 2020 à 22:58, ZmnSCPxj via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; a écrit :&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Gleb and Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is good research, thank you for your work.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; **Targeting Per-Hop Packet Delay** is based on routing via the victim,&lt;br/&gt;&amp;gt; and the victim should have at least two channels with the attacker.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The existence of offchain-to-onchain swap services means that the attacker&lt;br/&gt;&amp;gt; needs only build one channel to the victim for this attack to work.&lt;br/&gt;&amp;gt; Rather than route to themselves, the attacker routes to a convenient&lt;br/&gt;&amp;gt; service providing such a swap service, and receives the stolen funds&lt;br/&gt;&amp;gt; onchain, with no need even for an incoming channel from a different node.&lt;br/&gt;&amp;gt; (Of note as well, is that the onchain contract provided by such services&lt;br/&gt;&amp;gt; is the same in spirit as those instantiated in channels of the Lightning&lt;br/&gt;&amp;gt; Network, thus the same attack schema works on the onchain side.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Indeed, the attack can be mounted on such a service directly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Even without such a service, the incoming channel need not be directly&lt;br/&gt;&amp;gt; connected to the victim.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [Tor is tricky](&lt;a href=&#34;https://arxiv.org/abs/1410.6079&#34;&gt;https://arxiv.org/abs/1410.6079&lt;/a&gt;) too&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since the issue here is that eclipsing of Bitcoin nodes is risky, it&lt;br/&gt;&amp;gt; strikes me that a mitigation would be to run your Bitcoin fullnode on&lt;br/&gt;&amp;gt; clearnet while running your Lightning node over Tor.&lt;br/&gt;&amp;gt; Eclipsing the Lightning node (but not the Bitcoin fullnode it depends on)&lt;br/&gt;&amp;gt; &amp;#34;only&amp;#34; loses you the ability to pay, receive, or route (and thereby earn&lt;br/&gt;&amp;gt; forwarding fees), but as long as your blockchain view is clear, it should&lt;br/&gt;&amp;gt; be fine.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course, the Lightning node could still be correlated with the Bitcoin&lt;br/&gt;&amp;gt; node when transactions are broadcast with the attached Bitcoin node (as&lt;br/&gt;&amp;gt; noted in the paper).&lt;br/&gt;&amp;gt; Instead the Lightning node should probably connect, over Tor, to some&lt;br/&gt;&amp;gt; random Bitcoin fullnodes / Electrum servers and broadcast txes to them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And this seems to tie with what you propose: that the LN node should use a&lt;br/&gt;&amp;gt; different view-fullnode from the broadcast-fullnode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; if a node doesn’t observe a block within the last 30 minutes, it&lt;br/&gt;&amp;gt; attempts to make a new random connection to someone in the network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A mitigation to this would be to run a background process which sleeps for&lt;br/&gt;&amp;gt; 20 minutes, then does `bitcoin-cli addnode ${BITCOINNODE} onetry`.&lt;br/&gt;&amp;gt; It might want to `disconnectnode` any previous node it attempted to&lt;br/&gt;&amp;gt; connect to.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However I note that the help for `addnode` contains the text &amp;#34;though such&lt;br/&gt;&amp;gt; peers will not be synced from&amp;#34;, which confuses me, since it also refers to&lt;br/&gt;&amp;gt; the `-connect` command line option, and `-connect` means you only connect&lt;br/&gt;&amp;gt; out to the specific nodes, so if those are not synced from.... huh?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And of course the interesting part is &amp;#34;how do we get a `${BITCOINNODE}`&lt;br/&gt;&amp;gt; that we think is not part of the eclipsing attacker?&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If a Lightning node is behind in its Bitcoin blockchain view, but&lt;br/&gt;&amp;gt; Lightning payments between honest nodes are still flowing through it, this&lt;br/&gt;&amp;gt; node will have a high routing failure rate. This would happen because&lt;br/&gt;&amp;gt; honest nodes on the routing path would reject the forwarded HTLC for being&lt;br/&gt;&amp;gt; too close to expired.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am uncertain this would happen very often.&lt;br/&gt;&amp;gt; In the first place, the incoming HTLC would have &amp;#34;reasonable&amp;#34; timeouts, or&lt;br/&gt;&amp;gt; else the incoming honest node would not have routed it at all, and the&lt;br/&gt;&amp;gt; outgoing HTLC would be relative to this incoming one, so the outgoing&lt;br/&gt;&amp;gt; honest node will still accept this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The victim *could* instead check that the absolute timelocks seem very far&lt;br/&gt;&amp;gt; in the future relative to its own view of the current blockheight.&lt;br/&gt;&amp;gt; (a forwarding node miht want to do that anyway to have an upper bound&lt;br/&gt;&amp;gt; against griefing attacks)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What would definitely increase in failure rate would be payments arising&lt;br/&gt;&amp;gt; from the victim node; the victim node believes the blockheight to be much&lt;br/&gt;&amp;gt; lower than it actually is, and either the payee node, or some intermediate&lt;br/&gt;&amp;gt; node along the route, will claim to have too little time to safely forward&lt;br/&gt;&amp;gt; the funds.&lt;br/&gt;&amp;gt; This does not help for nodes which are primarily forwarding nodes.&lt;br/&gt;&amp;gt;&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; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-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/bitcoin-dev/attachments/20200607/45de6e7a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200607/45de6e7a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:25:12&#43;02:00</updated>
  </entry>

</feed>