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

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




  <entry>
    <id>https://nostr.ae/nevent1qqs2fk49fxz7tuefdh3k0ka0vn4v76j9g4gp404xvupe8zn9ynql9dqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz9udzkj</id>
    
      <title type="html">📅 Original date posted:2018-05-08 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2fk49fxz7tuefdh3k0ka0vn4v76j9g4gp404xvupe8zn9ynql9dqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz9udzkj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstq54l8xv6qaeklxwx9dzrg30ncjlw3uj28vvhj2rx06wvtkxf60c6j8czp&#39;&gt;nevent1q…8czp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-08&lt;br/&gt;📝 Original message:&lt;br/&gt;Benjamin,&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t agree that quantum resistance should be a blocker to deployment of&lt;br/&gt;scriptless scripts on lightning because 1) it is a layer-2 solution and 2)&lt;br/&gt;it already critically depends on the security of DL.&lt;br/&gt;&lt;br/&gt;There are arguments against making certain protocol changes to the base&lt;br/&gt;Bitcoin blockchain for the reason that they may not be quantum resistant.&lt;br/&gt;The most notable is Confidential Transactions. There reason is that the&lt;br/&gt;worst case attack is much worse: an attacker could print money freely and&lt;br/&gt;without detection. In Bitcoin today, a DL break would compromise funds in&lt;br/&gt;any addresses for which the pubkey has been revealed and it&amp;#39;s not even&lt;br/&gt;clear what to do about the remaining funds on chain. Compromising the&lt;br/&gt;fundamental security of the blockchain is a valid cause for concern.&lt;br/&gt;&lt;br/&gt;In the case of Lightning, the attack scenario on scriptless scripts is that&lt;br/&gt;a peer is going to use a quantum computer to steal all live payments routed&lt;br/&gt;through them from their senders before they get to the recipient. This&lt;br/&gt;would be bad, but not catastrophic, and once it is recognized that the&lt;br/&gt;attack is possible, insecure channels could be closed.&lt;br/&gt;&lt;br/&gt;But furthermore, an attacker with a quantum computer could just steal the&lt;br/&gt;multisig funding output directly instead of attacking scriptless scripts.&lt;br/&gt;So additional protocol changes relying on the DL assumption don&amp;#39;t bother me&lt;br/&gt;in the least.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, May 8, 2018, 6:32 AM Benjamin Mord &amp;lt;ben at mord.io&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sorry, I do not wish to spam the list, but I need to correct a rather&lt;br/&gt;&amp;gt; serious error in my last email. We must never call something&lt;br/&gt;&amp;gt; &amp;#34;post-quantum&amp;#34;, absent mathematical proof. (And good luck with that.) I&lt;br/&gt;&amp;gt; apologise for my mistake in doing so myself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I should not even refer to lattice based cryptography as a post-quantum&lt;br/&gt;&amp;gt; algorithm, I should at best call it a Shor&amp;#39;s algorithm-resistant scheme. At&lt;br/&gt;&amp;gt; least, it is not (yet) known how Shor&amp;#39;s algorithm could be used to break&lt;br/&gt;&amp;gt; it. Not in public circles, anyhow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A cursory glance at the history of cryptanalysis shows that primitives&lt;br/&gt;&amp;gt; generally have finite life, which makes it odd that systems seldom use&lt;br/&gt;&amp;gt; redundant primitives, and seldom provide for their rapid and safe swap. A&lt;br/&gt;&amp;gt; system whose entire security rests on nothing but cryptography, ought to&lt;br/&gt;&amp;gt; take particular care! The spectre of quantum computers may render the&lt;br/&gt;&amp;gt; finite life of certain primitives more salient than others, but we must not&lt;br/&gt;&amp;gt; suppose that, absent Shor&amp;#39;s algorithm, there would be no need to plan for&lt;br/&gt;&amp;gt; cryptographic failures. The question is not if, but when, Bitcoin and&lt;br/&gt;&amp;gt; lightning will contend with broken primitives, whether due to classical or&lt;br/&gt;&amp;gt; quantum cryptanalysis. Likely, both will come into play at various times,&lt;br/&gt;&amp;gt; and one must plan accordingly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, May 8, 2018, 9:09 AM Benjamin Mord &amp;lt;ben at mord.io&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; That would be awesome. Do you have a reference?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As pertains to the whole of asymmetric cryptography, I believe there are&lt;br/&gt;&amp;gt;&amp;gt; not a variety of post quantum schemes, there is only one*: lattice-based&lt;br/&gt;&amp;gt;&amp;gt; cryptography. (Which scares me, because it is not all that different from&lt;br/&gt;&amp;gt;&amp;gt; the others.)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; (* Actually, in contexts where time can be used for asymmetry, as in&lt;br/&gt;&amp;gt;&amp;gt; TESLA, we can then use hash functions to create something like asymmetric&lt;br/&gt;&amp;gt;&amp;gt; signatures as well. But the functional context has to be compatible with&lt;br/&gt;&amp;gt;&amp;gt; delayed verification.)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; (But I do not mean to focus exclusively on Schor&amp;#39;s algorithm, the history&lt;br/&gt;&amp;gt;&amp;gt; of even pre-quantum cryptanalysis shows that primitives tend to have finite&lt;br/&gt;&amp;gt;&amp;gt; lifespan. Redundancy of any sort of good, even when not focused&lt;br/&gt;&amp;gt;&amp;gt; specifically on quantum risks.)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Tue, May 8, 2018, 8:58 AM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; From what I understand talking to folks, the linear properties of these&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; signature tricks are maintained under a number of post-quantum schemes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Tue, May 8, 2018 at 8:44 AM, Benjamin Mord &amp;lt;ben at mord.family&amp;gt; wrote:&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; If I&amp;#39;m not mistaken, the scriptless scripts concept (as currently&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; formulated) falls to Schor&amp;#39;s algorithm, and at present there is no&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; alternative implementation of the concept to fall back on. Correct? Lest we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; build a house of cards, I&amp;#39;d strongly urge everyone to not depend on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; functional concepts whose underlying cryptographic primitives cannot be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; swapped in an emergency.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Sure, we use ecdsa for example (which is also vulnerable to Schor&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; algorithm), but in contrast to scriptless scripts we have a variety of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; backup primitives at our disposal that fulfill the same functional&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; objective.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If scriptless scripts are found possible under lattice-based&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; cryptography for example, that would be something I suppose. The functional&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; concept of scriptless scripts is indeed very awesome - we just need to add&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; some cryptographic conservatism before we build on it.&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; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&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; 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/20180508/f3ebdf1a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180508/f3ebdf1a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:50:41&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyy9hdkthctcgeny9zt43pvew286m3cmj6e4rjvvw3eqkg3f8u2sqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzf6dtyt</id>
    
      <title type="html">📅 Original date posted:2018-05-18 📝 Original message: Yes ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyy9hdkthctcgeny9zt43pvew286m3cmj6e4rjvvw3eqkg3f8u2sqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzf6dtyt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxhft6wl655l3qacl5kvejfhqhjlshk8dfc77qdhvlwahdsz28uhshyv5ru&#39;&gt;nevent1q…v5ru&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-18&lt;br/&gt;📝 Original message:&lt;br/&gt;Yes Rusty, you are correct that an attacker still gets leverage on their&lt;br/&gt;ability to destroy reputation unless the loss rates increase exponentially.&lt;br/&gt;And I agree that would be a very steep increase, serving do decrease&lt;br/&gt;circuit lengths dramatically. The reasoning for the linear increase in&lt;br/&gt;reputation loss comes from viewing reputation loss as compensation for&lt;br/&gt;time-value lost in locked HTLCs. In a sense, every node pays in reputation&lt;br/&gt;for all of the time-value locked in HTLCs upstream from them in proportion&lt;br/&gt;to the value assigned to it by the owners of the funds.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure whether this would be an acceptable way of pricing payment&lt;br/&gt;delays, though I do think it is important to make attackers pay for the&lt;br/&gt;resources they are wasting on the network in some form.&lt;br/&gt;&lt;br/&gt;On Fri, May 18, 2018 at 4:38 PM, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Rusty,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Also, you talked about reputation_loss_rate as being a private per-node&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; thing, and being an explicit thing in the HTLC. I&amp;#39;m ignoring the&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; former, and assuming the latter.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reputation (the score) is a private per-node thing, while the&lt;br/&gt;&amp;gt; `reputation_loss_rate` is explicit in the HTLC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am uncertain how that changes your analysis, though.  In a line network&lt;br/&gt;&amp;gt; like you showed, the reputation &amp;#34;bins&amp;#34; are Node1-&amp;gt;Node2 and Node2-&amp;gt;Node1&lt;br/&gt;&amp;gt; and so on.  It may be more useful to think of the reputation bins as&lt;br/&gt;&amp;gt; assigned to half-chans than to nodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So the initial Mallory3-&amp;gt;Node18-&amp;gt;Mallory2 gives high reputation to&lt;br/&gt;&amp;gt; half-chans Node18-&amp;gt;Mallory3 and Node18-&amp;gt;Mallory2, then sacrifices the&lt;br/&gt;&amp;gt; Node18-&amp;gt;Mallory3 reputation to destroy the NodeN -&amp;gt; NodeN&#43;1 and&lt;br/&gt;&amp;gt; NodeN&#43;1-&amp;gt;NodeN reputations.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Along that line, reputation lost is higher as N increases. Graphing&lt;br/&gt;&amp;gt; reputation lost along that line, we form a triangle, and the area of the&lt;br/&gt;&amp;gt; triangle is the total reputation destroyed.  Only the length of one edge of&lt;br/&gt;&amp;gt; the triangle is what is lost by the Node18-&amp;gt;Mallory3 reputation score.  So&lt;br/&gt;&amp;gt; yes, it seems you are correct here.&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/20180518/f341c9c4/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180518/f341c9c4/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:50:29&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs884r2j5cm3a8lrp23520g7pmt8lgy4wzvgmaltcjqyh45rsv9c7qzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzmq9ymu</id>
    
      <title type="html">📅 Original date posted:2018-05-15 📝 Original message: &amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs884r2j5cm3a8lrp23520g7pmt8lgy4wzvgmaltcjqyh45rsv9c7qzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzmq9ymu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrre45ndjaj59kyu3lx0ym0vrvxdyqd6yvcx8xwq5ahvj23fe70acpccern&#39;&gt;nevent1q…cern&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-15&lt;br/&gt;📝 Original message:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This can still be manipulated if Rusty1 opens a direct channel to Jim.&lt;br/&gt;&amp;gt; Then Rusty1 can route payments Rusty1-&amp;gt;Jim-&amp;gt;Rusty2 that succeed quickly,&lt;br/&gt;&amp;gt; then route payments Rusty1-&amp;gt;ZmnSCPxj-&amp;gt;Jim-&amp;gt;Rusty2 that stall.  Thus Rusty2&lt;br/&gt;&amp;gt; can have the Jim-&amp;gt;Rusty2 reputation boosted, while alternating with&lt;br/&gt;&amp;gt; reputation losses that make ZmnSCPxj-&amp;gt;Jim reputation go down.  Since local&lt;br/&gt;&amp;gt; reputation is used, ZmnSCPxj and Jim will not talk to each other about how&lt;br/&gt;&amp;gt; Rusty2 seems to stall when not routing a payment from Rusty1.  Rusty1 can&lt;br/&gt;&amp;gt; now manipulate the reputation view of ZmnSCPxj and Jim of each other while&lt;br/&gt;&amp;gt; keeping Rusty2 reputation somewhat high.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, you are correct that in scenarios like this an attacker can pay to&lt;br/&gt;degrade the reputation of one of its peers (or even nodes further away).&lt;br/&gt;The key point is that doing so should be costly to the attacker because&lt;br/&gt;they must pay the victim node to continue making itself vulnerable to&lt;br/&gt;payment delays. But if the node is getting compensated, is that really an&lt;br/&gt;attack then? This system is designed with the assumption that the best way&lt;br/&gt;to defend an anonymous/decentralized network that allows sybils is by&lt;br/&gt;pricing resource utilization appropriately. In a similar way, the Bitcoin&lt;br/&gt;blockchain is &amp;#34;vulnerable&amp;#34; to spam attacks in the sense that attackers can&lt;br/&gt;pay to fill up block space.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; As mentioned, the CLTV total leaks information on how far the payee is.  I&lt;br/&gt;&amp;gt; might decide to keep track of a reputation score, not of the local peers I&lt;br/&gt;&amp;gt; have, but on the entire network.  If the CLTV total at my outgoing is high,&lt;br/&gt;&amp;gt; then if the outgoing HTLC takes a long time to respond, I will distribute a&lt;br/&gt;&amp;gt; small reputation loss to a large number of nodes that are accessible from&lt;br/&gt;&amp;gt; the outgoing channel; if the CLTV total at my outgoing is low, I will&lt;br/&gt;&amp;gt; distribute a large reputation loss to a small number of nodes that are&lt;br/&gt;&amp;gt; accessible from the outgoing channel.  I now have the incentive to make&lt;br/&gt;&amp;gt; this estimation even more accurate in the future.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;One could do this today. I&amp;#39;d even argue that they are incentivized to&lt;br/&gt;already as a protection against loop attacks/payment delays. But it&amp;#39;s&lt;br/&gt;likely a pretty ineffective strategy depending on the number of channels&lt;br/&gt;that the possible downstream hops have open.&lt;br/&gt;&lt;br/&gt;Please describe the below:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  Behavior if payment succeeds after T time.&lt;br/&gt;&amp;gt; 2.  Behavior if payment fails after T time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems you only described &amp;#34;Behavior if payment succeeds after T time&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Ah, sorry if I didn&amp;#39;t make that clear. The reputation is increased in the&lt;br/&gt;case of successful payments by the fee collected. The reputation is&lt;br/&gt;decreased on the downstream peer proportional to time T *regardless* of&lt;br/&gt;whether the payment succeeds or fails. If a payment succeeds quickly, the&lt;br/&gt;increase should outweigh the decrease, but if the payment succeeds after a&lt;br/&gt;long time, the change in reputation may be net negative. If the payment&lt;br/&gt;fails, the upstream peer&amp;#39;s reputation does not change and the downstream&lt;br/&gt;peer&amp;#39;s reputation always decreases proportional to time T.&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/20180515/755f6eaf/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180515/755f6eaf/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:50:28&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst3yv9nv85knakcepkagkgheyv9m285zgkuedw2ae52eq7f08fmqszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzpg9xr4</id>
    
      <title type="html">📅 Original date posted:2018-05-09 📝 Original message: One ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst3yv9nv85knakcepkagkgheyv9m285zgkuedw2ae52eq7f08fmqszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzpg9xr4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8yg9v7mlljxq05zvq09l0f324daj8nxtu5xj62kw9rwlhxs00yvqdy3flk&#39;&gt;nevent1q…3flk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-09&lt;br/&gt;📝 Original message:&lt;br/&gt;One more point in terms of information leakage is that noise can be added&lt;br/&gt;to the &amp;#34;this is the rate that you&amp;#39;ll lose reputation at&amp;#34; field to help&lt;br/&gt;obfuscate the number of upstream hops. I proposed setting it to &amp;#34;this is&lt;br/&gt;the upstream rate that I&amp;#39;m losing reputation at&amp;#34; &#43; downstream HTLC value,&lt;br/&gt;but a node can decide to add noise. If they make it too low however,&lt;br/&gt;there&amp;#39;s a risk of insufficiently punishing bad nodes and if they make it&lt;br/&gt;too high, there&amp;#39;s a heightened risk that the payment fails because the&lt;br/&gt;downstream reputation is insufficient along the route.&lt;br/&gt;&lt;br/&gt;This is why I say it&amp;#39;s kind of symmetric to the CLTV value: if the delta is&lt;br/&gt;too low, there&amp;#39;s risk of loss of funds, if the delta is too high, someone&lt;br/&gt;might decide to fail the payment instead of taking the delay risk.&lt;br/&gt;&lt;br/&gt;On Wed, May 9, 2018 at 10:23 AM, Jim Posen &amp;lt;jim.posen at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Thanks for the thoughtful responses.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; You missed the vital detail: that you must prove channel closure if you&lt;br/&gt;&amp;gt; &amp;gt; can&amp;#39;t unpeel the onion further.  That *will* hit an unresponsive party&lt;br/&gt;&amp;gt; &amp;gt; with a penalty.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ah, that is a good point. I still find the proposal overall worryingly&lt;br/&gt;&amp;gt; complex in terms of communication overhead, time it takes to prove channel&lt;br/&gt;&amp;gt; closure, all of your points in [1], [2], [3], etc. Furthermore, this&lt;br/&gt;&amp;gt; mandates that immediate channel closure is the only allowed reaction to a&lt;br/&gt;&amp;gt; party delaying an HTLC for a time period above a threshold -- the node&lt;br/&gt;&amp;gt; reputation approach gives more discretion to the preceding hop.&lt;br/&gt;&amp;gt; Deobfuscating the route may turn out to be the right option, but I think&lt;br/&gt;&amp;gt; the reputation system has certain advantages over this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The models we tried in Milan all created an incentive to fail payments,&lt;br/&gt;&amp;gt; &amp;gt; which is a non-starter.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Do you mind elaborating or summarizing the reasons? The way I&amp;#39;m analyzing&lt;br/&gt;&amp;gt; it, even if there&amp;#39;s a nominal spam fee paid to routing nodes that fail&lt;br/&gt;&amp;gt; payments, as long as it&amp;#39;s low enough (say 2-5% for arguments sake), the&lt;br/&gt;&amp;gt; nodes still have more to gain by forwarding the payment and earning the&lt;br/&gt;&amp;gt; full fee on a completed payment, and possibly the reputation boost&lt;br/&gt;&amp;gt; associated with completing a payment if that system was in effect.&lt;br/&gt;&amp;gt; Moreover, a node that constantly fails payments will be blacklisted by the&lt;br/&gt;&amp;gt; sender eventually and stop receiving HTLCs from them at all. Overall, I&lt;br/&gt;&amp;gt; don&amp;#39;t think this is a profitable strategy. Furthermore, I think it works&lt;br/&gt;&amp;gt; quite well in combination with the reputation system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This seems like we&amp;#39;d need some serious evaluation to show that this&lt;br/&gt;&amp;gt; &amp;gt; works, because the risks are very high.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree that it needs to be evaluated. I may start working on some network&lt;br/&gt;&amp;gt; simulations to test various DOS mitigation strategies.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I can destroy your node&amp;#39;s reputation by routing crap through you; even&lt;br/&gt;&amp;gt; &amp;gt; if it costs me marginaly more reputation than it does you, that just&lt;br/&gt;&amp;gt; &amp;gt; means that the largest players can force failure upon smaller players,&lt;br/&gt;&amp;gt; &amp;gt; centralizing the network.  And I think trying to ensure that it costs me&lt;br/&gt;&amp;gt; &amp;gt; more reputation than the sum of downstream reputation loss leaks too&lt;br/&gt;&amp;gt; &amp;gt; much information&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I will add to ZmnSCPxj&amp;#39;s response, which is mostly on point. The key here&lt;br/&gt;&amp;gt; is that the only way to lose significant reputation is to delay a payment&lt;br/&gt;&amp;gt; yourself or forward to a malicious downstream that delays -- neither of&lt;br/&gt;&amp;gt; these can be forced by the sender alone. This amounts to a system where you&lt;br/&gt;&amp;gt; are on the hook for any malicious behavior of your downstream peers, which&lt;br/&gt;&amp;gt; is why you must keep a reputation score for each which they earn over time.&lt;br/&gt;&amp;gt; This should keep all links in the network high quality and quickly&lt;br/&gt;&amp;gt; disconnect off delaying nodes if the incentives are right.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While I agree that a lot of reputation is leaked by aggregating the losses&lt;br/&gt;&amp;gt; along the route, this serves exactly to prevent large nodes with high&lt;br/&gt;&amp;gt; reputation from ruining links elsewhere. There are two things a node&lt;br/&gt;&amp;gt; looking to cause reputation loss could do. 1) Identify a node (not itself)&lt;br/&gt;&amp;gt; it thinks will delay a payment and send to them. This locks up funds on&lt;br/&gt;&amp;gt; their behalf, but is actually good behavior because it identifies a faulty&lt;br/&gt;&amp;gt; node and rightfully forces a loss in their reputation, eventually resulting&lt;br/&gt;&amp;gt; in them being booted from the network. Everyone upstream loses some&lt;br/&gt;&amp;gt; reputation for having connectivity to them, but less because of the loss&lt;br/&gt;&amp;gt; aggregation along the route. 2) Delay a payment oneself and force upstream&lt;br/&gt;&amp;gt; reputation loss. This is why I think it&amp;#39;s important that the reputation&lt;br/&gt;&amp;gt; loss aggregate so that the malicious party loses the most.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As for the amount of information leaked, yes, it helps determine the&lt;br/&gt;&amp;gt; number of upstream hops in a route. However, the CLTV values help determine&lt;br/&gt;&amp;gt; the number of downstream hops in a route in exactly the same way. I see&lt;br/&gt;&amp;gt; these as symmetric in a sense.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To address ZmnSCPxj&amp;#39;s point:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; But it also looks more and more like a policy of &amp;#34;just&lt;br/&gt;&amp;gt; `update_htlc_fail`&amp;#34; keeps our reputation high: indeed never accepting a&lt;br/&gt;&amp;gt; forwarding attempt would ensure reputation.&lt;br/&gt;&amp;gt; &amp;gt; However, earning via fees should help provide incentive against &amp;#34;Just&lt;br/&gt;&amp;gt; `update_htlc_fail`&amp;#34; always.  If the goal is &amp;#34;how do I earn money fastest&amp;#34;&lt;br/&gt;&amp;gt; then there is some optimal threshhold &amp;gt; of risk-of-reputation-loss vs.&lt;br/&gt;&amp;gt; fee-earnings-if-I-forward that is unlikely to be near the &amp;#34;Just fail it&amp;#34;&lt;br/&gt;&amp;gt; spectrum, but somewhere in between.  We hope.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is exactly the question that your local view of peer reputations&lt;br/&gt;&amp;gt; helps solve: are the potential fees here worth the risk of forwarding this&lt;br/&gt;&amp;gt; payment to this downstream? If their reputation is high, then you will want&lt;br/&gt;&amp;gt; to forward because you think there&amp;#39;s a low chance of you incurring&lt;br/&gt;&amp;gt; reputation loss. If their reputation is low and the HTLC value is too high,&lt;br/&gt;&amp;gt; you will fail it. So I disagree that &amp;#34;just `update_htlc_fail`&amp;#34; is an&lt;br/&gt;&amp;gt; optimal strategy. Consider as well that all fees you earn on successful&lt;br/&gt;&amp;gt; payments are profit to you as well as a reputation boost in the view of&lt;br/&gt;&amp;gt; both of your peers. So in order to earn reputation, you have to forward&lt;br/&gt;&amp;gt; payments. The key is not forwarding through malicious peers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -jimpo&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, May 9, 2018 at 12:31 AM, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning Rusty, Jim, and list,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I can destroy your node&amp;#39;s reputation by routing crap through you; even&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; if it costs me marginaly more reputation than it does you, that just&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; means that the largest players can force failure upon smaller players,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; centralizing the network.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; My understanding of the proposal was that reputation loss would occur&lt;br/&gt;&amp;gt;&amp;gt; only if the reply (`update_htlc_fail` or `update_htlc_success`) is delayed;&lt;br/&gt;&amp;gt;&amp;gt; this means that for you to force me to lose reputation, you need to somehow&lt;br/&gt;&amp;gt;&amp;gt; make me delay my reply.  In particular if you do simple things like give me&lt;br/&gt;&amp;gt;&amp;gt; an invalid onion, or make me forward to a payee who does not know the&lt;br/&gt;&amp;gt;&amp;gt; preimage, I do not lose reputation by replying very quickly with an&lt;br/&gt;&amp;gt;&amp;gt; `update_htlc_fail`.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Of course, a large player could force reputation loss by delaying reply&lt;br/&gt;&amp;gt;&amp;gt; when they receive, and having patsy nodes route to them.  So for instance&lt;br/&gt;&amp;gt;&amp;gt; if it is Jim -&amp;gt; ZmnSCPxj -&amp;gt; Rusty, and Rusty activates the&lt;br/&gt;&amp;gt;&amp;gt; Blockstream-takes-over-the-world Apocalypse program, the Rusty node&lt;br/&gt;&amp;gt;&amp;gt; would then delay for a long time before replying, which makes my reputation&lt;br/&gt;&amp;gt;&amp;gt; suffer.  But it also makes Rusty reputation suffer even more and my&lt;br/&gt;&amp;gt;&amp;gt; reaction would be that, the next time Jim hands me an HTLC that forwards to&lt;br/&gt;&amp;gt;&amp;gt; Rusty, I would instead quickly `update_htlc_fail` back to Jim (which does&lt;br/&gt;&amp;gt;&amp;gt; not lose me significant reputation due to my quick response) than risk&lt;br/&gt;&amp;gt;&amp;gt; forwarding it to you, since you have a reputation for being slow and&lt;br/&gt;&amp;gt;&amp;gt; unresponsive.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Indeed, another aspect of Jim proposal is that it is extremely local: if&lt;br/&gt;&amp;gt;&amp;gt; Jim has no channel to Rusty, then Jim has no opinion about Rusty, only&lt;br/&gt;&amp;gt;&amp;gt; about ZmnSCPxj.  However, ZmnSCPxj does have an opinion about Rusty, as&lt;br/&gt;&amp;gt;&amp;gt; ZmnSCPxj has channel with Rusty.  If I suffer too much reputation loss due&lt;br/&gt;&amp;gt;&amp;gt; to Rusty, my opinion of Rusty drops even faster, and I decide to&lt;br/&gt;&amp;gt;&amp;gt; `update_htlc_fail` in order to prevent Jim opinion of me from dropping too&lt;br/&gt;&amp;gt;&amp;gt; much that Jim decides not to forward to me (if I have other channels with&lt;br/&gt;&amp;gt;&amp;gt; more reasonable nodes).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; But it also looks more and more like a policy of &amp;#34;just&lt;br/&gt;&amp;gt;&amp;gt; `update_htlc_fail`&amp;#34; keeps our reputation high: indeed never accepting a&lt;br/&gt;&amp;gt;&amp;gt; forwarding attempt would ensure reputation.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; However, earning via fees should help provide incentive against &amp;#34;Just&lt;br/&gt;&amp;gt;&amp;gt; `update_htlc_fail`&amp;#34; always.  If the goal is &amp;#34;how do I earn money fastest&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; then there is some optimal threshhold of risk-of-reputation-loss vs.&lt;br/&gt;&amp;gt;&amp;gt; fee-earnings-if-I-forward that is unlikely to be near the &amp;#34;Just fail it&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; spectrum, but somewhere in between.  We hope.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; And I think trying to ensure that it costs me&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; more reputation than the sum of downstream reputation loss leaks too&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; much information&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes, this is a major drawback of the proposal.  The rate at which the&lt;br/&gt;&amp;gt;&amp;gt; sender of the HTLC threatens me with reputation loss lets me estimate my&lt;br/&gt;&amp;gt;&amp;gt; distance from the ultimate sender of the funds.&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;&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/20180509/1894d9e0/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180509/1894d9e0/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:50:25&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8yg9v7mlljxq05zvq09l0f324daj8nxtu5xj62kw9rwlhxs00yvqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzzmjt6v</id>
    
      <title type="html">📅 Original date posted:2018-05-09 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8yg9v7mlljxq05zvq09l0f324daj8nxtu5xj62kw9rwlhxs00yvqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzzmjt6v" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgdtuzmat3t8rnyywnrd86228726rgmh5pz5lndjrlznmkx6yvwugxacswt&#39;&gt;nevent1q…cswt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-09&lt;br/&gt;📝 Original message:&lt;br/&gt;Thanks for the thoughtful responses.&lt;br/&gt;&lt;br/&gt;&amp;gt; You missed the vital detail: that you must prove channel closure if you&lt;br/&gt;&amp;gt; can&amp;#39;t unpeel the onion further.  That *will* hit an unresponsive party&lt;br/&gt;&amp;gt; with a penalty.&lt;br/&gt;&lt;br/&gt;Ah, that is a good point. I still find the proposal overall worryingly&lt;br/&gt;complex in terms of communication overhead, time it takes to prove channel&lt;br/&gt;closure, all of your points in [1], [2], [3], etc. Furthermore, this&lt;br/&gt;mandates that immediate channel closure is the only allowed reaction to a&lt;br/&gt;party delaying an HTLC for a time period above a threshold -- the node&lt;br/&gt;reputation approach gives more discretion to the preceding hop.&lt;br/&gt;Deobfuscating the route may turn out to be the right option, but I think&lt;br/&gt;the reputation system has certain advantages over this.&lt;br/&gt;&lt;br/&gt;&amp;gt; The models we tried in Milan all created an incentive to fail payments,&lt;br/&gt;&amp;gt; which is a non-starter.&lt;br/&gt;&lt;br/&gt;Do you mind elaborating or summarizing the reasons? The way I&amp;#39;m analyzing&lt;br/&gt;it, even if there&amp;#39;s a nominal spam fee paid to routing nodes that fail&lt;br/&gt;payments, as long as it&amp;#39;s low enough (say 2-5% for arguments sake), the&lt;br/&gt;nodes still have more to gain by forwarding the payment and earning the&lt;br/&gt;full fee on a completed payment, and possibly the reputation boost&lt;br/&gt;associated with completing a payment if that system was in effect.&lt;br/&gt;Moreover, a node that constantly fails payments will be blacklisted by the&lt;br/&gt;sender eventually and stop receiving HTLCs from them at all. Overall, I&lt;br/&gt;don&amp;#39;t think this is a profitable strategy. Furthermore, I think it works&lt;br/&gt;quite well in combination with the reputation system.&lt;br/&gt;&lt;br/&gt;&amp;gt; This seems like we&amp;#39;d need some serious evaluation to show that this&lt;br/&gt;&amp;gt; works, because the risks are very high.&lt;br/&gt;&lt;br/&gt;I agree that it needs to be evaluated. I may start working on some network&lt;br/&gt;simulations to test various DOS mitigation strategies.&lt;br/&gt;&lt;br/&gt;&amp;gt; I can destroy your node&amp;#39;s reputation by routing crap through you; even&lt;br/&gt;&amp;gt; if it costs me marginaly more reputation than it does you, that just&lt;br/&gt;&amp;gt; means that the largest players can force failure upon smaller players,&lt;br/&gt;&amp;gt; centralizing the network.  And I think trying to ensure that it costs me&lt;br/&gt;&amp;gt; more reputation than the sum of downstream reputation loss leaks too&lt;br/&gt;&amp;gt; much information&lt;br/&gt;&lt;br/&gt;I will add to ZmnSCPxj&amp;#39;s response, which is mostly on point. The key here&lt;br/&gt;is that the only way to lose significant reputation is to delay a payment&lt;br/&gt;yourself or forward to a malicious downstream that delays -- neither of&lt;br/&gt;these can be forced by the sender alone. This amounts to a system where you&lt;br/&gt;are on the hook for any malicious behavior of your downstream peers, which&lt;br/&gt;is why you must keep a reputation score for each which they earn over time.&lt;br/&gt;This should keep all links in the network high quality and quickly&lt;br/&gt;disconnect off delaying nodes if the incentives are right.&lt;br/&gt;&lt;br/&gt;While I agree that a lot of reputation is leaked by aggregating the losses&lt;br/&gt;along the route, this serves exactly to prevent large nodes with high&lt;br/&gt;reputation from ruining links elsewhere. There are two things a node&lt;br/&gt;looking to cause reputation loss could do. 1) Identify a node (not itself)&lt;br/&gt;it thinks will delay a payment and send to them. This locks up funds on&lt;br/&gt;their behalf, but is actually good behavior because it identifies a faulty&lt;br/&gt;node and rightfully forces a loss in their reputation, eventually resulting&lt;br/&gt;in them being booted from the network. Everyone upstream loses some&lt;br/&gt;reputation for having connectivity to them, but less because of the loss&lt;br/&gt;aggregation along the route. 2) Delay a payment oneself and force upstream&lt;br/&gt;reputation loss. This is why I think it&amp;#39;s important that the reputation&lt;br/&gt;loss aggregate so that the malicious party loses the most.&lt;br/&gt;&lt;br/&gt;As for the amount of information leaked, yes, it helps determine the number&lt;br/&gt;of upstream hops in a route. However, the CLTV values help determine the&lt;br/&gt;number of downstream hops in a route in exactly the same way. I see these&lt;br/&gt;as symmetric in a sense.&lt;br/&gt;&lt;br/&gt;To address ZmnSCPxj&amp;#39;s point:&lt;br/&gt;&lt;br/&gt;&amp;gt; But it also looks more and more like a policy of &amp;#34;just&lt;br/&gt;`update_htlc_fail`&amp;#34; keeps our reputation high: indeed never accepting a&lt;br/&gt;forwarding attempt would ensure reputation.&lt;br/&gt;&amp;gt; However, earning via fees should help provide incentive against &amp;#34;Just&lt;br/&gt;`update_htlc_fail`&amp;#34; always.  If the goal is &amp;#34;how do I earn money fastest&amp;#34;&lt;br/&gt;then there is some optimal threshhold &amp;gt; of risk-of-reputation-loss vs.&lt;br/&gt;fee-earnings-if-I-forward that is unlikely to be near the &amp;#34;Just fail it&amp;#34;&lt;br/&gt;spectrum, but somewhere in between.  We hope.&lt;br/&gt;&lt;br/&gt;This is exactly the question that your local view of peer reputations helps&lt;br/&gt;solve: are the potential fees here worth the risk of forwarding this&lt;br/&gt;payment to this downstream? If their reputation is high, then you will want&lt;br/&gt;to forward because you think there&amp;#39;s a low chance of you incurring&lt;br/&gt;reputation loss. If their reputation is low and the HTLC value is too high,&lt;br/&gt;you will fail it. So I disagree that &amp;#34;just `update_htlc_fail`&amp;#34; is an&lt;br/&gt;optimal strategy. Consider as well that all fees you earn on successful&lt;br/&gt;payments are profit to you as well as a reputation boost in the view of&lt;br/&gt;both of your peers. So in order to earn reputation, you have to forward&lt;br/&gt;payments. The key is not forwarding through malicious peers.&lt;br/&gt;&lt;br/&gt;-jimpo&lt;br/&gt;&lt;br/&gt;On Wed, May 9, 2018 at 12:31 AM, ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Rusty, Jim, and list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I can destroy your node&amp;#39;s reputation by routing crap through you; even&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; if it costs me marginaly more reputation than it does you, that just&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; means that the largest players can force failure upon smaller players,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; centralizing the network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My understanding of the proposal was that reputation loss would occur only&lt;br/&gt;&amp;gt; if the reply (`update_htlc_fail` or `update_htlc_success`) is delayed; this&lt;br/&gt;&amp;gt; means that for you to force me to lose reputation, you need to somehow make&lt;br/&gt;&amp;gt; me delay my reply.  In particular if you do simple things like give me an&lt;br/&gt;&amp;gt; invalid onion, or make me forward to a payee who does not know the&lt;br/&gt;&amp;gt; preimage, I do not lose reputation by replying very quickly with an&lt;br/&gt;&amp;gt; `update_htlc_fail`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course, a large player could force reputation loss by delaying reply&lt;br/&gt;&amp;gt; when they receive, and having patsy nodes route to them.  So for instance&lt;br/&gt;&amp;gt; if it is Jim -&amp;gt; ZmnSCPxj -&amp;gt; Rusty, and Rusty activates the&lt;br/&gt;&amp;gt; Blockstream-takes-over-the-world Apocalypse program, the Rusty node would&lt;br/&gt;&amp;gt; then delay for a long time before replying, which makes my reputation&lt;br/&gt;&amp;gt; suffer.  But it also makes Rusty reputation suffer even more and my&lt;br/&gt;&amp;gt; reaction would be that, the next time Jim hands me an HTLC that forwards to&lt;br/&gt;&amp;gt; Rusty, I would instead quickly `update_htlc_fail` back to Jim (which does&lt;br/&gt;&amp;gt; not lose me significant reputation due to my quick response) than risk&lt;br/&gt;&amp;gt; forwarding it to you, since you have a reputation for being slow and&lt;br/&gt;&amp;gt; unresponsive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Indeed, another aspect of Jim proposal is that it is extremely local: if&lt;br/&gt;&amp;gt; Jim has no channel to Rusty, then Jim has no opinion about Rusty, only&lt;br/&gt;&amp;gt; about ZmnSCPxj.  However, ZmnSCPxj does have an opinion about Rusty, as&lt;br/&gt;&amp;gt; ZmnSCPxj has channel with Rusty.  If I suffer too much reputation loss due&lt;br/&gt;&amp;gt; to Rusty, my opinion of Rusty drops even faster, and I decide to&lt;br/&gt;&amp;gt; `update_htlc_fail` in order to prevent Jim opinion of me from dropping too&lt;br/&gt;&amp;gt; much that Jim decides not to forward to me (if I have other channels with&lt;br/&gt;&amp;gt; more reasonable nodes).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But it also looks more and more like a policy of &amp;#34;just `update_htlc_fail`&amp;#34;&lt;br/&gt;&amp;gt; keeps our reputation high: indeed never accepting a forwarding attempt&lt;br/&gt;&amp;gt; would ensure reputation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, earning via fees should help provide incentive against &amp;#34;Just&lt;br/&gt;&amp;gt; `update_htlc_fail`&amp;#34; always.  If the goal is &amp;#34;how do I earn money fastest&amp;#34;&lt;br/&gt;&amp;gt; then there is some optimal threshhold of risk-of-reputation-loss vs.&lt;br/&gt;&amp;gt; fee-earnings-if-I-forward that is unlikely to be near the &amp;#34;Just fail it&amp;#34;&lt;br/&gt;&amp;gt; spectrum, but somewhere in between.  We hope.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; And I think trying to ensure that it costs me&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; more reputation than the sum of downstream reputation loss leaks too&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; much information&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, this is a major drawback of the proposal.  The rate at which the&lt;br/&gt;&amp;gt; sender of the HTLC threatens me with reputation loss lets me estimate my&lt;br/&gt;&amp;gt; distance from the ultimate sender of the funds.&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/20180509/1cec1f17/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180509/1cec1f17/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:50:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg6aaxdqp58sjux95lnnz2wfmkh2lrmld7tul9szka5wlxswqf8eszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz4vtsrs</id>
    
      <title type="html">📅 Original date posted:2018-05-02 📝 Original message: I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg6aaxdqp58sjux95lnnz2wfmkh2lrmld7tul9szka5wlxswqf8eszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz4vtsrs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswceragtw888j6wz8hnntwwsq9r8n9tglhqcnj8sw2wzyg3svup6c3h6gdh&#39;&gt;nevent1q…6gdh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-02&lt;br/&gt;📝 Original message:&lt;br/&gt;I have been thinking a lot lately about attacks on lightning routing nodes,&lt;br/&gt;the worst of which is the so-called Loop Attack [1]. See the mailing list&lt;br/&gt;thread for more details, but the basic idea is that a sender and receiver&lt;br/&gt;collude to create a long circuit and refuse to settle or fail the HTLC at&lt;br/&gt;the end until the last possible moment. The attack is particularly&lt;br/&gt;insidious for a few reasons. Firstly, an attack on a multi-hop route gives&lt;br/&gt;the attacker leverage, so that their funds locked in one channel cause&lt;br/&gt;funds to be locked up in every channel on the route. Second, the onion&lt;br/&gt;routing makes it difficult to attribute blame to a single node and defend&lt;br/&gt;against a repeated attack.&lt;br/&gt;&lt;br/&gt;First, I&amp;#39;ll note that the case where a sender and recipient collude is a&lt;br/&gt;more active variant on an attack that any node in a route can perform. Even&lt;br/&gt;if a node does not initiate the payment, it can just accept offered HTLCs&lt;br/&gt;in the route, not forward them, and wait until the offered HTLC almost&lt;br/&gt;expires before failing. As noted above, the prior node in the route cannot&lt;br/&gt;determine whether the attacking node is at fault or one downstream from it.&lt;br/&gt;Even the sender may not be able to determine where in the route the payment&lt;br/&gt;failed because of the issue where the obfuscated error reason is not MAC&amp;#39;ed&lt;br/&gt;on every hop.&lt;br/&gt;&lt;br/&gt;There are two directions of solutions I have heard: 1) protocol support for&lt;br/&gt;decrypting the onion route if the HTLC is kept in-flight for too long 2)&lt;br/&gt;requiring fees even if the payment fails as a cost to the attacker 3) some&lt;br/&gt;sort of reputation system for nodes.&lt;br/&gt;&lt;br/&gt;Option 1 I&amp;#39;m afraid may be quite complex. Say this mechanism kicks in and&lt;br/&gt;all nodes in the circuit deobfuscate the route and are able to see the&lt;br/&gt;delays at each hop. The outcome we hope for is that there is one node&lt;br/&gt;clearly to blame and the prior hop in the route fails all channels with&lt;br/&gt;them. However, the attacker can of course control multiple successive hops&lt;br/&gt;in the route, one that looks innocent in front of one that looks guilty,&lt;br/&gt;then keep the channel alive and try again. So then all nodes need to keep a&lt;br/&gt;record of the full circuits and iteratively shift blame up the chain if bad&lt;br/&gt;HTLCs keep going through those channels.&lt;br/&gt;&lt;br/&gt;Option 2 is also problematic because it only protects against the case&lt;br/&gt;where the sender is colluding with the receiver, and not where a routing&lt;br/&gt;node is opportunistically delaying payments. This would, however, likely be&lt;br/&gt;successful against nodes being annoying and sending tons of payments with&lt;br/&gt;randomly generated payment hashes in order to &amp;#34;ping&amp;#34; a circuit.&lt;br/&gt;&lt;br/&gt;Option 3 has become my preferred solution. The idea is that that for each&lt;br/&gt;node that one has channels with, it only forwards payments through them if&lt;br/&gt;they have a good history, otherwise it fails the payment. Notably, we&lt;br/&gt;ignore whether the downstream hop is directly responsible for delaying a&lt;br/&gt;payment or whether they are simply willing to forward to another node that&lt;br/&gt;is intentionally delaying -- both should be considered bad behavior. In my&lt;br/&gt;opinion, this type of solution fits best into the Lightning model of&lt;br/&gt;independent, linked channels where each node has private contracts with its&lt;br/&gt;direct peers. It also is the simplest in the context of onion routing&lt;br/&gt;because if you are offered an HTLC to route, the only decision you can make&lt;br/&gt;is whether to forward it or fail it based on the amount, previous hop, and&lt;br/&gt;next hop. When I refer to &amp;#34;reputation&amp;#34; hereafter, I do not mean a global&lt;br/&gt;reputation that is gossiped about -- just a local view of a peer&amp;#39;s history.&lt;br/&gt;&lt;br/&gt;For a Sybil-resistant reputation system, we can use money as a way of&lt;br/&gt;measuring reputation. Fees collected through routing payments across&lt;br/&gt;channels raise the reputation of the channel peer. You lose reputation by&lt;br/&gt;accepting an HTLC and not failing or fulfilling it quickly, proportional to&lt;br/&gt;the value of the HTLC and time to respond. What this essentially means is&lt;br/&gt;that if an attacker wants people to send them HTLCs to delay, they pay a&lt;br/&gt;certain amount in fees over time. So each node will track for each peer 1)&lt;br/&gt;total fees collected from forwarding on routes where that peer is the prior&lt;br/&gt;hop 2) total fees collect from forwarding on routes where that peer is the&lt;br/&gt;next hop 3) total value times time of money locked in offered HTLCs on&lt;br/&gt;channels to the peer. To track the third, as soon as an offered HTLC is&lt;br/&gt;locked in by the peer, the node starts a timer. When the HTLC is settled or&lt;br/&gt;failed or handled on-chain, the timer stops and the node registers the&lt;br/&gt;total elapsed time multiplied by the value of the HTLC.&lt;br/&gt;&lt;br/&gt;A very simple strategy would be to have two factors, R_inbound and&lt;br/&gt;R_outbound and calculate reputation per peer as R_inbound * total inbound&lt;br/&gt;fees &#43; R_outbound * total outbound fees - total Bitcoin-seconds locked in&lt;br/&gt;an HTLC. When forwarding a payment, you calculate the worst case reputation&lt;br/&gt;loss, HTLC value * (CLTV - current block height) * 10 min / block, and fail&lt;br/&gt;the payment if that value is greater than their current score. Effectively,&lt;br/&gt;reputation scores are the maximum number of Bitcoin-seconds on could waste&lt;br/&gt;in HTLCs as the downstream node in a channel. If you think, for example,&lt;br/&gt;having 1 BTC for 1 hour is worth 1 satoshi, you might set R_inbound =&lt;br/&gt;R_outbound = 10^8. Honest nodes should earn reputation passively by&lt;br/&gt;forwarding payments and failing/fulfilling quickly, while an attacker would&lt;br/&gt;lose reputation and have to pay fees to re-earn it. Furthermore, high&lt;br/&gt;reputation nodes should be able to earn reputation faster since peers will&lt;br/&gt;be willing to forward higher value HTLCs through them.&lt;br/&gt;&lt;br/&gt;We want an additional property from this system though, which is that an&lt;br/&gt;attacker be limited in their ability to disrupt network connectivity and&lt;br/&gt;induce throttling on other channels. The above scheme has the problem that&lt;br/&gt;for every unit of reputation the attacker loses, each upstream hop also&lt;br/&gt;loses approximately the same amount -- they effectively get leverage on the&lt;br/&gt;ability to reduce reputation. So instead, consider a modification: each hop&lt;br/&gt;loses a quantity of reputation units equal to the *total* amount of&lt;br/&gt;Bitcoin-seconds lost upstream. So say there&amp;#39;s a payment A -&amp;gt; B -&amp;gt; C -&amp;gt; D,&lt;br/&gt;where the CLTV decrements by 12 and the amount decrements by 10 satoshis at&lt;br/&gt;each hop, with a terminal CLTV of 12 and a terminal amount of 100. So A&lt;br/&gt;tells B &amp;#34;Here&amp;#39;s an HTLC for 120 satoshis, CLTV is in 36 blocks, and you&lt;br/&gt;will lose reputation at a rate of 120 satoshi-seconds per second of delay&amp;#34;.&lt;br/&gt;B calculates the maximum he could lose by forwarding to C as 120 * 36&lt;br/&gt;blocks * 10 min / block. Assuming C has a high enough reputation score, B&lt;br/&gt;will offer an HTLC of 110 satoshis, CLTV of 24 blocks, reputation rate of&lt;br/&gt;120 &#43; 110 = 230 satoshi-seconds per second. And finally C requires D to&lt;br/&gt;stake reputation at a rate of 230 &#43; 100 = 330 satoshi-seconds / second. The&lt;br/&gt;effect is that if any node withholds the preimage, they lose an amount of&lt;br/&gt;reputation equal to all of the reputation lost upstream combined, removing&lt;br/&gt;any attack leverage.&lt;br/&gt;&lt;br/&gt;This strategy has some downsides, namely in terms of centralization and&lt;br/&gt;privacy. Telling the downstream node the rate at which they must stake&lt;br/&gt;reputation may allow them to determine the number of upstream hops in the&lt;br/&gt;circuit. To obfuscate this, the sender may require an addition reputation&lt;br/&gt;stake, but takes a higher risk of the payment failing somewhere downstream.&lt;br/&gt;The more obvious issue is centralization -- if payments are getting&lt;br/&gt;throttled by reputation, there is even more of an incentive to route&lt;br/&gt;through a small number of channels and decrease the length of payment&lt;br/&gt;circuits. While this is a concern, the degree to while throttling happens&lt;br/&gt;in controlled by the R parameters (the ratio at which fees contribute to&lt;br/&gt;reputation). If R is high and reputation is abundant, then there will be&lt;br/&gt;little throttling. But if a node finds itself under attack, it can raise&lt;br/&gt;its R parameters and start throttling bad peers.&lt;br/&gt;&lt;br/&gt;In summary, I think a simple local reputation mechanism of this form could&lt;br/&gt;be implemented with only minor changes to the BOLT spec and could provide&lt;br/&gt;decent resistance against DOS/loop attacks. Sorry for the excessively long&lt;br/&gt;email.&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2015-August/&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2015-August/&lt;/a&gt;&lt;br/&gt;000135.html&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/20180501/35997f70/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180501/35997f70/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:50:23&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsp0h5jjj2dr85txx7vj240z39stewcfugtz5ca5vl5rm4jgjdqgsgzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz2mj7nm</id>
    
      <title type="html">📅 Original date posted:2018-02-08 📝 Original message: If ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsp0h5jjj2dr85txx7vj240z39stewcfugtz5ca5vl5rm4jgjdqgsgzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz2mj7nm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8ku9w5ld6e7l6rs0mmdz4jlmr53x74wyrz90qt6mqqq9xq52552c7hxk0t&#39;&gt;nevent1q…xk0t&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-08&lt;br/&gt;📝 Original message:&lt;br/&gt;If using two hashes to deliver the payment while still getting a proof, I&amp;#39;m&lt;br/&gt;not sure what that provides above just sending regular lightning payments&lt;br/&gt;over multiple routes with one hash. Firstly, if there is a second hash, it&lt;br/&gt;would presumably be the same for all routes, making them linkable again,&lt;br/&gt;which AMP tries to solve. And secondly, the receiver has no incentive to&lt;br/&gt;claim any of the HTLCs before all of them are locked in, because in that&lt;br/&gt;case they are releasing the transaction receipt before fully being paid.&lt;br/&gt;&lt;br/&gt;On Thu, Feb 8, 2018 at 8:41 AM, Johan Torås Halseth &amp;lt;johanth at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; An obvious way to make this compatible with proof-of-payment would be to&lt;br/&gt;&amp;gt; require two hashes to claim the HTLC: the presage from the invoice payment&lt;br/&gt;&amp;gt; hash (as today) &#43; the new hash introduced here. This would give the sender&lt;br/&gt;&amp;gt; a receipt after only one of the HTLCs was claimed. Would require changes to&lt;br/&gt;&amp;gt; the scripts of course.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With Schnorr/EC operations this could probably be made more elegant, as&lt;br/&gt;&amp;gt; mentioned.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Johan&lt;br/&gt;&amp;gt; On Wed, Feb 7, 2018 at 18:21, Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Olaoluwa Osuntokun &amp;lt;laolu32 at gmail.com&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; Hi Y&amp;#39;all,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A common question I&amp;#39;ve seen concerning Lightning is: &amp;#34;I have five $2&lt;br/&gt;&amp;gt; &amp;gt; channels, is it possible for me to *atomically* send $6 to fulfill a&lt;br/&gt;&amp;gt; &amp;gt; payment?&amp;#34;. The answer to this question is &amp;#34;yes&amp;#34;, provided that the&lt;br/&gt;&amp;gt; receiver&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is awesome! I&amp;#39;m kicking myself for not proposing it :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unfortunately, your proposal defines a way to make multipath donations,&lt;br/&gt;&amp;gt; not multipath payments :(&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In other words, you&amp;#39;ve lost proof of payment, which IMHO is critical.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Fortunately, this can be fairly trivially fixed when we go to scriptless&lt;br/&gt;&amp;gt; scripts or other equivalent decorrelation mechanism, when I think this&lt;br/&gt;&amp;gt; mechanism becomes extremely powerful.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - Potential fee savings for larger payments, contingent on there being a&lt;br/&gt;&amp;gt; &amp;gt; super-linear component to routed fees. It&amp;#39;s possible that with&lt;br/&gt;&amp;gt; &amp;gt; modifications to the fee schedule, it&amp;#39;s actually *cheaper* to send&lt;br/&gt;&amp;gt; &amp;gt; payments over multiple flows rather than one giant flow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is a stretch. I&amp;#39;d stick with the increased reliability/privacy&lt;br/&gt;&amp;gt; arguments which are overwhelmingly compelling IMHO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If I have any important feedback on deeper reading (and after a sccond&lt;br/&gt;&amp;gt; coffee), I&amp;#39;ll send a separate email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks!&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180208/31041639/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180208/31041639/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:49:00&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr7rnyng2h2ah223c72ps20cs0d5v5m95eyddryzlcsh0hvgjfpmszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzu94e8a</id>
    
      <title type="html">📅 Original date posted:2018-02-07 📝 Original message: This ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr7rnyng2h2ah223c72ps20cs0d5v5m95eyddryzlcsh0hvgjfpmszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzu94e8a" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrt38aws57jttgf563zh0lthppqdca3s3mc8k9uv4scf6cv5mnlzc7mx56u&#39;&gt;nevent1q…x56u&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-07&lt;br/&gt;📝 Original message:&lt;br/&gt;This is a really neat idea.&lt;br/&gt;&lt;br/&gt;This is a question about non-interactive payments in general, but is there&lt;br/&gt;any way to get a proof of payment? With regular invoices, knowledge of the&lt;br/&gt;preimage serves as cryptographic proof that the payment was delivered.&lt;br/&gt;&lt;br/&gt;On Feb 6, 2018 6:26 PM, &amp;#34;Conner Fromknecht&amp;#34; &amp;lt;conner at lightning.engineering&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi ZmnSCPxj and Laolu,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;  Indeed, the existence of per-hop fees (`fee_base_msat`) means,&lt;br/&gt;&amp;gt; splitting the&lt;br/&gt;&amp;gt; &amp;gt;  payment over multiple flows will be, very likely, more expensive,&lt;br/&gt;&amp;gt; compared to&lt;br/&gt;&amp;gt; &amp;gt;  using a single flow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As Laolu pointed out, we have yet to see how fees evolve on mainnet or&lt;br/&gt;&amp;gt; what will&lt;br/&gt;&amp;gt; emerge as a sane, default fee schedules. I agree that if the same&lt;br/&gt;&amp;gt; proportional&lt;br/&gt;&amp;gt; fee is used across all partial payments, then it could certainly be more&lt;br/&gt;&amp;gt; expensive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, it could also be the case that you were paying a needlessly high&lt;br/&gt;&amp;gt; proportional fee to begin with, because paths of sufficient capacity to the&lt;br/&gt;&amp;gt; destination were scarce. In an AMP world, there will be an abundance of&lt;br/&gt;&amp;gt; channels&lt;br/&gt;&amp;gt; that can route small, partial payments, which may itself drive down the&lt;br/&gt;&amp;gt; competitive fee rate for smaller payments. Just a hypothesis, we shall see&lt;br/&gt;&amp;gt; where&lt;br/&gt;&amp;gt; supply meets demand!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At the end of the day, the user can always fall back to regular payment if&lt;br/&gt;&amp;gt; they&lt;br/&gt;&amp;gt; expect to end up paying more fees using an AMP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; (If we want to support multiple routes converging to an intermediate&lt;br/&gt;&amp;gt; node,&lt;br/&gt;&amp;gt; &amp;gt; then continue routing to a different final node after routes have merged&lt;br/&gt;&amp;gt; (i.e.&lt;br/&gt;&amp;gt; &amp;gt; A-&amp;gt;B-&amp;gt;C-&amp;gt;D, and A-&amp;gt;E-&amp;gt;C-&amp;gt;D, with the payment being merged by C, who&lt;br/&gt;&amp;gt; forwards&lt;br/&gt;&amp;gt; &amp;gt; the combination to D), then we need to follow the current hop data&lt;br/&gt;&amp;gt; format, but&lt;br/&gt;&amp;gt; &amp;gt; I think supporting AMP at final payees is actually enough...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think this is an interesting idea, sounds maybe like a&lt;br/&gt;&amp;gt; recursive/hierarchical&lt;br/&gt;&amp;gt; AMP? The ability to merge the payments seems like it would result in a&lt;br/&gt;&amp;gt; decent privacy&lt;br/&gt;&amp;gt; leak, as I believe an intermediary would have enough evidence to prove&lt;br/&gt;&amp;gt; that two&lt;br/&gt;&amp;gt; payments were merged/correlated. Simple traffic analysis would also reveal&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; discrepancy in the number of incoming and outgoing packets, and possibly&lt;br/&gt;&amp;gt; other&lt;br/&gt;&amp;gt; observable differences in routing (some) AMPs vs regular payments.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FWIW the current proposal allows the paths of partial payments to overlap,&lt;br/&gt;&amp;gt; in such a scenario C would just forward the HTLCs independently. One could&lt;br/&gt;&amp;gt; send&lt;br/&gt;&amp;gt; them all along the same path if they desired! I&amp;#39;m assuming the intent here&lt;br/&gt;&amp;gt; is to&lt;br/&gt;&amp;gt; try and reduce total fees?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Minor correction^2:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This should actually be (H(s_0 || s_1 || ...), s_i).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This assumes the receiver knows the indexes of each share. Without this&lt;br/&gt;&amp;gt; knowledge they would have to brute force all orderings to check the&lt;br/&gt;&amp;gt; fingerprint.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To maintain order invariance on the receiving end, I would propose sending&lt;br/&gt;&amp;gt; (0, s_i) for the first n-1 partial payments, and then (n, s_i) on the&lt;br/&gt;&amp;gt; final one.&lt;br/&gt;&amp;gt; As in the description of the basic AMP scheme, the receiver maintains a&lt;br/&gt;&amp;gt; persistent count of how many partial payments have been received for ID.&lt;br/&gt;&amp;gt; If the&lt;br/&gt;&amp;gt; receiver does not get the last payment last, the receiver just waits until&lt;br/&gt;&amp;gt; all n&lt;br/&gt;&amp;gt; have been received before deciding that its reconstructed value is BP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The receiver can verify they&amp;#39;ve received the correct BP and n by&lt;br/&gt;&amp;gt; rederiving the&lt;br/&gt;&amp;gt; partial preimages r_i = H(BP || i) and checking that there are n&lt;br/&gt;&amp;gt; outstanding&lt;br/&gt;&amp;gt; payments, one for each h_i = H(r_i). This also saves the receiving node n&lt;br/&gt;&amp;gt; additional hash invocations.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Conner&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Feb 6, 2018 at 4:04 PM Olaoluwa Osuntokun &amp;lt;laolu32 at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; This is excellent work!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thanks!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I think, a `globalfeatures` odd bit could be used for this.  As it is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; end-ot-end, `localfeatures` is not appropriate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yep, it would need to be a global feature bit. In the case that we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt; sending to a destination which isn&amp;#39;t publicly advertised, then perhaps an&lt;br/&gt;&amp;gt;&amp;gt; extension to BOLT-11 could be made to signal receiver support.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I believe, currently, fees have not this super-linear component&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yep they don&amp;#39;t. Arguably, we should also have a component that scales&lt;br/&gt;&amp;gt;&amp;gt; according to the proposed CLTV value of the outgoing HTLC. At Scaling&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin Stanford, Aviv Zohar gave a talked titled &amp;#34;How to Charge&lt;br/&gt;&amp;gt;&amp;gt; Lightning&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; where the authors analyzed the possible evolution of fees on the network&lt;br/&gt;&amp;gt;&amp;gt; (and also suggested adding this super-linear component to extend the&lt;br/&gt;&amp;gt;&amp;gt; lifetime of channels).  However, the talk itself focused on a very simple&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;mega super duper hub&amp;#34; topology. Towards the end he alluded to a&lt;br/&gt;&amp;gt;&amp;gt; forthcoming&lt;br/&gt;&amp;gt;&amp;gt; paper that had more comprehensive analysis of more complex topologies. I&lt;br/&gt;&amp;gt;&amp;gt; look forward to the publication of their finalized work.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Indeed, the existence of per-hop fees (`fee_base_msat`) means, splitting&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the payment over multiple flows will be, very likely, more expensive,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; compared to using a single flow.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Well it&amp;#39;s still to be seen how the fee structure on mainnet emerges once&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; network is still fully bootstrapped. AFAIK, most running on mainnet atm&lt;br/&gt;&amp;gt;&amp;gt; are&lt;br/&gt;&amp;gt;&amp;gt; using the default fee schedules for their respective implementations. For&lt;br/&gt;&amp;gt;&amp;gt; example, the default fee_base_msat for lnd is 1000 msat (1 satoshi).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I believe the `realm` byte is intended for this.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The realm byte is meant to signal &amp;#34;forward this to the dogecoin channel&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt; ATM, we just default to 0 as &amp;#34;Bitcoin&amp;#34;. However, the byte itself only&lt;br/&gt;&amp;gt;&amp;gt; really&lt;br/&gt;&amp;gt;&amp;gt; need significance between the sender and the intermediate node. So there&lt;br/&gt;&amp;gt;&amp;gt; isn&amp;#39;t necessarily pressure to have a globally synchronized set of realm&lt;br/&gt;&amp;gt;&amp;gt; bytes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Thus, you can route over nodes that are unaware of AMP, and only provide&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; an AMP realm byte to the destination node, who, is able to reconstruct&lt;br/&gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; your AMP data as per your algorithm.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes, the intermediate nodes don&amp;#39;t need to be aware of the end-to-end&lt;br/&gt;&amp;gt;&amp;gt; protocol. For the final hop, there are actually 53 free bytes (before one&lt;br/&gt;&amp;gt;&amp;gt; needs to signal the existence of EOBs):&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   * 1 byte realm&lt;br/&gt;&amp;gt;&amp;gt;   * 8 bytes next addr (all zeroes to signal final dest)&lt;br/&gt;&amp;gt;&amp;gt;   * 32 bytes hmac (also all zeroes for the final dest)&lt;br/&gt;&amp;gt;&amp;gt;   * 12 bytes padding&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; So any combo of these bytes can be used to signal more advanced protocols&lt;br/&gt;&amp;gt;&amp;gt; to&lt;br/&gt;&amp;gt;&amp;gt; the final destination.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A correction from the prior email description:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; We can further modify our usage of the per-hop payloads to send&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; (H(BP), s_i) to consume most of the EOB sent from sender to receiver.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This should actually be (H(s_0 || s_1 || ...), s_i). So we still allow&lt;br/&gt;&amp;gt;&amp;gt; them&lt;br/&gt;&amp;gt;&amp;gt; to check this finger print to see if they have all the final shares, but&lt;br/&gt;&amp;gt;&amp;gt; don&amp;#39;t allow them to preemptively pull all the payments.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; -- Laolu&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Mon, Feb 5, 2018 at 11:12 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 Laolu,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This is excellent work!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Some minor comments...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (Atomic Multi-path Payments). It can be experimented with on Lightning&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; *today* with the addition of a new feature bit to gate this new&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; feature. The beauty of the scheme is that it requires no fundamental&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; changes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to the protocol as is now, as the negotiation is strictly *end-to-end*&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; between sender and receiver.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I think, a `globalfeatures` odd bit could be used for this.  As it is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; end-ot-end, `localfeatures` is not appropriate.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   - Potential fee savings for larger payments, contingent on there being&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     super-linear component to routed fees. It&amp;#39;s possible that with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     modifications to the fee schedule, it&amp;#39;s actually *cheaper* to send&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     payments over multiple flows rather than one giant flow.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I believe, currently, fees have not this super-linear component.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Indeed, the existence of per-hop fees (`fee_base_msat`) means, splitting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the payment over multiple flows will be, very likely, more expensive,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; compared to using a single flow.  Tiny roundoffs in computing the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; proportional fees (`fee_proportional_millionths`) may make smaller&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; flows give a slight fee advantage, but I think the multiplication of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; per-hop fees will dominate.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   - Using smaller payments increases the set of possible paths a partial&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     payment could have taken, which reduces the effectiveness of static&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     analysis techniques involving channel capacities and the plaintext&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;     values being forwarded.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Strongly agree!&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In order to include the three tuple within the per-hop payload for the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; final&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; destination, we repurpose the _first_ byte of the un-used padding bytes&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the payload to signal version 0x01 of the AMP protocol (note this is a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; PoC&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; outline, we would need to standardize signalling of these 12 bytes to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; support other protocols).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I believe the `realm` byte is intended for this.  Intermediate nodes do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; not need to understand realm bytes that are understood by other nodes in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the route, including the realm bytes understood by the final destination,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; as intermediate nodes cannot, indeed, read the hop data of other nodes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thus, you can route over nodes that are unaware of AMP, and only provide an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; AMP realm byte to the destination node, who, is able to reconstruct this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; your AMP data as per your algorithm.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Indeed, the `realm` byte controls the interpretation of the rest of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 65-byte packet.  If you define, instead, a separate `realm` that is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; understood by the destination node, you can redefine the entire 64 bytes of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the final hop data as you wish.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If we support AMP only at final payees, we can completely redefine the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 64 bytes in the final hop data for the new AMP `realm`, and not consume the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; next hop (which would reduce route length by 1).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (If we want to support multiple routes converging to an intermediate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; node, then continue routing to a different final node after routes have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; merged (i.e. A-&amp;gt;B-&amp;gt;C-&amp;gt;D, and A-&amp;gt;E-&amp;gt;C-&amp;gt;D, with the payment being merged by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; C, who forwards the combination to D), then we need to follow the current&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; hop data format, but I think supporting AMP at final payees is actually&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; enough... AMP at intermediate nodes might not be used often enough by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; senders for it to matter, as taking advantage of that seems more complex&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; than just asking your routing algo to provide you multiple routes to a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; destination, which you are probably already doing)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ----&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Overall, good work I think.&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;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180207/48a507f8/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180207/48a507f8/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:48:59&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd3v660jfytnd9rz34v4f7djqzpsgwlxps9zzx6ls3h9nwfyc8v6szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzm9p2ay</id>
    
      <title type="html">📅 Original date posted:2018-02-07 📝 Original message: I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd3v660jfytnd9rz34v4f7djqzpsgwlxps9zzx6ls3h9nwfyc8v6szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzm9p2ay" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg36grsfknfuxfpq6m759u9kpedee7l6ndy5nd65ewhnm634j3j3c3v25jv&#39;&gt;nevent1q…25jv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-02-07&lt;br/&gt;📝 Original message:&lt;br/&gt;I like Christian&amp;#39;s proposal of adding a simple announcement cutoff&lt;br/&gt;timestamp with the intention of designing something more sophisticated&lt;br/&gt;given more time.&lt;br/&gt;&lt;br/&gt;I prefer the approach of having an optional feature bit signalling that a&lt;br/&gt;`set_gossip_timestamp` message must be sent immediately after `init`, as&lt;br/&gt;Laolu suggested. This way it doesn&amp;#39;t conflict with and other possible&lt;br/&gt;handshake extensions.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Feb 7, 2018 9:50 AM, &amp;#34;Fabrice Drouin&amp;#34; &amp;lt;fabrice.drouin at acinq.fr&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;Hi,&lt;br/&gt;&lt;br/&gt;Suppose you partition nodes into 3 generic roles:&lt;br/&gt;- payers: they mostly send payments, are typically small and operated&lt;br/&gt;by end users, and are offline quite a lot&lt;br/&gt;- relayers: they mostly relay payments, and would be online most of&lt;br/&gt;the time (if they&amp;#39;re too unreliable other nodes will eventually close&lt;br/&gt;their channels with them)&lt;br/&gt;- payees: they mostly receive payments, how often they can be online&lt;br/&gt;is directly link to their particular mode of operations (since you&lt;br/&gt;need to be online to receive payments)&lt;br/&gt;&lt;br/&gt;Of course most nodes would play more or less all roles. However,&lt;br/&gt;mobile nodes would probably be mostly &amp;#34;payers&amp;#34;, and they have specific&lt;br/&gt;properties:&lt;br/&gt;- if they don&amp;#39;t relay payments they don&amp;#39;t have to be announced. There&lt;br/&gt;could be millions of mobile nodes that would have no impact on the&lt;br/&gt;size of the routing table&lt;br/&gt;- it does not impact the network when they&amp;#39;re offline&lt;br/&gt;- but they need an accurate routing table. This is very different from&lt;br/&gt;nodes who mostly relay or accept payements&lt;br/&gt;- they would be connected to a very small number of nodes&lt;br/&gt;- they would typically be online for just  a few hours every day, but&lt;br/&gt;could be stopped/paused/restarted many times a day&lt;br/&gt;&lt;br/&gt;Laolu wrote:&lt;br/&gt;&amp;gt; So I think the primary distinction between y&amp;#39;alls proposals is that&lt;br/&gt;&amp;gt; cdecker&amp;#39;s proposal focuses on eventually synchronizing all the set of&lt;br/&gt;&amp;gt; _updates_, while Fabrice&amp;#39;s proposal cares *only* about the newly created&lt;br/&gt;&amp;gt; channels. It only cares about new channels as the rationale is that if&lt;br/&gt;once&lt;br/&gt;&amp;gt; tries to route over a channel with a state channel update for it, then&lt;br/&gt;&amp;gt; you&amp;#39;ll get an error with the latest update encapsulated.&lt;br/&gt;&lt;br/&gt;If you have one filter per day and they don&amp;#39;t match (because your peer&lt;br/&gt;has channels that you missed, or&lt;br/&gt; have been closed and you were not aware of it) then you will receive&lt;br/&gt;all channel announcements for&lt;br/&gt;this particular day, and the associated updates&lt;br/&gt;&lt;br/&gt;Laolu wrote:&lt;br/&gt;&amp;gt; I think he&amp;#39;s actually proposing just a general update horizon in which&lt;br/&gt;&amp;gt; vertexes&#43;edges with a lower time stamp just shouldn&amp;#39;t be set at all. In&lt;br/&gt;the&lt;br/&gt;&amp;gt; case of an old zombie channel which was resurrected, it would eventually&lt;br/&gt;be&lt;br/&gt;&amp;gt; re-propagated as the node on either end of the channel should broadcast a&lt;br/&gt;&amp;gt; fresh update along with the original chan ann.&lt;br/&gt;&lt;br/&gt;Yes but it could take a long time. It may be worse on testnet since it&lt;br/&gt;seems that nodes&lt;br/&gt;don&amp;#39;t change their fees very often. &amp;#34;Payer nodes&amp;#34; need a good routing&lt;br/&gt;table (as opposed&lt;br/&gt;to &amp;#34;relayers&amp;#34; which could work without one if they never initiate payments)&lt;br/&gt;&lt;br/&gt;Laolu wrote:&lt;br/&gt;&amp;gt; This seems to assume that both nodes have a strongly synchronized view of&lt;br/&gt;&amp;gt; the network. Otherwise, they&amp;#39;ll fall back to sending everything that went&lt;br/&gt;on&lt;br/&gt;&amp;gt; during the entire epoch regularly. It also doesn&amp;#39;t address the zombie&lt;br/&gt;churn&lt;br/&gt;&amp;gt; issue as they may eventually send you very old channels you&amp;#39;ll have to&lt;br/&gt;deal&lt;br/&gt;&amp;gt; with (or discard).&lt;br/&gt;&lt;br/&gt;Yes I agree that for nodes which have connections to a lot of peers,&lt;br/&gt;strongly synchronized routing tables is&lt;br/&gt;harder to achieve since a small change may invalidate an entire&lt;br/&gt;bucket. Real queryable filters would be much&lt;br/&gt;better, but worst case scenario is we&amp;#39;ve sent an additionnal 30 Kb or&lt;br/&gt;o of sync messages.&lt;br/&gt;(A very naive filter would be sort &#43; pack all short ids for example)&lt;br/&gt;&lt;br/&gt;But we focus on nodes which are connected to a very small number of&lt;br/&gt;peers, and in this particular&lt;br/&gt;case it is not an unrealistic expectation.&lt;br/&gt;We have built a prototype and on testnet it works fairly well. I also&lt;br/&gt;found nodes which have no direct&lt;br/&gt;channel betweem them but produce the same filters for 75% of the&lt;br/&gt;buckets (&amp;#34;produce&amp;#34; here means&lt;br/&gt;that I opened a simple gossip connection to them, got their routing&lt;br/&gt;table and used it to generate filters).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Laolu wrote:&lt;br/&gt;&amp;gt; How far back would this go? Weeks, months, years?&lt;br/&gt;Since forever :)&lt;br/&gt;One filter per day for all annoucements that are older than now - 1&lt;br/&gt;week (modulo 144)&lt;br/&gt;One filter per block for recent announcements&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FWIW this approach optimizes for just learning of new channels instead of&lt;br/&gt;&amp;gt; learning of the freshest state you haven&amp;#39;t yet seen.&lt;br/&gt;&lt;br/&gt;I&amp;#39;d say it optimizes the case where you are connected to very few&lt;br/&gt;peers, and are online a few times every day (?)&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -- Laolu&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Feb 5, 2018 at 7:08 AM Fabrice Drouin &amp;lt;fabrice.drouin at acinq.fr&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On 5 February 2018 at 14:02, Christian Decker&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;decker.christian at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Hi everyone&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; The feature bit is even, meaning that it is required from the peer,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; since we extend the `init` message itself, and a peer that does not&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; support this feature would be unable to parse any future extensions to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the `init` message. Alternatively we could create a new&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; `set_gossip_timestamp` message that is only sent if both endpoints&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; support this proposal, but that could result in duplicate messages&lt;br/&gt;being&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; delivered between the `init` and the `set_gossip_timestamp` message and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; it&amp;#39;d require additional messages.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We chose the other aproach and propose to use an optional feature&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; The reason I&amp;#39;m using timestamp and not the blockheight in the short&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; channel ID is that we already use the timestamp for pruning. In the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; blockheight based timestamp we might ignore channels that were created,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; then not announced or forgotten, and then later came back and are now&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; stable.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Just to be clear, you propose to use the timestamp of the most recent&lt;br/&gt;&amp;gt;&amp;gt; channel updates to filter&lt;br/&gt;&amp;gt;&amp;gt; the associated channel announcements ?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I hope this rather simple proposal is sufficient to fix the short-term&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; issues we are facing with the initial sync, while we wait for a real&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; sync protocol. It is definitely not meant to allow perfect&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; synchronization of the topology between peers, but then again I don&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; believe that is strictly necessary to make the routing successful.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Please let me know what you think, and I&amp;#39;d love to discuss Pierre&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; proposal as well.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Christian&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Our idea is to group channel announcements by &amp;#34;buckets&amp;#34;, create a&lt;br/&gt;&amp;gt;&amp;gt; filter for each bucket, exchange and use them to filter out channel&lt;br/&gt;&amp;gt;&amp;gt; announcements.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We would add a new `use_channel_announcement_filters` optional feature&lt;br/&gt;&amp;gt;&amp;gt; bit (7 for example), and a new `channel_announcement_filters` message.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; When a node that supports channel announcement filters receives an&lt;br/&gt;&amp;gt;&amp;gt; `init` message with the `use_channel_announcement_filters` bit set, it&lt;br/&gt;&amp;gt;&amp;gt; sends back its channel filters.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; When a node that supports channel announcement filters receives&lt;br/&gt;&amp;gt;&amp;gt; a`channel_announcement_filters` message, it uses it to filter channel&lt;br/&gt;&amp;gt;&amp;gt; announcements (and, implicitly ,channel updates) before sending them.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The filters we have in mind are simple:&lt;br/&gt;&amp;gt;&amp;gt; - Sort announcements by short channel id&lt;br/&gt;&amp;gt;&amp;gt; - Compute a marker height, which is `144 * ((now - 7 * 144) / 144)`&lt;br/&gt;&amp;gt;&amp;gt; (we round to multiples of 144 to make sync easier)&lt;br/&gt;&amp;gt;&amp;gt; - Group channel announcements that were created before this marker by&lt;br/&gt;&amp;gt;&amp;gt; groups of 144 blocks&lt;br/&gt;&amp;gt;&amp;gt; - Group channel announcements that were created after this marker by&lt;br/&gt;&amp;gt;&amp;gt; groups of 1 block&lt;br/&gt;&amp;gt;&amp;gt; - For each group, sort and concatenate all channel announcements short&lt;br/&gt;&amp;gt;&amp;gt; channel ids and hash the result (we could use sha256, or the first 16&lt;br/&gt;&amp;gt;&amp;gt; bytes of the sha256 hash)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The new `channel_announcement_filters` would then be a list of&lt;br/&gt;&amp;gt;&amp;gt; (height, hash) pairs ordered by increasing heights.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This implies that implementation can easily sort announcements by&lt;br/&gt;&amp;gt;&amp;gt; short channel id, which should not be very difficult.&lt;br/&gt;&amp;gt;&amp;gt; An additional step could be to send all short channel ids for all&lt;br/&gt;&amp;gt;&amp;gt; groups for which the group hash did not match. Alternatively we could&lt;br/&gt;&amp;gt;&amp;gt; use smarter filters&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The use case we have in mind is mobile nodes, or more generally nodes&lt;br/&gt;&amp;gt;&amp;gt; which are often offline and need to resync very often.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&amp;gt; Fabrice&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;_______________________________________________&lt;br/&gt;Lightning-dev mailing list&lt;br/&gt;Lightning-dev at lists.linuxfoundation.org&lt;br/&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;-------------- 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/20180207/cb4ed693/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20180207/cb4ed693/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T14:48:51&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsd49etz0zqzmjmdzkp9eu95m9reru58qp55ry6tp9snp8e5yld28szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz8wp72p</id>
    
      <title type="html">📅 Original date posted:2019-04-04 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsd49etz0zqzmjmdzkp9eu95m9reru58qp55ry6tp9snp8e5yld28szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz8wp72p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9ry2llspenpgnmyc6ezuhmrerlqquea3q6ek9mck9m7rveq3uw3q3sewv0&#39;&gt;nevent1q…ewv0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-04-04&lt;br/&gt;📝 Original message:&amp;gt;&lt;br/&gt;&amp;gt; Learning C&#43;&#43; is something within everyone&amp;#39;s capability. Even people who do&lt;br/&gt;&amp;gt; not&lt;br/&gt;&amp;gt; wish to learn it can hire someone to perform review for them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Anyone with enough knowledge of C&#43;&#43; to audit the entire the Bitcoin Core&lt;br/&gt;codebase is more than capable of running it with assumeutxo disabled and&lt;br/&gt;checking the hard-coded vale themself.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190403/fa2a9a58/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190403/fa2a9a58/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:17:24&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs06rndqtkvnwm2sr6he4pdemk4xk7fqj5fnqp5s2v96fr7gkn5xhgzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzn0v7e2</id>
    
      <title type="html">📅 Original date posted:2018-06-10 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs06rndqtkvnwm2sr6he4pdemk4xk7fqj5fnqp5s2v96fr7gkn5xhgzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzn0v7e2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgr2tzujg20ndnrfecjdu39azearhdv0sfu4rdmwmerrq72syxu6grzd9zp&#39;&gt;nevent1q…d9zp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-10&lt;br/&gt;📝 Original message:I generally like the direction of this proposal in terms of allowing full&lt;br/&gt;nodes to run with a different storage/bandwidth tradeoff. Cory, were this&lt;br/&gt;implemented, would you expect Core to support both operating modes (full&lt;br/&gt;UTXO set and UHS) depending on user configuration, or would UHS be&lt;br/&gt;mandatory?&lt;br/&gt;&lt;br/&gt;Also, given that Bram Cohen&amp;#39;s TXO bitfield proposal was an inspiration for&lt;br/&gt;this, could you comment on why the UHS is preferable to that approach? An&lt;br/&gt;alternative that goes even further in the direction of more bandwidth, less&lt;br/&gt;storage, would be for nodes to simply maintain a Merkle Mountain Range over&lt;br/&gt;all TXOs in order of creation and a spentness bitfield. Blocks could be&lt;br/&gt;requested with the prev outputs and a Merkle proof linking them into the&lt;br/&gt;MMR root. Since the Merkle proof is deterministic, it could be computed by&lt;br/&gt;archive nodes and miners and saved alongside the block data for relay.&lt;br/&gt;Another benefit of this is the TXO MMR root may be independently useful if&lt;br/&gt;committed into the coinbase transaction.&lt;br/&gt;&lt;br/&gt;On Thu, Jun 7, 2018 at 7:02 AM Sjors Provoost via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; eMMC storage, which low end devices often use, come in 2x increments.&lt;br/&gt;&amp;gt; Running a pruned full node on 8 GB is difficult if not impossible (the UTXO&lt;br/&gt;&amp;gt; set peaked at 3.5 GB in January, but a full node stores additional stuff).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, 16 GB is only €10 more expensive and presumably standard by the&lt;br/&gt;&amp;gt; time this would be rolled out.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On AWS every GB of SSD storage avoided saves $1 per year, not end of the&lt;br/&gt;&amp;gt; world stuff, but not negligible either. Outbound traffic costs $0.10 / GB&lt;br/&gt;&amp;gt; (ignoring free allowance), so when uploading 200 GB per year, the 5% would&lt;br/&gt;&amp;gt; offset $1 of storage cost savings.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The above seems marginal, probably not worth it unless there’s really no&lt;br/&gt;&amp;gt; downside.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What I find attractive about this proposal is the ability to squeeze more&lt;br/&gt;&amp;gt; out of limited RAM (typically only 1 or 2 GB on these low end devices). I’d&lt;br/&gt;&amp;gt; have to test Cory’s branch to see if that actually matters in practice.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It’s also useful to distinguish benefits during initial sync from ongoing&lt;br/&gt;&amp;gt; operation. The former I’ve almost given up on for  low end devices (can&lt;br/&gt;&amp;gt; take weeks), in favor of doing it on a faster computer and copying the&lt;br/&gt;&amp;gt; result. The latter needs far less RAM, so perhaps this proposal doesn’t&lt;br/&gt;&amp;gt; help much there, but that would be useful to measure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Did you try the recent SHA256 optimizations on your branch?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sjors&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Op 17 mei 2018, om 18:56 heeft Gregory Maxwell via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; het volgende geschreven:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Wed, May 16, 2018 at 4:36 PM, Cory Fields via bitcoin-dev&lt;br/&gt;&amp;gt; &amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Tl;dr: Rather than storing all unspent outputs, store their hashes.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; My initial thoughts are it&amp;#39;s not _completely_ obvious to me that a 5%&lt;br/&gt;&amp;gt; &amp;gt; ongoing bandwidth increase is actually a win to get something like a&lt;br/&gt;&amp;gt; &amp;gt; 40% reduction in the size of a pruned node (and less than a 1%&lt;br/&gt;&amp;gt; &amp;gt; reduction in an archive node) primarily because I&amp;#39;ve not seen size of&lt;br/&gt;&amp;gt; &amp;gt; a pruned node cited as a usage limiting factor basically anywhere. I&lt;br/&gt;&amp;gt; &amp;gt; would assume it is a win but wouldn&amp;#39;t be shocked to see a careful&lt;br/&gt;&amp;gt; &amp;gt; analysis that concluded it wasn&amp;#39;t.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; But perhaps more interestingly, I think the overhead is not really 5%,&lt;br/&gt;&amp;gt; &amp;gt; but it&amp;#39;s 5% measured in the context of the phenomenally inefficient tx&lt;br/&gt;&amp;gt; &amp;gt; mechanisms ( &lt;a href=&#34;https://bitcointalk.org/index.php?topic=1377345.0&#34;&gt;https://bitcointalk.org/index.php?topic=1377345.0&lt;/a&gt; ).&lt;br/&gt;&amp;gt; &amp;gt; Napkin math on the size of a txn alone tells me it&amp;#39;s more like a 25%&lt;br/&gt;&amp;gt; &amp;gt; increase if you just consider size of tx vs size of&lt;br/&gt;&amp;gt; &amp;gt; tx&#43;scriptpubkeys,amounts.  If I&amp;#39;m not missing something there, I think&lt;br/&gt;&amp;gt; &amp;gt; that would get in into a very clear not-win range.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On the positive side is that it doesn&amp;#39;t change the blockchain&lt;br/&gt;&amp;gt; &amp;gt; datastructure, so it&amp;#39;s something implementations could do without&lt;br/&gt;&amp;gt; &amp;gt; marrying the network to it forever.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180610/609b21d1/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180610/609b21d1/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:55&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyhyl8g0xcdrepg7mc3edyklh9tpqlffy5zvs662278jzspfq28rczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzjd63jk</id>
    
      <title type="html">📅 Original date posted:2018-06-04 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyhyl8g0xcdrepg7mc3edyklh9tpqlffy5zvs662278jzspfq28rczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzjd63jk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxpmmus8hx94mk4afvgnfnsq8tprzelmuhwclzk43yjwqzvaxm66suad7vw&#39;&gt;nevent1q…d7vw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-04&lt;br/&gt;📝 Original message:&amp;gt;&lt;br/&gt;&amp;gt; I was wondering why this multi-layer multi-block filter proposal isn&amp;#39;t&lt;br/&gt;&amp;gt; getting any comment,&lt;br/&gt;&amp;gt; is it because not asking all filters is leaking information?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It&amp;#39;s an interesting idea, but it adds more complexity to the client and&lt;br/&gt;could be added later on if clients adopt BIP 157 and complain about&lt;br/&gt;bandwidth. It also derives all bandwidth gains from address reuse. So I&amp;#39;m&lt;br/&gt;hesitant to make the complexity tradeoff for bandwidth savings due to a&lt;br/&gt;behavior that is actively discouraged.&lt;br/&gt;&lt;br/&gt;On another note, I&amp;#39;ve been thinking that block TXO commitments could&lt;br/&gt;resolve the issue we are facing now with deciding between the prev script&lt;br/&gt;approach and outpoint. The whole argument for outpoints is that there are&lt;br/&gt;compact-ish (&amp;lt;1 MiB) proofs of filter validity, which is not currently&lt;br/&gt;possible if the filters included prev output data. Such proofs would be&lt;br/&gt;feasible if blocks headers (well, actually coinbase txs) had a commitment&lt;br/&gt;to the Merkle root of all newly created outputs in the block.&lt;br/&gt;&lt;br/&gt;This idea has been tossed around before in the context of fraud proofs and&lt;br/&gt;TXO bitfields, and seems to unlock a whole bunch of other P2P commitments.&lt;br/&gt;For example, if we wanted to do P2P commitments (BIP 157-style) to the&lt;br/&gt;distribution of tx fees in a block, one could use block TXO commitments to&lt;br/&gt;prove correctness of fees for non-segwit txs. It also enables block&lt;br/&gt;validity proofs (assuming parent blocks are valid), which are not as&lt;br/&gt;powerful as invalidity/fraud proofs, but interesting nonetheless.&lt;br/&gt;&lt;br/&gt;This would require a new getdata type BLOCK_WITH_PREVOUTS or something. I&lt;br/&gt;assume for most coinbase-tx-committed proposals, we&amp;#39;ll also need a new&lt;br/&gt;getcoinbases/coinbases that requests the coinbase tx and Merkle branch for&lt;br/&gt;a range of headers as well. But with these additions, we could start&lt;br/&gt;serving more block-derived data to light clients under the BIP 157&lt;br/&gt;at-least-one-honest-peer assumption.&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/20180604/ec43b862/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180604/ec43b862/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:44&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf6gfhqcdfltf3u68qela73kmx0q2qqpu25wf7a4z8ngxvdpwdw9czyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzxsvxl7</id>
    
      <title type="html">📅 Original date posted:2018-06-01 📝 Original message:To ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf6gfhqcdfltf3u68qela73kmx0q2qqpu25wf7a4z8ngxvdpwdw9czyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzxsvxl7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8gc5q88cdmxtkrlp69p52p7vadude86jhmhwqtgha24wmfg9j86gue4t68&#39;&gt;nevent1q…4t68&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-01&lt;br/&gt;📝 Original message:To address the at-least-one-honest peer security assumption for light&lt;br/&gt;clients, I think this is a rather good security model for light clients.&lt;br/&gt;First it significantly reduces the chances that an attacker can eclipse a&lt;br/&gt;client just by chance, and clients can implement measures like ensuring&lt;br/&gt;connectivity to peers from different subnets. But even if, as you suggest,&lt;br/&gt;a network attacker controls the target&amp;#39;s local network, peers still can&lt;br/&gt;have good security guarantees by requiring authenticated connections to&lt;br/&gt;semi-trusted peers. A client can select a set of N servers that it believes&lt;br/&gt;will not collude to attack it, and only sync filters if connected to a&lt;br/&gt;threshold of them. So even if the network is malicious, the attacker cannot&lt;br/&gt;forge the authenticated responses. The level of trust in these designated&lt;br/&gt;parties again is quite low because only one has to be honest. This would&lt;br/&gt;require something like BIP 150.&lt;br/&gt;&lt;br/&gt;Even if clients are uncomfortable with whitelisting required peers, it&lt;br/&gt;could have a policy of requiring a certain number of connections to peers&lt;br/&gt;that have honestly served it filters in the past. This is sort of like&lt;br/&gt;trust-on-first-use. This type of scheme, however, would require nodes to&lt;br/&gt;advertise a pubkey per address, which BIP 150/151 does not support at&lt;br/&gt;present.&lt;br/&gt;&lt;br/&gt;All in all, I think this is an acceptable security model for light clients.&lt;br/&gt;Without the ability to verify filter validity, a client would have to stop&lt;br/&gt;syncing altogether in the presence of just one malicious peer, which is&lt;br/&gt;unacceptable.&lt;br/&gt;&lt;br/&gt;The other concern you raise, Greg, is using a filter for P2P communications&lt;br/&gt;that we expect may be replaced in the future. You also raise the point that&lt;br/&gt;full node wallets can use the smaller filters for rescans because the&lt;br/&gt;filter validity is not in question. I&amp;#39;d perfectly fine with the idea of&lt;br/&gt;defining two filter types in the BIP, one that is output script &#43; outpoint&lt;br/&gt;and the other output script &#43; prev script. But I imagine some people would&lt;br/&gt;object to the idea of full nodes storing two different filters that overlap&lt;br/&gt;in contents. If we had to pick just one though, I&amp;#39;m strongly in support of&lt;br/&gt;output script &#43; outpoint so that BIP 157 can be deployed ASAP without a&lt;br/&gt;consensus change. It&amp;#39;s entirely possible we will learn even more about&lt;br/&gt;optimal filter design through deployment and adoption.&lt;br/&gt;&lt;br/&gt;On Fri, Jun 1, 2018 at 5:22 PM Gregory Maxwell &amp;lt;greg at xiph.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Sat, Jun 2, 2018 at 12:01 AM, Olaoluwa Osuntokun &amp;lt;laolu32 at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; A typical network attacker (e.g.  someone on your lan or wifi segmet, or&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; someone who has compromised or operates an upstream router) can be all&lt;br/&gt;&amp;gt; of&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; your peers.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is true, but it cannot make us accept any invalid filters unless the&lt;br/&gt;&amp;gt; &amp;gt; attacker is also creating invalid blocks w/ valid PoW.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I wish that were the true, but absent commitments that wouldn&amp;#39;t be the&lt;br/&gt;&amp;gt; case unless you were always downloading all the blocks-- since you&lt;br/&gt;&amp;gt; wouldn&amp;#39;t have any sign that there was something wrong with the&lt;br/&gt;&amp;gt; filter-- and downloading all the blocks would moot using the filters&lt;br/&gt;&amp;gt; in the first place. :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Or have I misunderstood you massively here?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For segwit originally I had proposed adding additional commitments&lt;br/&gt;&amp;gt; that would make it possible to efficiently prove invalidity of a&lt;br/&gt;&amp;gt; block; but that got stripped because many people were of the view that&lt;br/&gt;&amp;gt; the &amp;#34;assume you have at least one honest peer who saw that block and&lt;br/&gt;&amp;gt; rejected it to tell you that the block was invalid&amp;#34; security&lt;br/&gt;&amp;gt; assumption was of dubious value. Maybe it&amp;#39;s more justifiable to make&lt;br/&gt;&amp;gt; use of a dubious assumption for a P2P feature than for a consensus&lt;br/&gt;&amp;gt; feature?  Perhaps,  I&amp;#39;d rather have both filter types from day one so&lt;br/&gt;&amp;gt; that things not implementing the comparison techniques don&amp;#39;t get the&lt;br/&gt;&amp;gt; efficiency loss or the extra work to change filter types for a&lt;br/&gt;&amp;gt; consensus one.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [I think now that we&amp;#39;re much closer to a design that would be worth&lt;br/&gt;&amp;gt; making a consensus committed version of than we were a few months ago&lt;br/&gt;&amp;gt; now, since we are effectively already on a second generation of the&lt;br/&gt;&amp;gt; design with the various improvements lately]&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180601/b99c927d/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180601/b99c927d/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:38&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9gum6azlkddvdjq44hpj8atejt6gh6qt7n9wdhn4nkkxkye25kyczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzuj0k5x</id>
    
      <title type="html">📅 Original date posted:2018-05-23 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9gum6azlkddvdjq44hpj8atejt6gh6qt7n9wdhn4nkkxkye25kyczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzuj0k5x" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswzqmgrdh45n3ngt4wncs6jr4svjmxllca52tqgqsu4ujl02ypqfceqpw22&#39;&gt;nevent1q…pw22&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-23&lt;br/&gt;📝 Original message:I decided to look into the metrics around compression ratios of TXO&lt;br/&gt;bitfields, as proposed by Bram Cohen [1]. I&amp;#39;m specifically interested in&lt;br/&gt;the feasibility of committing to them with block headers. In combination&lt;br/&gt;with block commitments to TXOs themselves, this would enable UTXO&lt;br/&gt;inclusion/exclusion proofs for light clients.&lt;br/&gt;&lt;br/&gt;First, looking just at proofs of inclusion in the UTXO set, each block&lt;br/&gt;needs what Bram calls a &amp;#34;proof of position.&amp;#34; Concretely, one such&lt;br/&gt;construction is a Merkle root over all of the block&amp;#39;s newly created coins,&lt;br/&gt;including their output data (scriptPubKey &#43; amount), the outpoint (txid &#43;&lt;br/&gt;index), and an absolute index of the output in the entire blockchain. A&lt;br/&gt;Merkle branch in this tree constitutes a proof of position. Alternatively,&lt;br/&gt;the &amp;#34;position&amp;#34;, rather than being an absolute index in the chain, could be&lt;br/&gt;a block hash plus an output index within the block.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s say we use the absolute index in the chain as position. A TXO&lt;br/&gt;spentness bitfield can be constructed for the entire chain, which is added&lt;br/&gt;to when new coins are created and modified when they are spent. In order to&lt;br/&gt;compactly prove spentness in this bitfield to a client, one could chunk up&lt;br/&gt;the bitfield and construct a Merkle Mountain Range [2] over the chunks.&lt;br/&gt;Instead of building an MMR over outputs themselves, as proposed by Peter&lt;br/&gt;Todd [3], an MMR constructed over bitfield chunks grows far slower, by a&lt;br/&gt;large constant factor. Slower growth means faster updates.&lt;br/&gt;&lt;br/&gt;So there&amp;#39;s the question of how much these bitfields can be compressed. We&lt;br/&gt;expect some decent level because patterns of spending coins are very&lt;br/&gt;non-random.&lt;br/&gt;&lt;br/&gt;The top graph in the attached figure shows the compression ratios possible&lt;br/&gt;on a TXO bitfield split into 4 KiB chunks, using gzip (level=9) and lz4.&lt;br/&gt;Data was collected at block height 523,303. You can see that the&lt;br/&gt;compression ratio is much lower for older chunks and is worse for more&lt;br/&gt;recent blocks. Over the entire history, gzip achieves 34.4%, lz4 54.8%, and&lt;br/&gt;bz2 37.6%. I&amp;#39;m kind of surprised that the ratios are not lower with&lt;br/&gt;off-the-shelf algorithms. And that gzip performs better than bz2 (it seems&lt;br/&gt;to be a factor of the chunk size?).&lt;br/&gt;&lt;br/&gt;Alternatively, we can look at bitfields stored separately by block, which&lt;br/&gt;is more compatible with constructions where an output&amp;#39;s position is its&lt;br/&gt;block hash plus relative index. The per-block bitfield sizes are shown in&lt;br/&gt;the bottom graph. The compression ratios overall are 50% for gzip, 70% for&lt;br/&gt;lz4, and 61.5% for bz2.&lt;br/&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-March/013928.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-March/013928.html&lt;/a&gt;&lt;br/&gt;[2]&lt;br/&gt;&lt;a href=&#34;https://github.com/opentimestamps/opentimestamps-server/blob/master/doc/merkle-mountain-range.md&#34;&gt;https://github.com/opentimestamps/opentimestamps-server/blob/master/doc/merkle-mountain-range.md&lt;/a&gt;&lt;br/&gt;[3] &lt;a href=&#34;https://petertodd.org/2016/delayed-txo-commitments&#34;&gt;https://petertodd.org/2016/delayed-txo-commitments&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/8e1272fd/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/8e1272fd/attachment-0001.html&amp;gt&lt;/a&gt;;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: bitfield_sizes.svg&lt;br/&gt;Type: image/svg&#43;xml&lt;br/&gt;Size: 1788184 bytes&lt;br/&gt;Desc: not available&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/8e1272fd/attachment-0001.svg&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/8e1272fd/attachment-0001.svg&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:28&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2cgf0u0vl9eykjn4pghwehrp7ldl78px5pyatzdyvj09cxwhe20szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz065mpj</id>
    
      <title type="html">📅 Original date posted:2018-05-28 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2cgf0u0vl9eykjn4pghwehrp7ldl78px5pyatzdyvj09cxwhe20szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz065mpj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxzya2culxzyr0hj5eukgl0nll78n00k3savyrtxgv7jk97mtdrvqsv47j8&#39;&gt;nevent1q…47j8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-28&lt;br/&gt;📝 Original message:&amp;gt; Is there an application that requires watching for output scripts that&lt;br/&gt;&amp;gt; doesn&amp;#39;t also require watching for input scrips (or, less efficiently,&lt;br/&gt;&amp;gt; input outpoints)?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Certain wallets may be able to use only the output script filter by using&lt;br/&gt;output scripts to watch for confirmations on sent transactions, assuming&lt;br/&gt;that application is the only one with access to the private keys. The&lt;br/&gt;additional benefit of the input script/outpoint filter is to watch for&lt;br/&gt;unexpected spends (coins getting stolen or spent from another wallet) or&lt;br/&gt;transactions without a unique change or output address. I think this is a&lt;br/&gt;reasonable implementation, and it would be nice to be able to download that&lt;br/&gt;filter without any input elements.&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/20180528/8fdc2ff6/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180528/8fdc2ff6/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswn59q7gcyc9z9cptq55l0lng8memr7xltc0s2jf00acu7pamh3ggzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzk6d4k9</id>
    
      <title type="html">📅 Original date posted:2018-05-24 📝 Original message:Greg, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswn59q7gcyc9z9cptq55l0lng8memr7xltc0s2jf00acu7pamh3ggzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzk6d4k9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg36hjl3dpkld62pcauzxm3qmjlqjm4q7g9u4x49nyf3vv5qd72eg3yv27g&#39;&gt;nevent1q…v27g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-24&lt;br/&gt;📝 Original message:Greg, I&amp;#39;ve attached a graph including the input scripts.&lt;br/&gt;&lt;br/&gt;In the top graph, we can see how the input script filter compares to the&lt;br/&gt;input outpoint filter. It is definitely smaller as a result of address&lt;br/&gt;reuse. The bottom graph shows the ratio over time of combining the input&lt;br/&gt;prev script and output script filters vs keeping them separate. In more&lt;br/&gt;recent blocks, it appears that there are decreasing savings.&lt;br/&gt;&lt;br/&gt;On Wed, May 23, 2018 at 6:04 PM Conner Fromknecht&lt;br/&gt;&amp;lt;conner at lightning.engineering&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jimpo, thanks for looking into those stats! I had always imagined that&lt;br/&gt;&amp;gt; there&lt;br/&gt;&amp;gt; would be a more significant savings in having all filters in one bundle, as&lt;br/&gt;&amp;gt; opposed to separate. These results are interesting, to say the least, and&lt;br/&gt;&amp;gt; definitely offer us some flexibility in options for filter sharding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So far, the bulk of this discussion has centered around bandwidth. I am&lt;br/&gt;&amp;gt; concerned, however, that splitting up the filters is at odds with the&lt;br/&gt;&amp;gt; other&lt;br/&gt;&amp;gt; goal of the proposal in offering improved privacy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Allowing clients to choose individual filter sets trivially exposes the&lt;br/&gt;&amp;gt; type of&lt;br/&gt;&amp;gt; data that client is interested in. This alone might be enough to&lt;br/&gt;&amp;gt; fingerprint the&lt;br/&gt;&amp;gt; function of a peer and reduce anonymity set justifying their potential&lt;br/&gt;&amp;gt; behavior.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Furthermore, if a match is encountered, and block requested, full nodes&lt;br/&gt;&amp;gt; have&lt;br/&gt;&amp;gt; more targeted insight into what caused a particular match. They could&lt;br/&gt;&amp;gt; infer that&lt;br/&gt;&amp;gt; the client received funds in a particular block, e.g., if they are only&lt;br/&gt;&amp;gt; requesting&lt;br/&gt;&amp;gt; output scripts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is above and beyond the additional complexity of now syncing,&lt;br/&gt;&amp;gt; validating,&lt;br/&gt;&amp;gt; and managing five or six distinct header/filter-header/filter/block chains.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree that saving on bandwidth is an important goal, but bandwidth and&lt;br/&gt;&amp;gt; privacy&lt;br/&gt;&amp;gt; are always seemingly at odds. Strictly comparing the bandwidth&lt;br/&gt;&amp;gt; requirements of&lt;br/&gt;&amp;gt; a system that heavily weighs privacy to existing ones, e.g. BIP39, that&lt;br/&gt;&amp;gt; don&amp;#39;t is a&lt;br/&gt;&amp;gt; losing battle IMO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m not fundamentally opposed to splitting the filters, I certainly see the&lt;br/&gt;&amp;gt; arguments for flexibility. However, I also want to ensure we are&lt;br/&gt;&amp;gt; considering the&lt;br/&gt;&amp;gt; second order effects that fall out of optimizing for one metric when&lt;br/&gt;&amp;gt; others exist.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Conner&lt;br/&gt;&amp;gt; On Wed, May 23, 2018 at 10:29 Gregory Maxwell via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Any chance you could add a graph of input-scripts  (instead of input&lt;br/&gt;&amp;gt;&amp;gt; outpoints)?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Wed, May 23, 2018 at 7:38 AM, Jim Posen via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So I checked filter sizes (as a proportion of block size) for each of&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; sub-filters. The graph is attached.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; As interpretation, the first ~120,000 blocks are so small that the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Golomb-Rice coding can&amp;#39;t compress the filters that well, which is why&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; filter sizes are so high proportional to the block size. Except for the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; input filter, because the coinbase input is skipped, so many of them&lt;br/&gt;&amp;gt;&amp;gt; have 0&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; elements. But after block 120,000 or so, the filter compression&lt;br/&gt;&amp;gt;&amp;gt; converges&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; pretty quickly to near the optimal value. The encouraging thing here is&lt;br/&gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; if you look at the ratio of the combined size of the separated filters&lt;br/&gt;&amp;gt;&amp;gt; vs&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the size of a filter containing all of them (currently known as the&lt;br/&gt;&amp;gt;&amp;gt; basic&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; filter), they are pretty much the same size. The mean of the ratio&lt;br/&gt;&amp;gt;&amp;gt; between&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; them after block 150,000 is 99.4%. So basically, not much compression&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; efficiently is lost by separating the basic filter into sub-filters.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; On Tue, May 22, 2018 at 5:42 PM, Jim Posen &amp;lt;jim.posen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; My suggestion was to advertise a bitfield for each filter type the&lt;br/&gt;&amp;gt;&amp;gt; node&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; serves,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; where the bitfield indicates what elements are part of the filters.&lt;br/&gt;&amp;gt;&amp;gt; This&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; essentially&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; removes the notion of decided filter types and instead leaves the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; decision to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; full-nodes.&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; I think it makes more sense to construct entirely separate filters for&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; different types of elements and allow clients to download only the&lt;br/&gt;&amp;gt;&amp;gt; ones they&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; care about. If there are enough elements per filter, the compression&lt;br/&gt;&amp;gt;&amp;gt; ratio&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; shouldn&amp;#39;t be much worse by splitting them up. This prevents the&lt;br/&gt;&amp;gt;&amp;gt; exponential&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; blowup in the number of filters that you mention, Johan, and it works&lt;br/&gt;&amp;gt;&amp;gt; nicely&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; with service bits for advertising different filter types independently.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; So if we created three separate filter types, one for output scripts,&lt;br/&gt;&amp;gt;&amp;gt; one&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; for input outpoints, and one for TXIDs, each signaled with a separate&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; service bit, are people good with that? Or do you think there&lt;br/&gt;&amp;gt;&amp;gt; shouldn&amp;#39;t be a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; TXID filter at all, Matt? I didn&amp;#39;t include the option of a prev output&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; script filter or rolling that into the block output script filter&lt;br/&gt;&amp;gt;&amp;gt; because it&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; changes the security model (cannot be proven to be correct/incorrect&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; succinctly).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Then there&amp;#39;s the question of whether to separate or combine the&lt;br/&gt;&amp;gt;&amp;gt; headers.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I&amp;#39;d lean towards keeping them separate because it&amp;#39;s simpler that way.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/fe5608eb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/fe5608eb/attachment-0001.html&amp;gt&lt;/a&gt;;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: filter_sizes.svg&lt;br/&gt;Type: image/svg&#43;xml&lt;br/&gt;Size: 2833873 bytes&lt;br/&gt;Desc: not available&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/fe5608eb/attachment-0001.svg&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/fe5608eb/attachment-0001.svg&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:16&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr0tq6dcly52jqxdkn22u565a60lm3hmpf87xlypehpruty2g592gzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzqgklvz</id>
    
      <title type="html">📅 Original date posted:2018-05-23 📝 Original message:So I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr0tq6dcly52jqxdkn22u565a60lm3hmpf87xlypehpruty2g592gzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzqgklvz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvnjlz6zr56hxazckks9snqrr8d2v9v76zxn4r4tyn79sh2tu0ymghwafrj&#39;&gt;nevent1q…afrj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-23&lt;br/&gt;📝 Original message:So I checked filter sizes (as a proportion of block size) for each of the&lt;br/&gt;sub-filters. The graph is attached.&lt;br/&gt;&lt;br/&gt;As interpretation, the first ~120,000 blocks are so small that the&lt;br/&gt;Golomb-Rice coding can&amp;#39;t compress the filters that well, which is why the&lt;br/&gt;filter sizes are so high proportional to the block size. Except for the&lt;br/&gt;input filter, because the coinbase input is skipped, so many of them have 0&lt;br/&gt;elements. But after block 120,000 or so, the filter compression converges&lt;br/&gt;pretty quickly to near the optimal value. The encouraging thing here is&lt;br/&gt;that if you look at the ratio of the combined size of the separated filters&lt;br/&gt;vs the size of a filter containing all of them (currently known as the&lt;br/&gt;basic filter), they are pretty much the same size. The mean of the ratio&lt;br/&gt;between them after block 150,000 is 99.4%. So basically, not much&lt;br/&gt;compression efficiently is lost by separating the basic filter into&lt;br/&gt;sub-filters.&lt;br/&gt;&lt;br/&gt;On Tue, May 22, 2018 at 5:42 PM, Jim Posen &amp;lt;jim.posen at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; My suggestion was to advertise a bitfield for each filter type the node&lt;br/&gt;&amp;gt;&amp;gt; serves,&lt;br/&gt;&amp;gt;&amp;gt; where the bitfield indicates what elements are part of the filters. This&lt;br/&gt;&amp;gt;&amp;gt; essentially&lt;br/&gt;&amp;gt;&amp;gt; removes the notion of decided filter types and instead leaves the&lt;br/&gt;&amp;gt;&amp;gt; decision to&lt;br/&gt;&amp;gt;&amp;gt; full-nodes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think it makes more sense to construct entirely separate filters for the&lt;br/&gt;&amp;gt; different types of elements and allow clients to download only the ones&lt;br/&gt;&amp;gt; they care about. If there are enough elements per filter, the compression&lt;br/&gt;&amp;gt; ratio shouldn&amp;#39;t be much worse by splitting them up. This prevents the&lt;br/&gt;&amp;gt; exponential blowup in the number of filters that you mention, Johan, and it&lt;br/&gt;&amp;gt; works nicely with service bits for advertising different filter types&lt;br/&gt;&amp;gt; independently.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So if we created three separate filter types, one for output scripts, one&lt;br/&gt;&amp;gt; for input outpoints, and one for TXIDs, each signaled with a separate&lt;br/&gt;&amp;gt; service bit, are people good with that? Or do you think there shouldn&amp;#39;t be&lt;br/&gt;&amp;gt; a TXID filter at all, Matt? I didn&amp;#39;t include the option of a prev output&lt;br/&gt;&amp;gt; script filter or rolling that into the block output script filter because&lt;br/&gt;&amp;gt; it changes the security model (cannot be proven to be correct/incorrect&lt;br/&gt;&amp;gt; succinctly).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then there&amp;#39;s the question of whether to separate or combine the headers.&lt;br/&gt;&amp;gt; I&amp;#39;d lean towards keeping them separate because it&amp;#39;s simpler that way.&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/5a74bcf7/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/5a74bcf7/attachment-0001.html&amp;gt&lt;/a&gt;;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: filter_sizes.svg&lt;br/&gt;Type: image/svg&#43;xml&lt;br/&gt;Size: 2066101 bytes&lt;br/&gt;Desc: not available&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/5a74bcf7/attachment-0001.svg&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180523/5a74bcf7/attachment-0001.svg&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:14&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf6kvqcsf63jh5ezhs54zx69e3h9aarv28eynzrl8pp2sr3edhsmqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzyzvca6</id>
    
      <title type="html">📅 Original date posted:2018-05-17 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf6kvqcsf63jh5ezhs54zx69e3h9aarv28eynzrl8pp2sr3edhsmqzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzyzvca6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxrfe54s8hceq3mq2kzh4ns5005j4wsmvk0law6cnugharymjthacgadfk7&#39;&gt;nevent1q…dfk7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-17&lt;br/&gt;📝 Original message:&amp;gt;&lt;br/&gt;&amp;gt; It isn&amp;#39;t a question of &amp;#39;some lite clients&amp;#39; -- I am aware of no&lt;br/&gt;&amp;gt; implementation of these kinds of measures in any cryptocurrency ever.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Doesn&amp;#39;t mean there can&amp;#39;t or shouldn&amp;#39;t be a first. :-)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; The same kind of comparison to the block could have been done with&lt;br/&gt;&amp;gt; BIP37 filtering, but no one has implemented that. (similarly, the&lt;br/&gt;&amp;gt; whitepaper suggests doing that for all network rules when a&lt;br/&gt;&amp;gt; disagreement has been seen, though that isn&amp;#39;t practical for all&lt;br/&gt;&amp;gt; network rules it could be done for many of them-- but again no&lt;br/&gt;&amp;gt; implementation or AFAIK any interest in implementing that)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Correct me if I&amp;#39;m wrong, but I don&amp;#39;t think it&amp;#39;s true that the same could be&lt;br/&gt;done for BIP 37. With BIP 37, one would have to download every partial&lt;br/&gt;block from every peer to determine if there is a difference between them.&lt;br/&gt;With BIP 157, you only download a 32 byte filter header from every peer&lt;br/&gt;(because filters are deterministic), and using that commitment can&lt;br/&gt;determine whether there&amp;#39;s a conflict requiring further interrogation. The&lt;br/&gt;difference in overhead makes checking for conflicts with BIP 157 practical,&lt;br/&gt;whereas it&amp;#39;s not as practical with BIP 37.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Sure, but at what cost?   And &amp;#34;additional&amp;#34; while nice doesn&amp;#39;t&lt;br/&gt;&amp;gt; necessarily translate into a meaningful increase in delivered security&lt;br/&gt;&amp;gt; for any particular application.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think we might be speaking too generally here.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Sure. The security model that BIP 157 now allows is that a light client with*&lt;br/&gt;at least one honest peer serving filters* can get the correct information&lt;br/&gt;about the chain. No, this does not prevent against total eclipse attacks,&lt;br/&gt;but I think it&amp;#39;s a much stronger security guarantee than requiring all&lt;br/&gt;peers or even a majority of peers to be honest. In a decentralized network&lt;br/&gt;that stores money, I think there&amp;#39;s a big difference between those security&lt;br/&gt;models.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; But in exchange the filters for a given FP rate would be probably&lt;br/&gt;&amp;gt; about half the current size (actual measurements would be needed&lt;br/&gt;&amp;gt; because the figure depends on much scriptpubkey reuse there is, it&lt;br/&gt;&amp;gt; probably could be anywhere between 1/3 and 2/3rd).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This does not seem right. Let&amp;#39;s assume txids are removed because they are&lt;br/&gt;not relevant to this particular point. The difference as I understand it is&lt;br/&gt;whether to include in the filter serialized outpoints for inputs or&lt;br/&gt;serialized prev scriptPubkeys for inputs. When hashed these are the same&lt;br/&gt;size, and there&amp;#39;s an equal number of them (one per input in a block). So&lt;br/&gt;the only savings comes from deduping the prev scriptPubkeys with each other&lt;br/&gt;and with the scriptPubkeys in the block&amp;#39;s outputs. So it comes down&lt;br/&gt;entirely to how much address reuse there is on the chain.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Monitoring inputs by scriptPubkey vs input-txid also has a massive&lt;br/&gt;&amp;gt; advantage for parallel filtering:  You can usually known your pubkeys&lt;br/&gt;&amp;gt; well in advance, but if you have to change what you&amp;#39;re watching block&lt;br/&gt;&amp;gt;  N&#43;1 for based on the txids that paid you in N you can&amp;#39;t filter them&lt;br/&gt;&amp;gt; in parallel.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, I&amp;#39;ll grant that this is a benefit of your suggestion.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I think Peter missed Matt&amp;#39;s point that you can monitor for a specific&lt;br/&gt;&amp;gt; transaction&amp;#39;s confirmation by monitoring for any of the outpoints that&lt;br/&gt;&amp;gt; transaction contains. Because the txid commits to the outpoints there&lt;br/&gt;&amp;gt; shouldn&amp;#39;t be any case where the txid is knowable but (an) outpoint is&lt;br/&gt;&amp;gt; not.  Removal of the txid and monitoring for any one of the outputs&lt;br/&gt;&amp;gt; should be a strict reduction in the false positive rate for a given&lt;br/&gt;&amp;gt; filter size (the filter will contain strictly fewer elements and the&lt;br/&gt;&amp;gt; client will match for the same (or usually, fewer) number).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I _think_ dropping txids as matt suggests is an obvious win that costs&lt;br/&gt;&amp;gt; nothing.  Replacing inputs with scripts as I suggested has some&lt;br/&gt;&amp;gt; trade-offs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I may have interpreted this differently. So wallets need a way to know when&lt;br/&gt;the transactions they send get confirmed (for obvious usability reasons and&lt;br/&gt;so for automatic fee-bumping). One way is to match the spent outpoints&lt;br/&gt;against the filter, which I think of as the standard. Another would be to&lt;br/&gt;match the txid of the spending transaction against the first, which only&lt;br/&gt;works if the transaction is not malleable. Another would be to match the&lt;br/&gt;change output script against the first, assuming the wallet does not reuse&lt;br/&gt;change addresses and that the spending transaction does in fact have a&lt;br/&gt;change output.&lt;br/&gt;&lt;br/&gt;Now lets say these pieces of data, txids, output scripts, and spent&lt;br/&gt;outpoints are in three separate filters that a wallet can download&lt;br/&gt;separately or choose not to download. The spent outpoint method is the most&lt;br/&gt;reliable and has no caviats. It also allows for theft detection as Peter&lt;br/&gt;notes, which is a very nice property indeed. If the wallet uses the txid&lt;br/&gt;matching though, the txid filter would be smaller because there are fewer&lt;br/&gt;txids per block than inputs. So there could be some bandwidth savings to&lt;br/&gt;that approach. The change output watching is probably the nicest in some&lt;br/&gt;ways because the client needs the output filter anyway. If the transaction&lt;br/&gt;has no change output with a unique script, the client could watch for any&lt;br/&gt;of the other outputs on the spending tx, but may get more false positives&lt;br/&gt;depending on the degree of address reuse.&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/20180517/01b8298f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180517/01b8298f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:12&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8qp6x7fmmnew7c2g6hug68q379s68zj5gsq36w35llufq6r3xaxczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzerdkzt</id>
    
      <title type="html">📅 Original date posted:2018-05-17 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8qp6x7fmmnew7c2g6hug68q379s68zj5gsq36w35llufq6r3xaxczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzerdkzt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstaldttmej3msjtlwzly8yszh4vl266qpc8uhtjm3wg88nqnky6gq7mj0x2&#39;&gt;nevent1q…j0x2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-17&lt;br/&gt;📝 Original message:&amp;gt;&lt;br/&gt;&amp;gt; I think lite clients cross checking is something which very likely&lt;br/&gt;&amp;gt; will never be implemented by anyone, and probably not stay working&lt;br/&gt;&amp;gt; (due to under-usage) if it is implemented.  This thought is driven by&lt;br/&gt;&amp;gt; three things  (1) the bandwidth overhead of performing the check, (2)&lt;br/&gt;&amp;gt; thinking about the network-interacting-state-machine complexity of it,&lt;br/&gt;&amp;gt; and by the multitude of sanity checks that lite clients already don&amp;#39;t&lt;br/&gt;&amp;gt; implement (e.g. when a lite client noticed a split tip it could ask&lt;br/&gt;&amp;gt; peers for the respective blocks and check at least the stateless&lt;br/&gt;&amp;gt; checks, but none has ever done that), and...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;In my opinion, it&amp;#39;s overly pessimistic to design the protocol in an&lt;br/&gt;insecure way because some light clients historically have taken shortcuts.&lt;br/&gt;If the protocol can provide clients the option of getting additional&lt;br/&gt;security, it should.&lt;br/&gt;&lt;br/&gt;On the general topic, Peter makes a good point that in many cases filtering&lt;br/&gt;by txid of spending transaction may be preferable to filtering by outpoint&lt;br/&gt;spend, which has the nice benefit that there are obviously fewer txs in a&lt;br/&gt;block than txins. This wouldn&amp;#39;t work for malleable transactions though.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m open to the idea of splitting the basic filter into three separate&lt;br/&gt;filters based on data type, but there are some bandwidth concerns. First,&lt;br/&gt;the GCS encoding gets better compression with a greater number of elements,&lt;br/&gt;though as I recall in my analysis, that starts to tail off at ~1000&lt;br/&gt;elements per filter with P=20, in which case it&amp;#39;s not as much of a concern&lt;br/&gt;given current block sizes. The other is that clients need to download&lt;br/&gt;and/or store the filter header chain for each filter type, which are 32&lt;br/&gt;bytes each per block. So if a client is expected to download all three&lt;br/&gt;filter types anyway, or even two of three, it&amp;#39;s less efficient in these&lt;br/&gt;terms. It would be possible though to split the filters themselves, but&lt;br/&gt;still have the basic filter header cover all three filters. This would mean&lt;br/&gt;that full nodes could not support just a subset of the basic filters --&lt;br/&gt;they&amp;#39;d have to compute all of them to compute the filter header.&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/20180517/c25d9cf4/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180517/c25d9cf4/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:12:12&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqspalhsqzarmk5yac8wce37zqtex26fzrn9cvpmd7rsjgmem4rayyczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzeh64e4</id>
    
      <title type="html">📅 Original date posted:2018-04-03 📝 Original message:Hey. ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspalhsqzarmk5yac8wce37zqtex26fzrn9cvpmd7rsjgmem4rayyczyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzeh64e4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvd757jjer8e80jd5xfwqhfrrn0z37nylxddwwyw7ezps5syyyhjgu7chlm&#39;&gt;nevent1q…chlm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-04-03&lt;br/&gt;📝 Original message:Hey. This idea sounds quite interesting. It&amp;#39;d be helpful to see some more&lt;br/&gt;numbers to evaluate it.&lt;br/&gt;&lt;br/&gt;- How much bandwidth is consumed by redundant tx INVs currently? What is&lt;br/&gt;this as a % of overall bandwidth usage?&lt;br/&gt;- How would filtering txs through N=2 links affect network propagation?&lt;br/&gt;This probably requires simulation to determine.&lt;br/&gt;- Do you propose setting filters on inbound peers as well?&lt;br/&gt;&lt;br/&gt;On Mon, Apr 2, 2018 at 3:18 PM, Gleb Naumenko via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt; I have a couple of ideas regarding transaction relay protocol and wanted&lt;br/&gt;&amp;gt; to share it with and probably get some feedback.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I did some emulation and simulation and found out that around 90% of INV&lt;br/&gt;&amp;gt; messages sent by public-IP nodes are idle (duplicate), obviously because&lt;br/&gt;&amp;gt; each node creates 8 connections.  I also realized that sending INV messages&lt;br/&gt;&amp;gt; is a significant part of the overall bandwidth consumed by a public-IP&lt;br/&gt;&amp;gt; node. At a larger scale, this will result in people not able to run a&lt;br/&gt;&amp;gt; public-IP node.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My idea is in some sense similar to BIP37 but applied to public-IP nodes.&lt;br/&gt;&amp;gt; Here I want to emphasize that all the nodes will still receive *all* of the&lt;br/&gt;&amp;gt; transactions. A new protocol should also keep the same zero-trust,&lt;br/&gt;&amp;gt; robustness, decentralization guarantees and latency.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Idea: while joining the network, a new node agrees on some filter with&lt;br/&gt;&amp;gt; each of 8 nodes it connects to. So that NewNode &amp;lt;-&amp;gt; Node_A will be used to&lt;br/&gt;&amp;gt; relay only a subset of transactions, NewNode &amp;lt;-&amp;gt; Node_B for another subset.&lt;br/&gt;&amp;gt; This will significantly decrease the redundancy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To keep the guarantees, I would keep some redundancy (for example, each&lt;br/&gt;&amp;gt; transaction INV is sent over 2 links).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To make it robust to attacks, I have 2 extensions in my mind:&lt;br/&gt;&amp;gt; 1. Set reconciliation (for a subset of transactions) with *other* nodes.&lt;br/&gt;&amp;gt; Getting a bloom filter of a subset of the mempool transactions from Node_B&lt;br/&gt;&amp;gt; may help to figure out whether Node_A is malicious, very slow, etc.&lt;br/&gt;&amp;gt; 2. Rotating the filters every N minutes (N &amp;lt; 10)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I can see some issues with latency here, but I believe this problem has a&lt;br/&gt;&amp;gt; solution.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Feedback is appreciated!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you want to look at a draft of the proposal — please let me know.&lt;br/&gt;&amp;gt; If there were any similar ideas — please let me know.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt; Gleb&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180403/89d5a284/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180403/89d5a284/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:11:27&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsg58sr43gj59hhy7a3mukfvp03enkv3p4c2pntjx4ygxllucsjp0szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz3s8mcc</id>
    
      <title type="html">📅 Original date posted:2017-12-15 📝 Original message:One of ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsg58sr43gj59hhy7a3mukfvp03enkv3p4c2pntjx4ygxllucsjp0szyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dz3s8mcc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgfm86h0xm8zr0z52cqdalh20eddsrc9ar20gvf7z2zzy4vz02fjqpuecpx&#39;&gt;nevent1q…ecpx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-12-15&lt;br/&gt;📝 Original message:One of the ideas that Greg Maxwell brought up in the &amp;#34;&amp;#39;Compressed&amp;#39; headers&lt;br/&gt;stream&amp;#34; thread is the possibility of a header sync mechanism that allowed&lt;br/&gt;parallel download from multiple peers. With the current getheaders/headers&lt;br/&gt;semantics, headers must be downloaded sequentially from genesis. In my&lt;br/&gt;testing, I saw that syncing headers directly from a colocated node took &amp;lt;5s&lt;br/&gt;whereas syncing normally from network peers takes ~5 min for me, which goes&lt;br/&gt;to show that 5s is an upper bound on the time to process all headers if&lt;br/&gt;they are locally available. So if we can introduce new p2p messages for&lt;br/&gt;header sync, what would they look like? Here&amp;#39;s one idea.&lt;br/&gt;&lt;br/&gt;A new getheadersv2 request would include a start height for the range of&lt;br/&gt;headers requested and a commitment to the last block in the chain that you&lt;br/&gt;want to download. Then you find N peers that are all on the same chain,&lt;br/&gt;partition the range of headers from 0 to the chain height minus some&lt;br/&gt;reasonable reorg safety buffer (~6 blocks), and send download requests in&lt;br/&gt;parallel. So how do we know that the peers are on the same chain and that&lt;br/&gt;their headers served connect into this chain?&lt;br/&gt;&lt;br/&gt;When you connect to outbound peers and are in IBD, you will query them for&lt;br/&gt;a Merkle Mountain Range commitment to all headers up to a height X (which&lt;br/&gt;is 6ish blocks before their start height from the version message). Then&lt;br/&gt;you choose the commitment that the majority of the queried peers sent (or&lt;br/&gt;some other heuristic), and these become your download peers. Every&lt;br/&gt;getheadersv2 request includes the start height, X, and the chain&lt;br/&gt;commitment. The headersv2 response messages include all of the headers&lt;br/&gt;followed by a merkle branch linking the last header into the chain&lt;br/&gt;commitment. Headers are processed in order as they arrive and if any of the&lt;br/&gt;headers are invalid, you can ban/disconnect all peers that committed to it,&lt;br/&gt;drop the buffer of later headers and start over.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s the basic idea. Here are other details:&lt;br/&gt;&lt;br/&gt;- This would require an additional 32-byte MMR commitment for each header&lt;br/&gt;in memory.&lt;br/&gt;- When a node receives a headersv2 request and constructs a merkle proof&lt;br/&gt;for the last header, it checks against the sent commitment. In the case of&lt;br/&gt;a really deep reorg, that check would fail, and the node can instead&lt;br/&gt;respond with an updated commitment hash for that height.&lt;br/&gt;- Another packet is needed, getheaderchain or something, that a syncing&lt;br/&gt;peer first sends along with a header locator and an end height. The peer&lt;br/&gt;responds with headerchain, which includes the last common header from the&lt;br/&gt;locator along with the chain commitment at that height and a merkle branch&lt;br/&gt;proving inclusion of that header in the chain.&lt;br/&gt;- Nodes would cache chain commitments for the last ~20 blocks (somewhat&lt;br/&gt;arbitrary), and refuse to serve chain commitments for heights before that.&lt;br/&gt;&lt;br/&gt;Thoughts? This is a pretty recycled idea, so please point me at prior&lt;br/&gt;proposals that are similar as well.&lt;br/&gt;&lt;br/&gt;-jimpo&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/20171215/267e7064/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171215/267e7064/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:08:46&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs872q6k74rgl8qzerqxpf47c3ugp5n399e8d7j74tflmccrlqjpagzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzxvsaqz</id>
    
      <title type="html">📅 Original date posted:2017-12-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs872q6k74rgl8qzerqxpf47c3ugp5n399e8d7j74tflmccrlqjpagzyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzxvsaqz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgcxz7rayd9tn0d625e9czc6tz0u9ls3y9533twn8lethv8724gfq2xnce8&#39;&gt;nevent1q…nce8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-12-11&lt;br/&gt;📝 Original message:On Mon, Dec 11, 2017 at 1:04 PM, Gregory Maxwell &amp;lt;greg at xiph.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Mon, Dec 11, 2017 at 8:40 PM, Jim Posen via bitcoin-dev&lt;br/&gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; Firstly, I don&amp;#39;t like the idea of making the net header encoding&lt;br/&gt;&amp;gt; dependent&lt;br/&gt;&amp;gt; &amp;gt; on the specific header validation rules that Bitcoin uses (eg. the fact&lt;br/&gt;&amp;gt; that&lt;br/&gt;&amp;gt; &amp;gt; difficulty is only recalculated every 2016 blocks). This would be&lt;br/&gt;&amp;gt; coupling&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the last proposal I recall writing up, there was a one byte flag on&lt;br/&gt;&amp;gt; each header to indicate what was included.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;Is there a link somewhere to that proposal? The only thing I could find was&lt;br/&gt;your forwarded email&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-September/014904.html&amp;gt&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-September/014904.html&amp;gt&lt;/a&gt;;&lt;br/&gt;on&lt;br/&gt;this thread.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Nbits _never_ needs to be sent even with other consensus rules because&lt;br/&gt;&amp;gt; its more or less necessarily a strict function of the prior headers.&lt;br/&gt;&amp;gt; This still holds in every clone of Bitcoin I&amp;#39;m aware of; sending it&lt;br/&gt;&amp;gt; with the first header in a group probably makes sense so it can be&lt;br/&gt;&amp;gt; checked independently.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; with insufficient benefit.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; another &amp;gt;18% reduction in size beyond the removal of prev. is not&lt;br/&gt;&amp;gt; insubstantial by any means.  I don&amp;#39;t think it should lightly be&lt;br/&gt;&amp;gt; ignored.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;Omitting nBits entirely seems reasonable, I wrote up a possible&lt;br/&gt;implementation here&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...jimpo:compact-headers-difficulty&amp;gt&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...jimpo:compact-headers-difficulty&amp;gt&lt;/a&gt;;.&lt;br/&gt;The downside is that it is more complex because it leaks into the&lt;br/&gt;validation code. The extra 4 byte savings is certainly nice though.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Prev omission itself is not, sadly, magically compatible:  I am quite&lt;br/&gt;&amp;gt; confident that if there is a bitcoin hardfork it would recover the&lt;br/&gt;&amp;gt; nbits/4-guarenteed always-zero bits of prev to use as extra nonce for&lt;br/&gt;&amp;gt; miners. This has been proposed many times, implemented at least once,&lt;br/&gt;&amp;gt; and the current requirement for mining infrastructure to reach inside&lt;br/&gt;&amp;gt; the coinbase txn to increment a nonce has been a reliable source of&lt;br/&gt;&amp;gt; failures.  So I think we&amp;#39;d want to have the encoding able to encode&lt;br/&gt;&amp;gt; leading prev bits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Many altcoins also change the header structures. If the better thing&lt;br/&gt;&amp;gt; is altcoin incompatible, we should still do it. Doing otherwise would&lt;br/&gt;&amp;gt; competitively hobble Bitcoin especially considering the frequent&lt;br/&gt;&amp;gt; recklessly incompetent moves made by various altcoins and the near&lt;br/&gt;&amp;gt; total lack of useful novel development we&amp;#39;ve seen come out of the&lt;br/&gt;&amp;gt; clones.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Probably the most important change in a new header message wouldn&amp;#39;t be&lt;br/&gt;&amp;gt; the encoding, but it would be changing the fetching mechanism so that&lt;br/&gt;&amp;gt; header sets could be pulled in parallel, etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I would rather not change the serialization of existing messages,&lt;br/&gt;&amp;gt; nodes are going to have to support speaking both messages for a long&lt;br/&gt;&amp;gt; time, and I think we already want a different protocol flow for&lt;br/&gt;&amp;gt; headers fetching in any case.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Can you elaborate on how parallel header fetching might work? getheaders&lt;br/&gt;requests could probably already be pipelined, where the node requests the&lt;br/&gt;next 2,000 headers before processing the current batch (though would make&lt;br/&gt;sense to check that they are all above min difficulty first).&lt;br/&gt;&lt;br/&gt;I&amp;#39;m open to more ideas on how to optimize the header download or design the&lt;br/&gt;serialization format to be more flexible, but I&amp;#39;m concerned that we forgo a&lt;br/&gt;40-45% bandwidth savings on the current protocol for a long time because&lt;br/&gt;something better might be possible later on or there might be a hard fork&lt;br/&gt;that at some point requires another upgrade. I do recognize that supporting&lt;br/&gt;multiple serialization formats simultaneously adds code complexity, but in&lt;br/&gt;this case the change seems simple enough to me that the tradeoff is worth&lt;br/&gt;it.&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/20171211/995788a9/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171211/995788a9/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:08:40&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdhev2ph0nnlfmgpnq3tv2prgrf42tp9gpsw73tega8kfltvdhwlszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzzt5ttn</id>
    
      <title type="html">📅 Original date posted:2017-12-11 📝 Original message:I want ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdhev2ph0nnlfmgpnq3tv2prgrf42tp9gpsw73tega8kfltvdhwlszyz0zwgl503kpd5cfxu6m66kdezcd6xu3c7ppdacqr0wj7atzk60dzzt5ttn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspa8070fwumekn9tkc88tmqprs5mgc2eg3s7mzdnlss9t2du8ld4c4e2e58&#39;&gt;nevent1q…2e58&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-12-11&lt;br/&gt;📝 Original message:I want to resurrect this thread from August/September because it seems like&lt;br/&gt;a significant improvement for light clients at very little cost. From the&lt;br/&gt;mailing list, it seems like this got stalled in determining how many more&lt;br/&gt;bytes could be save in addition to the prev_block.&lt;br/&gt;&lt;br/&gt;The ideas I&amp;#39;ve gathered from Greg Maxwell&amp;#39;s forwarded email are:&lt;br/&gt;&lt;br/&gt;1. Omit nBits altogether and have the receiving node determine it from&lt;br/&gt;chain context.&lt;br/&gt;2. Include nBits only on headers with a height that is a multiple of 2016&lt;br/&gt;since it does not change in between.&lt;br/&gt;3. Compress nTime to two bytes by using the bounds on allowed values from&lt;br/&gt;the consensus rules.&lt;br/&gt;&lt;br/&gt;I propose just moving ahead with only the exclusion of the prev_block, as&lt;br/&gt;IMO the other savings are not worth the added complexity.&lt;br/&gt;&lt;br/&gt;Firstly, I don&amp;#39;t like the idea of making the net header encoding dependent&lt;br/&gt;on the specific header validation rules that Bitcoin uses (eg. the fact&lt;br/&gt;that difficulty is only recalculated every 2016 blocks). This would be&lt;br/&gt;coupling together the two layers, breaking net compatibility for some alts,&lt;br/&gt;and possibly making consensus rule changes even more difficult for a&lt;br/&gt;savings with insufficient benefit. So if you buy that argument, I&amp;#39;m not in&lt;br/&gt;favor of #2 or #3.&lt;br/&gt;&lt;br/&gt;Option 1 is still viable, though it has some downsides. The implementation&lt;br/&gt;leaks into the validation code, whereas calculating prev_block can occur&lt;br/&gt;just at the net layer (see implementation below). Also, nodes would now be&lt;br/&gt;*required* to sync the header chain from the genesis block, whereas they&lt;br/&gt;had the option of starting from some checkpoint before.&lt;br/&gt;&lt;br/&gt;So switching gears, I&amp;#39;d like to ask what the best way to actually implement&lt;br/&gt;this change is. Solutions I can think of are:&lt;br/&gt;&lt;br/&gt;1. New headers command name like &amp;#34;cmpctheaders&amp;#34; or &amp;#34;headersv2&amp;#34;.&lt;br/&gt;2. Change serialization of existing headers message in a new protocol&lt;br/&gt;version.&lt;br/&gt;3. Change serialization of existing headers message with new service bit.&lt;br/&gt;&lt;br/&gt;I wrote up some proof-of-concept implementations in Core a) just omitting&lt;br/&gt;prev_block&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...jimpo:compact-headers&amp;gt&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...jimpo:compact-headers&amp;gt&lt;/a&gt;;&lt;br/&gt;and b) omitting nBits as well&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/compare/master...jimpo:compact-headers-difficulty&amp;gt&#34;&gt;https://github.com/bitcoin/bitcoin/compare/master...jimpo:compact-headers-difficulty&amp;gt&lt;/a&gt;;.&lt;br/&gt;If people think a) is reasonable, I&amp;#39;ll write up a BIP.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi everyone, the Bitcoin headers are probably the most condensed and&lt;br/&gt;&amp;gt; important piece of data in the world, their demand is expected to grow.&lt;br/&gt;&amp;gt; When sending a stream of continuous block headers, a common case in IBD and&lt;br/&gt;&amp;gt; in disconnected clients, I think there is a possible optimization of the&lt;br/&gt;&amp;gt; transmitted data: The headers after the first could avoid transmitting the&lt;br/&gt;&amp;gt; previous hash cause the receiver could compute it by double hashing the&lt;br/&gt;&amp;gt; previous header (an operation he needs to do anyway to verify PoW). In a&lt;br/&gt;&amp;gt; long stream, for example 2016 headers, the savings in bandwidth are about&lt;br/&gt;&amp;gt; 32/80 ~= 40% without compressed headers 2016*80=161280 bytes with&lt;br/&gt;&amp;gt; compressed headers 80&#43;2015*48=96800 bytes What do you think? In&lt;br/&gt;&amp;gt; OpenTimestamps calendars we are going to use this compression to give&lt;br/&gt;&amp;gt; lite-client a reasonable secure proofs (a full node give higher security&lt;br/&gt;&amp;gt; but isn&amp;#39;t feasible in all situations, for example for in-browser&lt;br/&gt;&amp;gt; verification) To speed up sync of a new client Electrum starts with the&lt;br/&gt;&amp;gt; download of a file &amp;lt;&lt;a href=&#34;https://headers.electrum.org/blockchain_headers&amp;gt&#34;&gt;https://headers.electrum.org/blockchain_headers&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; ~36MB containing the first 477637 headers. For this kind of clients could&lt;br/&gt;&amp;gt; be useful a common http API with fixed position chunks to leverage http&lt;br/&gt;&amp;gt; caching. For example /headers/2016/0 returns the headers from the genesis&lt;br/&gt;&amp;gt; to the 2015 header included while /headers/2016/1 gives the headers from&lt;br/&gt;&amp;gt; the 2016th to the 4031. Other endpoints could have chunks of 20160 blocks&lt;br/&gt;&amp;gt; or 201600 such that with about 10 http requests a client could fast sync&lt;br/&gt;&amp;gt; the headers&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/20171211/86e7642f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171211/86e7642f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:08:39&#43;02:00</updated>
  </entry>

</feed>