<oembed><type>rich</type><version>1.0</version><author_name>npub1h394c0pkdum0jw4rufslt3ur9m9c2ym4x7a0t68spfpjr6zlq3msu8z4k5</author_name><author_url>https://nostr.ae/npub1h394c0pkdum0jw4rufslt3ur9m9c2ym4x7a0t68spfpjr6zlq3msu8z4k5</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2016-05-09&#xA;📝 Original message:On Monday 09 May 2016 10:43:02 Gregory Maxwell wrote:&#xA;&gt; On Mon, May 9, 2016 at 9:35 AM, Tom Zander via bitcoin-dev&#xA;&gt; &#xA;&gt; &lt;bitcoin-dev at lists.linuxfoundation.org&gt; wrote:&#xA;&gt; &gt; You misunderstand the networking effects.&#xA;&gt; &gt; The fact that your node is required to choose which one to set the&#xA;&gt; &gt; announce&#xA;&gt; &gt; bit on implies that it needs to predict which node will have the best data&#xA;&gt; &gt; in the future.&#xA;&gt; &#xA;&gt; Not required. It may. &#xA;&#xA;It is required, in the reference of wanting to actually use compact block &#xA;relay.&#xA;&#xA;&#xA;&gt; Testing on actual nodes in the actual network (not a &#34;lab&#34;) shows&#xA;&#xA;Apologies, I thought that the term was wider known.  &#34;Laboratory situations&#34; &#xA;is used where I am from as the opposite of real-world messy and unpredictable &#xA;situations.&#xA;&#xA;So, your measurements may be true, but are not useful to decide how well it &#xA;behaves under less optimal situations. aka &#34;the real world&#34;.&#xA;&#xA;&gt; This also _increases_ robustness. Right now a single peer failing at&#xA;&gt; the wrong time will delay blocks with a long time out.&#xA;&#xA;If your peers that were supposed to send you a compact block fail, then you&#39;ll &#xA;end up in exactly that same situation again.  Only with various timeouts in &#xA;between before you get your block making it a magnitude slower.&#xA;&#xA;In networking this is solved by reacting instead of predicting. The network is &#xA;not stable. Your protocol design assumes it to be.&#xA;&#xA;&#xA;&gt; &gt; Another problem with your solution is that nodes send a much larger amount&#xA;&gt; &gt; of unsolicited data to peers in the form of the thin-block compared to&#xA;&gt; &gt; the normal inv or header-first data.&#xA;&gt; &#xA;&gt; &#34;High bandwidth&#34; mode &#xA;&#xA;Another place where I may have explained better.&#xA;This is not about the difference about the two modes of your design.&#xA;This is about the design as a whole. As compared to current.&#xA;&#xA;&#xA;&gt; &gt; Am I to understand that you choose the solution based on the fact that&#xA;&gt; &gt; service bits are too expensive to extend? (if not, please respond to my&#xA;&gt; &gt; previous question actually answering the suggestion)&#xA;&gt; &gt; &#xA;&gt; &gt; That sounds like a rather bad way of doing design. Maybe you can add a&#xA;&gt; &gt; second service bits field of message instead and then do the compact&#xA;&gt; &gt; blocks correctly.&#xA;&gt; Service bits are not generally a good mechanism for negating optional&#xA;&gt; peer-local parameters.&#xA;&#xA;Service bits are exactly the right solution to indicate additional p2p &#xA;feature-support.&#xA;&#xA;&#xA;&gt; [It&#39;s a little disconcerting that you appear to be maintaining a fork&#xA;&gt; and are unaware of this.]&#xA;&#xA;ehm...&#xA;&#xA;&#xA;&gt; &gt; Wait, you didn&#39;t steal the variable length encoding from an existing&#xA;&gt; &gt; standard and you programmed a new one?&#xA;&gt; &#xA;&gt; This is one of the two variable length encodings used for years in&#xA;&gt; Bitcoin Core. This is just the first time it&#39;s shown up in a BIP.&#xA;&gt;&#xA;&gt; &gt; Look at UTF-8 on wikipedia, you may have &#34;invented&#34; the same encoding that&#xA;&gt; &gt; IBM published in 1992.&#xA;&gt; &#xA;&gt; The similarity with UTF-8 is that both are variable length and some&#xA;&gt; control information is in the high bits. The similarity ends there.&#xA;&#xA;That&#39;s all fine and well, it doesn&#39;t at any point take away from my point that &#xA;any specification should NOT invent something new that has for decades had a &#xA;great specification already.&#xA;&#xA;If you make a spec to be used by all nodes, on the wire, don&#39;t base it on your &#xA;proprietary implementation. Please.&#xA;&#xA;&#xA;&gt; &gt; Just the first (highest) 8 bytes of a sha256 hash.&#xA;&gt; &gt; &#xA;&gt; &gt; The amount of collisions will not be less if you start xoring the rest.&#xA;&gt; &gt; The whole reason for doing this extra work is also irrelevant as a spam&#xA;&gt; &gt; protection.&#xA;&gt; &#xA;&gt; Then you expose it to a trivial collision attack:  To find two 64 bit&#xA;&gt; hashes that collide I need perform only roughly 2^32 computation. Then&#xA;&gt; I can send them to the network.&#xA;&#xA;No, you still need to have done a POW.&#xA;&#xA;Next to that, your scheme is 2^32 computations *and* some XORs. The XORs are &#xA;percentage wise a rounding error on the total time. So your argument also &#xA;destroys your own addition.&#xA;&#xA;&gt; This issue is eliminated by salting the hash. &#xA;&#xA;The issue is better eliminated by not allowing nodes to send uninvited large &#xA;messages.&#xA;&#xA;I don&#39;t think we&#39;re getting anywhere.&#xA;&#xA;I&#39;m not sold on your design and I explained why. I tried explaining in this &#xA;email some misconceptions that may have appeared after my initial emails. I &#xA;hope things are more clear.</html></oembed>