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




  <entry>
    <id>https://nostr.ae/nevent1qqsv2tlc6denw8l0tam3ynzz4hhhlrcgt4gmtqmwcrnw5jfzdsamanczyzttthxcam06gqan49xptua6k89ss3ek5re0zvq3r8gcrygfanqx69lvcr4</id>
    
      <title type="html">📅 Original date posted:2016-05-07 📝 Original message:There ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv2tlc6denw8l0tam3ynzz4hhhlrcgt4gmtqmwcrnw5jfzdsamanczyzttthxcam06gqan49xptua6k89ss3ek5re0zvq3r8gcrygfanqx69lvcr4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8hvr2t2gchaeun5r6f87yju9yzvxp65ckjqq3dk2g3e7z4nzxg8g0rlz2q&#39;&gt;nevent1q…lz2q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-05-07&lt;br/&gt;📝 Original message:There was some confusion over the following email which was posted to the list&lt;br/&gt;which appears to have been cancelled before a decision could be reached.&lt;br/&gt;&lt;br/&gt;Please note the email seems inflammatory in the &amp;#34;acknowledgement&amp;#34; section and&lt;br/&gt;really should have been rewritten to contain specific details of the objection&lt;br/&gt;and corrections expected.&lt;br/&gt;&lt;br/&gt;To be clear posts to the mailing list are either approved, or rejected for not&lt;br/&gt;meeting the posting standards. This allows the author to make a quick correction&lt;br/&gt;and resubmit. All rejections are cc&amp;#39;d to&lt;br/&gt;&lt;a href=&#34;https://lists.ozlabs.org/pipermail/bitcoin-dev-moderation/&#34;&gt;https://lists.ozlabs.org/pipermail/bitcoin-dev-moderation/&lt;/a&gt;&lt;br/&gt;for transparency. Sometimes moderators get delayed - this week has been a busy&lt;br/&gt;with lots of distractions one for everyone :)&lt;br/&gt;&lt;br/&gt;I&amp;#39;m copying the entire message below:&lt;br/&gt;&lt;br/&gt;---------- Forwarded message ----------&lt;br/&gt;From: Tom &amp;lt;tomz at freedommail.ch&amp;gt;&lt;br/&gt;To: bitcoin-dev at lists.linuxfoundation.org, Matt Corallo&lt;br/&gt;&amp;lt;lf-lists at mattcorallo.com&amp;gt;&lt;br/&gt;Cc:&lt;br/&gt;Date: Fri, 06 May 2016 13:31:15 &#43;0100&lt;br/&gt;Subject: Re: [bitcoin-dev] Compact Block Relay BIP&lt;br/&gt;On Monday 02 May 2016 22:13:22 Matt Corallo via bitcoin-dev wrote:&lt;br/&gt;&lt;br/&gt;Thanks for putting in the time to make a spec!&lt;br/&gt;&lt;br/&gt;It looks good already, but I do think some more improvements can be made.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; ===Intended Protocol Flow===&lt;br/&gt;I&amp;#39;m not a fan of the solution that a CNode should keep state and talk to&lt;br/&gt;its remote nodes differently while announcing new blocks.&lt;br/&gt;Its too complicated and ultimately counter-productive.&lt;br/&gt;&lt;br/&gt;The problem is that an individual node needs to predict network behaviour in&lt;br/&gt;advance. With the downside that if it guesses wrong that both nodes end up&lt;br/&gt;paying for the wrong guess.&lt;br/&gt;This is not a good way to design a p2p layer.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I would suggest that a new block is announced to all nodes equally and then&lt;br/&gt;individual nodes can respond with a request of either a &amp;#39;compact&amp;#39; or a&lt;br/&gt;normal block.&lt;br/&gt;This is much more in line with the current design as well.&lt;br/&gt;&lt;br/&gt;Detection if remote nodes support compact blocks, for the purpose of&lt;br/&gt;requesting a compact-block, can be done either via a network-bit or just a&lt;br/&gt;protocol version. Or something else entirely, if you have better&lt;br/&gt;suggestions.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Variable-length integers: bytes are a MSB base-128 encoding of the&lt;br/&gt;&amp;gt; number.&lt;br/&gt;&amp;gt; The high bit in each byte signifies whether another digit follows.&lt;br/&gt;&amp;gt; [snip bitwise spec]&lt;br/&gt;&lt;br/&gt;I suggest just referring to UTF-8 which describes this just fine.&lt;br/&gt;it is good practice to refer to existing specs when possible and not copy&lt;br/&gt;the details.&lt;br/&gt;&lt;br/&gt;&amp;gt; ====Short transaction IDs====&lt;br/&gt;&amp;gt; Short transaction IDs are used to represent a transaction without&lt;br/&gt;&amp;gt; sending a full 256-bit hash. They are calculated by:&lt;br/&gt;&amp;gt; # single-SHA256 hashing the block header with the nonce appended (in&lt;br/&gt;&amp;gt; little-endian)&lt;br/&gt;&amp;gt; # XORing each 8-byte chunk of the double-SHA256 transaction hash with&lt;br/&gt;&amp;gt; each corresponding 8-byte chunk of the hash from the previous step&lt;br/&gt;&amp;gt; # Adding each of the XORed 8-byte chunks together (in little-endian)&lt;br/&gt;&amp;gt; iteratively to find the short transaction ID&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think this is needed. Just use the first 8 bytes.&lt;br/&gt;The reason to do xor-ing doesn&amp;#39;t hold up and extra complexity is unneeded.&lt;br/&gt;Especially since you mention some lines down;&lt;br/&gt;&lt;br/&gt;&amp;gt; The short transaction ID calculation is designed to take absolutely&lt;br/&gt;&amp;gt; minimal processing time during block compaction to avoid introducing&lt;br/&gt;&amp;gt; serious DoS vulnerabilities&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;==Acknowledgements==&lt;br/&gt;&lt;br/&gt;I think you need to acknowledge some more people, or just remove this&lt;br/&gt;paragraph.&lt;br/&gt;&lt;br/&gt;Cheers&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;---------- Forwarded message ----------&lt;br/&gt;From: bitcoin-dev-request at lists.linuxfoundation.org&lt;br/&gt;To:&lt;br/&gt;Cc:&lt;br/&gt;Date: Fri, 06 May 2016 12:31:23 &#43;0000&lt;br/&gt;Subject: confirm 37d25406a07ab77823fba5f9b450438c410ccd75&lt;br/&gt;If you reply to this message, keeping the Subject: header intact,&lt;br/&gt;Mailman will discard the held message.  Do this if the message is&lt;br/&gt;spam.  If you reply to this message and include an Approved: header&lt;br/&gt;with the list password in it, the message will be approved for posting&lt;br/&gt;to the list.  The Approved: header can also appear in the first line&lt;br/&gt;of the body of the reply.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Mon, May 2, 2016 at 3:13 PM, Matt Corallo 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;&lt;br/&gt;&amp;gt; The following is a BIP-formatted design spec for compact block relay&lt;br/&gt;&amp;gt; designed to limit on wire bytes during block relay. You can find the&lt;br/&gt;&amp;gt; latest version of this document at&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/TheBlueMatt/bips/blob/master/bip-TODO.mediawiki&#34;&gt;https://github.com/TheBlueMatt/bips/blob/master/bip-TODO.mediawiki&lt;/a&gt;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are several TODO items left on the document as indicated.&lt;br/&gt;&amp;gt; Additionally, the implementation linked at the bottom of the document&lt;br/&gt;&amp;gt; has a few remaining TODO items as well:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * Only request compact-block-announcement from one or two peers at a&lt;br/&gt;&amp;gt; time, as the spec requires.&lt;br/&gt;&amp;gt;  * Request new blocks using MSG_CMPCT_BLOCK where appropriate.&lt;br/&gt;&amp;gt;  * Fill prefilledtxn with more than just the coinbase, as noted by the&lt;br/&gt;&amp;gt; spec, up to 10K in transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Luke (CC&amp;#39;d): Can you assign a BIP number?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Matt&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;   BIP: TODO&lt;br/&gt;&amp;gt;   Title: Compact block relay&lt;br/&gt;&amp;gt;   Author: Matt Corallo &amp;lt;bip at bluematt.me&amp;gt;&lt;br/&gt;&amp;gt;   Status: Draft&lt;br/&gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;   Created: 2016-04-27&lt;br/&gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Abstract==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Compact blocks on the wire as a way to save bandwidth for nodes on the&lt;br/&gt;&amp;gt; P2P network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The key words &amp;#34;MUST&amp;#34;, &amp;#34;MUST NOT&amp;#34;, &amp;#34;REQUIRED&amp;#34;, &amp;#34;SHALL&amp;#34;, &amp;#34;SHALL NOT&amp;#34;,&lt;br/&gt;&amp;gt; &amp;#34;SHOULD&amp;#34;, &amp;#34;SHOULD NOT&amp;#34;, &amp;#34;RECOMMENDED&amp;#34;, &amp;#34;MAY&amp;#34;, and &amp;#34;OPTIONAL&amp;#34; in this&lt;br/&gt;&amp;gt; document are to be interpreted as described in RFC 2119.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Motivation==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Historically, the Bitcoin P2P protocol has not been very bandwidth&lt;br/&gt;&amp;gt; efficient for block relay. Every transaction in a block is included when&lt;br/&gt;&amp;gt; relayed, even though a large number of the transactions in a given block&lt;br/&gt;&amp;gt; are already available to nodes before the block is relayed. This causes&lt;br/&gt;&amp;gt; moderate inbound bandwidth spikes for nodes when receiving blocks, but&lt;br/&gt;&amp;gt; can cause very significant outbound bandwidth spikes for some nodes&lt;br/&gt;&amp;gt; which receive a block before their peers. When such spikes occur, buffer&lt;br/&gt;&amp;gt; bloat can make consumer-grade internet connections temporarily unusable,&lt;br/&gt;&amp;gt; and can delay the relay of blocks to remote peers who may choose to wait&lt;br/&gt;&amp;gt; instead of redundantly requesting the same block from other, less&lt;br/&gt;&amp;gt; congested, peers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, decreasing the bandwidth used during block relay is very useful&lt;br/&gt;&amp;gt; for many individuals running nodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While the goal of this work is explicitly not to reduce block transfer&lt;br/&gt;&amp;gt; latency, it does, as a side effect reduce block transfer latencies in&lt;br/&gt;&amp;gt; some rather significant ways. Additionally, this work forms a foundation&lt;br/&gt;&amp;gt; for future work explicitly targeting low-latency block transfer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Specification==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ===Intended Protocol Flow===&lt;br/&gt;&amp;gt; TODO: Diagrams&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The protocol is intended to be used in two ways, depending on the peers&lt;br/&gt;&amp;gt; and bandwidth available, as discussed [[#Implementation_Details|later]].&lt;br/&gt;&amp;gt; The &amp;#34;high-bandwidth&amp;#34; mode, which nodes may only enable for a few of&lt;br/&gt;&amp;gt; their peers, is enabled by setting the first boolean to 1 in a&lt;br/&gt;&amp;gt; &amp;#34;sendcmpct&amp;#34; message. In this mode, peers send new block announcements&lt;br/&gt;&amp;gt; with the short transaction IDs already, possibly even before fully&lt;br/&gt;&amp;gt; validating the block. In some cases no further round-trip is needed, and&lt;br/&gt;&amp;gt; the receiver can reconstruct the block and process it as usual&lt;br/&gt;&amp;gt; immediately. When some transactions were not available from local&lt;br/&gt;&amp;gt; sources (ie mempool), a getblocktxn/blocktxn roundtrip is neccessary,&lt;br/&gt;&amp;gt; bringing the best-case latency to the same 1.5*RTT minimum time that&lt;br/&gt;&amp;gt; nodes take today, though with significantly less bandwidth usage.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The &amp;#34;low-bandwidth&amp;#34; mode is enabled by setting the first boolean to 0 in&lt;br/&gt;&amp;gt; a &amp;#34;sendcmpct&amp;#34; message. In this mode, peers send new block announcements&lt;br/&gt;&amp;gt; with the usual inv/headers announcements (as per BIP130, and after fully&lt;br/&gt;&amp;gt; validating the block). The receiving peer may then request the block&lt;br/&gt;&amp;gt; using a MSG_CMPCT_BLOCK getdata reqeuest, which will receive a response&lt;br/&gt;&amp;gt; of the header and short transaction IDs. In some cases no further&lt;br/&gt;&amp;gt; round-trip is needed, and the receiver can reconstruct the block and&lt;br/&gt;&amp;gt; process it as usual, taking the same 1.5*RTT minimum time that nodes&lt;br/&gt;&amp;gt; take today, though with significantly less bandwidth usage. When some&lt;br/&gt;&amp;gt; transactions were not available from local sources (ie mempool), a&lt;br/&gt;&amp;gt; getblocktxn/blocktxn roundtrip is neccessary, bringing the best-case&lt;br/&gt;&amp;gt; latency to 2.5*RTT, again with significantly less bandwidth usage than&lt;br/&gt;&amp;gt; today. Because TCP often exhibits worse transfer latency for larger data&lt;br/&gt;&amp;gt; sizes (as a multiple of RTT), total latency is expected to be reduced&lt;br/&gt;&amp;gt; even when full the 2.5*RTT transfer mechanism is used.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ===New data structures===&lt;br/&gt;&amp;gt; Several new data structures are added to the P2P network to relay&lt;br/&gt;&amp;gt; compact blocks: PrefilledTransaction, HeaderAndShortIDs,&lt;br/&gt;&amp;gt; BlockTransactionsRequest, and BlockTransactions. Additionally, we&lt;br/&gt;&amp;gt; introduce a new variable-length integer encoding for use in these data&lt;br/&gt;&amp;gt; structures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the purposes of this section, CompactSize refers to the&lt;br/&gt;&amp;gt; variable-length integer encoding used across the existing P2P protocol&lt;br/&gt;&amp;gt; to encode array lengths, among other things, in 1, 3, 5 or 9 bytes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====New VarInt====&lt;br/&gt;&amp;gt; TODO: I just copied this out of the src...Something that is&lt;br/&gt;&amp;gt; wiki-formatted and more descriptive should be used here isntead.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Variable-length integers: bytes are a MSB base-128 encoding of the number.&lt;br/&gt;&amp;gt; The high bit in each byte signifies whether another digit follows. To make&lt;br/&gt;&amp;gt; sure the encoding is one-to-one, one is subtracted from all but the last&lt;br/&gt;&amp;gt; digit.&lt;br/&gt;&amp;gt; Thus, the byte sequence a[] with length len, where all but the last byte&lt;br/&gt;&amp;gt; has bit 128 set, encodes the number:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (a[len-1] &amp;amp; 0x7F) &#43; sum(i=1..len-1, 128^i*((a[len-i-1] &amp;amp; 0x7F)&#43;1))&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Properties:&lt;br/&gt;&amp;gt; * Very small (0-127: 1 byte, 128-16511: 2 bytes, 16512-2113663: 3 bytes)&lt;br/&gt;&amp;gt; * Every integer has exactly one encoding&lt;br/&gt;&amp;gt; * Encoding does not depend on size of original integer type&lt;br/&gt;&amp;gt; * No redundancy: every (infinite) byte sequence corresponds to a list&lt;br/&gt;&amp;gt;   of encoded integers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 0:         [0x00]  256:        [0x81 0x00]&lt;br/&gt;&amp;gt; 1:         [0x01]  16383:      [0xFE 0x7F]&lt;br/&gt;&amp;gt; 127:       [0x7F]  16384:      [0xFF 0x00]&lt;br/&gt;&amp;gt; 128:  [0x80 0x00]  16511: [0x80 0xFF 0x7F]&lt;br/&gt;&amp;gt; 255:  [0x80 0x7F]  65535: [0x82 0xFD 0x7F]&lt;br/&gt;&amp;gt; 2^32:           [0x8E 0xFE 0xFE 0xFF 0x00]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Several uses of New VarInts below are &amp;#34;differentially encoded&amp;#34;. For&lt;br/&gt;&amp;gt; these, instead of using raw indexes, the number encoded is the&lt;br/&gt;&amp;gt; difference between the current index and the previous index, minus one.&lt;br/&gt;&amp;gt; For example, a first index of 0 implies a real index of 0, a second&lt;br/&gt;&amp;gt; index of 0 thereafter refers to a real index of 1, etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====PrefilledTransaction====&lt;br/&gt;&amp;gt; A PrefilledTransaction structure is used in HeaderAndShortIDs to provide&lt;br/&gt;&amp;gt; a list of a few transactions explicitly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; {|&lt;br/&gt;&amp;gt; |Field Name||Type||Size||Encoding||Purpose&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |index||New VarInt||1-3 bytes||[[#New_VarInt|New VarInt]],&lt;br/&gt;&amp;gt; differentially encoded since the last PrefilledTransaction in a&lt;br/&gt;&amp;gt; list||The index into the block at which this transaction is&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |tx||Transaction||variable||As encoded in &amp;#34;tx&amp;#34; messages||The transaction&lt;br/&gt;&amp;gt; which is in the block at index index.&lt;br/&gt;&amp;gt; |}&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====HeaderAndShortIDs====&lt;br/&gt;&amp;gt; A HeaderAndShortIDs structure is used to relay a block header, the short&lt;br/&gt;&amp;gt; transactions IDs used for matching already-available transactions, and a&lt;br/&gt;&amp;gt; select few transactions which we expect a peer may be missing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; {|&lt;br/&gt;&amp;gt; |Field Name||Type||Size||Encoding||Purpose&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |header||Block header||80 bytes||First 80 bytes of the block as defined&lt;br/&gt;&amp;gt; by the encoding used by &amp;#34;block&amp;#34; messages||The header of the block being&lt;br/&gt;&amp;gt; provided&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |nonce||uint64_t||8 bytes||Little Endian||A nonce for use in short&lt;br/&gt;&amp;gt; transaction ID calculations&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |shortids_length||CompactSize||1, 3, 5, or 9 bytes||As used elsewhere to&lt;br/&gt;&amp;gt; encode array lengths||The number of short transaction IDs in shortids&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |shortids||List of uint64_ts||8*shortids_length bytes||Little&lt;br/&gt;&amp;gt; Endian||The short transaction IDs calculated from the transactions which&lt;br/&gt;&amp;gt; were not provided explicitly in prefilledtxn&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |prefilledtxn_length||CompactSize||1, 3, 5, or 9 bytes||As used&lt;br/&gt;&amp;gt; elsewhere to encode array lengths||The number of prefilled transactions&lt;br/&gt;&amp;gt; in prefilledtxn&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |prefilledtxn||List of PrefilledTransactions||variable&lt;br/&gt;&amp;gt; size*prefilledtxn_length||As defined by PrefilledTransaction definition,&lt;br/&gt;&amp;gt; above||Used to provide the coinbase transaction and a select few which&lt;br/&gt;&amp;gt; we expect a peer may be missing&lt;br/&gt;&amp;gt; |}&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====BlockTransactionsRequest====&lt;br/&gt;&amp;gt; A BlockTransactionsRequest structure is used to list transaction indexes&lt;br/&gt;&amp;gt; in a block being requested.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; {|&lt;br/&gt;&amp;gt; |Field Name||Type||Size||Encoding||Purpose&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |blockhash||Binary blob||32 bytes||The output from a double-SHA256 of&lt;br/&gt;&amp;gt; the block header, as used elsewhere||The blockhash of the block which&lt;br/&gt;&amp;gt; the transactions being requested are in&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |indexes_length||New VarInt||1-3 bytes||As defined in [[#New_VarInt|New&lt;br/&gt;&amp;gt; VarInt]]||The number of transactions being requested&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |indexes||List of New VarInts||1-3 bytes*indexes_length||As defined in&lt;br/&gt;&amp;gt; [[#New_VarInt|New VarInt]], differentially encoded||The indexes of the&lt;br/&gt;&amp;gt; transactions being requested in the block&lt;br/&gt;&amp;gt; |}&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====BlockTransactions====&lt;br/&gt;&amp;gt; A BlockTransactions structure is used to provide some of the&lt;br/&gt;&amp;gt; transactions in a block, as requested.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; {|&lt;br/&gt;&amp;gt; |Field Name||Type||Size||Encoding||Purpose&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |blockhash||Binary blob||32 bytes||The output from a double-SHA256 of&lt;br/&gt;&amp;gt; the block header, as used elsewhere||The blockhash of the block which&lt;br/&gt;&amp;gt; the transactions being provided are in&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |transactions_length||New VarInt||1-3 bytes||As defined in&lt;br/&gt;&amp;gt; [[#New_VarInt|New VarInt]]||The number of transactions provided&lt;br/&gt;&amp;gt; |-&lt;br/&gt;&amp;gt; |transactions||List of Transactions||variable||As encoded in &amp;#34;tx&amp;#34;&lt;br/&gt;&amp;gt; messages||The transactions provided&lt;br/&gt;&amp;gt; |}&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====Short transaction IDs====&lt;br/&gt;&amp;gt; Short transaction IDs are used to represent a transaction without&lt;br/&gt;&amp;gt; sending a full 256-bit hash. They are calculated by:&lt;br/&gt;&amp;gt; # single-SHA256 hashing the block header with the nonce appended (in&lt;br/&gt;&amp;gt; little-endian)&lt;br/&gt;&amp;gt; # XORing each 8-byte chunk of the double-SHA256 transaction hash with&lt;br/&gt;&amp;gt; each corresponding 8-byte chunk of the hash from the previous step&lt;br/&gt;&amp;gt; # Adding each of the XORed 8-byte chunks together (in little-endian)&lt;br/&gt;&amp;gt; iteratively to find the short transaction ID&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ===New messages===&lt;br/&gt;&amp;gt; A new inv type (MSG_CMPCT_BLOCK == 4) and several new protocol messages&lt;br/&gt;&amp;gt; are added: sendcmpct, cmpctblock, getblocktxn, and blocktxn.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====sendcmpct====&lt;br/&gt;&amp;gt; # The sendcmpct message is defined as a message containing a 1-byte&lt;br/&gt;&amp;gt; integer followed by a 8-byte integer where pchCommand == &amp;#34;sendcmpct&amp;#34;.&lt;br/&gt;&amp;gt; # The first integer SHALL be interpreted as a boolean (and MUST have a&lt;br/&gt;&amp;gt; value of either 1 or 0)&lt;br/&gt;&amp;gt; # The second integer SHALL be interpreted as a little-endian version&lt;br/&gt;&amp;gt; number. Nodes sending a sendcmpct message MUST currently set this value&lt;br/&gt;&amp;gt; to 1.&lt;br/&gt;&amp;gt; # Upon receipt of a &amp;#34;sendcmpct&amp;#34; message with the first and second&lt;br/&gt;&amp;gt; integers set to 1, the node SHOULD announce new blocks by sending a&lt;br/&gt;&amp;gt; cmpctblock message.&lt;br/&gt;&amp;gt; # Upon receipt of a &amp;#34;sendcmpct&amp;#34; message with the first integer set to 0,&lt;br/&gt;&amp;gt; the node SHOULD NOT announce new blocks by sending a cmpctblock message,&lt;br/&gt;&amp;gt; but SHOULD announce new blocks by sending invs or headers, as defined by&lt;br/&gt;&amp;gt; BIP130.&lt;br/&gt;&amp;gt; # Upon receipt of a &amp;#34;sendcmpct&amp;#34; message with the second integer set to&lt;br/&gt;&amp;gt; something other than 1, nodes SHOULD treat the peer as if they had not&lt;br/&gt;&amp;gt; received the message (as it indicates the peer will provide an&lt;br/&gt;&amp;gt; unexpected encoding in cmpctblock, and/or other, messages)&lt;br/&gt;&amp;gt; # Nodes SHOULD check for a protocol version of &amp;gt;= 70014 before sending&lt;br/&gt;&amp;gt; sendcmpct messages.&lt;br/&gt;&amp;gt; # Nodes MUST NOT send a request for a MSG_CMPCT_BLOCK object to a peer&lt;br/&gt;&amp;gt; before having received a sendcmpct message from that peer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====MSG_CMPCT_BLOCK====&lt;br/&gt;&amp;gt; # getdata messages may now contain requests for MSG_CMPCT_BLOCK objects.&lt;br/&gt;&amp;gt; # Upon receipt of a getdata containing a request for a MSG_CMPCT_BLOCK&lt;br/&gt;&amp;gt; object with the hash of a block which was recently announced and after&lt;br/&gt;&amp;gt; having sent the requesting peer a sendcmpct message, nodes MUST respond&lt;br/&gt;&amp;gt; with a cmpctblock message containing appropriate data representing the&lt;br/&gt;&amp;gt; block being requested.&lt;br/&gt;&amp;gt; # MSG_CMPCT_BLOCK inv objects MUST NOT appear anywhere except for in&lt;br/&gt;&amp;gt; getdata messages.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====cmpctblock====&lt;br/&gt;&amp;gt; # The cmpctblock message is defined as as a message containing a&lt;br/&gt;&amp;gt; serialized HeaderAndShortIDs message and pchCommand == &amp;#34;cmpctblock&amp;#34;.&lt;br/&gt;&amp;gt; # Upon receipt of a cmpctblock message after sending a sendcmpct&lt;br/&gt;&amp;gt; message, nodes SHOULD calculate the short transaction ID for each&lt;br/&gt;&amp;gt; unconfirmed transaction they have available (ie in their mempool) and&lt;br/&gt;&amp;gt; compare each to each short transaction ID in the cmpctblock message.&lt;br/&gt;&amp;gt; # After finding already-available transactions, nodes which do not have&lt;br/&gt;&amp;gt; all transactions available to reconstruct the full block SHOULD request&lt;br/&gt;&amp;gt; the missing transactions using a getblocktxn message.&lt;br/&gt;&amp;gt; # A node MUST NOT send a cmpctblock message unless they are able to&lt;br/&gt;&amp;gt; respond to a getblocktxn message which requests every transaction in the&lt;br/&gt;&amp;gt; block.&lt;br/&gt;&amp;gt; # A node MUST NOT send a cmpctblock message without having validated&lt;br/&gt;&amp;gt; that the header properly commits to each transaction in the block, and&lt;br/&gt;&amp;gt; properly builds on top of the existing chain with a valid proof-of-work.&lt;br/&gt;&amp;gt; A node MAY send a cmpctblock before validating that each transaction in&lt;br/&gt;&amp;gt; the block validly spends existing UTXO set entries.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====getblocktxn====&lt;br/&gt;&amp;gt; # The getblocktxn message is defined as as a message containing a&lt;br/&gt;&amp;gt; serialized BlockTransactionsRequest message and pchCommand ==&lt;br/&gt;&amp;gt; &amp;#34;getblocktxn&amp;#34;.&lt;br/&gt;&amp;gt; # Upon receipt of a properly-formatted getblocktxnmessage, nodes which&lt;br/&gt;&amp;gt; recently provided the sender of such a message a cmpctblock for the&lt;br/&gt;&amp;gt; block hash identified in this message MUST respond with an appropriate&lt;br/&gt;&amp;gt; blocktxn message. Such a blocktxn message MUST contain exactly and only&lt;br/&gt;&amp;gt; each transaction which is present in the appropriate block at the index&lt;br/&gt;&amp;gt; specified in the getblocktxn indexes list, in the order requested.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====blocktxn====&lt;br/&gt;&amp;gt; # The blocktxn message is defined as as a message containing a&lt;br/&gt;&amp;gt; serialized BlockTransactions message and pchCommand == &amp;#34;blocktxn&amp;#34;.&lt;br/&gt;&amp;gt; # Upon receipt of a properly-formatted requested blocktxn message, nodes&lt;br/&gt;&amp;gt; SHOULD attempt to reconstruct the full block by:&lt;br/&gt;&amp;gt; ## Taking the prefilledtxn transactions from the original cmpctblock and&lt;br/&gt;&amp;gt; placing them in the marked positions.&lt;br/&gt;&amp;gt; ## For each short transaction ID from the original cmpctblock, in order,&lt;br/&gt;&amp;gt; find the corresponding transaction either from the blocktxn message or&lt;br/&gt;&amp;gt; from other sources and place it in the first available position in the&lt;br/&gt;&amp;gt; block.&lt;br/&gt;&amp;gt; # Once the block has been reconstructed, it shall be processed as&lt;br/&gt;&amp;gt; normal, keeping in mind that short transaction IDs are expected to&lt;br/&gt;&amp;gt; occasionally collide, and that nodes MUST NOT be penalized for such&lt;br/&gt;&amp;gt; collisions, wherever they appear.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ===Implementation Notes===&lt;br/&gt;&amp;gt; # For nodes which have sufficient inbound bandwidth, sending a sendcmpct&lt;br/&gt;&amp;gt; message with the first integer set to 1 to up to three peers is&lt;br/&gt;&amp;gt; RECOMMENDED. If possible, it is RECOMMENDED that those peers be selected&lt;br/&gt;&amp;gt; based on their past performance in providing blocks quickly. This will&lt;br/&gt;&amp;gt; allow them to receive some blocks in only 0.5*RTT between them and the&lt;br/&gt;&amp;gt; sending peer. It will also reduce their block transfer latency in other&lt;br/&gt;&amp;gt; cases due to the smaller amount of data transmitted. Nodes MUST NOT send&lt;br/&gt;&amp;gt; such sendcmpct messages to all peers, as it encourages wasting outbound&lt;br/&gt;&amp;gt; bandwidth across the network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # All nodes SHOULD send a sendcmpct message to all appropriate peers.&lt;br/&gt;&amp;gt; This will reduce their outbound bandwidth usage by allowing their peers&lt;br/&gt;&amp;gt; to request compact blocks instead of full blocks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Nodes with limited inbound bandwidth SHOULD request blocks using&lt;br/&gt;&amp;gt; MSG_CMPCT_BLOCK/getblocktxn requests, when possible. While this&lt;br/&gt;&amp;gt; increases worst-case message round-trips, it is expected to reduce&lt;br/&gt;&amp;gt; overall transfer latency as TCP is more likely to exhibit poor&lt;br/&gt;&amp;gt; throughput on low-bandwidth nodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Nodes sending cmpctblock messages SHOULD make an attempt to not place&lt;br/&gt;&amp;gt; too many transactions into prefilledtxn (ie should limit prefilledtxn to&lt;br/&gt;&amp;gt; only around 10KB of transactions). When in doubt, nodes SHOULD only&lt;br/&gt;&amp;gt; include the coinbase transaction in prefilledtxn.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Nodes MAY pick one nonce per block they wish to send, and only build a&lt;br/&gt;&amp;gt; cmpctblock message once for all peers which they wish to send a given&lt;br/&gt;&amp;gt; block to. Nodes SHOULD NOT use the same nonce across multiple different&lt;br/&gt;&amp;gt; blocks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Nodes MAY impose additional requirements on when they announce new&lt;br/&gt;&amp;gt; blocks by sending cmpctblock messages. For example, nodes with limited&lt;br/&gt;&amp;gt; outbound bandwidth MAY choose to announce new blocks using inv/header&lt;br/&gt;&amp;gt; messages (as per BIP130) to conserve outbound bandwidth.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Note that the MSG_CMPCT_BLOCK section does not require that nodes&lt;br/&gt;&amp;gt; respond to MSG_CMPCT_BLOCK getdata requests for blocks which they did&lt;br/&gt;&amp;gt; not recently announce. This allows nodes to calculate cmpctblock&lt;br/&gt;&amp;gt; messages at announce-time instead of at request-time. Thus, nodes MUST&lt;br/&gt;&amp;gt; NOT request blocks using MSG_CMPCT_BLOCK getdatas unless it is in&lt;br/&gt;&amp;gt; response to an inv/headers block announcement (as per BIP130), and MUST&lt;br/&gt;&amp;gt; NOT request blocks using MSG_CMPCT_BLOCK getdatas in response to headers&lt;br/&gt;&amp;gt; messages which were, themselves, responses to getheaders requests.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # While the current version sends transactions with the same encodings&lt;br/&gt;&amp;gt; as is used in tx messages and elsewhere in the protocol, the version&lt;br/&gt;&amp;gt; field in sendcmpct is intended to allow this to change in the future.&lt;br/&gt;&amp;gt; For this reason, it is recommended that the code used to decode&lt;br/&gt;&amp;gt; PrefilledTransaction and BlockTransactions messages be prepared to take&lt;br/&gt;&amp;gt; a different transaction encoding, if and when the version field in&lt;br/&gt;&amp;gt; sendcmpct changes in a future BIP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Justification==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====Protocol design====&lt;br/&gt;&amp;gt; There have been many proposals to save wire bytes when relaying blocks.&lt;br/&gt;&amp;gt; Many of them have a two-fold goal of reducing block relay time and thus&lt;br/&gt;&amp;gt; rely on the use of significant processing power in order to avoid&lt;br/&gt;&amp;gt; introducing additional worst-case RTTs. Because this work is not focused&lt;br/&gt;&amp;gt; primarily on reducing block relay time, its design is much simpler (ie&lt;br/&gt;&amp;gt; does not rely on set reconciliation protocols). Still, in testing at the&lt;br/&gt;&amp;gt; time of writing, nodes are able to relay blocks without the extra&lt;br/&gt;&amp;gt; getblocktxn/blocktxn RTT around 90% of the time. With a smart&lt;br/&gt;&amp;gt; compact-block-announcement policy, it is thus expected that this work&lt;br/&gt;&amp;gt; might allow blocks to be relayed between nodes in 0.5*RTT instead of&lt;br/&gt;&amp;gt; 1.5*RTT at least 75% of the time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====Use of New VarInts====&lt;br/&gt;&amp;gt; Bitcoin has long had a variable-length integer implementation (referred&lt;br/&gt;&amp;gt; to as CompactSize in this document), making a second a strange protocol&lt;br/&gt;&amp;gt; quirk. However, in this protocol most of our variable-length integers&lt;br/&gt;&amp;gt; are between 0 and 2000. For both encodings, small numbers (&amp;lt;100) are&lt;br/&gt;&amp;gt; encoded as 1-byte. For numbers over 250, the CompactSize encoding begins&lt;br/&gt;&amp;gt; to use 3 bytes instead of 1, whereas the New VarInt encoding uses 2.&lt;br/&gt;&amp;gt; Because the primary motivation for this work is to save bytes during&lt;br/&gt;&amp;gt; block relay, the extra byte of saving per transaction-difference is&lt;br/&gt;&amp;gt; considered worth the extra design complexity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====Short transaction ID calculation====&lt;br/&gt;&amp;gt; The short transaction ID calculation is designed to take absolutely&lt;br/&gt;&amp;gt; minimal processing time during block compaction to avoid introducing&lt;br/&gt;&amp;gt; serious DoS vulnerabilities such as those introduced by the&lt;br/&gt;&amp;gt; bloom-filtering in BIP 37. As such, it is possible for a node to&lt;br/&gt;&amp;gt; construct one compact-block representation of a block for relay to&lt;br/&gt;&amp;gt; multiple peers. Additionally, only one cryptographic hash (2 SHA rounds)&lt;br/&gt;&amp;gt; is used when calculating the short transaction IDs for an entire block.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The XOR-and-add method is used for calculating short transaction IDs&lt;br/&gt;&amp;gt; primarily because it is fast and is reasonably able to limit the ability&lt;br/&gt;&amp;gt; of an attacker who does not know the block hash or nonce to cause&lt;br/&gt;&amp;gt; collisions in short transaction IDs. If an attacker were able to cause&lt;br/&gt;&amp;gt; such collisions, filling mempools (and, thus, blocks) with them would&lt;br/&gt;&amp;gt; cause poor network propagation of new (or non-attacker, in the case of a&lt;br/&gt;&amp;gt; miner) blocks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The 8-byte nonce in short transaction ID calculation is used to&lt;br/&gt;&amp;gt; introduce additional entropy on a per-node level. While the use of 8&lt;br/&gt;&amp;gt; bytes is sufficient for an attacker to maliciously cause short&lt;br/&gt;&amp;gt; transaction ID collisions in their own block relay, this would have less&lt;br/&gt;&amp;gt; of an effect than if such an attacker were relaying headers/invs and not&lt;br/&gt;&amp;gt; responding to requests for the full block.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Backward compatibility==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Older clients remain fully compatible and interoperable after this change.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Implementation==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/TheBlueMatt/bitcoin/tree/udp&#34;&gt;https://github.com/TheBlueMatt/bitcoin/tree/udp&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Acknowledgements==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks to Gregory Maxwell for the initial suggestion as well as a lot of&lt;br/&gt;&amp;gt; back-and-forth design and significant testing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Copyright==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This document is placed in the public domain.&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;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Johnathan Corgan&lt;br/&gt;Corgan Labs - SDR Training and Development Services&lt;br/&gt;&lt;a href=&#34;http://corganlabs.com&#34;&gt;http://corganlabs.com&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/20160507/028cac26/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160507/028cac26/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:50:16Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqst9nth9jj5juc3gptjp6g82ft2hkrqg0j47l5ver0uysnvkds3z5gzyzttthxcam06gqan49xptua6k89ss3ek5re0zvq3r8gcrygfanqx6drhtge</id>
    
      <title type="html">📅 Original date posted:2014-01-17 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqst9nth9jj5juc3gptjp6g82ft2hkrqg0j47l5ver0uysnvkds3z5gzyzttthxcam06gqan49xptua6k89ss3ek5re0zvq3r8gcrygfanqx6drhtge" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq4eukammln9lqwgwpu8tj9ad7evgjpl76jfrnsngd2vw49h5dk5ca3rwy0&#39;&gt;nevent1q…rwy0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2014-01-17&lt;br/&gt;📝 Original message:On 01/16/2014 01:28 PM, Peter Todd wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m very against the name &amp;#34;reusable addresses&amp;#34; and strongly belive we&lt;br/&gt;&amp;gt; should stick with the name stealth addresses.&lt;br/&gt;&lt;br/&gt;I agree wholeheartedly against using &amp;#34;reusable address&amp;#34;.  I personally&lt;br/&gt;am fine with &amp;#34;stealth address&amp;#34;, but can see where there might be a&lt;br/&gt;negative connotation.&lt;br/&gt;&lt;br/&gt;Might I suggest &amp;#34;master address&amp;#34;, which is neutral in connotation, but&lt;br/&gt;indicates both that it is fixed and that payment addresses are generated&lt;br/&gt;as needed from it.&lt;br/&gt;&lt;br/&gt;But please, no &amp;#34;reusable address.&amp;#34;&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Johnathan Corgan, Corgan Labs&lt;br/&gt;SDR Training and Development Services&lt;br/&gt;&lt;a href=&#34;http://corganlabs.com&#34;&gt;http://corganlabs.com&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: johnathan.vcf&lt;br/&gt;Type: text/x-vcard&lt;br/&gt;Size: 334 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/20140116/14d333f0/attachment.vcf&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20140116/14d333f0/attachment.vcf&amp;gt&lt;/a&gt;;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: signature.asc&lt;br/&gt;Type: application/pgp-signature&lt;br/&gt;Size: 230 bytes&lt;br/&gt;Desc: OpenPGP digital signature&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20140116/14d333f0/attachment.sig&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20140116/14d333f0/attachment.sig&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:11:45Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs9amf98l6u7cc4caqcy3g56lelkwlqk8g8ma0mraajphfvr7xzrqqzyzttthxcam06gqan49xptua6k89ss3ek5re0zvq3r8gcrygfanqx6nf7vc9</id>
    
      <title type="html">📅 Original date posted:2013-11-02 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs9amf98l6u7cc4caqcy3g56lelkwlqk8g8ma0mraajphfvr7xzrqqzyzttthxcam06gqan49xptua6k89ss3ek5re0zvq3r8gcrygfanqx6nf7vc9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxtqrzf8rcm0hxjw3sdhcrpastf7u5226d0n2jcpyvlzq7vdcs9tcj82cgy&#39;&gt;nevent1q…2cgy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2013-11-02&lt;br/&gt;📝 Original message:On 11/01/2013 10:01 PM, bitcoingrant at gmx.com wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Server provides a token for the client to sign.&lt;br/&gt;&lt;br/&gt;Anyone else concerned about signing an arbitrary string?  Could be a&lt;br/&gt;hash of $EVIL_DOCUMENT, no?  I&amp;#39;d want to XOR the string with my own&lt;br/&gt;randomly generated nonce, sign that, then pass the nonce and the&lt;br/&gt;signature back to the server for verification.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Johnathan Corgan, Corgan Labs&lt;br/&gt;SDR Training and Development Services&lt;br/&gt;&lt;a href=&#34;http://corganlabs.com&#34;&gt;http://corganlabs.com&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: johnathan.vcf&lt;br/&gt;Type: text/x-vcard&lt;br/&gt;Size: 334 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/20131102/09685fb5/attachment.vcf&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20131102/09685fb5/attachment.vcf&amp;gt&lt;/a&gt;;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;A non-text attachment was scrubbed...&lt;br/&gt;Name: signature.asc&lt;br/&gt;Type: application/pgp-signature&lt;br/&gt;Size: 230 bytes&lt;br/&gt;Desc: OpenPGP digital signature&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20131102/09685fb5/attachment.sig&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20131102/09685fb5/attachment.sig&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:08:27Z</updated>
  </entry>

</feed>