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




  <entry>
    <id>https://nostr.ae/nevent1qqswlq0wchxkeqanejykle9nttwgr285uadgupezu8wxfvzzjlqx0wszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq58kpnrn</id>
    
      <title type="html">📅 Original date posted:2022-09-23 📝 Original message: Some ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswlq0wchxkeqanejykle9nttwgr285uadgupezu8wxfvzzjlqx0wszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq58kpnrn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy5w32l9a6uwcfm4my8ahmuendt9a83q9mq8qjs0z09u3wseyj47qzkt0qu&#39;&gt;nevent1q…t0qu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-09-23&lt;br/&gt;📝 Original message:&lt;br/&gt;Some interesting points here. Will try to respond to some of them.&lt;br/&gt;&lt;br/&gt;&amp;gt; pathfinding algorithms which depend on unscalable data collection&lt;br/&gt;&lt;br/&gt;Failed payment attempts are indistinguishable from data collection probing.&lt;br/&gt;I don&amp;#39;t think it&amp;#39;s realistic to think that payments are going to stop&lt;br/&gt;failing in&lt;br/&gt;an environment where we continue to prioritize privacy of channel balances.&lt;br/&gt;&lt;br/&gt;I think I pretty nicely illustrated the benefits of using payment bands in&lt;br/&gt;my original&lt;br/&gt;post wrt to a balance between &amp;#34;probe-ability&amp;#34; and some obfuscation of&lt;br/&gt;balance, along&lt;br/&gt;with a net reduction in the bandwidth consumption required to get this&lt;br/&gt;basically&lt;br/&gt;required information for payment success.&lt;br/&gt;&lt;br/&gt;Rene Pickhardt has a less private, less costly, more granular, smaller scope&lt;br/&gt;proposal for sharing channel balances w/ directly connected peers; I think&lt;br/&gt;this is worth investigating independently of this proposal.&lt;br/&gt;&lt;br/&gt;&amp;gt; depend on the centralized entities performing the data collection&lt;br/&gt;&lt;br/&gt;I like to think that the introduction of negative fees make channel&lt;br/&gt;balance data a competitive advantage and will actually cause node&lt;br/&gt;operators to more closely guard their balances / the balance data&lt;br/&gt;they&amp;#39;ve collected about peers, which should hopefully reduce the current&lt;br/&gt;trend of sharing this information with centralized parties.&lt;br/&gt;&lt;br/&gt;Note that with the present protocol design, the network incentives are such&lt;br/&gt; that centralized efforts to collect exact balance data already exist. So&lt;br/&gt;moving to this design has the potential to reduce the incentive to&lt;br/&gt;participate&lt;br/&gt;in the data collection, at the very least it does not make it worse than&lt;br/&gt;current.&lt;br/&gt;&lt;br/&gt;&amp;gt;  this costs Alice nothing extra but reduces network capacity by consuming&lt;br/&gt;&amp;gt;  HTLC slots for her, Bob, and every other forwarding channel.&lt;br/&gt;&lt;br/&gt;the network already limits the size of htlcs that are allowable with the&lt;br/&gt;htlc_maximum_msat, which I understand is typically set at a rate below 1/4&lt;br/&gt;of channel capacity (citation needed). Which is to say that the large&lt;br/&gt;consumption of a channel in a single HTLC is currently relatively&lt;br/&gt;prohibited.&lt;br/&gt;It&amp;#39;s likely this proposed change would actually encourage operators to set&lt;br/&gt;their htlc_maximum_msat higher, now that there&amp;#39;s a direct financial cost&lt;br/&gt;tied to larger channel bandwidth consumption.&lt;br/&gt;&lt;br/&gt;Great questions! Hope that gives a better picture of the current landscape.&lt;br/&gt;&lt;br/&gt;Also h/t to ZmnSCPxj for the excellent &amp;#34;four parallel channels&amp;#34; analogy,&lt;br/&gt;this is&lt;br/&gt;a really elegant way to think about the proposal.&lt;br/&gt;&lt;br/&gt;On Thu, Sep 22, 2022 at 11:39 PM David A. Harding &amp;lt;dave at dtrt.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On 2022-09-22 16:08, ZmnSCPxj wrote:&lt;br/&gt;&amp;gt; &amp;gt; Basically, you can model a rate card as four separate channels between&lt;br/&gt;&amp;gt; &amp;gt; the same two nodes, with different costs each.&lt;br/&gt;&amp;gt; &amp;gt; If the path at the lowest cost fails, you just try at another route&lt;br/&gt;&amp;gt; &amp;gt; that may have more hops but lower effective cost, or else try the same&lt;br/&gt;&amp;gt; &amp;gt; channel at a higher cost.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That&amp;#39;s a very easy to understand explanation of how to use the system,&lt;br/&gt;&amp;gt; thanks!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If your concern is valid, one wonders why it would not already exist&lt;br/&gt;&amp;gt; &amp;gt; now in the current network where try-and-try-again is the standard&lt;br/&gt;&amp;gt; &amp;gt; overall algorithm for payments.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My concern is about pathfinding algorithms which depend on unscalable&lt;br/&gt;&amp;gt; data collection (e.g. frequent whole network probing).  If such an&lt;br/&gt;&amp;gt; algorithm performs much better than those algorithms which depend on&lt;br/&gt;&amp;gt; scalable data collection (e.g. receiving gossip), then the network may&lt;br/&gt;&amp;gt; grow to depend on the centralized entities performing the data&lt;br/&gt;&amp;gt; collection to the detriment of its robustness and its participants&amp;#39;&lt;br/&gt;&amp;gt; independence.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Try-and-try-another-path is somewhat problematic in this regard since,&lt;br/&gt;&amp;gt; even with no additional action like probing, entities which send many&lt;br/&gt;&amp;gt; payments will likely perform significantly better than entities which&lt;br/&gt;&amp;gt; send few payments owing to the high-frequency spenders gaining more&lt;br/&gt;&amp;gt; knowledge about which channels and amounts recently worked or did not.&lt;br/&gt;&amp;gt; It seems to me that a more idealized system would only rarely have&lt;br/&gt;&amp;gt; forwarding failures so that high frequency spenders wouldn&amp;#39;t receive&lt;br/&gt;&amp;gt; much more information than low frequency spenders.  To that regard, fee&lt;br/&gt;&amp;gt; ratecards feels like a small step in the wrong direction because&lt;br/&gt;&amp;gt; modeling one channel as four separate channels further normalizes&lt;br/&gt;&amp;gt; failure and so further moves the system towards centralized dependency.&lt;br/&gt;&amp;gt; That said, as you mentioned in a previous post[1], I agree ratecards is&lt;br/&gt;&amp;gt; better than frequently issuing new channel updates with modified fees.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Dave&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-June/003598.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2022-June/003598.html&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/20220923/07d0d25b/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220923/07d0d25b/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:06:49&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvnjs36ufgmgu8evx9p2aa06qkzj2jqxty0ru490qx0u5pyggsvqgzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5k8dwzd</id>
    
      <title type="html">📅 Original date posted:2021-10-12 📝 Original message: Love ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvnjs36ufgmgu8evx9p2aa06qkzj2jqxty0ru490qx0u5pyggsvqgzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5k8dwzd" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxp0ylmlzfn25w2kluxqsnprcc8lmxghcf8a66uhnuuarkynw6drgjfpxsf&#39;&gt;nevent1q…pxsf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-12&lt;br/&gt;📝 Original message:&lt;br/&gt;Love the idea of moving the specs etc to github.com/lightning, thanks so&lt;br/&gt;much for generously offering to donate this Laolu. Strong ACK from me.&lt;br/&gt;&lt;br/&gt;Given how difficult the existing org is wrt ownership etc, moving to a new&lt;br/&gt;one makes a lot of sense to me.&lt;br/&gt;&lt;br/&gt;Thanks Fabrice for bringing this up so we could discuss it and get a better&lt;br/&gt;understanding of the difficulties with the existing situation.&lt;br/&gt;&lt;br/&gt;- nifty&lt;br/&gt;&lt;br/&gt;On Wed, Oct 13, 2021 at 00:48 Damian Mee &amp;lt;btc at meedamian.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; While I don&amp;#39;t partake in the conversations too often, I just want to say I&lt;br/&gt;&amp;gt; strongly support Olaoluwa suggestion.  AFAIAA there&amp;#39;s a lot of automations,&lt;br/&gt;&amp;gt; dependencies, dockerfiles, or direct links to files that rely on the&lt;br/&gt;&amp;gt; location of lnd github repo, and I&amp;#39;m sure not all of it would be able to&lt;br/&gt;&amp;gt; handle Github redirect gracefully.  While accessing spec is mostly a&lt;br/&gt;&amp;gt; human/browser activity, where dealing with redirects is much easier.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Plus, github.com/lightning/spec, github.com/lightning/bolts, and/or&lt;br/&gt;&amp;gt; github.com/lightning/rfc would all be trivial to remember, and quick to&lt;br/&gt;&amp;gt; type.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Oct 12, 2021 at 2:57 PM Olaoluwa Osuntokun &amp;lt;laolu32 at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Fabrice,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I believe that was a mistake: a few days ago, Arcane Research published&lt;br/&gt;&amp;gt;&amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; fairly detailed report on the state of the Lightning Network:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://twitter.com/ArcaneResearch/status/1445442967582302213&#34;&gt;https://twitter.com/ArcaneResearch/status/1445442967582302213&lt;/a&gt;.  They&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; obviously did some real work there, and seem to imply that their report&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; was vetted by Open Node and Lightning Labs.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Appreciate the hard work from Arcane on putting together this report. That&lt;br/&gt;&amp;gt;&amp;gt; said, our role wasn&amp;#39;t to review the entire report, but instead to provide&lt;br/&gt;&amp;gt;&amp;gt; feedback on questions they had. Had we reviewed the section in question,&lt;br/&gt;&amp;gt;&amp;gt; we&lt;br/&gt;&amp;gt;&amp;gt; would have spotted those errors and told the authors to fix them. Mistakes&lt;br/&gt;&amp;gt;&amp;gt; happen, and we&amp;#39;re glad it got corrected.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Also note that lnd has _never_ referred to itself as the &amp;#34;reference&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; implementation.  A few years ago some other implementations adopted that&lt;br/&gt;&amp;gt;&amp;gt; title themselves, but have since adopted softer language.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So I&amp;#39;m proposing that lnd&amp;#39;s source code be removed from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://github.com/lightningnetwork/&#34;&gt;https://github.com/lightningnetwork/&lt;/a&gt; (and moved to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://github.com/lightninglabs&#34;&gt;https://github.com/lightninglabs&lt;/a&gt; for example, with the rest of their&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Lightning tools, but it&amp;#39;s up to Lightning Labs).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think it&amp;#39;s worth briefly revisiting a bit of history here w.r.t the&lt;br/&gt;&amp;gt;&amp;gt; github&lt;br/&gt;&amp;gt;&amp;gt; org in question. In the beginning, the lightningnetwork github org was&lt;br/&gt;&amp;gt;&amp;gt; created by Joseph, and the lightningnetwork/paper repo was added, the&lt;br/&gt;&amp;gt;&amp;gt; manuscript that kicked off this entire thing. Later lightningnetwork/lnd&lt;br/&gt;&amp;gt;&amp;gt; was&lt;br/&gt;&amp;gt;&amp;gt; created where we started to work on an initial implementation (before the&lt;br/&gt;&amp;gt;&amp;gt; BOLTs in their current form existed), and we were added as owners.&lt;br/&gt;&amp;gt;&amp;gt; Eventually we (devs of current impls) all met up in Milan and decided to&lt;br/&gt;&amp;gt;&amp;gt; converge on a single specification, thus we added the BOLTs to the same&lt;br/&gt;&amp;gt;&amp;gt; repo, despite it being used for lnd and knowingly so.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We purposefully made a _new_ lightninglabs github org as we wanted to keep&lt;br/&gt;&amp;gt;&amp;gt; lnd, the implementation distinct from any of our future commercial&lt;br/&gt;&amp;gt;&amp;gt; products/services. To this day, we&amp;#39;ve architected all our paid products to&lt;br/&gt;&amp;gt;&amp;gt; be built _on top_ of lnd, rather than within it. As a result, users always&lt;br/&gt;&amp;gt;&amp;gt; opt into these services.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As it seems the primary grievance here is collocating an implementation of&lt;br/&gt;&amp;gt;&amp;gt; Lightning along with the _specification_ of the protocol, and given that&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; spec was added last, how about we move the spec to an independent repo&lt;br/&gt;&amp;gt;&amp;gt; owned&lt;br/&gt;&amp;gt;&amp;gt; by the community? I currently have github.com/lightning, and would be&lt;br/&gt;&amp;gt;&amp;gt; happy&lt;br/&gt;&amp;gt;&amp;gt; to donate it to the community, or we could create a new org like&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;lightning-specs&amp;#34; or something similar. We could then move the spec (the&lt;br/&gt;&amp;gt;&amp;gt; BOLTs and also potentially the bLIPs since some devs want it to be within&lt;br/&gt;&amp;gt;&amp;gt; its own repo) there, and have it be the home for any other&lt;br/&gt;&amp;gt;&amp;gt; community-backed/owned projects.  I think the creation of a new github&lt;br/&gt;&amp;gt;&amp;gt; organization would also be a good opportunity to further formalize the set&lt;br/&gt;&amp;gt;&amp;gt; of stakeholders and the general process related to the evolution of&lt;br/&gt;&amp;gt;&amp;gt; Lightning the protocol.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thoughts?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; -- Laolu&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Fri, Oct 8, 2021 at 5:25 PM Fabrice Drouin &amp;lt;fabrice.drouin at acinq.fr&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hello,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; When you navigate to &lt;a href=&#34;https://github.com/lightningnetwork/&#34;&gt;https://github.com/lightningnetwork/&lt;/a&gt; you find&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - the Lightning Network white paper&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - the Lightning Network specifications&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - and ... the source code for lnd!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This has been an anomaly for years, which has created some confusion&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; between Lightning the open-source protocol and Lightning Labs, one of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the companies specifying and implementing this protocol, but we didn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; do anything about it.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I believe that was a mistake: a few days ago, Arcane Research&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; published a fairly detailed report on the state of the Lightning&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Network: &lt;a href=&#34;https://twitter.com/ArcaneResearch/status/1445442967582302213&#34;&gt;https://twitter.com/ArcaneResearch/status/1445442967582302213&lt;/a&gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; They obviously did some real work there, and seem to imply that their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; report was vetted by Open Node and Lightning Labs.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Yet in the first version that they published you’ll find this:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;Lightning Labs, founded in 2016, has developed the reference client&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for the Lightning Network called Lightning Network Daemon (LND)....&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; They also maintain the network standards documents (BOLTs)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; repository.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; They changed it because we told them that it was wrong, but the fact&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that in 2021 people who took time do do proper research, interviews,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ... can still misunderstand that badly how the Lightning developers&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; community works means that we ourselves badly underestimated how&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; confusing mixing the open-source specs for Lightning and the source&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; code for one of its implementations can be.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; To be clear, I&amp;#39;m not blaming Arcane Research that much for thinking&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that an implementation of an open-source protocol that is hosted with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the white paper and specs for that protocol is a &amp;#34;reference&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implementation, and thinking that since Lightning Labs maintains lnd&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; then they probably maintain the other stuff too. The problem is how&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that information is published.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; So I&amp;#39;m proposing that lnd&amp;#39;s source code be removed from&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/lightningnetwork/&#34;&gt;https://github.com/lightningnetwork/&lt;/a&gt; (and moved to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/lightninglabs&#34;&gt;https://github.com/lightninglabs&lt;/a&gt; for example, with the rest of their&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning tools, but it&amp;#39;s up to Lightning Labs).&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;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Fabrice&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&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;&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/20211013/ceeabee8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20211013/ceeabee8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:04:04&#43;02:00</updated>
  </entry>

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

  <entry>
    <id>https://nostr.ae/nevent1qqsdl2tcuu5khlf56d7ypgejsr7m03h03x5fnv6sjsw2npfjc035cqqzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5x42t5a</id>
    
      <title type="html">📅 Original date posted:2021-08-15 📝 Original message: The ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdl2tcuu5khlf56d7ypgejsr7m03h03x5fnv6sjsw2npfjc035cqqzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5x42t5a" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswq9039gdzplflyth0uyfw2k058a5rnfdldn39gx2z05pgjj6zg9cvkmr64&#39;&gt;nevent1q…mr64&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-08-15&lt;br/&gt;📝 Original message:&lt;br/&gt;The field of economics has done much work over the past few decades&lt;br/&gt;demonstrating that “Free” is problematic in practice because humans will go&lt;br/&gt;out of their way to externalize costs elsewhere (e.g. time, in the case of&lt;br/&gt;lightning), given the promise of freedom. In other words, actors often act&lt;br/&gt;irrationally to get a free deal.&lt;br/&gt;&lt;br/&gt;As protocol designers, it would be remiss to ignore this (repeatedly&lt;br/&gt;demonstrated) truth.&lt;br/&gt;&lt;br/&gt;To avoid this, we’ve been suggesting setting a min_htlc_value requirement.&lt;br/&gt;The problem with zbf &#43; a min_htlc size requirement is that it makes tiny&lt;br/&gt;payments impossible over lightning, which was one of the original design&lt;br/&gt;goals of the system, and is an important feature to keep/support as&lt;br/&gt;lightning grows into poorer economic bases and the bitcoin market price&lt;br/&gt;continues to rise.&lt;br/&gt;&lt;br/&gt;My suggestion would be that, as a compromise, we set a network wide minimum&lt;br/&gt;fee at the protocol level of 1msat. Naively, this seems it should be easy&lt;br/&gt;to add to calculations using single-dimension optimization (or trivial&lt;br/&gt;enough to ignore entirely), it removes the “free lunch” irrationality&lt;br/&gt;honeypot zbf opens, and it provides a way forward for the continued use of&lt;br/&gt;micropayments.&lt;br/&gt;&lt;br/&gt;The result is that micropayments have a different payment regime than&lt;br/&gt;“non-micropayments”, (which may still incentive almost irrational behavior)&lt;br/&gt;but at least there’s no *loss* felt by node operators for&lt;br/&gt;handling/supporting low value payments. 10k micropayments is worth 10sats.&lt;br/&gt;&lt;br/&gt;It’s also simple to implement and seems rather obvious in retrospect.&lt;br/&gt;&lt;br/&gt;The only confounding future change that I can see us making would be the&lt;br/&gt;introduction of negative fees, which are useful as a way to induce payments&lt;br/&gt;to rebalance channels passively. This seems like something we can revisit&lt;br/&gt;once a proposal for negative fees is being seriously considered, however.&lt;br/&gt;&lt;br/&gt;On Sun, Aug 15, 2021 at 05:59 ZmnSCPxj via Lightning-dev &amp;lt;&lt;br/&gt;lightning-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning aj, et al.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hey *,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; There&amp;#39;s been discussions on twitter and elsewhere advocating for&lt;br/&gt;&amp;gt; &amp;gt; setting the BOLT#7 fee_base_msat value [0] to zero. I&amp;#39;m just writing&lt;br/&gt;&amp;gt; &amp;gt; this to summarise my understanding in a place that&amp;#39;s able to easily be&lt;br/&gt;&amp;gt; &amp;gt; referenced later.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Setting the base fee to zero has a couple of benefits:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; -   it means you only have one value to optimise when trying to collect&lt;br/&gt;&amp;gt; &amp;gt;     the most fees, and one-dimensional optimisation problems are&lt;br/&gt;&amp;gt; &amp;gt;     obviously easier to write code for than two-dimensional optimisation&lt;br/&gt;&amp;gt; &amp;gt;     problems&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Indeed, this is a good point regarding this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; -   when finding a route, if all the fees on all the channels are&lt;br/&gt;&amp;gt; &amp;gt;     proportional only, you&amp;#39;ll never have to worry about paying more fees&lt;br/&gt;&amp;gt; &amp;gt;     just as a result of splitting a payment; that makes routing easier&lt;br/&gt;&amp;gt; &amp;gt;     (see [1])&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If we neglect roundoff errors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand, roundoff errors involved are &amp;lt;1msat per split, so it&lt;br/&gt;&amp;gt; probably will not matter to most people.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     So what&amp;#39;s the cost? The cost is that there&amp;#39;s no longer a fixed&lt;br/&gt;&amp;gt; minimum&lt;br/&gt;&amp;gt; &amp;gt;     fee -- so if you try sending a 1sat payment you&amp;#39;ll pay 0.1% of the&lt;br/&gt;&amp;gt; fee&lt;br/&gt;&amp;gt; &amp;gt;     to send a 1000sat payment, and there may be fixed costs that you have&lt;br/&gt;&amp;gt; &amp;gt;     in routing payments that you&amp;#39;d like to be compensated for (eg, the&lt;br/&gt;&amp;gt; &amp;gt;     computational work to update channel state, the bandwith to forward&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt;     tx, or the opportunity cost for not being able to accept another&lt;br/&gt;&amp;gt; htlc if&lt;br/&gt;&amp;gt; &amp;gt;     you&amp;#39;ve hit your max htlcs per channel limit).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     But there&amp;#39;s no need to explicitly separate those costs the way we do&lt;br/&gt;&amp;gt; &amp;gt;     now; instead of charging 1sat base fee and 0.02% proportional fee,&lt;br/&gt;&amp;gt; &amp;gt;     you can instead just set the 0.02% proportional fee and have a&lt;br/&gt;&amp;gt; minimum&lt;br/&gt;&amp;gt; &amp;gt;     payment size of 5000 sats (htlc_minimum_msat=5e6, ~$2), since 0.02%&lt;br/&gt;&amp;gt; &amp;gt;     of that is 1sat. Nobody will be asking you to route without offering&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; &amp;gt;     fee of at least 1sat, but all the optimisation steps are easier.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Should this minimum a node will be willing to forward be part of gossip,&lt;br/&gt;&amp;gt; and how does this affect routing algorithms?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     You could go a step further, and have the node side accept smaller&lt;br/&gt;&amp;gt; &amp;gt;     payments despite the htlc minimum setting: eg, accept a 3000 sat&lt;br/&gt;&amp;gt; payment&lt;br/&gt;&amp;gt; &amp;gt;     provided it pays the same fee that a 5000 sat payment would have.&lt;br/&gt;&amp;gt; That is,&lt;br/&gt;&amp;gt; &amp;gt;     treat the setting as minimum_fee=1sat, rather than&lt;br/&gt;&amp;gt; minimum_amount=5000sat;&lt;br/&gt;&amp;gt; &amp;gt;     so the advertised value is just calculated from the real settings,&lt;br/&gt;&amp;gt; &amp;gt;     and that nodes that want to send very small values despite having to&lt;br/&gt;&amp;gt; &amp;gt;     pay high rates can just invert the calculation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I like this idea, as I think it matches more what the incentives are.&lt;br/&gt;&amp;gt; But it requires a change in gossip and in routing algorithms, and more&lt;br/&gt;&amp;gt; importantly it requires routing algorithms to support two different fee&lt;br/&gt;&amp;gt; schemes (base &#43; proportional vs min &#43; proportional).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand, this still is a two-dimensional optimization algorithm,&lt;br/&gt;&amp;gt; with `minimum_fee` and `proportional_fee_millionths` as the two dimensions.&lt;br/&gt;&amp;gt; So maybe just have a single proportional-fee mechanism...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     I think something like this approach also makes sense when your&lt;br/&gt;&amp;gt; channel&lt;br/&gt;&amp;gt; &amp;gt;     becomes overloaded; eg if you have x HTLC slots available, and y&lt;br/&gt;&amp;gt; channel&lt;br/&gt;&amp;gt; &amp;gt;     capacity available, setting a minimum payment size of something like&lt;br/&gt;&amp;gt; &amp;gt;     y/2/x**2 allows you to accept small payments (good for the network)&lt;br/&gt;&amp;gt; &amp;gt;     when you&amp;#39;re channel is not busy, but reserves the last slots for&lt;br/&gt;&amp;gt; larger&lt;br/&gt;&amp;gt; &amp;gt;     payments so that you don&amp;#39;t end up missing out on profits because you&lt;br/&gt;&amp;gt; &amp;gt;     ran out of capacity due to low value spam.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     Two other aspects related to this:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     At present, I think all the fixed costs are also incurred even when&lt;br/&gt;&amp;gt; &amp;gt;     a htlc fails, so until we have some way of charging failing txs for&lt;br/&gt;&amp;gt; &amp;gt;     incurring those costs, it seems a bit backwards to penalise&lt;br/&gt;&amp;gt; successful&lt;br/&gt;&amp;gt; &amp;gt;     txs who at least pay a proportional fee for the same thing. Until&lt;br/&gt;&amp;gt; we&amp;#39;ve&lt;br/&gt;&amp;gt; &amp;gt;     got a way of handling that, having zero base fee seems at least fair.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, the dreaded mechanism against payment lockup, which as far as I&lt;br/&gt;&amp;gt; understand has a lot of thought already sunk into it without any&lt;br/&gt;&amp;gt; widely-accepted solution, sigh.&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; _______________________________________________&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/20210815/cb1c33c6/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20210815/cb1c33c6/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T15:03:25&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv9y9zywqju78wp7hy5sd88rzqhhfwnqlhnqkjwlt0qgzq77sgzvszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5mtf365</id>
    
      <title type="html">📅 Original date posted:2020-02-10 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv9y9zywqju78wp7hy5sd88rzqhhfwnqlhnqkjwlt0qgzq77sgzvszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5mtf365" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs80agdzhu47d4mnnkwu5gq5e0rgeldym20c4ejgu9gtgdg0c0vnkg8r7rtu&#39;&gt;nevent1q…7rtu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-10&lt;br/&gt;📝 Original message:&lt;br/&gt;Here&amp;#39;s some thoughts I had on PoDLE&amp;#39;s and lightning. An enormous&lt;br/&gt;tip-of-the-hat is due to ZmnSCPxj for surfacing the work that JoinMarket&lt;br/&gt;has done here already.&lt;br/&gt;&lt;br/&gt;- The initiating message (in the case of open channel, this would be&lt;br/&gt;`open_channel2`) is extended to include an &amp;#39;H2&amp;#39; field in its TLV, a 32-byte&lt;br/&gt;hash commitment to the P2 key.&lt;br/&gt;- Only one H2 commitment is required.&lt;br/&gt;- The `tx_add_input` message, as specified previously, is extended to an&lt;br/&gt;include a TLV type. This must be present on the input addition that&lt;br/&gt;corresponds with the UTXO used for the originally transmitted commitment&lt;br/&gt;- The non-initiator SHOULD wait to send any `tx_add_input` messages of&lt;br/&gt;their own until after receiving a `tx_add_input` message with a valid PoDLE&lt;br/&gt;TLV extension.&lt;br/&gt;&lt;br/&gt;1. tlvs: `add_input_tlvs`&lt;br/&gt;2. types:&lt;br/&gt;    1. type: 1 (`proof_of_dle`)&lt;br/&gt;    2. data:&lt;br/&gt;        *[`64*byte`:`s||e`]&lt;br/&gt;        *[`33*byte`:pubkey`]&lt;br/&gt;        *[`33*byte`:pubkey2`]&lt;br/&gt;&lt;br/&gt;- If the proof is incorrect, the non-initiator MAY fail the transaction&lt;br/&gt;collaboration or respond with `tx_complete`. There is no need for them to&lt;br/&gt;publish the PoDLE.&lt;br/&gt;- If the proof is correct, the non-initiator verifies that the commitment&lt;br/&gt;(hash of pubkey2) has not been communicated to them via gossip.&lt;br/&gt;- If the proof is not in their gossip store, the transaction collaboration&lt;br/&gt;continues. It is considered &amp;#39;safe&amp;#39; for the non-initiator to send&lt;br/&gt;`tx_add_input` to their peer.&lt;br/&gt;- If the proof IS in their gossip store, the transaction collaboration&lt;br/&gt;SHOULD reply with `tx_complete`. It is considered &amp;#39;unsafe&amp;#39; for the&lt;br/&gt;non-initiator to send `tx_add_input`. (This allows errored/erroring&lt;br/&gt;initiators to use blacklisted utxos, however it prevents them from privy to&lt;br/&gt;any other nodes&amp;#39; UTXO set.)&lt;br/&gt;- The initiator MUST NOT remove the committed to UTXO from the&lt;br/&gt;collaboration set.&lt;br/&gt;&lt;br/&gt;- If the transaction collaboration fails/is errored by the initiator,&lt;br/&gt;    - the non-initiator SHOULD broadcast the original PoDLE commitment to&lt;br/&gt;the gossip network.&lt;br/&gt;    - the non-initiator MAY delay broadcast to allow the initiating node to&lt;br/&gt;re-attempt the open.&lt;br/&gt;&lt;br/&gt;The gossip message for a PoDLE blacklist entry is as follows:&lt;br/&gt;&lt;br/&gt;1. type: 259 (`podle_blacklist`)&lt;br/&gt;2. data:&lt;br/&gt;    *[`signature`:`signature`]&lt;br/&gt;    *[`32*byte`:`H2`]&lt;br/&gt;    *[`point`:`node_id`]&lt;br/&gt;    *[`u32`:`timestamp`]&lt;br/&gt;&lt;br/&gt;Note that the `node_id` is the id of the node that signs (and broadcasts)&lt;br/&gt;the blacklisted PoDLE. h/t to ZmnSCPxj for the gossip construction.&lt;br/&gt;The timestamp is added as a convenience for peers to trim/discard blacklist&lt;br/&gt;participants as they wish depending on time/staleness.&lt;br/&gt;&lt;br/&gt;## Some Notes:&lt;br/&gt;- The JoinMarket protocol allows nodes to use any of a range of secondary&lt;br/&gt;points for J. Since the lightning version of this allows blacklisted UTXOs&lt;br/&gt;to still open channels, albeit without participation from the peer, it&lt;br/&gt;seems unnecessary to allow for more than one valid J point. I&amp;#39;d propose&lt;br/&gt;fixing the J the same zero-index point used by JoinMarket. This reduces the&lt;br/&gt;number of valid H2&amp;#39;s that are available for any given utxo set, while also&lt;br/&gt;keeping blacklisted H2&amp;#39;s compatible with the blacklist set generated by&lt;br/&gt;JoinMarket implementations.&lt;br/&gt;- The blacklist originates from the &amp;#39;non-initiating&amp;#39; peer, and does not&lt;br/&gt;reveal the offending node&amp;#39;s id.&lt;br/&gt;- Assuming that every node honestly participates in the blacklist, only&lt;br/&gt;verified H2&amp;#39;s will be submitted to the blacklist&lt;br/&gt;- A malicious non-initiator can only prevent an honest initiator from using&lt;br/&gt;the committed UTXO for collaborative transactions; they won&amp;#39;t prevent them&lt;br/&gt;from successfully initiating a one-sided transaction with honest peers.&lt;br/&gt;- Only nodes that have at least one public channel will be able to&lt;br/&gt;contribute to the public PoDLE blacklist. This means it&amp;#39;s possible for a&lt;br/&gt;malicious initiator to grief non-public nodes without much consequence,&lt;br/&gt;however this requires the ability to send inbound messages to private&lt;br/&gt;nodes, i.e. more likely for a close or splice interaction.&lt;br/&gt;- As ZmnSCPxj has pointed out elsewhere, a malicious peer could broadcast&lt;br/&gt;junk H2&amp;#39;s; it is acceptable to rate-limit the number of PoDLE blacklists&lt;br/&gt;generated by a peer.peer&lt;br/&gt;- It is possible for a malicious peer to fail to relay their `H2` entries&lt;br/&gt;in the blacklisted gossip set.&lt;br/&gt;- Duplicate H2 gossip should replace older timestamped versions.&lt;br/&gt;- Elsewhere we&amp;#39;ve had a discussion/concern over floods of PoDLE blacklist&lt;br/&gt;messages. It&amp;#39;s possible for gossip message floods to originate from a&lt;br/&gt;malicious peer; they also might signal an ongoing probe attempt. Given a&lt;br/&gt;timestamp and a rough measure of the number of utxos&amp;#39; currently outstanding&lt;br/&gt;in the mempool, however, it should be possible to distinguish the two.&lt;br/&gt;&lt;br/&gt;## Open Questions:&lt;br/&gt;- Should PoDLE be required for every collaborative transaction (opens,&lt;br/&gt;splices &#43; closes), or only for opens? It seems reasonable to limit them&lt;br/&gt;just to opens, as for all others you&amp;#39;ll already have a shared UTXO with the&lt;br/&gt;peer.&lt;br/&gt;- Is fixing the generator point too restrictive? JoinMarket allows for a&lt;br/&gt;range of acceptable NUMS (J) points (up to 256). The smaller the pool of&lt;br/&gt;eligible J&amp;#39;s, the smaller the pool of potential blacklisted PoDLE&amp;#39;s (up to&lt;br/&gt;no. NUMs * current utxo count). One upside to allowing a larger pool of J&amp;#39;s&lt;br/&gt;means that the same UTXO can be retried on failure. One downside to&lt;br/&gt;allowing a pool of J&amp;#39;s means that a single UTXO can be validly retried in a&lt;br/&gt;probe attack against a variety of peers.&lt;br/&gt;&lt;br/&gt;On Thu, Jan 30, 2020 at 5:32 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning darosior, ariard, niftynei, and list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We could also consider PoDLE as used in JoinMarket, which solves a&lt;br/&gt;&amp;gt; similar problem.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/AdamISZ/9cbba5e9408d23813ca8#defence-2-committing-to-a-utxo-in-publicplaintext-at-the-start-of-the-handshake&#34;&gt;https://gist.github.com/AdamISZ/9cbba5e9408d23813ca8#defence-2-committing-to-a-utxo-in-publicplaintext-at-the-start-of-the-handshake&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; Basically, a PoDLE commits to a UTXO, without being trivially grindable&lt;br/&gt;&amp;gt; from the UTXO set and also including a proof that the creator of the PoDLE&lt;br/&gt;&amp;gt; knows the secret key behind it.&lt;br/&gt;&amp;gt; &amp;gt; It can later be opened to reveal which UTXO the opener allocated.&lt;br/&gt;&amp;gt; &amp;gt; If the opener aborts (i.e. does not provide its signatures to the&lt;br/&gt;&amp;gt; funding transaction) then the acceptor can gossip the UTXO and the revealed&lt;br/&gt;&amp;gt; PoDLE as well to the rest of Lightning, so that the opener at least cannot&lt;br/&gt;&amp;gt; reuse the same UTXO to probe other potential acceptors.&lt;br/&gt;&amp;gt; &amp;gt; (though, my understanding, there is no clear way to determine when we&lt;br/&gt;&amp;gt; can safely delete old PoDLEs: maybe each node can keep it around for a&lt;br/&gt;&amp;gt; month, which might be good enough to limit the practical ability of a snoop&lt;br/&gt;&amp;gt; to probe other nodes)&lt;br/&gt;&amp;gt; &amp;gt; I believe JoinMarket also has solved the issue of allowing a UTXO to be&lt;br/&gt;&amp;gt; used at most N times (for example due to &amp;#34;honest&amp;#34; failures, such as&lt;br/&gt;&amp;gt; connectivity interruptions which might cause an abort of the protocol); I&lt;br/&gt;&amp;gt; think it involves appending a single byte to something that is hashed, and&lt;br/&gt;&amp;gt; ensuring its value is less than N, so that it can only be used from 0 to N&lt;br/&gt;&amp;gt; - 1 (and thus allow a UTXO to be used at most N times).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Getting into contact with waxwing / Adam Gibson for this might be useful&lt;br/&gt;&amp;gt; to fill out how PoDLE works and so on; basically, I believe this issue is a&lt;br/&gt;&amp;gt; practically solved problem already for JoinMarket, though waxwing may be&lt;br/&gt;&amp;gt; able to provide a more nuanced opinion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I communicated with waxwing, and he said:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * See also: &lt;a href=&#34;https://joinmarket.me/blog/blog/poodle&#34;&gt;https://joinmarket.me/blog/blog/poodle&lt;/a&gt; \[sic\].&lt;br/&gt;&amp;gt; * The counter I mentioned is implemented using the second generator point.&lt;br/&gt;&amp;gt;   * The PoDLE construction requires the standard base point `G`, and&lt;br/&gt;&amp;gt; another generator point `J`.&lt;br/&gt;&amp;gt;   * To create the generator point `J`, JoinMarket appends the counter byte&lt;br/&gt;&amp;gt; (the one used to limit N number of uses of the same UTXO) to `G`, hashes&lt;br/&gt;&amp;gt; it, then uses a coerce-to-point.&lt;br/&gt;&amp;gt; * PoDLE is sometimes called DLEQ elsewhere.&lt;br/&gt;&amp;gt; * There is no concrete answer on &amp;#34;when to delete old PoDLE&amp;#34;; JoinMarket&lt;br/&gt;&amp;gt; never deletes (though they might if throughput increases).&lt;br/&gt;&amp;gt; * Watermarks like `nLockTime`, `nSequence`, `nVersion` are currently fixed&lt;br/&gt;&amp;gt; values; JoinMarket sees no reason to change this since equal-valued&lt;br/&gt;&amp;gt; CoinJoins are otherwise obvious to chain analysis anyway.&lt;br/&gt;&amp;gt;   * But note: JoinMarket implements PayJoin, which is not otherwise&lt;br/&gt;&amp;gt; obvious onchain, and does indeed do anti-fee-sniping emulation for PayJoin.&lt;br/&gt;&amp;gt;   * JoinMarket also strives to make similar feerates across users.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In any case, for myself, my thoughts are:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * I observe that our use-case is quite similar to a PayJoin:&lt;br/&gt;&amp;gt;   * The opener proposes to make a payment (to a channel between the opener&lt;br/&gt;&amp;gt; and the acceptor, rather than outright giving control to the acceptor as in&lt;br/&gt;&amp;gt; PayJoin).&lt;br/&gt;&amp;gt;   * The acceptor adds some UTXOs which will contribute to the payment&lt;br/&gt;&amp;gt; output (i.e. the channel).&lt;br/&gt;&amp;gt;   * This probably does mean we want to later consider `nLockTime`&lt;br/&gt;&amp;gt; anti-fee-sniping as well in multi-funded channel opens.&lt;br/&gt;&amp;gt; * Speaking of multi-funded channel opens, it seems to me this interactive&lt;br/&gt;&amp;gt; tx construction mechanism as well can be later used for channel factories.&lt;br/&gt;&amp;gt;   * Similarly, PoDLE techniques would be useful as well to multi-funded&lt;br/&gt;&amp;gt; channel factories.&lt;br/&gt;&amp;gt; * It would probably be a good idea to share PoDLE format with JoinMarket&lt;br/&gt;&amp;gt; so we can share PoDLE with them (there could be bridges that share PoDLE&lt;br/&gt;&amp;gt; between a JoinMarket maker and a Lightning node, and each network already&lt;br/&gt;&amp;gt; has its own gossip protocols, so LN just needs a gossip protocol for&lt;br/&gt;&amp;gt; sharing PoDLEs as well).&lt;br/&gt;&amp;gt; * Probably we can mandate in some BOLT spec to retain PoDLE for at least a&lt;br/&gt;&amp;gt; year or a month or two weeks or so, which should be enough to slow down&lt;br/&gt;&amp;gt; probe attempts.&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/20200210/047f7af7/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200210/047f7af7/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:58:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyhtf4ytkwxgv0ufq2zynr73t2663qtwnacj285nag7lzg2efhw3szyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5w263gu</id>
    
      <title type="html">📅 Original date posted:2020-02-13 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyhtf4ytkwxgv0ufq2zynr73t2663qtwnacj285nag7lzg2efhw3szyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5w263gu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsynj0g8z9attscn0aypxt226npx3dr6vt3u4dqsxeta53g8w2fn3gvf2wxw&#39;&gt;nevent1q…2wxw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-13&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; With PoDLE this would not be possible I think, as you would not be able&lt;br/&gt;to open the PoDLE commitment with the other node as the target (if we go&lt;br/&gt;with the modified PoDLE which also commits to which node an opening is for,&lt;br/&gt;to prevent the pouncing venus flytrap attack).&lt;br/&gt;&lt;br/&gt;Good question. It should be possible to do multi-channel open even with the&lt;br/&gt;PoDLE signature committing to a node_id.&lt;br/&gt;&lt;br/&gt;- An initiator can use the same utxo (h2) as their proof for multiple&lt;br/&gt;peers; the signatures passed to each peer will have to commit to that&lt;br/&gt;specific peer&amp;#39;s node_id, however.&lt;br/&gt;- The revised PoDLE signature commitment requires every initiator to&lt;br/&gt;include at least one of their own inputs in the tx. Attempting to initiate&lt;br/&gt;an additional open etc using someone else&amp;#39;s utxo&amp;#39;s won&amp;#39;t work (this is the&lt;br/&gt;pouncing venus flytrap attack which we&amp;#39;re preventing). The initiator&lt;br/&gt;including at least one input is expected behavior, at least in the open&lt;br/&gt;case, since the opener has to cover the fees for the funding output.&lt;br/&gt;- Ideally, a node would remove the PoDLE TLV data from any &amp;#39;forwarded&amp;#39;&lt;br/&gt;`tx_add_inputs` that isn&amp;#39;t the input they&amp;#39;re proving for, to prevent&lt;br/&gt;leaking information about which inputs belong to other parties. I say&lt;br/&gt;ideally here because even if you fail to do this, the peer can iterate&lt;br/&gt;through all the provided commitment proofs until one of them&lt;br/&gt;matches/verifies with the upfront provided PoDLE.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Feb 13, 2020 at 12:18 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Rusty, niftynei, and list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   Serial ids should be chosen at random&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   For multiparty constructions, the initiator MUST flip the bottom&lt;br/&gt;&amp;gt; bit of any received inputs before relaying them to a peer.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; -   Collisions of serial ids between peers is a protocol error&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; I suppose we should define collision to mean &amp;#34;equal in all bits except&lt;br/&gt;&amp;gt; the lowest bit&amp;#34;.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; No, literally equal. i.e. you can only make this error by clashing with&lt;br/&gt;&amp;gt; &amp;gt; yourself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; hmm, I thought the entire point of having the low bit was that you could&lt;br/&gt;&amp;gt; multifund in such a way that the initiator creates multiple channels&lt;br/&gt;&amp;gt; simultaneously with multiple nodes?&lt;br/&gt;&amp;gt; So you would have to take the UTXOs of one peer and give it to the other&lt;br/&gt;&amp;gt; peer claiming it as your own.&lt;br/&gt;&amp;gt; Or something.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With PoDLE this would not be possible I think, as you would not be able to&lt;br/&gt;&amp;gt; open the PoDLE commitment with the other node as the target (if we go with&lt;br/&gt;&amp;gt; the modified PoDLE which also commits to which node an opening is for, to&lt;br/&gt;&amp;gt; prevent the pouncing venus flytrap attack).&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;&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/20200213/b925f71c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200213/b925f71c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:58:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd5x5ze0pu9n78esw73jg35zwsz9qdqryxlxwcfql7ya3cjm6d53gzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5uvlc7l</id>
    
      <title type="html">📅 Original date posted:2020-02-10 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd5x5ze0pu9n78esw73jg35zwsz9qdqryxlxwcfql7ya3cjm6d53gzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5uvlc7l" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9l538220zksmysw73muwd95uws5ecatqjtru6w6j0hh890da393swpaj6a&#39;&gt;nevent1q…aj6a&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-10&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; But if you impose the blockheight - 6 in the Lightning protocol level,&lt;br/&gt;and Lightning succeeds (meaning a substantial fraction of blockchain&lt;br/&gt;transactions are Lightning opens)...&lt;br/&gt;&amp;gt;  --- then transactions with `nLockTime` equal to the block they are&lt;br/&gt;included in minus 5 will be more common than others, and would be a&lt;br/&gt;reliable indicator that the transaction is a Lightning channel funding&lt;br/&gt;attempt.&lt;br/&gt;&lt;br/&gt;Ah good point. This can be mitigated by setting the acceptable range up to&lt;br/&gt;100 then, matching the behavior of bitcoind.&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/src/wallet/wallet.cpp#L2507-L2544&amp;gt&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/src/wallet/wallet.cpp#L2507-L2544&amp;gt&lt;/a&gt;;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Feb 6, 2020 at 6:23 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning lisa,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I am unsure what is the purpose of this minus 6.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The original motivation was to keep the funding transaction from being&lt;br/&gt;&amp;gt; rejected from the mempool in the case of a re-org, but as you pointed out,&lt;br/&gt;&amp;gt; the &amp;#39;next block&amp;#39; is always at -par or ahead of the current chain tip, so&lt;br/&gt;&amp;gt; I&amp;#39;m not sure this accomplishes this goal.  I&amp;#39;m not sure how bitcoind&lt;br/&gt;&amp;gt; handles the mempool in the case of the &amp;#39;best block&amp;#39; moving to another tip,&lt;br/&gt;&amp;gt; the goal of setting it to -6 is to avoid the funding transaction being&lt;br/&gt;&amp;gt; evicted.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My understanding is that it rewinds the abandoned tip, putting the&lt;br/&gt;&amp;gt; transactions in those blocks back into its local mempool (which may lead to&lt;br/&gt;&amp;gt; evictions if the mempool gets full), all the way to the branch-off point,&lt;br/&gt;&amp;gt; then it re-adds blocks back to the new tip (which can lead to removals from&lt;br/&gt;&amp;gt; the mempool, if transactions in the block spend the same UTXOs (or *are*&lt;br/&gt;&amp;gt; the same transactions) as transactions in the mempool).&lt;br/&gt;&amp;gt; The main effect is that there could be suddenly higher fee pressure for&lt;br/&gt;&amp;gt; the transactions in the reorged-away blocks (because of possible mempool&lt;br/&gt;&amp;gt; congestion if the longer chainsplit has fewer transactions per block), but&lt;br/&gt;&amp;gt; that is why the dual-funding protocol has RBF built-in right?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Setting blockheight - 6 also increases the incentive of potential&lt;br/&gt;&amp;gt; deliberate reorgers to actually perform a reorg attack, because the&lt;br/&gt;&amp;gt; transaction you just added is valid for earlier blocks that the reorger&lt;br/&gt;&amp;gt; wants to rewrite.&lt;br/&gt;&amp;gt; This is a bad thing, because you want your funding txout to be confirmed,&lt;br/&gt;&amp;gt; not have parts of global hashpower contemplating reorgs and delaying your&lt;br/&gt;&amp;gt; confirmations even more.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; In practice, setting the locktime back a few blocks makes the funding&lt;br/&gt;&amp;gt; transaction eligible for inclusion in any of the previous six blocks, so in&lt;br/&gt;&amp;gt; case of a reorg there&amp;#39;s a higher probability it will have been included in&lt;br/&gt;&amp;gt; the reorganization. In other words, it enables fee-sniping for up to 6&lt;br/&gt;&amp;gt; blocks in the hopes that any &amp;#39;eligible&amp;#39; re-org includes the funding&lt;br/&gt;&amp;gt; transaction (the short channel id will change, but otherwise the channel&lt;br/&gt;&amp;gt; open will be the same).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On second thought, this doesn&amp;#39;t seem like something that we should&lt;br/&gt;&amp;gt; include at the protocol level; if a peer wanted to &amp;#39;allow fee-sniping for&lt;br/&gt;&amp;gt; up to X blocks&amp;#39;, then they&amp;#39;d simply relay the &amp;#34;blocktip&amp;#34; that they&amp;#39;re using&lt;br/&gt;&amp;gt; for the nLocktime to be at the depth they&amp;#39;d desire. Though it might be&lt;br/&gt;&amp;gt; worth imposing a limit as to how far back in the past a peer can allow&lt;br/&gt;&amp;gt; fee-sniping for... no more than 6 blocks from our current tip seems&lt;br/&gt;&amp;gt; reasonable. (This would then limit the &amp;#39;acceptable range&amp;#39; for an offset of&lt;br/&gt;&amp;gt; an initiator to 5, as your peer may be off from your tip by one.)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On that note, I believe bitcoind fuzzes the nLocktime value to obfuscate&lt;br/&gt;&amp;gt; exactly what blockheight the outgoing transaction was composed / broadcast&lt;br/&gt;&amp;gt; at, which is probably something we should encourage in lightning&lt;br/&gt;&amp;gt; implementations as well.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But if you impose the blockheight - 6 in the Lightning protocol level, and&lt;br/&gt;&amp;gt; Lightning succeeds (meaning a substantial fraction of blockchain&lt;br/&gt;&amp;gt; transactions are Lightning opens) --- then transactions with `nLockTime`&lt;br/&gt;&amp;gt; equal to the block they are included in minus 5 will be more common than&lt;br/&gt;&amp;gt; others, and would be a reliable indicator that the transaction is a&lt;br/&gt;&amp;gt; Lightning channel funding attempt.&lt;br/&gt;&amp;gt; The fuzzing may not be big enough to cover that, as there is a 10% chance&lt;br/&gt;&amp;gt; to fuzz and about 1% subsequent chance (total 0.1% chance) that Bitcoin ore&lt;br/&gt;&amp;gt; will put a transaction at blockheight - 6 (as opposed to the 99 other&lt;br/&gt;&amp;gt; possibilities: blockheight - 0 to blockheight - 99 inclusive).&lt;br/&gt;&amp;gt; So once more than 0.1% of onchain transactions are Lightning&lt;br/&gt;&amp;gt; dual-fundings, an analyst has &amp;gt; 50% chance of correctly betting that a&lt;br/&gt;&amp;gt; blockheight - 5 transaction (yes, - 5, because a transaction can typically&lt;br/&gt;&amp;gt; be added only on the next block) is a Lightning funding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You are better off with blockheight, possibly with SPV-header-chain-proofs&lt;br/&gt;&amp;gt; if one side or the other thinks the blockheight has changed since one side&lt;br/&gt;&amp;gt; or the other proposed it.&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; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Wed, Feb 5, 2020 at 8:25 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Good morning niftynei,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Rusty had some suggestions about how to improve the protocol&lt;br/&gt;&amp;gt; messages for this, namely adding a serial_id to the inputs and outputs,&lt;br/&gt;&amp;gt; which can then be reused for deletions.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The serial id can then also be used as the ordering heuristic for&lt;br/&gt;&amp;gt; transaction inputs during construction (replacing current usage of BIP69).&lt;br/&gt;&amp;gt; Inputs can be shared amongst peers by flipping the bottom bit of the&lt;br/&gt;&amp;gt; serial_id before relaying them to another peer (as your own).&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; What happens if the initiator deliberately provides serial IDs 0x1,&lt;br/&gt;&amp;gt; 0x3, .... while the acceptor naively provides serial IDs from&lt;br/&gt;&amp;gt; `/dev/urandom`?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Then the balance of probability is that the initiator inputs and&lt;br/&gt;&amp;gt; outputs are sorted before the acceptor.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Now, this is probably not an issue, since the initiator and acceptor&lt;br/&gt;&amp;gt; both know which inputs and outputs are theirs and not theirs, so they could&lt;br/&gt;&amp;gt; just reveal this information to anyone, so an actor providing such lousy&lt;br/&gt;&amp;gt; serial IDs is just hurting its own privacy relative to blockchain analysts,&lt;br/&gt;&amp;gt; so probably will not happen in practice.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; My initial reaction was to propose adding a secret-sharing round where&lt;br/&gt;&amp;gt; the resulting key is XORed to each serial ID before sorting by the XORed&lt;br/&gt;&amp;gt; serial ID, but this might be too overweight, and again the initiator is&lt;br/&gt;&amp;gt; only hurting its own privacy, and the two participants already know whose&lt;br/&gt;&amp;gt; money is whose anyway....&lt;br/&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; See below for details.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; 1. type:   440 `tx_add_input`&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. data:&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;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;         * [`32*byte`:``serial_id`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Add a serial id.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Each input addition must have a unique serial id.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; No addition may have a repeated id number.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The initiator&amp;#39;s serial id&amp;#39;s must be odd. The non-initiator&amp;#39;s serial&lt;br/&gt;&amp;gt; id&amp;#39;s must be even.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Serial ids are used as sorting heuristic for input ordering in final&lt;br/&gt;&amp;gt; transaction, replaces BIP69&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;     * [`u64`:`sats`]&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;     * [`sha256`:`prevtx_txid`]&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;     * [`u32`:`prevtx_vout`]&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;     * [`u16`:`prevtx_scriptpubkey_len`]&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;     * [`prevtx_scriptpubkey_len*byte`:`prevtx_scriptpubkey`]&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;     * [`u16`:`max_witness_len`]&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;     * [`u16`:`scriptlen`]&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;     * [`scriptlen*byte`:`script`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Removes the signal_rbf; everything will be flagged as RBF eligible.&lt;br/&gt;&amp;gt; (This makes verifying RBF eligibility during a RBF round simpler.)&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Yes. Ish.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; RBF and privacy do not work well together unfortunately.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; This is still initiator-pays, right?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; 1. subtype: `witness_element`&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. data:&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;     * [`u16`:`len`]&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;     * [`len*byte`:`witness`]&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; ## General Notes&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 output scripts must be standard&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; - nLocktime is always set to 0x00000000&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; - If a blockheight to be used as nLocktime is communicated in the&lt;br/&gt;&amp;gt; initiation step, is set to blockheight-6; otherwise set to zero-&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I am unsure what is the purpose of this minus 6.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; If you fear blockheight disagreements, this is probably a good time to&lt;br/&gt;&amp;gt; introduce block headers.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; So for example if the acceptor thinks the initiator blockheight is too&lt;br/&gt;&amp;gt; high, it could challenge the initiator to give block headers from its known&lt;br/&gt;&amp;gt; blockheight to the initiator blockheight.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; If the acceptor thinks the initiator blockheight is too low, it could&lt;br/&gt;&amp;gt; provide block headers itself as proof.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; This could be limited so that gross differences in blockheight are&lt;br/&gt;&amp;gt; outright rejected by the acceptor (it could `error` the temporary channel&lt;br/&gt;&amp;gt; ID rather than accept it).&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; This is SPV, but neither side is actually making or accepting a&lt;br/&gt;&amp;gt; payment *yet*, just synchronizing clocks, so maybe not as bad as normal SPV.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Massive chain reorgs cannot reduce blockheight, only increase it (else&lt;br/&gt;&amp;gt; the reorg attempt fails in the first place) so there must still exist at&lt;br/&gt;&amp;gt; least one chain(split) with the highest known blockheight already given a&lt;br/&gt;&amp;gt; proof-of-header-chain, and all you really need is some mining activity on&lt;br/&gt;&amp;gt; top of *one* split that confirms your funding transaction.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; If it is not because of blockheight disagreements or massive chain&lt;br/&gt;&amp;gt; reorgs, what is the purpose of `blockheight - 6`?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; - Serial ids should be chosen at random&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; - For multiparty constructions, the initiator MUST flip the bottom&lt;br/&gt;&amp;gt; bit of any received inputs before relaying them to a peer.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; - Collisions of serial ids between peers is a protocol error&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; I suppose we should define collision to mean &amp;#34;equal in all bits except&lt;br/&gt;&amp;gt; the lowest bit&amp;#34;.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Regards,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; ZmnSCPxj&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/20200210/26f95449/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200210/26f95449/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:58:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9a9sasv98gx3xm6gsgd3drtlt84mu5aexuqcv9jgqynwc6xfytcczyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5hss0j8</id>
    
      <title type="html">📅 Original date posted:2020-02-06 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9a9sasv98gx3xm6gsgd3drtlt84mu5aexuqcv9jgqynwc6xfytcczyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5hss0j8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8svwsvawthfucjqydn54yqxfr7fm8xp8uate2w37577d36szx6fqteyk8q&#39;&gt;nevent1q…yk8q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-06&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; I am unsure what is the purpose of this minus 6.&lt;br/&gt;&lt;br/&gt;The original motivation was to keep the funding transaction from being&lt;br/&gt;rejected from the mempool in the case of a re-org, but as you pointed out,&lt;br/&gt;the &amp;#39;next block&amp;#39; is always at -par or ahead of the current chain tip, so&lt;br/&gt;I&amp;#39;m not sure this accomplishes this goal.  I&amp;#39;m not sure how bitcoind&lt;br/&gt;handles the mempool in the case of the &amp;#39;best block&amp;#39; moving to another tip,&lt;br/&gt;the goal of setting it to -6 is to avoid the funding transaction being&lt;br/&gt;evicted.&lt;br/&gt;&lt;br/&gt;In practice, setting the locktime back a few blocks makes the funding&lt;br/&gt;transaction eligible for inclusion in any of the previous six blocks, so in&lt;br/&gt;case of a reorg there&amp;#39;s a higher probability it will have been included in&lt;br/&gt;the reorganization. In other words, it enables fee-sniping for up to 6&lt;br/&gt;blocks in the hopes that any &amp;#39;eligible&amp;#39; re-org includes the funding&lt;br/&gt;transaction (the short channel id will change, but otherwise the channel&lt;br/&gt;open will be the same).&lt;br/&gt;&lt;br/&gt;On second thought, this doesn&amp;#39;t seem like something that we should include&lt;br/&gt;at the protocol level; if a peer wanted to &amp;#39;allow fee-sniping for up to X&lt;br/&gt;blocks&amp;#39;, then they&amp;#39;d simply relay the &amp;#34;blocktip&amp;#34; that they&amp;#39;re using for the&lt;br/&gt;nLocktime to be at the depth they&amp;#39;d desire. Though it might be worth&lt;br/&gt;imposing a limit as to how far back in the past a peer can allow&lt;br/&gt;fee-sniping for... no more than 6 blocks from our current tip seems&lt;br/&gt;reasonable. (This would then limit the &amp;#39;acceptable range&amp;#39; for an offset of&lt;br/&gt;an initiator to 5, as your peer may be off from your tip by one.)&lt;br/&gt;&lt;br/&gt;On that note, I believe bitcoind fuzzes the nLocktime value to obfuscate&lt;br/&gt;exactly what blockheight the outgoing transaction was composed / broadcast&lt;br/&gt;at, which is probably something we should encourage in lightning&lt;br/&gt;implementations as well.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Wed, Feb 5, 2020 at 8:25 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning niftynei,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Rusty had some suggestions about how to improve the protocol messages&lt;br/&gt;&amp;gt; for this, namely adding a serial_id to the inputs and outputs, which can&lt;br/&gt;&amp;gt; then be reused for deletions.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The serial id can then also be used as the ordering heuristic for&lt;br/&gt;&amp;gt; transaction inputs during construction (replacing current usage of BIP69).&lt;br/&gt;&amp;gt; Inputs can be shared amongst peers by flipping the bottom bit of the&lt;br/&gt;&amp;gt; serial_id before relaying them to another peer (as your own).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What happens if the initiator deliberately provides serial IDs 0x1, 0x3,&lt;br/&gt;&amp;gt; .... while the acceptor naively provides serial IDs from `/dev/urandom`?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then the balance of probability is that the initiator inputs and outputs&lt;br/&gt;&amp;gt; are sorted before the acceptor.&lt;br/&gt;&amp;gt; Now, this is probably not an issue, since the initiator and acceptor both&lt;br/&gt;&amp;gt; know which inputs and outputs are theirs and not theirs, so they could just&lt;br/&gt;&amp;gt; reveal this information to anyone, so an actor providing such lousy serial&lt;br/&gt;&amp;gt; IDs is just hurting its own privacy relative to blockchain analysts, so&lt;br/&gt;&amp;gt; probably will not happen in practice.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My initial reaction was to propose adding a secret-sharing round where the&lt;br/&gt;&amp;gt; resulting key is XORed to each serial ID before sorting by the XORed serial&lt;br/&gt;&amp;gt; ID, but this might be too overweight, and again the initiator is only&lt;br/&gt;&amp;gt; hurting its own privacy, and the two participants already know whose money&lt;br/&gt;&amp;gt; is whose anyway....&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; See below for details.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; 1. type:   440 `tx_add_input`&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; 2. data:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;         * [`32*byte`:``serial_id`]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Add a serial id.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Each input addition must have a unique serial id.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; No addition may have a repeated id number.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The initiator&amp;#39;s serial id&amp;#39;s must be odd. The non-initiator&amp;#39;s serial id&amp;#39;s&lt;br/&gt;&amp;gt; must be even.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Serial ids are used as sorting heuristic for input ordering in final&lt;br/&gt;&amp;gt; transaction, replaces BIP69&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`u64`:`sats`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`sha256`:`prevtx_txid`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`u32`:`prevtx_vout`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`u16`:`prevtx_scriptpubkey_len`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`prevtx_scriptpubkey_len*byte`:`prevtx_scriptpubkey`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`u16`:`max_witness_len`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`u16`:`scriptlen`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`scriptlen*byte`:`script`]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Removes the signal_rbf; everything will be flagged as RBF eligible.&lt;br/&gt;&amp;gt; (This makes verifying RBF eligibility during a RBF round simpler.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes. Ish.&lt;br/&gt;&amp;gt; RBF and privacy do not work well together unfortunately.&lt;br/&gt;&amp;gt; This is still initiator-pays, right?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; 1. subtype: `witness_element`&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; 2. data:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`u16`:`len`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;     * [`len*byte`:`witness`]&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; ## General Notes&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - All output scripts must be standard&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; - nLocktime is always set to 0x00000000&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - If a blockheight to be used as nLocktime is communicated in the&lt;br/&gt;&amp;gt; initiation step, is set to blockheight-6; otherwise set to zero-&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am unsure what is the purpose of this minus 6.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you fear blockheight disagreements, this is probably a good time to&lt;br/&gt;&amp;gt; introduce block headers.&lt;br/&gt;&amp;gt; So for example if the acceptor thinks the initiator blockheight is too&lt;br/&gt;&amp;gt; high, it could challenge the initiator to give block headers from its known&lt;br/&gt;&amp;gt; blockheight to the initiator blockheight.&lt;br/&gt;&amp;gt; If the acceptor thinks the initiator blockheight is too low, it could&lt;br/&gt;&amp;gt; provide block headers itself as proof.&lt;br/&gt;&amp;gt; This could be limited so that gross differences in blockheight are&lt;br/&gt;&amp;gt; outright rejected by the acceptor (it could `error` the temporary channel&lt;br/&gt;&amp;gt; ID rather than accept it).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is SPV, but neither side is actually making or accepting a payment&lt;br/&gt;&amp;gt; *yet*, just synchronizing clocks, so maybe not as bad as normal SPV.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Massive chain reorgs cannot reduce blockheight, only increase it (else the&lt;br/&gt;&amp;gt; reorg attempt fails in the first place) so there must still exist at least&lt;br/&gt;&amp;gt; one chain(split) with the highest known blockheight already given a&lt;br/&gt;&amp;gt; proof-of-header-chain, and all you really need is some mining activity on&lt;br/&gt;&amp;gt; top of *one* split that confirms your funding transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If it is not because of blockheight disagreements or massive chain reorgs,&lt;br/&gt;&amp;gt; what is the purpose of `blockheight - 6`?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - Serial ids should be chosen at random&lt;br/&gt;&amp;gt; &amp;gt; - For multiparty constructions, the initiator MUST flip the bottom bit&lt;br/&gt;&amp;gt; of any received inputs before relaying them to a peer.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - Collisions of serial ids between peers is a protocol error&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suppose we should define collision to mean &amp;#34;equal in all bits except the&lt;br/&gt;&amp;gt; lowest bit&amp;#34;.&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;&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/20200206/f7cc9d4e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200206/f7cc9d4e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:58:38&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgerdqaa46ffeqejg3r3vxvswf0mmq5hgy593rfuckf329qmx766czyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5cfrqzj</id>
    
      <title type="html">📅 Original date posted:2020-02-04 📝 Original message: Rusty ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgerdqaa46ffeqejg3r3vxvswf0mmq5hgy593rfuckf329qmx766czyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5cfrqzj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvyxq3pcjtqncvr3wjm4hxxjrmph9xr8cl2uxfj8lh7nw8cefp80gx2k5tk&#39;&gt;nevent1q…k5tk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-04&lt;br/&gt;📝 Original message:&lt;br/&gt;Rusty had some suggestions about how to improve the protocol messages for&lt;br/&gt;this, namely adding a serial_id to the inputs and outputs, which can then&lt;br/&gt;be reused for deletions.&lt;br/&gt;&lt;br/&gt;The serial id can then also be used as the ordering heuristic for&lt;br/&gt;transaction inputs during construction (replacing current usage of BIP69).&lt;br/&gt;Inputs can be shared amongst peers by flipping the bottom bit of the&lt;br/&gt;serial_id before relaying them to another peer (as your own).&lt;br/&gt;&lt;br/&gt;See below for details.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;1. type:   440 `tx_add_input`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt;&lt;br/&gt;        * [`32*byte`:``serial_id`]&lt;br/&gt;&lt;br/&gt;Add a serial id.&lt;br/&gt;&lt;br/&gt;Each input addition must have a unique serial id.&lt;br/&gt;&lt;br/&gt;No addition may have a repeated id number.&lt;br/&gt;&lt;br/&gt;The initiator&amp;#39;s serial id&amp;#39;s must be odd. The non-initiator&amp;#39;s serial id&amp;#39;s&lt;br/&gt;must be even.&lt;br/&gt;Serial ids are used as sorting heuristic for input ordering in final&lt;br/&gt;transaction, replaces BIP69&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;    * [`u64`:`sats`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`sha256`:`prevtx_txid`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u32`:`prevtx_vout`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u16`:`prevtx_scriptpubkey_len`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`prevtx_scriptpubkey_len*byte`:`prevtx_scriptpubkey`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u16`:`max_witness_len`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u16`:`scriptlen`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`scriptlen*byte`:`script`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Removes the signal_rbf; everything will be flagged as RBF eligible. (This&lt;br/&gt;makes verifying RBF eligibility during a RBF round simpler.)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. type: 442 `tx_add_output`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt;&lt;br/&gt;    * [`16*byte`:`serial_id`]&lt;br/&gt;&lt;br/&gt;Add a serial id. Same rules as for inputs, but a distinct counter set is&lt;br/&gt;used.&lt;br/&gt;Used for ordering the transactions’ outputs, replacing BIP69&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;     * [`u64`:`sats`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u16`:`scriptlen`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`scriptlen*byte`:`script`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. type: 444 `tx_remove_input`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt;&lt;br/&gt;    * [`16*byte`:`serial_id`]&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Input to remove identified by the serial id, not txid and index.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. type: 446 `tx_remove_output`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt;&lt;br/&gt;    * [`16*byte`:`serial_id]&lt;br/&gt;&lt;br/&gt;Output to remove identified by the serial id, not output script and amount.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. type: 448 `tx_complete`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`32*byte`:`channel_identifier`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Total counts removed from tx_complete. The txid exchanged in the `tx_sigs`&lt;br/&gt;will serves as a checksum for the transaction.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. type:  448 `tx_sigs`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`channel_id`:`channel_identifier`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u16`:`num_witnesses`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`num_witnesses*witness_stack`:`witness_stack`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. subtype: `witness_stack`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;    * [`u16`:`num_input_witness`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`num_input_witness*witness_element`:`witness_element`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;prev_out and prev_txid are removed; witnesses ordered implicitly by&lt;br/&gt;serial_id.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; 1. subtype: `witness_element`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`u16`:`len`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * [`len*byte`:`witness`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## General Notes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - All output scripts must be standard&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - nLocktime is always set to 0x00000000&lt;br/&gt;&amp;gt;&lt;br/&gt;- If a blockheight to be used as nLocktime is communicated in the&lt;br/&gt;initiation step, is set to blockheight-6; otherwise set to zero-&lt;br/&gt;- Serial ids should be chosen at random&lt;br/&gt;- For multiparty constructions, the initiator MUST flip the bottom bit of&lt;br/&gt;any received inputs before relaying them to a peer.&lt;br/&gt;- Collisions of serial ids between peers is a protocol error&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/20200204/d6136e56/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200204/d6136e56/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:58:37&#43;02:00</updated>
  </entry>

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

  <entry>
    <id>https://nostr.ae/nevent1qqs9q003xuvtnaj0swegvqw3kfl8tjg4rkf44zdd8yrhp793fqhrcyszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5emdnep</id>
    
      <title type="html">📅 Original date posted:2018-11-27 📝 Original message: Hello ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9q003xuvtnaj0swegvqw3kfl8tjg4rkf44zdd8yrhp793fqhrcyszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5emdnep" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvuj4kc2lhaaljdu53ej6he23gqasygqrl3znzexxh98wvgny6hdggtfxad&#39;&gt;nevent1q…fxad&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-27&lt;br/&gt;📝 Original message:&lt;br/&gt;Hello fellow Lightning devs!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;What follows is a draft for the new dual funding flow. Note that the&lt;br/&gt;`option_will_fund_for_food` specification has been omitted for this draft.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;===== Proposal&lt;br/&gt;&lt;br/&gt;Create a new channel open protocol set (v2), with three new message types:&lt;br/&gt;`funding_puts2`, `commitment_signed2`, and `funding_signed2`, plus two for&lt;br/&gt;negotiating RBF, `init_rbf` and `accept_rbf`.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Quick overview of the message exchange for v2:&lt;br/&gt;&lt;br/&gt;   &#43;-------&#43;                              &#43;-------&#43;&lt;br/&gt;&lt;br/&gt;   |    |--(1)---  open_channel2  ----&amp;gt;| |&lt;br/&gt;&lt;br/&gt;   |    |&amp;lt;-(2)--  accept_channel2  ----| |&lt;br/&gt;&lt;br/&gt;   |    |                       | |&lt;br/&gt;&lt;br/&gt;   |    |--(3)--  funding_puts2  -----&amp;gt;| |&lt;br/&gt;&lt;br/&gt;   |    |&amp;lt;-(4)--  funding_puts2  ----- | |&lt;br/&gt;&lt;br/&gt;   |    |                       | |&lt;br/&gt;&lt;br/&gt;---&amp;gt;|       |--(5)-- commitment_signed2 --&amp;gt;|       |&lt;br/&gt;&lt;br/&gt;|   |    |&amp;lt;-(6)-- commitment_signed2 ---|       |&lt;br/&gt;&lt;br/&gt;|   | A   |                       | B |&lt;br/&gt;&lt;br/&gt;|   |    |--(7)--- funding_signed2 ----&amp;gt;|       |&lt;br/&gt;&lt;br/&gt;|   |    |&amp;lt;-(8)--- funding_signed2 -----|       |&lt;br/&gt;&lt;br/&gt;|   |    |                       | |&lt;br/&gt;&lt;br/&gt;|   |    |--(a)--- init_rbf -----------&amp;gt;|       |&lt;br/&gt;&lt;br/&gt;----|       |&amp;lt;-(b)--- accept_rbf ----------|       |&lt;br/&gt;&lt;br/&gt;   |    |                       | |&lt;br/&gt;&lt;br/&gt;   |    |--(9)--- funding_locked2 ----&amp;gt;|       |&lt;br/&gt;&lt;br/&gt;   |    |&amp;lt;-(10)---funding_locked2 -----|       |&lt;br/&gt;&lt;br/&gt;   &#43;-------&#43;                              &#43;-------&#43;&lt;br/&gt;&lt;br/&gt;  where node A is the ‘initiator’ and node B is the ‘dual-funder’&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== Negotiating the use of dual_funding (open_channel2) flow&lt;br/&gt;Willingness to use v2 is flagged in init via `option_dual_fund`.&lt;br/&gt;&lt;br/&gt;`init`&lt;br/&gt;&lt;br/&gt;local channel feature flag, `option_dual_fund`&lt;br/&gt;&lt;br/&gt;== Channel establishment with dual_funding&lt;br/&gt;&lt;br/&gt;____`open_channel2`:&lt;br/&gt;&lt;br/&gt;[32:chain_hash]&lt;br/&gt;&lt;br/&gt;… // unchanged&lt;br/&gt;&lt;br/&gt;[1:channel_flags]&lt;br/&gt;&lt;br/&gt;[?: options_tlv]&lt;br/&gt;&lt;br/&gt;options_tlv:&lt;br/&gt;&lt;br/&gt;   1.&lt;br/&gt;&lt;br/&gt;   Type: 1 `option_upfront_shutdown_script`&lt;br/&gt;   1.&lt;br/&gt;&lt;br/&gt;      [2:len]&lt;br/&gt;      2.&lt;br/&gt;&lt;br/&gt;      Value: `shutdown_scriptpubkey`&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;If nodes have negotiated `option_dual_fund`&lt;br/&gt;&lt;br/&gt;The sending node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MAY begin channel establishment using `open_channel2`&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Otherwise the receiving node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST return an error.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;____ `accept_channel2`:&lt;br/&gt;&lt;br/&gt;[32:temporary_channel_id]&lt;br/&gt;&lt;br/&gt;…  // unchanged&lt;br/&gt;&lt;br/&gt;[33:first_per_commitment_point]&lt;br/&gt;&lt;br/&gt;[?: options_tlv]&lt;br/&gt;&lt;br/&gt;options_tlv:&lt;br/&gt;&lt;br/&gt;   1.&lt;br/&gt;&lt;br/&gt;   Type: 1 `option_upfront_shutdown_script`&lt;br/&gt;&lt;br/&gt;           [2:len]&lt;br/&gt;&lt;br/&gt;          Value: `shutdown_scriptpubkey`&lt;br/&gt;&lt;br/&gt;____`funding_puts2`&lt;br/&gt;&lt;br/&gt;This message exchanges the input and output information necessary to&lt;br/&gt;compose the funding transaction.&lt;br/&gt;&lt;br/&gt;[32:temporary_channel_id]&lt;br/&gt;&lt;br/&gt;[`2`:`num_inputs`]&lt;br/&gt;&lt;br/&gt;[`num_inputs*input_info`]&lt;br/&gt;&lt;br/&gt;[`2`:`num_outputs`]&lt;br/&gt;&lt;br/&gt;[`num_outputs`*ouput_info`]&lt;br/&gt;&lt;br/&gt;1. subtype: `input_info`&lt;br/&gt;&lt;br/&gt;2. data:&lt;br/&gt;&lt;br/&gt; * [`8`:`satoshis`]&lt;br/&gt;&lt;br/&gt; * [`32`:`prevtxid`]&lt;br/&gt;&lt;br/&gt; * [`4`:`prevtxoutnum`]&lt;br/&gt;&lt;br/&gt; * [`2`:`scriptlen`]&lt;br/&gt;&lt;br/&gt; * [`scriptlen`:`script`]&lt;br/&gt;&lt;br/&gt; * [`2`:`max_extra_witness_len`]&lt;br/&gt;&lt;br/&gt; * [`2`:`wscriptlen`]&lt;br/&gt;&lt;br/&gt; * [`wscriptlen`:`wscript`]&lt;br/&gt;&lt;br/&gt;1. subtype: `output_info`&lt;br/&gt;&lt;br/&gt;2. data:&lt;br/&gt;&lt;br/&gt; * [`8`:`satoshis`]&lt;br/&gt;&lt;br/&gt; * [`2`:`scriptlen`]&lt;br/&gt;&lt;br/&gt; * [`scriptlen`:`script`]&lt;br/&gt;&lt;br/&gt;Requirements:&lt;br/&gt;&lt;br/&gt;The sending node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST ensure each `input_info` refers to an existing UTXO&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST ensure the `output_info`.`script` is a standard script&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST NOT spend any UTXOs specified in funding_puts2 until/unless the&lt;br/&gt;   channel establishment has failed&lt;br/&gt;&lt;br/&gt;If is the initiator (A):&lt;br/&gt;- MUST NOT send an empty message  (`num_inputs` &#43; `num_outputs` = 0)&lt;br/&gt;&lt;br/&gt;     If is the dual-funder (B):&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   consider the `put_limit` the total number of `num_inputs` plus&lt;br/&gt;   `num_outputs` from `funding_puts2`, with minimum 2.&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST NOT send a number of `input_data` and/or `output_data` which&lt;br/&gt;   exceeds the `put_limit`&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MAY send an empty message&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The receiving node:&lt;br/&gt;&lt;br/&gt;  If is the initiator (A):&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST fail the channel if the `num_inputs` plus `num_outputs` is greater&lt;br/&gt;   than the `put_limit`&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;If has not yet sent a `fund_puts2` for this channel establishment&lt;br/&gt;&lt;br/&gt;     - SHOULD send their `fund_puts2` message&lt;br/&gt;&lt;br/&gt;Otherwise&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   SHOULD send `commitment_signed2`&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Rationale:&lt;br/&gt;&lt;br/&gt;Each node must have a complete set of the transaction inputs/outputs, to&lt;br/&gt;derive the funding transaction hash.&lt;br/&gt;&lt;br/&gt;There is a dual_funding protocol that only requires one side to send their&lt;br/&gt;witness data and inputs. This is more efficient, however it results in&lt;br/&gt;asymmetry between the nodes, where one is revealing their UTXOs before the&lt;br/&gt;funding transaction is committed.. We mitigate this asymmetry by asking the&lt;br/&gt;initiator (A) to send their set of inputs before the dual-funder (B) does.&lt;br/&gt;&lt;br/&gt;NB: This is reusing the input/output structures from the Splicing proposal,&lt;br/&gt;but with a more generalized name.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;____`commitment_signed2`&lt;br/&gt;&lt;br/&gt;This message exchanges the counterparty’s signature for the first&lt;br/&gt;commitment transaction, so it can broadcast the funding transaction knowing&lt;br/&gt;that funds can be redeemed.&lt;br/&gt;&lt;br/&gt;[32: `channel_id`]&lt;br/&gt;&lt;br/&gt;[`64`: commitment_signature`]&lt;br/&gt;&lt;br/&gt;Requirements:&lt;br/&gt;&lt;br/&gt;The sending node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST derive the `channel_id` from the funding transaction’s id&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST set signature to the valid signature, using its funding_pubkey for&lt;br/&gt;   the initial commitment transaction, as defined in BOLT #3&lt;br/&gt;&lt;br/&gt;  If it has not received a `funding_puts2`&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST NOT send their `commitment_signature`&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The receiving node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST verify the commitment signature is valid for the funding&lt;br/&gt;   transaction -&amp;gt; commitment transaction that it has derived independently&lt;br/&gt;&lt;br/&gt;     If this signature is invalid it&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST fail the channel&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;  If it has not sent a `commitment_signed2` message&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST send their `commitment_signed2` message&lt;br/&gt;&lt;br/&gt;   If this is in a flow initiated from `init_rbf`,:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST save the temporary_channel_id until the channel funding transaction&lt;br/&gt;   has been locked (this is the channel id of the currently broadcast&lt;br/&gt;   transaction)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Rationale:&lt;br/&gt;&lt;br/&gt;In the previous channel establishment protocol, we were able to compress&lt;br/&gt;the commitment signature exchange into `funding_created`/`funding_signed`.&lt;br/&gt;With dual funding, we need interaction to build the funding transaction --&lt;br/&gt;commitment sig exchange is now a separate step.&lt;br/&gt;&lt;br/&gt;___`funding_signed2`&lt;br/&gt;&lt;br/&gt;This message exchanges the witness data for the inputs that were originally&lt;br/&gt;sent in the `funding_puts2` message.&lt;br/&gt;&lt;br/&gt;[`32`:`channel_id`]&lt;br/&gt;&lt;br/&gt;[`2`:`num_witnesses`]&lt;br/&gt;&lt;br/&gt;[`num_witnesses*witness_stack`]&lt;br/&gt;&lt;br/&gt;Requirements:&lt;br/&gt;&lt;br/&gt;The sending node:&lt;br/&gt;&lt;br/&gt;    - MUST remember the details of this funding transaction&lt;br/&gt;&lt;br/&gt;   - MUST NOT send a `witness_stack` whose length exceeds the corresponding&lt;br/&gt;`max_extra_witness_len`&lt;br/&gt;&lt;br/&gt;    If they have NOT received a valid `commitment_signed2` message&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST not send their `funding_signed2` message&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The receiving node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   SHOULD check that the number of witnesses sent matches the number of&lt;br/&gt;   inputs&lt;br/&gt;&lt;br/&gt;If a `witness_stack` length exceeds the corresponding&lt;br/&gt;`max_extra_witness_len`:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;     MAY error.&lt;br/&gt;&lt;br/&gt;   If is the `initiator` (A):&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   SHOULD apply `witness` to the funding transaction and broadcast the&lt;br/&gt;   result.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Rationale:&lt;br/&gt;&lt;br/&gt;Exchanging witness data allows either side to broadcast the funding&lt;br/&gt;transaction. It also maintains the information symmetry between the nodes.&lt;br/&gt;&lt;br/&gt;___`funding_locked2`&lt;br/&gt;&lt;br/&gt;// same as v1&lt;br/&gt;&lt;br/&gt;Requirements:&lt;br/&gt;&lt;br/&gt;A dual-funding node (B):&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   SHOULD broadcast their funding transaction if it does not see the&lt;br/&gt;   transaction broadcast after a reasonable timeout.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;== RBF for Channel Establishment v2&lt;br/&gt;&lt;br/&gt;_____`init_rbf`&lt;br/&gt;&lt;br/&gt;This message is sent by the initiator, after the funding transaction has&lt;br/&gt;been broadcast but before the `funding_locked2` has been exchanged.&lt;br/&gt;&lt;br/&gt;[32: `channel_id`]&lt;br/&gt;&lt;br/&gt;[8: funding_satoshis]&lt;br/&gt;&lt;br/&gt;[8:dust_limit_satoshis]&lt;br/&gt;&lt;br/&gt;[8:channel_reserve_satoshis]&lt;br/&gt;&lt;br/&gt;[4: feerate_per_kw]&lt;br/&gt;&lt;br/&gt;[`2`:`num_inputs`]&lt;br/&gt;&lt;br/&gt;[`num_inputs*input_info`]&lt;br/&gt;&lt;br/&gt;[`2`:`num_outputs`]&lt;br/&gt;&lt;br/&gt;[`num_outputs`*ouput_info`]&lt;br/&gt;&lt;br/&gt;Requirements&lt;br/&gt;&lt;br/&gt;The sending node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MUST be the initiator (A)&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MAY update the amount, fee rate, dust limit, or channel reserve for the&lt;br/&gt;   channel&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The receiving node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MAY reject (error) the RBF request if:&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;      the fee rate, dust, or channel reserve is unreasonable&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;   MUST reject (error) the RBF request if:&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;      the `fee_rate` is less than the rate that was originally proposed&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the `funding_satoshis` amount is less than the previous negotiated&lt;br/&gt;      `push_mast`&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      It considers the `feerate_per_kw` too small for timely processing or&lt;br/&gt;      unreasonable&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the `dust_limit_satoshis` is greater than the&lt;br/&gt;      `channel_reserve_satoshis`&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the initiator’s amount for the initial commitment transaction is not&lt;br/&gt;      sufficient for full fee payment&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the `inputs`.`satoshis` does not sum to the `funding_satoshis`&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the `funding_satoshis` is insufficient to create the transaction at&lt;br/&gt;      the new `fee_rate`&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      there is no overlap in the proposed inputs and the original input set&lt;br/&gt;      included in the currently published funding transaction&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      they have already received or sent a `funding_locked2` message&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;   If there are no errors or unreasonable demands:&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;      SHOULD send an `accept_rbf`&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Rationale:&lt;br/&gt;&lt;br/&gt;Once an `init_rbf` has been accepted by the dual-funding node, the message&lt;br/&gt;flow returns to `commitment_signed2` and proceeds as above, with the&lt;br/&gt;exception that the `temporary_channel_id` remains as the `channel_id` for&lt;br/&gt;the currently published but unmined transaction.&lt;br/&gt;&lt;br/&gt;The channel id that becomes fixed for this node will be determined by the&lt;br/&gt;`funding_locked2` message.&lt;br/&gt;&lt;br/&gt;___`accept_rbf`&lt;br/&gt;&lt;br/&gt;This message accepts an RBF request, and renegotiates a dual-funder’s&lt;br/&gt;funds, dust limit, and channel reserve, and sends the dual-funder’s updated&lt;br/&gt;puts.&lt;br/&gt;&lt;br/&gt;[32: `channel_id`]&lt;br/&gt;&lt;br/&gt;[8: funding_satoshis]&lt;br/&gt;&lt;br/&gt;[8:ndust_limit_satoshis]&lt;br/&gt;&lt;br/&gt;[8:channel_reserve_satoshis]&lt;br/&gt;&lt;br/&gt;[`2`:`num_inputs`]&lt;br/&gt;&lt;br/&gt;[`num_inputs*input_info`]&lt;br/&gt;&lt;br/&gt;[`2`:`num_outputs`]&lt;br/&gt;&lt;br/&gt;[`num_outputs`*ouput_info`]&lt;br/&gt;&lt;br/&gt;Requirements:&lt;br/&gt;&lt;br/&gt;The sending node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MAY update the amount, dust limit, or channel reserve for the channel&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The receiving node:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   MAY reject (error) the RBF request if:&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;      the dust or channel reserve is unreasonable&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;   MUST reject (error) the RBF request if:&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;      the `funding_satoshis` amount is less than the previous negotiated&lt;br/&gt;      `push_mast`&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the `dust_limit_satoshis` is greater than the&lt;br/&gt;      `channel_reserve_satoshis`&lt;br/&gt;      -&lt;br/&gt;&lt;br/&gt;      the total fees incurred by the `input_info`s and `output_info`s at&lt;br/&gt;      the new `fee_rate` is more than their `funding_satoshis`&lt;br/&gt;&lt;br/&gt;      otherwise:&lt;br/&gt;&lt;br/&gt;   -&lt;br/&gt;&lt;br/&gt;   SHOULD send a `commitment_signed2` message&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/20181127/b864846e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181127/b864846e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:53:10&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsxxd8sqysufzgel5y92zgql7dfkz2lgrq9je54k3drvyny7d9eyjgzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5ra62w0</id>
    
      <title type="html">📅 Original date posted:2018-10-16 📝 Original message: To ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxxd8sqysufzgel5y92zgql7dfkz2lgrq9je54k3drvyny7d9eyjgzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5ra62w0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2er5ly7euwhdsqv75v2hg8flxq6hc2f8v3n7q3p0c4udewtk69tqnar9kk&#39;&gt;nevent1q…r9kk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-10-16&lt;br/&gt;📝 Original message:&lt;br/&gt;To add some context to this, if you start accepting HTLC&amp;#39;s for the new&lt;br/&gt;balance after the parallel commitment is made, but before the re-anchor is&lt;br/&gt;buried, there&amp;#39;s the potential for a race condition between a unilateral&lt;br/&gt;close (or any revoked commitment transaction) and the re-anchoring&lt;br/&gt;commitment transaction, that spends the &amp;#39;pre-committed&amp;#39; UTXO of splicing in&lt;br/&gt;funds and the original funding transaction.&lt;br/&gt;&lt;br/&gt;You can get around this by waiting until both the pre-commitment UTXO and&lt;br/&gt;the re-anchor have cleared a minimum depth before accepting HTLC&amp;#39;s for the&lt;br/&gt;new balance totals, but that&amp;#39;s twice as long of a wait as the first,&lt;br/&gt;synchronized re-commitment scheme that Rusty originally proposed.&lt;br/&gt;&lt;br/&gt;It also makes leaving the original funding transaction &amp;#39;exposed&amp;#39; (ie Rene&amp;#39;s&lt;br/&gt;version of parallel splice) untenable, as there&amp;#39;s always the risk of an old&lt;br/&gt;state being published to consume that input. This foobars your current HTLC&lt;br/&gt;commitments.&lt;br/&gt;&lt;br/&gt;On Tue, Oct 16, 2018 at 3:31 PM Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; If we&amp;#39;re going to do side splice-in like this, I would use a very&lt;br/&gt;&amp;gt; &amp;gt; different protocol: the reason for this protocol was to treat splice-in&lt;br/&gt;&amp;gt; &amp;gt; and splice-out the same, and inline splice-in requires wait time.  Since&lt;br/&gt;&amp;gt; &amp;gt; splice-out doesn&amp;#39;t, we don&amp;#39;t need this at all.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; It would look much more like:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. Prepare any output with script of specific form. eg:&lt;br/&gt;&amp;gt; &amp;gt;         OP_DEPTH 3 OP_EQUAL OP_IF&lt;br/&gt;&amp;gt; &amp;gt;                 &amp;lt;funding_pubkey1&amp;gt; &amp;lt;funding_pubkey2&amp;gt; OP_CHECKMULTISIG&lt;br/&gt;&amp;gt; &amp;gt;         OP_ELSE&lt;br/&gt;&amp;gt; &amp;gt;                 &amp;lt;blockheight&amp;gt; OP_CHECKLOCKTIMEVERIFY OP_DROP&lt;br/&gt;&amp;gt; &amp;gt;                 &amp;lt;myrescue_pubkey&amp;gt; OP_CHECKSIG&lt;br/&gt;&amp;gt; &amp;gt;         OP_ENDIF&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. type: 40 (`splice_in`) (`option_splice`)&lt;br/&gt;&amp;gt; &amp;gt; 2. data:&lt;br/&gt;&amp;gt; &amp;gt;    * [`32`:`channel_id`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`8`: `satoshis`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`32`: `txid`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`4`: `txoutnum`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`4`: `blockheight`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`33`: `myrescue_pubkey`]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. type: 137 (`update_splice_in_accept`) (`option_splice`)&lt;br/&gt;&amp;gt; &amp;gt;    data:&lt;br/&gt;&amp;gt; &amp;gt;    * [`32`:`channel_id`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`32`: `txid`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`4`: `txoutnum`]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. type: 138 (`update_splice_in_reject`) (`option_splice`)&lt;br/&gt;&amp;gt; &amp;gt;    data:&lt;br/&gt;&amp;gt; &amp;gt;    * [`32`:`channel_id`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`32`: `txid`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`2`:`len`]&lt;br/&gt;&amp;gt; &amp;gt;    * [`len`:`errorstr`]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The recipient of `splice_in` checks that it&amp;#39;s happy with the&lt;br/&gt;&amp;gt; &amp;gt; `blockheight` (far enough in future).  Once it sees the tx referred to&lt;br/&gt;&amp;gt; &amp;gt; buried to its own `minimum_depth`, it checks output is what they&lt;br/&gt;&amp;gt; &amp;gt; claimed, then sends `update_splice_in_accept`; it&amp;#39;s followed up&lt;br/&gt;&amp;gt; &amp;gt; `commitment_signed` like normal, but from this point onwards, all&lt;br/&gt;&amp;gt; &amp;gt; commitment txs signatures have one extra sig.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Lisa started asking pointed questions, and so I noticed that parallel&lt;br/&gt;&amp;gt; splice doesn&amp;#39;t work with Poon-Dryja channels.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The counterparty can spend the old funding txout with a revoked spend.&lt;br/&gt;&amp;gt; Sure, I can take all the money from that, but what about the spliced&lt;br/&gt;&amp;gt; input?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I came up with increasingly elaborate workarounds, but nothing stuck.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Back to Plan A...&lt;br/&gt;&amp;gt; Rusty.&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/20181016/6855b1ec/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20181016/6855b1ec/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:51:39&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs97z8zxjg8rdfm4mzvx22mw470ffkshw3d3le7n8v92s247e9rfagzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5y0vwnw</id>
    
      <title type="html">📅 Original date posted:2021-10-25 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs97z8zxjg8rdfm4mzvx22mw470ffkshw3d3le7n8v92s247e9rfagzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5y0vwnw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsydumy8pw7fsty7gfhndnw9fzyv6r2na889jxx536w0x0mffl5mzsz3jcvl&#39;&gt;nevent1q…jcvl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-10-25&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;In a recent conversation with @glozow, I had the realization that the&lt;br/&gt;mempool is obsolete and should be eliminated.&lt;br/&gt;&lt;br/&gt;Instead, users should submit their transactions directly to mining pools,&lt;br/&gt;preferably over an anonymous communication network such as tor. This can&lt;br/&gt;easily be achieved by mining pools running a tor onion node for this&lt;br/&gt;express purpose (or via a lightning network extension etc)&lt;br/&gt;&lt;br/&gt;Mempools make sense in a world where mining is done by a large number of&lt;br/&gt;participating nodes, eg where the block template is constructed by a&lt;br/&gt;majority of the participants on the network. In this case, it is necessary&lt;br/&gt;to socialize pending transaction data to all participants, as you don’t&lt;br/&gt;know which participant will be constructing the winning block template.&lt;br/&gt;&lt;br/&gt;In reality however, mempool relay is unnecessary where the majority of&lt;br/&gt;hashpower and thus block template creation is concentrated in a&lt;br/&gt;semi-restricted set.&lt;br/&gt;&lt;br/&gt;Removing the mempool would greatly reduce the bandwidth requirement for&lt;br/&gt;running a node, keep intentionality of transactions private until&lt;br/&gt;confirmed/irrevocable, and naturally resolve all current issues inherent in&lt;br/&gt;package relay and rbf rules. It also resolves the recent minimum relay&lt;br/&gt;questions, as relay is no longer a concern for unmined transactions.&lt;br/&gt;&lt;br/&gt;Provided the number of block template producing actors remains beneath, say&lt;br/&gt;1000, it’d be quite feasible to publish a list of tor endpoints that nodes&lt;br/&gt;can independently  &#43; directly submit their transactions to. In fact, merely&lt;br/&gt;allowing users to select their own list of endpoints to use alternatively&lt;br/&gt;to the mempool would be a low effort starting point for the eventual&lt;br/&gt;replacement.&lt;br/&gt;&lt;br/&gt;On the other hand, removing the mempool would greatly complicate solo&lt;br/&gt;mining and would also make BetterHash proposals, which move the block&lt;br/&gt;template construction away from a centralized mining pool back to the&lt;br/&gt;individual miner, much more difficult. It also makes explicit the target&lt;br/&gt;for DoS attacks.&lt;br/&gt;&lt;br/&gt;A direct communication channel between block template construction venues&lt;br/&gt;and transaction proposers also provides a venue for direct feedback wrt&lt;br/&gt;acceptable feerates at the time, which both makes transaction confirmation&lt;br/&gt;timelines less variable as well as provides block producers a mechanism for&lt;br/&gt;(independently) enforcing their own minimum security budget. In other&lt;br/&gt;words, expressing a minimum acceptable feerate for continued operation.&lt;br/&gt;&lt;br/&gt;Initial feerate estimation would need to be based on published blocks, not&lt;br/&gt;pending transactions (as this information would no longer be available), or&lt;br/&gt;from direct interactions with block producers.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;~niftynei&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/20211025/a5c7aebf/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20211025/a5c7aebf/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:00:17&#43;02:00</updated>
  </entry>

</feed>