<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2023-06-09T12:18:55Z</updated>
  <generator>https://yabu.me</generator>

  <title>Nostr notes by lisa neigut [ARCHIVE]</title>
  <author>
    <name>lisa neigut [ARCHIVE]</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://yabu.me/npub1sprhp66c693av0c0n9had046hcdcckp2th25fnmphwstc5e4wg9qxs64t2.rss" />
  <link href="https://yabu.me/npub1sprhp66c693av0c0n9had046hcdcckp2th25fnmphwstc5e4wg9qxs64t2" />
  <id>https://yabu.me/npub1sprhp66c693av0c0n9had046hcdcckp2th25fnmphwstc5e4wg9qxs64t2</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://yabu.me/nevent1qqswlq0wchxkeqanejykle9nttwgr285uadgupezu8wxfvzzjlqx0wszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq58kpnrn</id>
    
      <title type="html">📅 Original date posted:2022-09-23 📝 Original message: Some ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T13:06:49Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsp8dyfj3n3mr92ec5mypr6chf55yqg7nc20daphm9s9lnvsrkcn9czyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq56rtzm6</id>
    
      <title type="html">📅 Original date posted:2022-09-13 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://yabu.me/nevent1qqsp8dyfj3n3mr92ec5mypr6chf55yqg7nc20daphm9s9lnvsrkcn9czyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq56rtzm6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsz9stjktm4fagmsh22enqepa6hcvahpmyj5u33kkj6ew8vlqcf0jqu2fdh7&#39;&gt;nevent1q…fdh7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-09-13&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi all,&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve been talking about them for a bit[^1], now[^2], but here&amp;#39;s a more&lt;br/&gt;formal proposal for fee ratecards.&lt;br/&gt;&lt;br/&gt;Spec PR &#43; implementation to come.&lt;br/&gt;&lt;br/&gt;## What is a fee ratecard?&lt;br/&gt;&lt;br/&gt;A ratecard is a set of four values, positive or negative, that price different&lt;br/&gt;bands of available liquidity for a channel.&lt;br/&gt;&lt;br/&gt;A ratecard replaces the current `fee_proportional_millionths` and&lt;br/&gt;`fee_base_msat` currently used to calculate the owed fees for&lt;br/&gt;forwarding a payment on the&lt;br/&gt;lightning network.&lt;br/&gt;&lt;br/&gt;Instead, with ratecards, a channel operator may specify four different&lt;br/&gt;rates for a channel&amp;#39;s liquidity, that will automatically be updated&lt;br/&gt;depending on the current channel capacity. The four capacity bands are fixed&lt;br/&gt;at 0-25%, 26-50%, 51-75%, and 76-100%.&lt;br/&gt;&lt;br/&gt;Currently, all payments are priced equally. Fee ratecards update this such that&lt;br/&gt;payments can be priced differently, depending on the current available&lt;br/&gt;capacity in a channel. This allows node operators to dynamically price&lt;br/&gt;their liquidity, without needing to continually issue gossip updates as&lt;br/&gt;the balance changes (which may leak payment flow timing).&lt;br/&gt;&lt;br/&gt;## Spec Changes &#43; Implementation Notes&lt;br/&gt;&lt;br/&gt;To the `channel_update` gossip message, we add a TLV with one defined&lt;br/&gt;type, `ratecard`. The ratecard contains 4 16-bit signed integers, one&lt;br/&gt;for each quarter of channel capacity. (0-25, 26-50, 51-75, 76-100%).&lt;br/&gt;&lt;br/&gt;```&lt;br/&gt;1. `tlv_stream`: `channel_update_tlvs`&lt;br/&gt;2. types:&lt;br/&gt;    1. type: 1 (`ratecard`)&lt;br/&gt;    2. data:&lt;br/&gt;        * [`s16`:`fee_basis_0_25`]&lt;br/&gt;        * [`s16`:`fee_basis_26_50`]&lt;br/&gt;        * [`s16`:`fee_basis_51_75`]&lt;br/&gt;        * [`s16`:`fee_basis_76_100`]&lt;br/&gt;```&lt;br/&gt;&lt;br/&gt;If a node is advertising a `ratecard` in their `channel_update` for&lt;br/&gt;that channel, a routing node SHOULD pick the rate to pay based on&lt;br/&gt;their current guess of the channel&amp;#39;s capacity as well as priority for&lt;br/&gt;the payment.&lt;br/&gt;&lt;br/&gt;If a payment is high priority, it is recommended to pay at the highest feeband,&lt;br/&gt;to ensure delivery (if possible).&lt;br/&gt;&lt;br/&gt;On payment failure, the response is the same (you return a copy of the&lt;br/&gt;`channel_update` in the onion). You MAY give an additional hint as to&lt;br/&gt;what the current&lt;br/&gt;acceptable feerate is for a payment.&lt;br/&gt;&lt;br/&gt;If the feerate card entry is set, the rates there take precedence over the&lt;br/&gt;`fee_base_msat` and the `fee_proportional_millionths`.&lt;br/&gt;&lt;br/&gt;The `feerate` card effectively removes the ability to set a `fee_base_msat`.&lt;br/&gt;&lt;br/&gt;To minimize payment routing failure, it is recommended to set the&lt;br/&gt;`fee_proportional_millionths` to the same rate as the highest `ratecard`&lt;br/&gt;rate. (Most likely the `ratecard`.`fee_basis_0_25`).&lt;br/&gt;&lt;br/&gt;Note that `ratecards` unit is in basis points, not millionths. As basis points&lt;br/&gt;are 1/10,000, they&amp;#39;re 100x less than the same value expressed as millionths.&lt;br/&gt;&lt;br/&gt;- A `basis_point` value of 5 is a fee of 5msat on a 10k msat payment.&lt;br/&gt;- A `fee_proportional_millionths` of 500 is a fee of 5msat on a 10k&lt;br/&gt;msat payment.&lt;br/&gt;&lt;br/&gt;The current expected price for sats to be pushed to the other side of the&lt;br/&gt;channel is to be priced by the lowest ratecard capacity band that that payment&lt;br/&gt;will push the balance into.&lt;br/&gt;&lt;br/&gt;For example, if a payment moves 50k through a 100k channel which is currently&lt;br/&gt;at a total available capacity of 75k sats (which means it&amp;#39;ll move the capacity&lt;br/&gt;from 75k to 25k), that payment will be expected to pay a rate equal to the&lt;br/&gt;0-25% band, as it&amp;#39;ll push the available capacity into the 0-25% range.&lt;br/&gt;&lt;br/&gt;Using this rule, HTLCs consuming significant portions of a channel&amp;#39;s&lt;br/&gt;total capacity are more likely to pay higher fees.&lt;br/&gt;&lt;br/&gt;### Motivation and Rationale&lt;br/&gt;At the last in-person spec meeting, it was noted that channel capacity is&lt;br/&gt;often of variable value depending on the amount of capacity currently&lt;br/&gt;available in that channel.&lt;br/&gt;&lt;br/&gt;It was also noted that we&amp;#39;d like to allow node operators to experiment&lt;br/&gt;with negative fees.&lt;br/&gt;&lt;br/&gt;You can&amp;#39;t easily allow for negative feerates with our current gossip messages,&lt;br/&gt;as it would give gossip an economic value which may have an adverse impact&lt;br/&gt;on the ability of nodes to stay up to date with the current lightning channel&lt;br/&gt;topology; it also stands to greatly increase the volume of gossip&lt;br/&gt;updates issued by any one node, which should scale with payment volume,&lt;br/&gt;as nodes update their gossip to change their current fees on any one channel.&lt;br/&gt;&lt;br/&gt;Note that some nodes already automatically update their channel fees based on&lt;br/&gt;the available capacity in a channel; fee ratecards should be a more succinct&lt;br/&gt;way for node operators to express more fine grained prices of their existing&lt;br/&gt;capacity, with a much reduced bandwidth burden.&lt;br/&gt;&lt;br/&gt;### Feerate Cards, Frequently Asked Questions&lt;br/&gt;&lt;br/&gt;#### Why four evenly spaced buckets? Why not X function?&lt;br/&gt;&lt;br/&gt;1. Expressibility&lt;br/&gt;	Fees are calculated by the node creating the route for a payment, using&lt;br/&gt;	parameters set by the channel node operator. These paramters must be&lt;br/&gt;	communicated via gossip to every node, and then used as inputs to the&lt;br/&gt;	routing function.&lt;br/&gt;&lt;br/&gt;	Parameters need to be uniform and well understood such that&lt;br/&gt;	routing algorithm designers can make efficient use of them.&lt;br/&gt;	&lt;br/&gt;	Four buckets is wide enough such that payment should&lt;br/&gt;	be able to find/pick a current channel capacity with good&lt;br/&gt;	probability, yet hopefully expressive enough for routing&lt;br/&gt;	operators to be able to price their available liquidity&lt;br/&gt;	with sufficient granularity.&lt;br/&gt;&lt;br/&gt;	Four evenly spaced buckets also make it much easier to&lt;br/&gt;	reason about information leakage (binary search).&lt;br/&gt;&lt;br/&gt;2. Predictability for payment success.&lt;br/&gt;	Feerate cards don&amp;#39;t introduce any new risk to payment failure,&lt;br/&gt;	as the current fee rates of a channel may currently differ&lt;br/&gt;	from a node&amp;#39;s gossip information.&lt;br/&gt;&lt;br/&gt;	Rather, feerate cards offer a way for your routing algorithm&lt;br/&gt;	to dynamically decide on what level of capacity it estimates&lt;br/&gt;	the channel to be at, and its tolerance for failures.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;#### Won&amp;#39;t this leak my channel balance?&lt;br/&gt;&lt;br/&gt;At most, feerate buckets reduce the total number of payment attempts&lt;br/&gt;required to find an exact channel balance by 2.&lt;br/&gt;&lt;br/&gt;It does, however, provide a much lower &amp;#39;cost of capital&amp;#39; mechanism&lt;br/&gt;for discovering which band of payment is likely to succeed.&lt;br/&gt;&lt;br/&gt;Currently, to discover if a 100k channel has capacity for a 75k sat payment,&lt;br/&gt;you&amp;#39;d need 75k sats of available liquidity in the node leading up to&lt;br/&gt;that channel (or 25k in the opposite direction) from your probe node, in&lt;br/&gt;order to discover if that bucket is available.&lt;br/&gt;&lt;br/&gt;This ties up available liquidity along the entire probe route.&lt;br/&gt;&lt;br/&gt;With feerate cards, you could do a 1k sat payment at each feerate card&lt;br/&gt;fee band, and discover the approximate bucket without tying up&lt;br/&gt;as much of your own own outband capital.&lt;br/&gt;&lt;br/&gt;This makes probing more feasible for any node that wants to make a payment,&lt;br/&gt;while reducing the capital tied up to discern the same amount of information.&lt;br/&gt;&lt;br/&gt;#### More data in the channel_update message! Just what we need, more gossip.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s anticipated that feerate cards will greatly reduce the number of&lt;br/&gt;`channel_update`s issued by a node, by allowing node operators to dynamically&lt;br/&gt;price their liquidity by available capacity via a single, static&lt;br/&gt;`channel_update`.&lt;br/&gt;&lt;br/&gt;This should reduce or remove the need to rebroadcast a `channel_update` when a&lt;br/&gt;channel&amp;#39;s capacity changes.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;#### How do negative fees work?&lt;br/&gt;&lt;br/&gt;Astute readers may notice that the proposed feerate card bands can be expressed&lt;br/&gt;as negative numbers. This allows node operators to price the liquidity&lt;br/&gt;available in their channel at a discount.&lt;br/&gt;&lt;br/&gt;Here&amp;#39;s a good way to think about the impact a negative fee will&lt;br/&gt;have on your channel balances.&lt;br/&gt;&lt;br/&gt;A feerate of 5 basis points means that, in order to push 10k sats from&lt;br/&gt;one of your channel balances to the peer, another of yours must push&lt;br/&gt;you 10,005 sats. This means you always need more inbound than outbound&lt;br/&gt;in order to route a payment (unless you&amp;#39;re using zero fees, in which case&lt;br/&gt;you&amp;#39;d need an equal amount).&lt;br/&gt;&lt;br/&gt;Negative fees reverse this. At -5 basis points, you&amp;#39;d only need to receive 9,995&lt;br/&gt;on an inbound channel to cause you to push out 10k sats. This allows you&lt;br/&gt;to reallocate your inbound capacity at a slight discount to the party&lt;br/&gt;who&amp;#39;s responsible for moving the capital.&lt;br/&gt;&lt;br/&gt;#### What happened to payment base fees?&lt;br/&gt;&lt;br/&gt;They&amp;#39;re going away (they do not work with negative rates).&lt;br/&gt;Hopefully ratecards will give you enough expressivity to figure out&lt;br/&gt;good rates for your channel capacity without them.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;### Credits&lt;br/&gt;&lt;br/&gt;This proposal is a marriage of Clara Shikleman&amp;#39;s push to start thinking&lt;br/&gt;about negative fees, and ZmnSCPxj&amp;#39;s comments on the variability of&lt;br/&gt;value of a channel&amp;#39;s liquidity based on current capacity.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;~niftynei&lt;br/&gt;&lt;br/&gt;[^1]: [Slides on liquidity &#43;&lt;br/&gt;lightning](&lt;a href=&#34;https://docs.google.com/presentation/d/1gK5_JvDl6aR8EqEKIxfdIHMR2vNIgHUS5tydP2kB_gA/edit?usp=sharing&#34;&gt;https://docs.google.com/presentation/d/1gK5_JvDl6aR8EqEKIxfdIHMR2vNIgHUS5tydP2kB_gA/edit?usp=sharing&lt;/a&gt;)&lt;br/&gt;[^2]: [Presentation of slides at btcpp in&lt;br/&gt;Austin](&lt;a href=&#34;https://www.youtube.com/watch?v=voEbAeS_B5w&#34;&gt;https://www.youtube.com/watch?v=voEbAeS_B5w&lt;/a&gt;)&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220913/4d5cd38e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20220913/4d5cd38e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T13:06:47Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsx2v4mjhqshpcea5leqwwrvyxds0q0t94gnlnausmn2svfpcz965szyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5nh5aeu</id>
    
      <title type="html">📅 Original date posted:2020-02-12 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://yabu.me/nevent1qqsx2v4mjhqshpcea5leqwwrvyxds0q0t94gnlnausmn2svfpcz965szyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5nh5aeu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsypy7n9mxwhp6gzpkuc0fwhhkyl2a2jtt5y5r7c2qnjec340gta2spvkxs8&#39;&gt;nevent1q…kxs8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-12&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; Probably so that address reuse is not dinged, i.e. I have two UTXOs with&lt;br/&gt;the same address and want to make two different channels with different&lt;br/&gt;peers.&lt;br/&gt;&lt;br/&gt;Having 2 utxos locked to the same pubkey will map to a single H2 value&lt;br/&gt;though, which is what is used to flag utxo reuse. With a PoDLE you&amp;#39;re&lt;br/&gt;proving that you have a *key* for a utxo; the verifier checks that the key&lt;br/&gt;you say you know does in fact map to controlling the utxo that you say it&amp;#39;s&lt;br/&gt;attached to. Whether or not you added the utxo to the signature commitment&lt;br/&gt;doesn&amp;#39;t add anything to the security of the verification.&lt;br/&gt;&lt;br/&gt;At worse, it might leak what other utxo that the initiator controls, if&lt;br/&gt;they accidentally commit to the wrong utxo and the peer decided to try&lt;br/&gt;grinding utxo outpoints on the offchance that one matched.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, Feb 11, 2020 at 10:04 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning niftynei, and waxwing, and list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; s = k &#43; H(kG || kJ || P || P2 || utxo || receiving-node) x&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; and as before transfer opening: (P, P2, u, s, e) with receiving-node&lt;br/&gt;&amp;gt; implicitly reconstructed to do the verification of the Schnorr sig. It&amp;#39;s&lt;br/&gt;&amp;gt; basically a message in a signature.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Oh that&amp;#39;s *much* nicer than calculating a second commitment.&lt;br/&gt;&amp;gt; Verification by any node that&amp;#39;s not the intended recipient will fail, as&lt;br/&gt;&amp;gt; they&amp;#39;ll use the wrong node_id (their own).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; It seems unnecessary to me to commit to the utxo, since the pubkey pair&lt;br/&gt;&amp;gt; effectively does that. What&amp;#39;s the motivation for including it?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Probably so that address reuse is not dinged, i.e. I have two UTXOs with&lt;br/&gt;&amp;gt; the same address and want to make two different channels with different&lt;br/&gt;&amp;gt; peers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While address reuse Is Bad, you might not have much control over some wog&lt;br/&gt;&amp;gt; who is supposed to pay you and decides to give you your money in two&lt;br/&gt;&amp;gt; separate UTXOs to the same address.&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/20200212/1c55131e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200212/1c55131e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:58:45Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsvemq6fcntur3e059eykjcqk8sn3hf95h6s4qlztva3gc5ns9qsegzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5y0rwau</id>
    
      <title type="html">📅 Original date posted:2020-02-11 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://yabu.me/nevent1qqsvemq6fcntur3e059eykjcqk8sn3hf95h6s4qlztva3gc5ns9qsegzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5y0rwau" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspwmq23zjjqy5thwp4alsakqxjw0tanc65f9rer0darkpjghjradg8qtjzh&#39;&gt;nevent1q…tjzh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-11&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt; s = k &#43; H(kG || kJ || P || P2 || utxo || receiving-node) x&lt;br/&gt;&lt;br/&gt;&amp;gt; and as before transfer opening: (P, P2, u, s, e) with receiving-node&lt;br/&gt;implicitly reconstructed to do the verification of the Schnorr sig. It&amp;#39;s&lt;br/&gt;basically a message in a signature.&lt;br/&gt;&lt;br/&gt;Oh that&amp;#39;s *much* nicer than calculating a second commitment. Verification&lt;br/&gt;by any node that&amp;#39;s not the intended recipient will fail, as they&amp;#39;ll use the&lt;br/&gt;wrong node_id (their own).&lt;br/&gt;&lt;br/&gt;It seems unnecessary to me to commit to the utxo, since the pubkey pair&lt;br/&gt;effectively does that. What&amp;#39;s the motivation for including it? Though, now&lt;br/&gt;that I think about it, it does seem imperative to verify that the pubkey&lt;br/&gt;provided is in fact locked to by the utxo script, which we can do since the&lt;br/&gt;script will have been provided in the `tx_add_input` message.&lt;br/&gt;&lt;br/&gt;Seems worth nothing that, given such a proof, you can grind to find out who&lt;br/&gt;the intended node was. However, if the failure is indeed because of the&lt;br/&gt;&amp;#34;venus flytrap&amp;#34; attack I mentioned above, it&amp;#39;d pretty obviously be the node&lt;br/&gt;sending you the invalid signature (or a node that they spoofed/MITM&amp;#39;d),&lt;br/&gt;which isn&amp;#39;t much of a leak.  Actually, this &amp;#39;grindability&amp;#39; might be quite&lt;br/&gt;useful for finding the originator of the attack, if needed. There&amp;#39;s no&lt;br/&gt;reason for you to leak a PoDLE signature, but if you do you&amp;#39;re&lt;br/&gt;potentially tying an H2 commitment offer to your node id. Seems very nice&lt;br/&gt;indeed!&lt;br/&gt;&lt;br/&gt;One of the stated goals of implementing PoDLEs was to be &amp;#34;compatible with&lt;br/&gt;JoinMarket&amp;#34;, but I believe this compatibility goal only extends as far as&lt;br/&gt;the H2 construction (and not the proof), so we&amp;#39;re ok there with this tweak.&lt;br/&gt;&lt;br/&gt;Cheers!&lt;br/&gt;niftynei&lt;br/&gt;&lt;br/&gt;On Tue, Feb 11, 2020 at 10:05 AM AdamISZ 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; niftynei, ZmnSCPxj and list:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Zmn** pinged me about this discussion and I thought I could add something&lt;br/&gt;&amp;gt; directly:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First, re:&lt;br/&gt;&amp;gt; &amp;gt; I&amp;#39;d like to propose that we add a second commitment requirement to the&lt;br/&gt;&amp;gt; PoDLE that JoinMarket uses, to limit the use of a commitment&amp;#39;s validity to&lt;br/&gt;&amp;gt; be only between an initiator and a single peer. Otherwise you can enable&lt;br/&gt;&amp;gt; something I&amp;#39;ll call the &amp;#34;pouncing venus-flytrap attack&amp;#34;[1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here&amp;#39;s some thoughts that may give context to this (excellent) observation:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This issue didn&amp;#39;t crop up (well, kinda! I do remember discussion about it)&lt;br/&gt;&amp;gt; in our use case because takers always send out to 5-12 (typically) makers&lt;br/&gt;&amp;gt; at once, and the HP2 only needs to get broadcast by one to stop any reuse.&lt;br/&gt;&amp;gt; But whichever way you look at it, it&amp;#39;s a very good point! And in LN case,&lt;br/&gt;&amp;gt; seems like a very substantial attack (certainly no question it could be&lt;br/&gt;&amp;gt; allowed for 2 party protocol).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In case a brief summary of JM mechanism is helpful, I added some info on&lt;br/&gt;&amp;gt; the the taker-maker conversation at the end of this mail [1].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Second, re:&lt;br/&gt;&amp;gt; &amp;gt; ## Mitigation&lt;br/&gt;&amp;gt; &amp;gt; Have each initiator provide two commitments: one to the shared/global J&lt;br/&gt;&amp;gt; &amp;gt; point and one to a point that is found from the hash of the&lt;br/&gt;&amp;gt; non-initiating&lt;br/&gt;&amp;gt; &amp;gt; node&amp;#39;s node_id.[2]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I get the thinking here, and it makes a lot of sense, but I do think it&lt;br/&gt;&amp;gt; can be done more compactly.&lt;br/&gt;&amp;gt; If the commitment is H(P2), the opening of the commitment could be altered&lt;br/&gt;&amp;gt; to include the receiving node:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; s = k &#43; H(kG || kJ || P || P2 || utxo || receiving-node) x&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; and as before transfer opening: (P, P2, u, s, e) with receiving-node&lt;br/&gt;&amp;gt; implicitly reconstructed to do the verification of the Schnorr sig. It&amp;#39;s&lt;br/&gt;&amp;gt; basically a message in a signature.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As you note, we wouldn&amp;#39;t want to ban usage of a H(P2) value based on an&lt;br/&gt;&amp;gt; incorrect opening; we just use that failure to decide to not hand over our&lt;br/&gt;&amp;gt; utxo information (as receiver of the commitment). But unless I missed&lt;br/&gt;&amp;gt; something, doing it the above way is the more logical/compact choice.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Seems like there&amp;#39;s a lot of fine nuance here. A malicious counterparty can&lt;br/&gt;&amp;gt; always choose to blacklist. In Joinmarket we accept (because of our&lt;br/&gt;&amp;gt; stringent no-identity policy) some roughness and assume some meaningful&lt;br/&gt;&amp;gt; level of honest participation. A Taker issuing a request to 10 cps hopes&lt;br/&gt;&amp;gt; that at least some number (min 4 by default) will actually respond to an&lt;br/&gt;&amp;gt; honest request; if say 8 of 10 do so, he will do the coinjoin with those.&lt;br/&gt;&amp;gt; That it is brittle or flaky is why we allow 3 tries for each qualifying&lt;br/&gt;&amp;gt; utxo (qualified on age, size), and also allow custom insertion of&lt;br/&gt;&amp;gt; additional utxos (although it&amp;#39;s rarely if ever needed). It works fine in&lt;br/&gt;&amp;gt; practice, for now, but it is not watertight; if you have overwhelmingly&lt;br/&gt;&amp;gt; malicious counterparties you are kinda screwed from other angles, as well&lt;br/&gt;&amp;gt; as this one. Meanwhile on the Maker side we&amp;#39;re trying to create a kind of&lt;br/&gt;&amp;gt; &amp;#39;herd immunity&amp;#39;; as long as some few of them are honest, word will get out&lt;br/&gt;&amp;gt; about used commitments which will stop free spam queries,&lt;br/&gt;&amp;gt;   at least (but it&amp;#39;s not a super strong defence!).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] Taker-Maker convo (excerpt); some notes re: commitments/PoDLE.&lt;br/&gt;&amp;gt; ===&lt;br/&gt;&amp;gt; !fill amount, oid, commitment (HP2)&lt;br/&gt;&amp;gt; -- this is where a taker sends to each maker an hp2 value. This is the&lt;br/&gt;&amp;gt; step intended to enforce scarcity, and the assumption in JM was always that&lt;br/&gt;&amp;gt; this would basically inevitably get shared. Because there are typically&lt;br/&gt;&amp;gt; 5-12 makers involved, this seemed a reasonably safe assumption.&lt;br/&gt;&amp;gt; If the commitment value is already used and thus not valid, it gets&lt;br/&gt;&amp;gt; broadcast immediately. If it&amp;#39;s not, it only gets shared as part of the&lt;br/&gt;&amp;gt; !ioauth step below.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; !pubkey key&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -- this is just the maker giving an ephemeral key for the encryption&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; !auth (s, e, u, P, P2)&lt;br/&gt;&amp;gt; -- (encrypted) this is the taker opening the above commitment. It&amp;#39;s rather&lt;br/&gt;&amp;gt; weird at first sight, because he is opening immediately after committing,&lt;br/&gt;&amp;gt; with apparently no step inbetween; but in fact the implicit intermediate&lt;br/&gt;&amp;gt; step is the broadcast (exactly what is being questioned with &amp;#39;venus&lt;br/&gt;&amp;gt; flytrap&amp;#39;).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; !ioauth maker-utxo-data&lt;br/&gt;&amp;gt; -- notice the maker is only sending this utxo data (encrypted of course)&lt;br/&gt;&amp;gt; after proof of ownership of the utxo above.&lt;br/&gt;&amp;gt; It&amp;#39;s only at this step that the hp2 commitment value is (a) added to the&lt;br/&gt;&amp;gt; maker&amp;#39;s local &amp;#34;used up&amp;#34; list, and (b)privmsged to 1  randomly chosen other&lt;br/&gt;&amp;gt; bots in the trading pit, who then pubmsgs it to everyone (and that happens&lt;br/&gt;&amp;gt; multiple times because multiple makers in tx), and they in turn record it&lt;br/&gt;&amp;gt; as &amp;#34;used&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The mechanism is both not very strong - we use 3 allowed attempts per utxo&lt;br/&gt;&amp;gt; - and imperfect in its &amp;#34;justice&amp;#34;; such commitments can be &amp;#34;used up&amp;#34; by&lt;br/&gt;&amp;gt; failures of one&amp;#39;s counterparties. But it does serve to stop trivial global&lt;br/&gt;&amp;gt; snooping, and doesn&amp;#39;t cost anything in terms of identity or locked funds,&lt;br/&gt;&amp;gt; so it has served a purpose (we did actually see such attacks before it, and&lt;br/&gt;&amp;gt; not after it).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d also note that in terms of the venus flytrap attack mentioned, there&lt;br/&gt;&amp;gt; could be a small time window between one maker receiving !auth and at least&lt;br/&gt;&amp;gt; one other honest maker getting to broadcast step at !ioauth; while I don&amp;#39;t&lt;br/&gt;&amp;gt; think that&amp;#39;s very practical in our use case, it is for sure a theoretical&lt;br/&gt;&amp;gt; concern and removing it could be either slightly, or extremely, important&lt;br/&gt;&amp;gt; in another use case.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Adam Gibson/waxwing/AdamISZ&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt;&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/20200211/d140fadd/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200211/d140fadd/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:58:44Z</updated>
  </entry>

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

  <entry>
    <id>https://yabu.me/nevent1qqsv9y9zywqju78wp7hy5sd88rzqhhfwnqlhnqkjwlt0qgzq77sgzvszyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5mtf365</id>
    
      <title type="html">📅 Original date posted:2020-02-10 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T12:58:41Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsyhtf4ytkwxgv0ufq2zynr73t2663qtwnacj285nag7lzg2efhw3szyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5w263gu</id>
    
      <title type="html">📅 Original date posted:2020-02-13 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T12:58:41Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsd5x5ze0pu9n78esw73jg35zwsz9qdqryxlxwcfql7ya3cjm6d53gzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5uvlc7l</id>
    
      <title type="html">📅 Original date posted:2020-02-10 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T12:58:39Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqs9a9sasv98gx3xm6gsgd3drtlt84mu5aexuqcv9jgqynwc6xfytcczyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5hss0j8</id>
    
      <title type="html">📅 Original date posted:2020-02-06 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T12:58:38Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsgerdqaa46ffeqejg3r3vxvswf0mmq5hgy593rfuckf329qmx766czyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5cfrqzj</id>
    
      <title type="html">📅 Original date posted:2020-02-04 📝 Original message: Rusty ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T12:58:37Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqs2xf9l7tns4tw3casglhferj4jnfd8rv959sae90ldwfrvall957gzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5er2dwx</id>
    
      <title type="html">📅 Original date posted:2020-01-30 📝 Original message: hi ...</title>
    
    <link rel="alternate" href="https://yabu.me/nevent1qqs2xf9l7tns4tw3casglhferj4jnfd8rv959sae90ldwfrvall957gzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5er2dwx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvj42fmd6lrthwt9exx3g56n0crjf25njcyvnnzxqj9hc4qns55rs5mcxea&#39;&gt;nevent1q…cxea&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-01-30&lt;br/&gt;📝 Original message:&lt;br/&gt;hi max — great question. PSBT is a great protocol for wallet interop but a&lt;br/&gt;bit overweight for tx collaboration between two peers&lt;br/&gt;&lt;br/&gt;On Wed, Jan 29, 2020 at 17:29 Max Dignan &amp;lt;maxdignan at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hey Antoine,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Would PSBT (BIP 174 -&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki&lt;/a&gt;) be a good&lt;br/&gt;&amp;gt; solution to this?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Max&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/20200129/c9d358a8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20200129/c9d358a8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:58:24Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqsrtht6gh9vgkgl2w8574pxtn59ylm9xrwmvhekkaj3wj307zhj6wczyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5gp443s</id>
    
      <title type="html">📅 Original date posted:2019-11-07 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-09T12:57:12Z</updated>
  </entry>

  <entry>
    <id>https://yabu.me/nevent1qqs97z8zxjg8rdfm4mzvx22mw470ffkshw3d3le7n8v92s247e9rfagzyzqywu8ttrgk843lp7vkl447h2lphrzc9fwa23x0vxa6p0znx4eq5y0vwnw</id>
    
      <title type="html">📅 Original date posted:2021-10-25 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://yabu.me/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-07T23:00:17Z</updated>
  </entry>

</feed>