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




  <entry>
    <id>https://nostr.ae/nevent1qqspg803kgaeyugl2rmwy6agfx3fh5c4fpzfcqw3jdy2k5dm8tcwgdgzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqrdtw8t</id>
    
      <title type="html">📅 Original date posted:2014-07-31 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspg803kgaeyugl2rmwy6agfx3fh5c4fpzfcqw3jdy2k5dm8tcwgdgzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqrdtw8t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy5t3tmaqrg5wm04k56s5g5g3fchq45d68xkpycce8v4qknhx8krgvw0au2&#39;&gt;nevent1q…0au2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-31&lt;br/&gt;📝 Original message:On Thu, Jul 31, 2014 at 6:06 PM, Peter Todd &amp;lt;pete at petertodd.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; Anything that changes the semantics of nLockTime will do harm to&lt;br/&gt;&amp;gt; existing and future applications that make use of nLockTime for things&lt;br/&gt;&amp;gt; like refund transactions.&lt;br/&gt;&lt;br/&gt;I think this would be compatible with most uses of nLockTime -- e.g.,&lt;br/&gt;at the time a refund transaction becomes broadcastable, its&lt;br/&gt;beneficiary would usually have no reason to wait for a long time&lt;br/&gt;before broadcasting it; if they did so (probably because they weren&amp;#39;t&lt;br/&gt;online to redeem the refund), they&amp;#39;d need to use the&lt;br/&gt;submit-directly-to-miner option, but they wouldn&amp;#39;t lose their refund.&lt;br/&gt;&lt;br/&gt;&amp;gt; In any case, why do transactions need finite lifespans in mempools? If&lt;br/&gt;&amp;gt; you want to double-spend them with higher fees, then implement&lt;br/&gt;&amp;gt; replace-by-fee.&lt;br/&gt;&lt;br/&gt;Perpetuating transactions that have been in mempools for a long time&lt;br/&gt;and are not being confirmed has been cited as a reason for nodes not&lt;br/&gt;to exchange mempools (#3721, #1833, #3722); it&amp;#39;s been implied that it&lt;br/&gt;would be desirable for wallets to wait until a transaction had had a&lt;br/&gt;chance to be accepted before double-spending with a higher fee&lt;br/&gt;(#3722); and an unconfirmed transaction-age-based policy for&lt;br/&gt;preventing mempool accumulation has been advocated (#3753, #3722) [I&lt;br/&gt;hope my summarization is not misrepresenting anyone&amp;#39;s opinions here;&lt;br/&gt;please see the arguments made in the actual comments on the bugs].&lt;br/&gt;These discussions are mostly fairly old, but I don&amp;#39;t know of any&lt;br/&gt;changes that have been made that provide alternative answers to these&lt;br/&gt;concerns mentioned by at least three different developers.&lt;br/&gt;&lt;br/&gt;&amp;gt; In any case, lifetimes will never be deterministic as not everyone runs&lt;br/&gt;&amp;gt; the same software.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s true, but none of the benefits of these changes require the&lt;br/&gt;policy to be unanimous; most of the effect could be provided by most&lt;br/&gt;of the network following these rules.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; Transactions would stop being relayed and drop out of mempools a fixed&lt;br/&gt;&amp;gt;&amp;gt; number of blocks from their creation; once that window had passed, the&lt;br/&gt;&amp;gt;&amp;gt; sender&amp;#39;s wallet could begin to expect the transaction would not be&lt;br/&gt;&amp;gt;&amp;gt; confirmed. In case a reorg displaces a transaction until after its&lt;br/&gt;&amp;gt;&amp;gt; expiry height, a miner can still put it back in the blockchain; the&lt;br/&gt;&amp;gt;&amp;gt; expiry height is just a relay rule. Also, a user who needed to get&lt;br/&gt;&amp;gt;&amp;gt; their original &amp;#34;expired&amp;#34; transaction confirmed could still do so by&lt;br/&gt;&amp;gt;&amp;gt; submitting it directly to a miner with suitable policies.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ...in which case someone will circumvent this IsStandard() rule by&lt;br/&gt;&amp;gt; submitting &amp;#34;expired&amp;#34; transactions directly to miners with suitable&lt;br/&gt;&amp;gt; policies.&lt;br/&gt;&lt;br/&gt;Yes, that is a feature. None of the benefits of transaction expiration&lt;br/&gt;rely on expiration being final, and any possible downsides of&lt;br/&gt;expiration are largely mitigated by the option still being available&lt;br/&gt;to get expired transactions mined.
    </content>
    <updated>2023-06-07T15:24:39Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsyj62e8ycsymlrh0zy68unhkryngv4gtj8fp67u7yr8rtcsd380yqzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkq4q2km9</id>
    
      <title type="html">📅 Original date posted:2014-07-31 📝 Original message:There ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsyj62e8ycsymlrh0zy68unhkryngv4gtj8fp67u7yr8rtcsd380yqzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkq4q2km9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgvt4rmjttw2llwr7rwlne6rtwl4tdzjlsh2ae42v44d2lcxuj6xqcwhp38&#39;&gt;nevent1q…hp38&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-31&lt;br/&gt;📝 Original message:There is currently little in place for managing transaction lifetime&lt;br/&gt;in the network&amp;#39;s mempools (see discussion in github in #3722 &amp;#34;mempool&lt;br/&gt;transaction expiration&amp;#34;, and it seems to be a major factor blocking&lt;br/&gt;some mempool exchange, see #1833/1918, #3721). Expiry per-node a&lt;br/&gt;certain amount of wall time after receipt has been proposed, but&lt;br/&gt;that&amp;#39;s a fragile mechanism -- a single node could keep all relayable&lt;br/&gt;transactions alive forever by remembering transactions until most&lt;br/&gt;nodes have dropped them and then releasing them back into the wild.&lt;br/&gt;&lt;br/&gt;I have a proposal for a way to add finite and predictable lifespans to&lt;br/&gt;transactions in mempools: we d̶e̶s̶t̶r̶o̶y̶ ̶t̶h̶e̶&lt;br/&gt;̶r̶e̶s̶u̶r̶r̶e̶c̶t̶i̶o̶n̶ ̶h̶u̶b̶ use nLockTime and a new standardness&lt;br/&gt;rule. It could be done in stages, would not necessarily require even a&lt;br/&gt;soft fork, and does not cause problems with reorgs like the proposal&lt;br/&gt;in #3509:&lt;br/&gt;1. start setting nLockTime to the current height by default in newly&lt;br/&gt;created transactions (or slightly below the current height, for&lt;br/&gt;reorg-friendliness)&lt;br/&gt;2. once users have had some time to upgrade to clients that set&lt;br/&gt;nLockTime, start discouraging transactions without nLockTime --&lt;br/&gt;possibly with a slightly higher fee required for relay&lt;br/&gt;3. start rate-limiting relay of transactions without an nLockTime&lt;br/&gt;(maybe this alone could be used to achieve [2])&lt;br/&gt;4. add a new IsStandard rule rejecting transactions with an nLockTime&lt;br/&gt;more than N blocks behind the current tip (for some fixed value N, to&lt;br/&gt;be determined)&lt;br/&gt;&lt;br/&gt;Transactions would stop being relayed and drop out of mempools a fixed&lt;br/&gt;number of blocks from their creation; once that window had passed, the&lt;br/&gt;sender&amp;#39;s wallet could begin to expect the transaction would not be&lt;br/&gt;confirmed. In case a reorg displaces a transaction until after its&lt;br/&gt;expiry height, a miner can still put it back in the blockchain; the&lt;br/&gt;expiry height is just a relay rule. Also, a user who needed to get&lt;br/&gt;their original &amp;#34;expired&amp;#34; transaction confirmed could still do so by&lt;br/&gt;submitting it directly to a miner with suitable policies.
    </content>
    <updated>2023-06-07T15:24:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs206xa74h0w7tpaz5hawp2457dg5gz2677r37h5r8vg099t9rve2gzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqw5ff3u</id>
    
      <title type="html">📅 Original date posted:2014-07-31 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs206xa74h0w7tpaz5hawp2457dg5gz2677r37h5r8vg099t9rve2gzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqw5ff3u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqm5vk0d95s845g8afsexn75scqf8ftpn5qna5kfa5fep5jahqdecajkdvm&#39;&gt;nevent1q…kdvm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-31&lt;br/&gt;📝 Original message:&amp;gt; the need to have transmitted the transaction list [..] first&lt;br/&gt;&lt;br/&gt;32 bits per transaction is at least double the communication overhead&lt;br/&gt;of the simple approach, and only offers a bound on the probability of&lt;br/&gt;needing a round trip.&lt;br/&gt;&lt;br/&gt;On Thu, Jul 31, 2014 at 2:29 PM, Gregory Maxwell &amp;lt;gmaxwell at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; On Thu, Jul 31, 2014 at 1:47 PM, Kaz Wesley &amp;lt;keziahw at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; trip to request the missing tx; if we could somehow get the &amp;#34;What&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; the Difference&amp;#34; approach to effectively operate on full transactions&lt;br/&gt;&amp;gt;&amp;gt; instead&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I explain how to do this on the network block coding page.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given that you know the sizes and orders of the transactions (e.g.&lt;br/&gt;&amp;gt; from a reconciliation step first), the sender sends non-syndromic&lt;br/&gt;&amp;gt; forward error correcting code data somewhat larger than their estimate&lt;br/&gt;&amp;gt; of how much data the user is missing.  Then you drop the data you know&lt;br/&gt;&amp;gt; into place and then recover the missing blocks using the fec.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is no overhead in this approach except for FEC blocks that are&lt;br/&gt;&amp;gt; incompletely missing (and so must be completely discarded), and the&lt;br/&gt;&amp;gt; need to have the transmitted the transaction list and sizes first.&lt;br/&gt;&amp;gt; (note, that just more bandwidth, not an additional round trip).
    </content>
    <updated>2023-06-07T15:24:12Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs88jcsupaqkthpsvv2yaxanssvk4uzxu9flpvpcj7v8jj7f77jwsszyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqnqvznx</id>
    
      <title type="html">📅 Original date posted:2014-07-31 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs88jcsupaqkthpsvv2yaxanssvk4uzxu9flpvpcj7v8jj7f77jwsszyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqnqvznx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqyj2dk6n3v89vyqfr9an2vml4esmf9kwthjz58nwyqe2malu8h4sg6up3k&#39;&gt;nevent1q…up3k&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-31&lt;br/&gt;📝 Original message:I don&amp;#39;t see how set reconciliation alone would be practical for&lt;br/&gt;condensed block exchange -- if the keys are txids it&amp;#39;d require a round&lt;br/&gt;trip to request the missing tx; if we could somehow get the &amp;#34;What&amp;#39;s&lt;br/&gt;the Difference&amp;#34; approach to effectively operate on full transactions&lt;br/&gt;instead, the log(keysize) factor overhead would make any transactions&lt;br/&gt;not mutually-known very expensive to exchange (at keysize=32b, data&lt;br/&gt;would need to be 80% mutually-known just to break even). There&amp;#39;s also&lt;br/&gt;the complication and/or overhead of establishing an &amp;#34;expected block&amp;#34;&lt;br/&gt;to reconcile with the actual block.&lt;br/&gt;&lt;br/&gt;The approach of remembering what invs have been transmitted both&lt;br/&gt;directions along each connection is less elegant; it requires&lt;br/&gt;remembering a lot of communication history, introducing a major point&lt;br/&gt;of statefulness to the protocol, and custom-compacting blocks for each&lt;br/&gt;peer. But it is also very effective at squeezing bytes, cheap in cpu&lt;br/&gt;cycles, and the implementation is fairly simple. The wealth of mutual&lt;br/&gt;knowledge already available in the current protocol allows&lt;br/&gt;accomplishing the goal of exchanging blocks efficiently by solving a&lt;br/&gt;much easier problem than its context-less cousin. I have my doubts&lt;br/&gt;that it is possible for even an optimal contextless solution to do as&lt;br/&gt;well as channel memory in terms of bytes exchanged or computational&lt;br/&gt;complexity -- you can&amp;#39;t beat making use of the available information.&lt;br/&gt;&lt;br/&gt;I have an implementation of inv-history-tracking that uses a 2b/tx&lt;br/&gt;alternative to getdata for tx, and I&amp;#39;ve had that running between two&lt;br/&gt;nodes for ~2 weeks now. I&amp;#39;ve been working on a better implementation&lt;br/&gt;of that plus the sparseblock messages, and I&amp;#39;ll have the sparseblock&lt;br/&gt;prototype (suitable for something like Gregory&amp;#39;s remember-last-N&lt;br/&gt;approach) up and running in a couple of days or so. The prototype&lt;br/&gt;handles assigning compact identifiers to transactions and using those&lt;br/&gt;in block messages; there&amp;#39;s a lot of bit-packing sort of tweaks that&lt;br/&gt;can be done that I&amp;#39;m not including in the initial prototype. The&lt;br/&gt;prototype will be able to log history-hit rates, so if we run a few&lt;br/&gt;sparseblocks nodes connected to each other for a while we should get a&lt;br/&gt;good idea of how much efficiency gain this provides, and how it can be&lt;br/&gt;improved. This approach even without the intensive bit packing has a&lt;br/&gt;total vtx transmission size of 2*nTxKnown &#43; 1*nTxUnknown &#43;&lt;br/&gt;nBytesTxUnknown, where only a small window of very recent transactions&lt;br/&gt;and any transactions that have fallen out of the history limit would&lt;br/&gt;be mutually known but not known to be known.&lt;br/&gt;&lt;br/&gt;It would be possible to nearly eliminate even that overhead for both&lt;br/&gt;known and unknown transactions with compact descriptions of block tx&lt;br/&gt;inclusion and ordering policies as Gavin brought up, for which&lt;br/&gt;something like scripts defining priority formulas would be a possible&lt;br/&gt;implementation (&lt;a href=&#34;https://gist.github.com/kazcw/43c97d3924326beca87d#ordering-policy&#34;&gt;https://gist.github.com/kazcw/43c97d3924326beca87d#ordering-policy&lt;/a&gt;&lt;br/&gt;-- n.b. most of the rest of the gist is currently outdated). But since&lt;br/&gt;priority scripts are themselves more complicated than the rest of the&lt;br/&gt;sparseblock implementation, and basic sparseblocks achieve the vast&lt;br/&gt;majority of bandwidth savings, I think it&amp;#39;s worth implementing&lt;br/&gt;sparseblocks without priority scripts now and then using priority&lt;br/&gt;scripts for sparseblocks2 along with all the other things they can do&lt;br/&gt;later.&lt;br/&gt;&lt;br/&gt;Set reconciliation does look like a great way to synchronize mempools.&lt;br/&gt;I&amp;#39;ve been thinking, contextless low-cost mempool exchange would enable&lt;br/&gt;a node to have one or more &amp;#34;roaming&amp;#34; peer slots -- connect to a node,&lt;br/&gt;fill in each other&amp;#39;s mempools, move on to another peer. It seems like&lt;br/&gt;this would go a long way to mitigate potential pathological network&lt;br/&gt;topologies -- it would make it very difficult to sybil attack a node&lt;br/&gt;(barring an attacker in a position to spoof IP addresses), and if a&lt;br/&gt;serious bug or DoS attack caused the network to start to partition&lt;br/&gt;itself due to DoS bans, it only takes occasional roamers crossing the&lt;br/&gt;partition to keep both sides generally in sync.&lt;br/&gt;Efficient mempool synchronization would also increase the efficacy of&lt;br/&gt;channel-memory sparseblocks: it picks up transactions too old to have&lt;br/&gt;been exchanged via invs, and could also allow nodes to know exactly&lt;br/&gt;what transactions their peers have discarded.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Jul 31, 2014 at 8:31 AM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; I&amp;#39;ve been reading up on set reconciliation algorithms, and thinking about&lt;br/&gt;&amp;gt; constant-bandwidth propagation of new block announcements.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Emin:  the approach in this paper:&lt;br/&gt;&amp;gt; What&amp;#39;s the Difference? Efficient Set Reconciliation without Prior Context&lt;br/&gt;&amp;gt;  &lt;a href=&#34;http://conferences.sigcomm.org/sigcomm/2011/papers/sigcomm/p218.pdf&#34;&gt;http://conferences.sigcomm.org/sigcomm/2011/papers/sigcomm/p218.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ... looks like it would be much better suited for Bitcoin&amp;#39;s use case,&lt;br/&gt;&amp;gt; because&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; a) it looks much easier to implement (no polynomial math)&lt;br/&gt;&amp;gt; b) CPU/latency versus bandwidth tradeoff looks better (somewhat higher&lt;br/&gt;&amp;gt; bandwidth than Yaron&amp;#39;s method, but much lower CPU/latency cost)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Kaz: how much time do you have to work on this?  Perhaps we can get a&lt;br/&gt;&amp;gt; road-map for a prototype and split up work. I actually think the first step&lt;br/&gt;&amp;gt; might be to gather a couple days worth of tx / block message broadcasts from&lt;br/&gt;&amp;gt; a few network nodes and then create a test/benchmark harness that will tell&lt;br/&gt;&amp;gt; us how much overlap there is in what nodes know and how much faster our&lt;br/&gt;&amp;gt; newer algorithms are.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Gavin Andresen&lt;br/&gt;&lt;br/&gt;On Thu, Jul 31, 2014 at 12:10 PM, Emin Gün Sirer &amp;lt;el33th4x0r at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; Hi Gavin,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Great find. I read (and sadly forgot) this paper back in 2011 and indeed,&lt;br/&gt;&amp;gt; I&amp;#39;d also pick this approach over Yaron&amp;#39;s. My reasons:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; a. this paper provides a more concrete implementation roadmap that has been&lt;br/&gt;&amp;gt; explored thoroughly. While I understand Yaron&amp;#39;s technique, there are still&lt;br/&gt;&amp;gt; various design decisions (e.g. estimating the set difference involves a&lt;br/&gt;&amp;gt; doubling process; representing TX ids seems to take up a lot of space) that&lt;br/&gt;&amp;gt; are left unspec&amp;#39;ed for an implementation. (In general, Yaron is a&lt;br/&gt;&amp;gt; theoretician at heart and Varghese is a very practical guy, there will be&lt;br/&gt;&amp;gt; far fewer unforeseen issues with a Varghese tried and tested algorithm).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; b. on the surface, this paper seems to use a bit more bandwidth in that it&lt;br/&gt;&amp;gt; requires O(size of set diff * log of keyspace) vs. Yaron&amp;#39;s claim of O(size&lt;br/&gt;&amp;gt; of set diff). But I believe that in practice Yaron&amp;#39;s method would also have&lt;br/&gt;&amp;gt; an O(log of keyspace) multiplier in place because the roots of his&lt;br/&gt;&amp;gt; polynomial (the TX ids) have to be represented as numbers, and that requires&lt;br/&gt;&amp;gt; log-of-keyspace bits. I suspect that Yaron is cleverly folding that factor&lt;br/&gt;&amp;gt; into the constant factor of O notation, and Varghese et al are being polite&lt;br/&gt;&amp;gt; by not pointing it out too overtly. So I suspect that the two schemes are&lt;br/&gt;&amp;gt; actually identical in terms of space complexity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; c. this technique is far more efficient in decoding than Yaron&amp;#39;s, which&lt;br/&gt;&amp;gt; requires Gaussian elimination, which in turn is O(d^3).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If Bitcoin adopts this technique, it&amp;#39;ll be adopting one of the best known&lt;br/&gt;&amp;gt; techniques from the research community.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; BTW, don&amp;#39;t hesitate to ping me with researchy issues in the future; I&amp;#39;ll&lt;br/&gt;&amp;gt; gladly point the effort in the right direction if I can.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - egs&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Jul 31, 2014 at 6:31 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;ve been reading up on set reconciliation algorithms, and thinking about&lt;br/&gt;&amp;gt;&amp;gt; constant-bandwidth propagation of new block announcements.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Emin:  the approach in this paper:&lt;br/&gt;&amp;gt;&amp;gt; What&amp;#39;s the Difference? Efficient Set Reconciliation without Prior Context&lt;br/&gt;&amp;gt;&amp;gt;  &lt;a href=&#34;http://conferences.sigcomm.org/sigcomm/2011/papers/sigcomm/p218.pdf&#34;&gt;http://conferences.sigcomm.org/sigcomm/2011/papers/sigcomm/p218.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ... looks like it would be much better suited for Bitcoin&amp;#39;s use case,&lt;br/&gt;&amp;gt;&amp;gt; because&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; a) it looks much easier to implement (no polynomial math)&lt;br/&gt;&amp;gt;&amp;gt; b) CPU/latency versus bandwidth tradeoff looks better (somewhat higher&lt;br/&gt;&amp;gt;&amp;gt; bandwidth than Yaron&amp;#39;s method, but much lower CPU/latency cost)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Kaz: how much time do you have to work on this?  Perhaps we can get a&lt;br/&gt;&amp;gt;&amp;gt; road-map for a prototype and split up work. I actually think the first step&lt;br/&gt;&amp;gt;&amp;gt; might be to gather a couple days worth of tx / block message broadcasts from&lt;br/&gt;&amp;gt;&amp;gt; a few network nodes and then create a test/benchmark harness that will tell&lt;br/&gt;&amp;gt;&amp;gt; us how much overlap there is in what nodes know and how much faster our&lt;br/&gt;&amp;gt;&amp;gt; newer algorithms are.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; Gavin Andresen&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T15:24:11Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsw5jzh35agytegq0nj2muknz48yjp0fvu3atxe7vnpzkmng0y5f7czyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkq0hnm9l</id>
    
      <title type="html">📅 Original date posted:2014-07-18 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsw5jzh35agytegq0nj2muknz48yjp0fvu3atxe7vnpzkmng0y5f7czyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkq0hnm9l" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2pk2m9e9xam7ftqv7urzsp6wzzquwhugpr5xn4nuxhrtdp4qmvxcpyd4qu&#39;&gt;nevent1q…d4qu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-18&lt;br/&gt;📝 Original message:That&amp;#39;s true, but I think it can be balanced with the usefulness of&lt;br/&gt;knowing what messages a node has received. An invack would be sent if&lt;br/&gt;N invs have been received without any resulting getdata; since we&amp;#39;re&lt;br/&gt;keeping track of peer inv order, one message can cover an arbitrarily&lt;br/&gt;large series of invs.&lt;br/&gt;&lt;br/&gt;On Fri, Jul 18, 2014 at 10:48 AM, Jeff Garzik &amp;lt;jgarzik at bitpay.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; On a flood-fill network, you don&amp;#39;t want to create a storm of &amp;#34;I&lt;br/&gt;&amp;gt; already have this&amp;#34; replies.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Fri, Jul 18, 2014 at 1:39 PM, Kaz Wesley &amp;lt;keziahw at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; Peers exchanging mempool priority policies is great; that accomplishes&lt;br/&gt;&amp;gt;&amp;gt; the flexibility in what txes to remember that I was going for with the&lt;br/&gt;&amp;gt;&amp;gt; forget-filters, but much more neatly, with less overhead and some side&lt;br/&gt;&amp;gt;&amp;gt; benefits.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Here&amp;#39;s what I&amp;#39;m picturing now:&lt;br/&gt;&amp;gt;&amp;gt; - exchange priority policies in peer introductions&lt;br/&gt;&amp;gt;&amp;gt; - assign unique sequential IDs in the order the transactions were&lt;br/&gt;&amp;gt;&amp;gt; inved (per peer)&lt;br/&gt;&amp;gt;&amp;gt; - receiving a getdata for a tx updates last-known-peer-received inv to&lt;br/&gt;&amp;gt;&amp;gt; all invs up to the one referenced&lt;br/&gt;&amp;gt;&amp;gt; - include ID-last-received, last-known-peer-received in sparse block&lt;br/&gt;&amp;gt;&amp;gt; - reference txes in sparse block by index in receiver&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; prioritiziation with peer&amp;#39;s sent invs up to ID-last-received and&lt;br/&gt;&amp;gt;&amp;gt; sender&amp;#39;s prior invs up to last-known-peer-received&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Possible new messages:&lt;br/&gt;&amp;gt;&amp;gt; - sparseblock&lt;br/&gt;&amp;gt;&amp;gt; - invack message a node can send at times when it&amp;#39;s received a bunch&lt;br/&gt;&amp;gt;&amp;gt; of invs it already has, so it hasn&amp;#39;t acked with a getdata in a while&lt;br/&gt;&amp;gt;&amp;gt; - gettx: getdata, but using new sequential ID to save 28 bytes per tx&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It seems important for ordering policies to be able to be specified in&lt;br/&gt;&amp;gt;&amp;gt; as much detail as possible. Parameters that should be available:&lt;br/&gt;&amp;gt;&amp;gt; - total inputs&lt;br/&gt;&amp;gt;&amp;gt; - total outputs&lt;br/&gt;&amp;gt;&amp;gt; - bytes&lt;br/&gt;&amp;gt;&amp;gt; - coin days destroyed&lt;br/&gt;&amp;gt;&amp;gt; - net UTXO size change&lt;br/&gt;&amp;gt;&amp;gt; - sigops&lt;br/&gt;&amp;gt;&amp;gt; - is data carrier&lt;br/&gt;&amp;gt;&amp;gt; - is output raw multisig&lt;br/&gt;&amp;gt;&amp;gt; - age in mempool&lt;br/&gt;&amp;gt;&amp;gt; - what else?&lt;br/&gt;&amp;gt;&amp;gt; This parameter set should be extensible to allow for unforeseen future factors.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Ordering policies should allow arbitrary algebraic combinations of&lt;br/&gt;&amp;gt;&amp;gt; their parameters, as well as thresholds. Boolean combinations of&lt;br/&gt;&amp;gt;&amp;gt; sub-policies would also be desirable. This could be implemented with a&lt;br/&gt;&amp;gt;&amp;gt; tx-script-like stack-based language, in which each supported tx&lt;br/&gt;&amp;gt;&amp;gt; property is pushed onto the stack by a particular opcode, and&lt;br/&gt;&amp;gt;&amp;gt; &#43;-*//min/max/boolean operators combine them to yield the sort key.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Difficult parameters:&lt;br/&gt;&amp;gt;&amp;gt; * Coin-days-destroyed: changes, peers need agreement on when (if?)&lt;br/&gt;&amp;gt;&amp;gt; it&amp;#39;s recalculated. Probably can just not recalculate, but peers still&lt;br/&gt;&amp;gt;&amp;gt; need agreement on &amp;#34;time seen&amp;#34; to get CDD.&lt;br/&gt;&amp;gt;&amp;gt; * Age in mempool: seems intractable in terms of time, but could be&lt;br/&gt;&amp;gt;&amp;gt; done easily in terms of &amp;#34;how many txes old is this sequential ID&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; One potential pitfall: this allows for an environment of completely&lt;br/&gt;&amp;gt;&amp;gt; heterogeneous mempool policies. I think that&amp;#39;s a good thing, but we&lt;br/&gt;&amp;gt;&amp;gt; need to avoid a situation where only least-common-denominator&lt;br/&gt;&amp;gt;&amp;gt; transactions make it farther than a hop or two, and we don&amp;#39;t want&lt;br/&gt;&amp;gt;&amp;gt; nodes to have a strong preference for connecting to like-minded peers&lt;br/&gt;&amp;gt;&amp;gt; since clustering reduces overall connectivity. It may be worthwhile to&lt;br/&gt;&amp;gt;&amp;gt; add a parallel mechanism for relay policies, to differentiate between&lt;br/&gt;&amp;gt;&amp;gt; what a node would keep in its mempool vs. what it wouldn&amp;#39;t even relay&lt;br/&gt;&amp;gt;&amp;gt; and doesn&amp;#39;t want to see at all. Relay policies could be specified just&lt;br/&gt;&amp;gt;&amp;gt; like prioritization policies, but with the final stack value evaluated&lt;br/&gt;&amp;gt;&amp;gt; in a boolean context.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; An interesting additional use of policy-scripts would be a&lt;br/&gt;&amp;gt;&amp;gt; standardized way for miners to include a policy script in a coinbase,&lt;br/&gt;&amp;gt;&amp;gt; allowing miners a mechanism to advertise things like their relative&lt;br/&gt;&amp;gt;&amp;gt; price of sigops vs bytes. Nodes may then choose to take this&lt;br/&gt;&amp;gt;&amp;gt; information into account in order to optimize their mempool policies&lt;br/&gt;&amp;gt;&amp;gt; for likelihood of consistency with future blocks. Since policy scripts&lt;br/&gt;&amp;gt;&amp;gt; provide only relative information on prices of different transaction&lt;br/&gt;&amp;gt;&amp;gt; properties rather than an absolute fee, this should not allow miners&lt;br/&gt;&amp;gt;&amp;gt; to &amp;#34;vote fees up&amp;#34;, although care would need to be taken they wouldn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; be able to drive up prices by claiming common transaction types are at&lt;br/&gt;&amp;gt;&amp;gt; the high end of the fee scale.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ------------------------------------------------------------------------------&lt;br/&gt;&amp;gt;&amp;gt; Want fast and easy access to all the code in your enterprise? Index and&lt;br/&gt;&amp;gt;&amp;gt; search up to 200,000 lines of code with a free copy of Black Duck&lt;br/&gt;&amp;gt;&amp;gt; Code Sight - the same software that powers the world&amp;#39;s largest code&lt;br/&gt;&amp;gt;&amp;gt; search on Ohloh, the Black Duck Open Hub! Try it now.&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;http://p.sf.net/sfu/bds&#34;&gt;http://p.sf.net/sfu/bds&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin-development mailing list&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin-development at lists.sourceforge.net&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&#34;&gt;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Jeff Garzik&lt;br/&gt;&amp;gt; Bitcoin core developer and open source evangelist&lt;br/&gt;&amp;gt; BitPay, Inc.      &lt;a href=&#34;https://bitpay.com/&#34;&gt;https://bitpay.com/&lt;/a&gt;
    </content>
    <updated>2023-06-07T15:24:09Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8a326h6wnmatvp7pykudrtyet6kn8qa4q6jty6nuhvxxe7tp6y5czyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqe99lu5</id>
    
      <title type="html">📅 Original date posted:2014-07-18 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8a326h6wnmatvp7pykudrtyet6kn8qa4q6jty6nuhvxxe7tp6y5czyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqe99lu5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw5jzh35agytegq0nj2muknz48yjp0fvu3atxe7vnpzkmng0y5f7crs6pfs&#39;&gt;nevent1q…6pfs&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-18&lt;br/&gt;📝 Original message:I&amp;#39;ve updated the gist, and added an additional proposal that I think&lt;br/&gt;meshes well:&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/kazcw/43c97d3924326beca87d#ultra-fast-block-validation&#34;&gt;https://gist.github.com/kazcw/43c97d3924326beca87d#ultra-fast-block-validation&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;sparseblocks &#43; UFBV would tighten the new-block process to this (when&lt;br/&gt;txes have been received in advance):&lt;br/&gt;- receive block (~2kB for 1000 tx)&lt;br/&gt;- check whether block contains txes known to belong to conflict-sets,&lt;br/&gt;and if so whether more than one tx from a single conflict-set has been&lt;br/&gt;included (a few operations on very small sets)&lt;br/&gt;- relay block (~2kB)&lt;br/&gt;&lt;br/&gt;The benefits of these changes only occur when the transactions have&lt;br/&gt;been seen in advance, but incentivizing ahead-of-block transaction&lt;br/&gt;propogation is a plus, as Jeff mentioned; working on a block without&lt;br/&gt;first ensuring peers have its transactions would be very expensive&lt;br/&gt;from a miner&amp;#39;s point of view.
    </content>
    <updated>2023-06-07T15:24:09Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsddvjj6kxd0sv5qfhy0jvamkmareq9m6zazlk9k0xc754q34hys4czyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqky4xc5</id>
    
      <title type="html">📅 Original date posted:2014-07-18 📝 Original message:Peers ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsddvjj6kxd0sv5qfhy0jvamkmareq9m6zazlk9k0xc754q34hys4czyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqky4xc5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2jxhrsj7xrrfht9p9d2flj2qndadmct7u723v9tjdtfmennqf28stvrkvx&#39;&gt;nevent1q…rkvx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-18&lt;br/&gt;📝 Original message:Peers exchanging mempool priority policies is great; that accomplishes&lt;br/&gt;the flexibility in what txes to remember that I was going for with the&lt;br/&gt;forget-filters, but much more neatly, with less overhead and some side&lt;br/&gt;benefits.&lt;br/&gt;&lt;br/&gt;Here&amp;#39;s what I&amp;#39;m picturing now:&lt;br/&gt;- exchange priority policies in peer introductions&lt;br/&gt;- assign unique sequential IDs in the order the transactions were&lt;br/&gt;inved (per peer)&lt;br/&gt;- receiving a getdata for a tx updates last-known-peer-received inv to&lt;br/&gt;all invs up to the one referenced&lt;br/&gt;- include ID-last-received, last-known-peer-received in sparse block&lt;br/&gt;- reference txes in sparse block by index in receiver&amp;#39;s&lt;br/&gt;prioritiziation with peer&amp;#39;s sent invs up to ID-last-received and&lt;br/&gt;sender&amp;#39;s prior invs up to last-known-peer-received&lt;br/&gt;&lt;br/&gt;Possible new messages:&lt;br/&gt;- sparseblock&lt;br/&gt;- invack message a node can send at times when it&amp;#39;s received a bunch&lt;br/&gt;of invs it already has, so it hasn&amp;#39;t acked with a getdata in a while&lt;br/&gt;- gettx: getdata, but using new sequential ID to save 28 bytes per tx&lt;br/&gt;&lt;br/&gt;It seems important for ordering policies to be able to be specified in&lt;br/&gt;as much detail as possible. Parameters that should be available:&lt;br/&gt;- total inputs&lt;br/&gt;- total outputs&lt;br/&gt;- bytes&lt;br/&gt;- coin days destroyed&lt;br/&gt;- net UTXO size change&lt;br/&gt;- sigops&lt;br/&gt;- is data carrier&lt;br/&gt;- is output raw multisig&lt;br/&gt;- age in mempool&lt;br/&gt;- what else?&lt;br/&gt;This parameter set should be extensible to allow for unforeseen future factors.&lt;br/&gt;&lt;br/&gt;Ordering policies should allow arbitrary algebraic combinations of&lt;br/&gt;their parameters, as well as thresholds. Boolean combinations of&lt;br/&gt;sub-policies would also be desirable. This could be implemented with a&lt;br/&gt;tx-script-like stack-based language, in which each supported tx&lt;br/&gt;property is pushed onto the stack by a particular opcode, and&lt;br/&gt;&#43;-*//min/max/boolean operators combine them to yield the sort key.&lt;br/&gt;&lt;br/&gt;Difficult parameters:&lt;br/&gt;* Coin-days-destroyed: changes, peers need agreement on when (if?)&lt;br/&gt;it&amp;#39;s recalculated. Probably can just not recalculate, but peers still&lt;br/&gt;need agreement on &amp;#34;time seen&amp;#34; to get CDD.&lt;br/&gt;* Age in mempool: seems intractable in terms of time, but could be&lt;br/&gt;done easily in terms of &amp;#34;how many txes old is this sequential ID&amp;#34;&lt;br/&gt;&lt;br/&gt;One potential pitfall: this allows for an environment of completely&lt;br/&gt;heterogeneous mempool policies. I think that&amp;#39;s a good thing, but we&lt;br/&gt;need to avoid a situation where only least-common-denominator&lt;br/&gt;transactions make it farther than a hop or two, and we don&amp;#39;t want&lt;br/&gt;nodes to have a strong preference for connecting to like-minded peers&lt;br/&gt;since clustering reduces overall connectivity. It may be worthwhile to&lt;br/&gt;add a parallel mechanism for relay policies, to differentiate between&lt;br/&gt;what a node would keep in its mempool vs. what it wouldn&amp;#39;t even relay&lt;br/&gt;and doesn&amp;#39;t want to see at all. Relay policies could be specified just&lt;br/&gt;like prioritization policies, but with the final stack value evaluated&lt;br/&gt;in a boolean context.&lt;br/&gt;&lt;br/&gt;An interesting additional use of policy-scripts would be a&lt;br/&gt;standardized way for miners to include a policy script in a coinbase,&lt;br/&gt;allowing miners a mechanism to advertise things like their relative&lt;br/&gt;price of sigops vs bytes. Nodes may then choose to take this&lt;br/&gt;information into account in order to optimize their mempool policies&lt;br/&gt;for likelihood of consistency with future blocks. Since policy scripts&lt;br/&gt;provide only relative information on prices of different transaction&lt;br/&gt;properties rather than an absolute fee, this should not allow miners&lt;br/&gt;to &amp;#34;vote fees up&amp;#34;, although care would need to be taken they wouldn&amp;#39;t&lt;br/&gt;be able to drive up prices by claiming common transaction types are at&lt;br/&gt;the high end of the fee scale.
    </content>
    <updated>2023-06-07T15:24:08Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2627sh2c93fp94rnywshf22yvj34yf4qaehyvgktvc9jc7wwhueqzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqsp2tma</id>
    
      <title type="html">📅 Original date posted:2014-07-17 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2627sh2c93fp94rnywshf22yvj34yf4qaehyvgktvc9jc7wwhueqzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqsp2tma" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvsxff4p5g88u4fhgcg3mkhjektflameqh99t9tz45vw474kk853qh4pmyl&#39;&gt;nevent1q…pmyl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-17&lt;br/&gt;📝 Original message:I&amp;#39;m moving this design document to a gist so that I can integrate&lt;br/&gt;changes as they come up:&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/kazcw/43c97d3924326beca87d&#34;&gt;https://gist.github.com/kazcw/43c97d3924326beca87d&lt;/a&gt;&lt;br/&gt;One thing that I think is an important improvement over my initial&lt;br/&gt;idea is that the bloom filters don&amp;#39;t need to be kept around and built&lt;br/&gt;up, they can just be one-shot and clear any matching entries from the&lt;br/&gt;set of known-knowns upon arrival -- provided a node is careful to&lt;br/&gt;ensure the txes it wants to forget are known-known-known (which isn&amp;#39;t&lt;br/&gt;as bad as it sounds) to the peer it&amp;#39;s telling it&amp;#39;s forgetting them&lt;br/&gt;when the forget-filter arrives.&lt;br/&gt;&lt;br/&gt;On Thu, Jul 17, 2014 at 3:46 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A couple of half-baked thoughts:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Jul 17, 2014 at 5:35 PM, Kaz Wesley &amp;lt;keziahw at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If there&amp;#39;s support for this proposal, I can begin working on the specific&lt;br/&gt;&amp;gt;&amp;gt; implementation details, such as the bloom filters, message format, and&lt;br/&gt;&amp;gt;&amp;gt; capability advertisment, and draft a BIP once I have a concrete proposal for&lt;br/&gt;&amp;gt;&amp;gt; what those would look like and a corresponding precise cost/benefit analysis.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d encourage you to code up a prototype first (or at the same time), in whatever programming language / networking library you&amp;#39;re most familiar with.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Maybe not even using the existing p2p protocol; there could be a mining-only very-fast-block-propagation network separate from the existing p2p network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Combining your optimizations with &amp;#34;broadcast as many near-miss blocks as bandwidth will allow&amp;#34; on a mining backbone network should allow insanely fast propagation of most newly solved blocks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Gavin Andresen&lt;br/&gt;&lt;br/&gt;Thanks Gavin, I am planning on working out the design details as I&lt;br/&gt;work on a prototype. I have the beginnings of a previous shot at&lt;br/&gt;implementing this in bitcoind to start from but my new design has some&lt;br/&gt;important improvements to add to that.&lt;br/&gt;&lt;br/&gt;-kaz
    </content>
    <updated>2023-06-07T15:24:07Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvlsvdt4j29ug5sajt3jvex2fkragr08psayjvma2qhpec9cczvyqzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqepkqqd</id>
    
      <title type="html">📅 Original date posted:2014-07-17 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvlsvdt4j29ug5sajt3jvex2fkragr08psayjvma2qhpec9cczvyqzyracdcya52v56jvrreh6xn9703c6a7vs2ny2eyxggwx9t995echkqepkqqd" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr2p6j0t8kv52ytlqcuuv9z23jp379ah0ry2ejrvqfzjlhr8v9wgs89xsh3&#39;&gt;nevent1q…xsh3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-07-17&lt;br/&gt;📝 Original message:OVERVIEW&lt;br/&gt;&lt;br/&gt;To improve block propagation, add a new block message that doesn&amp;#39;t include&lt;br/&gt;transactions the peer is known to have. The message must never require an&lt;br/&gt;additional round trip due to any transactions the peer doesn&amp;#39;t have, but&lt;br/&gt;should&lt;br/&gt;be compatible with peers sometimes forgetting transactions they have known.&lt;br/&gt;&lt;br/&gt;APPROACH&lt;br/&gt;&lt;br/&gt;For peers advertising support for squashed blocks: a node tracks what txes&lt;br/&gt;it&lt;br/&gt;knows each peer has seen (inv received, tx sent, tx appeared in competing&lt;br/&gt;block&lt;br/&gt;known to peer). Nodes push block contents as txes-not-already-known &#43;&lt;br/&gt;txids-known.&lt;br/&gt;&lt;br/&gt;A node should be able to forget invs it has seen without invalidating what&lt;br/&gt;peers&lt;br/&gt;know about its known txes. To allow for this, a node assembles a bloom&lt;br/&gt;filter of&lt;br/&gt;a set of txes it is going to forget, and sends it to peers. The node can&lt;br/&gt;erase&lt;br/&gt;the txes as soon as no blocks requested before the filter was pushed are in&lt;br/&gt;flight (relying on the assumption that messages can be expected to be&lt;br/&gt;processed&lt;br/&gt;in order).&lt;br/&gt;&lt;br/&gt;When a node receives a forgotten-filter, it ORs it into its&lt;br/&gt;forgotten-filter for&lt;br/&gt;that peer. Any transactions matching the forgotten-filter are always&lt;br/&gt;included in&lt;br/&gt;full with a block. If the filter is getting full, the node can just clear it&lt;br/&gt;along with peer.setTxKnown.&lt;br/&gt;&lt;br/&gt;COSTS&lt;br/&gt;&lt;br/&gt;Bloom filtering:&lt;br/&gt;Since the bloom filter is likely to grow slowly and can be dropped when it&lt;br/&gt;is&lt;br/&gt;becoming full, a cheap set of hash functions and element size can be used to&lt;br/&gt;keep overhead more restricted than the bloom filtering done for spv. It&amp;#39;s&lt;br/&gt;important for testing txes against the filter to be fast so that it doesn&amp;#39;t&lt;br/&gt;delay pushing the block more than the squashing helps.&lt;br/&gt;Nodes currently forget txes rarely, so the bloom filters would only need to&lt;br/&gt;be&lt;br/&gt;used at all under conditions that are not currently common -- but I think&lt;br/&gt;they&amp;#39;re important to include to allow for different node behavior in this&lt;br/&gt;regard&lt;br/&gt;in the future.&lt;br/&gt;&lt;br/&gt;Tracking txes known to peers:&lt;br/&gt;A multimap of txid-&amp;gt;peerId would obviate the current setCurrentlyKnown, and&lt;br/&gt;would not take much more space since each additional peer adds about 1&lt;br/&gt;peerId&lt;br/&gt;per txid (setCurrentlyKnown keeps a uint256 per peer per txid, although it&lt;br/&gt;tracks somewhat fewer txid per node).&lt;br/&gt;&lt;br/&gt;Potential vulnerabilities:&lt;br/&gt;- Since the bloom filters will have lower maximum overhead than the current&lt;br/&gt;SPV&lt;br/&gt;  filters and can be dropped at will, this shouldn&amp;#39;t enable any resource&lt;br/&gt;  exhaustion attacks that aren&amp;#39;t already possible.&lt;br/&gt;- A squashed block with bogus or missing data would be easily detected not&lt;br/&gt;to&lt;br/&gt;  produce the correct merkle root for its BlockHeader.&lt;br/&gt;&lt;br/&gt;BENEFITS&lt;br/&gt;&lt;br/&gt;Assuming a fairly typical 500 tx block with transaction sizes averaging 300b&lt;br/&gt;(both on the low side), for a 150kb block:&lt;br/&gt;&lt;br/&gt;% pruned | block size reduction | relative size reduction&lt;br/&gt;-------- | -------------------- | -----------------------&lt;br/&gt;100      | 134 kB               | 89%&lt;br/&gt;50       | 67 kB                | 45%&lt;br/&gt;25       | 33.5 kB              | 17%&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve been doing some logging, and when my node pushes a block to a peer it&lt;br/&gt;seems&lt;br/&gt;to typically know that a peer has seen most of the txes in the block. Even&lt;br/&gt;in&lt;br/&gt;the case of a small block with only 25% known-known transactions, total&lt;br/&gt;network&lt;br/&gt;bandwidth saved is greater than the bloom filters transmitted unless a node&lt;br/&gt;is&lt;br/&gt;forgetting transactions so rapidly that it pushes new maximum-size&lt;br/&gt;forget-filters every block.&lt;br/&gt;&lt;br/&gt;So this is a net gain even in total bandwidth usage, but most importantly&lt;br/&gt;it&amp;#39;s&lt;br/&gt;an improvement in block propagation rate and in how block propagation rate&lt;br/&gt;scales with additional transactions.&lt;br/&gt;&lt;br/&gt;IMPLEMENTATION QUESTIONS&lt;br/&gt;&lt;br/&gt;How should block squashing capability be advertised -- new service bit?&lt;br/&gt;&lt;br/&gt;Bloom filters:&lt;br/&gt;- How fast to test against could a suitable bloom filter be made?&lt;br/&gt;- How much memory would each filter need to take, at maximum?&lt;br/&gt;- Can the inputs all being 32 byte hashes be used to optimize filter hash&lt;br/&gt;  calculations?&lt;br/&gt;&lt;br/&gt;ROADMAP&lt;br/&gt;&lt;br/&gt;If there&amp;#39;s support for this proposal, I can begin working on the specific&lt;br/&gt;implementation details, such as the bloom filters, message format, and&lt;br/&gt;capability advertisment, and draft a BIP once I have a concrete proposal for&lt;br/&gt;what those would look like and a corresponding precise cost/benefit&lt;br/&gt;analysis.&lt;br/&gt;&lt;br/&gt;--kaz&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/20140717/810d2f69/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20140717/810d2f69/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:24:06Z</updated>
  </entry>

</feed>