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

  <title>Nostr notes by Pieter Wuille [ARCHIVE]</title>
  <author>
    <name>Pieter Wuille [ARCHIVE]</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub1tjephawh7fdf6358jufuh5eyxwauzrjqa7qn50pglee4tayc2ntqcjtl6r.rss" />
  <link href="https://njump.me/npub1tjephawh7fdf6358jufuh5eyxwauzrjqa7qn50pglee4tayc2ntqcjtl6r" />
  <id>https://njump.me/npub1tjephawh7fdf6358jufuh5eyxwauzrjqa7qn50pglee4tayc2ntqcjtl6r</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://njump.me/nevent1qqsgaquj5p5905plaj7re285ddzkgs58pyq7dslxsk26sa3zs3v9kpqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvgqpcma</id>
    
      <title type="html">📅 Original date posted:2015-09-25 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgaquj5p5905plaj7re285ddzkgs58pyq7dslxsk26sa3zs3v9kpqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvgqpcma" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq8pdda7ccgq0y7xp3t9rmh7multg4v7vkwylckqngqpv38j6gtpq7k79pm&#39;&gt;nevent1q…79pm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-09-25&lt;br/&gt;📝 Original message:&lt;br/&gt;On Sep 25, 2015 3:09 AM, &amp;#34;Rusty Russell&amp;#34; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; You can squeze some more bytes out of you want:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; 1) Signature should be 64 bytes (never DER encode).&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; 2) Pubkey can be hashed bitcoin-address style, and recovered from sig.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; You can recover the pubkey from the hash and the sig? Why are we&lt;br/&gt;putting the pubkey in the scriptSig then? ;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Because crypto is hard :(&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; TBH I only learned a few months ago that you can do this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It helps if you have the (two-bit) recovery id, but you can brute force&lt;br/&gt;&amp;gt; it AFAICT.  You then check if the pubkey matches the hash you&amp;#39;re given.&lt;br/&gt;&lt;br/&gt;You can indeed do public key recovery om ECDSA, and you can brute force the&lt;br/&gt;recovery id. In all non-pathological cases, the recovery id will be 0 or 1;&lt;br/&gt;only one in about 2^128 randomly generated signatures need 2 or 3.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t have much context here, but is there a need for this to be ECDSA?&lt;br/&gt;If not, the EC-Schnorr scheme in libsecp256k1 produces 64-byte&lt;br/&gt;non-malleable signatures that support pubkey recovery without an additional&lt;br/&gt;recovery id, and are compatible with the same private/public keys. The&lt;br/&gt;scheme is certainly non-standard and experimental at this point, but it&amp;#39;s&lt;br/&gt;an instance of a well researched mechanism.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20150925/02de7137/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20150925/02de7137/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:44:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstrwkehly3adtym33kauuvlu2mpyc3t0s6nt934zx3glh66h3e40szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvp4jxpc</id>
    
      <title type="html">📅 Original date posted:2023-02-17 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstrwkehly3adtym33kauuvlu2mpyc3t0s6nt934zx3glh66h3e40szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvp4jxpc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgp9aqgdvgaqved7hda4pmsav5nrhpjxz3zy6j8y6r30s6lwml0dskpqj23&#39;&gt;nevent1q…qj23&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-17&lt;br/&gt;🗒️ Summary of this message: A proposal to use short IDs to minimize bandwidth in Bitcoin transactions has been suggested, with short ID 0 reserved for long commands. This would reduce complexity and eliminate the need for variable-length encoding.&lt;br/&gt;📝 Original message:On Friday, February 17th, 2023 at 10:51 AM, Anthony Towns via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I think it&amp;#39;s probably less complex to close some of the doors?&lt;br/&gt; &lt;br/&gt;&amp;gt; 2) are short ids available/meaningful to send prior to VERACK being&lt;br/&gt;&amp;gt; completed?&lt;br/&gt;&lt;br/&gt;Ah, I hadn&amp;#39;t considered this nuance. If we don&amp;#39;t care about them being available before VERACK negotiation, then it may be possible to introduce a way to negotiate a different short id mapping table without needing a mechanism for *re*-negotiating.&lt;br/&gt;&lt;br/&gt;&amp;gt; Here&amp;#39;s another approach:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; idea: we use short ids to minimise bandwidth, and don&amp;#39;t care about&lt;br/&gt;&amp;gt; bandwidth for long ids&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; implementation:&lt;br/&gt;&amp;gt; short id 0 is reserved for long commands. when received, we&lt;br/&gt;&amp;gt; decode the first 12 bytes of the payload and treat them&lt;br/&gt;&amp;gt; exactly the same as a v1 p2p message (trailing 0-bytes, etc)&lt;br/&gt;&amp;gt; (if there&amp;#39;s not 12 bytes of payload, it&amp;#39;s just treated as an&lt;br/&gt;&amp;gt; invalid command and dropped)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; short ids 1-255 are available for use as aliases of particular&lt;br/&gt;&amp;gt; long commands&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; (That&amp;#39;s exactly compatible with p2p v1, and also avoids the temptation&lt;br/&gt;&amp;gt; to try to choose short command names rather than descriptive ones -- the&lt;br/&gt;&amp;gt; 0-padding to 12 bytes prevents you from saving any bandwidth that way;&lt;br/&gt;&amp;gt; but that&amp;#39;s what we have short ids for anyway)&lt;br/&gt;&lt;br/&gt;I like this idea. It avoids the variable-length encoding question and related complexity entirely for things where we admittedly don&amp;#39;t care about the bandwidth impact anyway.&lt;br/&gt;&lt;br/&gt;It may also have another (rather weak) advantage, in that it may reduce how much information a passive observe may learn about application level features (sendheaders, sendaddrv2, ...) from the packet size sent (which would otherwise depend on command lengths), even when decoys are not in use, if no short commands are included for these messages.&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; - We remove 1 byte allocations for messages that are sent at most once per connection per direction&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I think this leaves 32 commands that get short ids initially:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; misc: ADDR, ADDRV2, BLOCK, FEEFILTER, GETBLOCKS, GETDATA, GETHEADERS,&lt;br/&gt;&amp;gt; HEADERS, INV, NOTFOUND, PING, PONG, TX&lt;br/&gt;&amp;gt; bip 35/37: FILTERADD, FILTERCLEAR, FILTERLOAD, MEMPOOL, MERKLEBLOCK&lt;br/&gt;&amp;gt; bip 152: BLOCKTXN, CMPCTBLOCK, GETBLOCKTXN&lt;br/&gt;&amp;gt; bip 157: CFCHECKPT, CFHEADERS, CFILTER, GETCFCHCKPT, GETCFHEADERS,&lt;br/&gt;&amp;gt; GETCFILTERS&lt;br/&gt;&amp;gt; bip 330: RECONCILDIFF, REQRECON, REQSKETCHEXT, SENDCMPCT, SKETCH&lt;br/&gt;&lt;br/&gt;Sounds right.&lt;br/&gt;&lt;br/&gt;&amp;gt; which drops:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; VERSION, VERACK, GETADDR, SENDADDRV2, SENDHEADERS, SENDTXRCNCL,&lt;br/&gt;&amp;gt; WTXIDRELAY&lt;br/&gt;&lt;br/&gt;Indeed.&lt;br/&gt;&lt;br/&gt;&amp;gt; compared to bip 324 currently.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I think the things missing from the current list (and not currently in&lt;br/&gt;&amp;gt; use by bitcoin core) are:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; bip 61: REJECT&lt;br/&gt;&amp;gt; bip 331: GETPKGTXNS, PKGTXNS, ANCPKGINFO&lt;br/&gt;&lt;br/&gt;Do you feel REJECT should be included?&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; - Optionally, in the implementation we can attempt to move the type id mapping to the p2p layer away from the transport layer. I suspect this could also be done after the implementation is merged but might be cleaner as the mapping is a p2p concern.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree that&amp;#39;s fine, though I expect that we&amp;#39;ll probably want to do it&lt;br/&gt;&amp;gt; not long after bip 331 is ready for merge (or some other p2p improvement&lt;br/&gt;&amp;gt; comes along)...&lt;br/&gt;&lt;br/&gt;I do prefer that as well; it feels like the transport layer shouldn&amp;#39;t be aware of the different command names that exist, but this is very much just an implementation issue.&lt;br/&gt;&lt;br/&gt;Perhaps a possibility is having the transport layer translate short-command-number-N to the 12-byte command &amp;#34;\x00\x00...&amp;#34; &#43; byte(N), and hand that to the application layer, which could then do the mapping?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:19:50Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfu48s3xt3gtfzxptvppn5qv2xue3vh27j3u506ej7slc642kl9sszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv4d0jt6</id>
    
      <title type="html">📅 Original date posted:2022-11-12 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfu48s3xt3gtfzxptvppn5qv2xue3vh27j3u506ej7slc642kl9sszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv4d0jt6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswl3n0pr0q6km0j2mhm9h7jh5jmrk2k9l5rpt0cpzq7m4gv454hdgzx79un&#39;&gt;nevent1q…79un&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-12&lt;br/&gt;📝 Original message:Another idea...&lt;br/&gt;&lt;br/&gt;On Thursday, November 10th, 2022 at 4:23 PM, Pieter Wuille via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Thursday, November 3rd, 2022 at 1:53 PM, Murch wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &amp;gt; From what I understand we&amp;#39;ll have about 35 message types on the network&lt;br/&gt;&amp;gt; &amp;gt; with the addition of BIP324. 256 possible IDs sounds like plenty room to&lt;br/&gt;&amp;gt; &amp;gt; grow, but perhaps we can be a bit more conservative:&lt;br/&gt;&amp;gt; &amp;gt; &lt;br/&gt;&amp;gt; &amp;gt; We could use the first bit to signal a 2-byte message ID. That allows us&lt;br/&gt;&amp;gt; &amp;gt; to express 128 IDs with 1 byte, but if we need more, we get a total of&lt;br/&gt;&amp;gt; &amp;gt; 2^15 IDs across 2 bytes.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Yeah, effectively treating the first 1 or 2 bytes as a simple variable&lt;br/&gt;&amp;gt; length integer is a nice way of increasing the space at low cost.&lt;br/&gt;&lt;br/&gt;The above would really result in having two separate variable-length encodings:&lt;br/&gt;* First byte 1-12 to signify length of alphabetic command&lt;br/&gt;* Otherwise first bit to signify length of short command&lt;br/&gt;&lt;br/&gt;I think we can just merge the two and have a single variable-length command structure that can be used for both: command encodings are 1 to 12 bytes, each byte&amp;#39;s top bit indicating whether another byte follows (the top bit of byte 11 has no special meaning).&lt;br/&gt;&lt;br/&gt;This means:&lt;br/&gt;* Every alphabetic command of L characters becomes L bytes.&lt;br/&gt;* 102 non-alphabetic 1-byte commands can be assigned.&lt;br/&gt;* 15708 non-alphabetic 2-byte commands can be assigned.&lt;br/&gt;* etc&lt;br/&gt;&lt;br/&gt;So this gives a uniform space which commands can be assigned from, and there is no strict need for thinking of the short-binary and long-alphabetic commands as distinct. In v2, some short ones would be treated as aliases for old long-alphabetic ones. But new commands could also just be introduced as short ones only (even in v1).&lt;br/&gt;&lt;br/&gt;WDYT?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:16:42Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswl3n0pr0q6km0j2mhm9h7jh5jmrk2k9l5rpt0cpzq7m4gv454hdgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv2f6nk3</id>
    
      <title type="html">📅 Original date posted:2022-11-10 📝 Original message:Hi, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswl3n0pr0q6km0j2mhm9h7jh5jmrk2k9l5rpt0cpzq7m4gv454hdgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv2f6nk3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv6vwfxwyeraqrcukxm5fkw98nycclcpysly9kecyksqse4tjkcscf8ju28&#39;&gt;nevent1q…ju28&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-10&lt;br/&gt;📝 Original message:Hi,&lt;br/&gt;&lt;br/&gt;Thanks for the comments so far. I think these are all reasonable ideas.&lt;br/&gt;Comments inline below.&lt;br/&gt;&lt;br/&gt;On Thursday, November 3rd, 2022 at 1:53 PM, Murch wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; From what I understand we&amp;#39;ll have about 35 message types on the network&lt;br/&gt;&amp;gt; with the addition of BIP324. 256 possible IDs sounds like plenty room to&lt;br/&gt;&amp;gt; grow, but perhaps we can be a bit more conservative:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We could use the first bit to signal a 2-byte message ID. That allows us&lt;br/&gt;&amp;gt; to express 128 IDs with 1 byte, but if we need more, we get a total of&lt;br/&gt;&amp;gt; 2^15 IDs across 2 bytes.&lt;br/&gt;&lt;br/&gt;Yeah, effectively treating the first 1 or 2 bytes as a simple variable&lt;br/&gt;length integer is a nice way of increasing the space at low cost.&lt;br/&gt;&lt;br/&gt;This also doesn&amp;#39;t need to be decided now. The initial approach could just&lt;br/&gt;be avoiding allocating bytes in the 128-255 range until the need for more&lt;br/&gt;space arises. If and when that is the case, the choice could be to:&lt;br/&gt;* Just continue treating the first byte as the command.&lt;br/&gt;* Start treating the first upper bit as a sign that another command byte&lt;br/&gt;  follows.&lt;br/&gt;* Switch to some form of explicit signalling (option 3 is my earlier&lt;br/&gt;  mail).&lt;br/&gt;&lt;br/&gt;On Thursday, November 3rd, 2022 at 6:26 PM, Jonas Schnelli wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; There would be an alternative to preserve more 1 byte IDs on the cost&lt;br/&gt;&amp;gt; of a (much) smaller 2 byte ID space: Reserve the short ID 0xFF as an&lt;br/&gt;&amp;gt; indication for a 2 bytes short ID (additional 256 short IDs with 2 bytes).&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think this is needed, because we arguably already have that! If the&lt;br/&gt;first byte is 0x01, then 1 more command byte follows in the current BIP324&lt;br/&gt;draft. That mechanism is designed for alphabetic 1-character commands, but&lt;br/&gt;nothing prevents it from also being used for other things (by using a&lt;br/&gt;non-alphabetic byte there).&lt;br/&gt;&lt;br/&gt;&amp;gt; Maybe the BIP should state that only frequent sent messages should reserve&lt;br/&gt;&amp;gt; a short ID, though, the BIP itself assigns short IDs to all(?) message&lt;br/&gt;&amp;gt; types (including low frequent messages like SENDHEADERS).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Maybe exclude message types that expected to be only sent once from&lt;br/&gt;&amp;gt; assigning a short ID?&lt;br/&gt;&lt;br/&gt;I think that makes sense. Especially in combination with the idea avoiding&lt;br/&gt;bytes with the upper bit set there is a bit more pressure on the 1-byte&lt;br/&gt;space. Rarely-sent or at-most-once-sent commands don&amp;#39;t really provide much&lt;br/&gt;benefit. I&amp;#39;d suggest scrapping from the list:&lt;br/&gt;* Version messages: version, verack&lt;br/&gt;* Negotiation messages: sendaddrv2, sendheaders, sendcmpct, wtxidrelay&lt;br/&gt;* Rarely-sent messages: mempool&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure to what extent filteradd/filterload/filterclear/merkleblock&lt;br/&gt;are still actually used; perhaps they could be removed too?&lt;br/&gt;&lt;br/&gt;On Monday, November 7th, 2022 at 10:20 PM, Anthony Towns wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I guess I think it would make sense to not start using a novel 1-byte&lt;br/&gt;&amp;gt; message unless you&amp;#39;ve done something to introduce that message first;&lt;br/&gt;&amp;gt; whether that&amp;#39;s via approach (3) (&amp;#34;I&amp;#39;m going to use 0xE9 to mean pkgtxns&amp;#34;)&lt;br/&gt;&amp;gt; or via a multibyte feature support message (&amp;#34;I sent sendaddrv3 as a&lt;br/&gt;&amp;gt; 10-byte message, that implies 0xA3 means addrv3 from now on&amp;#34;).&lt;br/&gt;&lt;br/&gt;That&amp;#39;s fair, but I don&amp;#39;t think it matters too much for allocation purposes;&lt;br/&gt;protocol designs should still not assign overlapping values, unless the&lt;br/&gt;protocols are known to never be used simultaneously?&lt;br/&gt;&lt;br/&gt;Unless... the assignment works like &amp;#34;whenever the sendaddrv3 is sent, the&lt;br/&gt;next available byte in range 48..127 gets allocated for addrv3&amp;#34;. That means&lt;br/&gt;no explicit mapping is needed, as long as the total number of messages from&lt;br/&gt;simultaneously-active extensions isn&amp;#39;t too large.&lt;br/&gt;&lt;br/&gt;&amp;gt; I do still think it&amp;#39;d be better to recommend against reserving a byte for&lt;br/&gt;&amp;gt; one-shot messages, and not do it for existing one-shot messages though.&lt;br/&gt;&lt;br/&gt;Agree.&lt;br/&gt;&lt;br/&gt;FWIW, if anyone was wondering about how much is actually saved by having&lt;br/&gt;1-byte commands vs 12-byte commands, I&amp;#39;ve gathered statistics from two nodes&lt;br/&gt;(one with many inbound connections, one only outbound) for two weeks. This is&lt;br/&gt;obviously very dependent on network topology and local implementation choices,&lt;br/&gt;but it may still give an idea:&lt;br/&gt;* Outbound-only node:&lt;br/&gt;  * Around 4.5% of sent bytes are bytes 2-12 of the command.&lt;br/&gt;  * Sent 979.98 MiB in total.&lt;br/&gt;* Outbound and inbound node:&lt;br/&gt;  * Around 1.6% of sent bytes are bytes 2-12 of the command.&lt;br/&gt;  * Sent 124.14 GiB in total.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:16:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdfau65rnn2n9lwflhpks8upkcutf3qfy5g90nj2avqca8tsw5y2szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvn3w6dh</id>
    
      <title type="html">📅 Original date posted:2022-10-26 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdfau65rnn2n9lwflhpks8upkcutf3qfy5g90nj2avqca8tsw5y2szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvn3w6dh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs946m3tkasmhfwxe8k6z4yyu7q3rfwy7sjlrd3urmkvazhdjyec4sq0veec&#39;&gt;nevent1q…veec&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-26&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;On Saturday, October 8th, 2022 at 8:59 AM, Dhruv M &amp;lt;dhruv at bip324.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; We have refreshed the proposal for BIP324, a new bitcoin P2P protocol&lt;br/&gt;&amp;gt; featuring opportunistic encryption, a mild bandwidth reduction, and the&lt;br/&gt;&amp;gt; ability&lt;br/&gt;&amp;gt; to negotiate upgrades before exchanging application messages. We&amp;#39;d like&lt;br/&gt;&amp;gt; to invite community members to review the BIP[1] and the related Bitcoin&lt;br/&gt;&amp;gt; Core&lt;br/&gt;&amp;gt; code[2].&lt;br/&gt;&lt;br/&gt;One open question we have regarding BIP324&amp;#39;s design is how to deal with the&lt;br/&gt;coordination of assigning the message type IDs.&lt;br/&gt;&lt;br/&gt;For context, the current BIP324 draft introduces a notion of 1-byte message&lt;br/&gt;type IDs, which take the place of the 12-byte command strings (in a backward&lt;br/&gt;compatible way; it&amp;#39;s still possible to send full strings). This offers a&lt;br/&gt;mild bandwidth reduction (3 bytes per message overall), especially since many&lt;br/&gt;messages on the network are fairly small.&lt;br/&gt;&lt;br/&gt;However, it obviously raises the question of how the mapping table between the&lt;br/&gt;1-byte IDs and the commands they represent should be maintained:&lt;br/&gt;&lt;br/&gt;1. The most straightforward solution is using the BIP process as-is: let BIP324&lt;br/&gt;   introduce a fixed initial table, and future BIPs which introduce new&lt;br/&gt;   messages can introduce new mapping entries for it. In theory, this is no&lt;br/&gt;   worse than the current coordination difficulty about command strings, but&lt;br/&gt;   in practice the risk of collisions due to competing proposals is of course&lt;br/&gt;   significantly larger with 1-byte IDs vs. 12-byte strings.&lt;br/&gt;&lt;br/&gt;2. An alternative approach is not using 1-byte IDs but slightly longer ones;&lt;br/&gt;   for example 3-byte IDs, each consisting of a 2-byte BIP number and a 1-byte&lt;br/&gt;   message index introduced by that BIP, at the cost of a smaller bandwidth&lt;br/&gt;   improvement. This significantly reduces collision risks, but doesn&amp;#39;t remove&lt;br/&gt;   the coordination process concerns entirely (e.g. revisions changing what a&lt;br/&gt;   BIP introduces need to be taken into account and probably still mean BIPs&lt;br/&gt;   need to explicitly list which assignments they introduce).&lt;br/&gt;&lt;br/&gt;3. Yet another possibility is not having a fixed table at all, and negotiate&lt;br/&gt;   the mapping dynamically. E.g. either side could send a message at&lt;br/&gt;   connection time with an explicit table of entries &amp;#34;when I send byte X, I&lt;br/&gt;   mean command Y&amp;#34;.&lt;br/&gt;&lt;br/&gt;4. Lastly, the whole feature could just be dropped from BIP324 (sticking with&lt;br/&gt;   command strings), and left for a follow-up (or independent) protocol&lt;br/&gt;   improvement. Since arguably this is purely an application-layer concern and&lt;br/&gt;   not a transport-layer one, it could even be added as an optional feature to&lt;br/&gt;   the (pre-BIP324) protocol today. That would however very likely mean that&lt;br/&gt;   BIP324 if adopted as-is isn&amp;#39;t actually an (albeit small) bandwidth&lt;br/&gt;   reduction compared to today, and forego a possibility to fix a fairly&lt;br/&gt;   gratuitous inefficiency in the protocol from day one.&lt;br/&gt;&lt;br/&gt;Our idea is to start out with approach (1), with a mapping table effectively&lt;br/&gt;managed by the BIP process directly, but if and when collisions become a&lt;br/&gt;concern (maybe due to many parallel proposals, maybe because the number of&lt;br/&gt;messages just grows too big), switch to approach (3), possibly even&lt;br/&gt;differentially (the sent mappings are just additions/overwrites of the&lt;br/&gt;BIP-defined table mappings, rather than a full mapping).&lt;br/&gt;&lt;br/&gt;That said, we&amp;#39;re not all that convinced this is the best approach, and feel&lt;br/&gt;this more a community/process question than a technical one, so it would be&lt;br/&gt;good to see more opinions on the topic.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Dhruv, Pieter, Tim
    </content>
    <updated>2023-06-07T23:15:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs840drwy390wvwc0knalcq3aexjfq6wjshcgjy78ugg74swh5zlfszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvq4lezs</id>
    
      <title type="html">📅 Original date posted:2022-10-12 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs840drwy390wvwc0knalcq3aexjfq6wjshcgjy78ugg74swh5zlfszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvq4lezs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxdg0t0m3gj6q6g9yq0z6e8xxv9cw6v4n22zqk4w24xjq8wdqz9xcg82vcy&#39;&gt;nevent1q…2vcy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-12&lt;br/&gt;📝 Original message:On Wednesday, October 12th, 2022 at 1:42 AM, Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Tue, Oct 11, 2022 at 04:18:10PM &#43;0000, Pieter Wuille via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &amp;gt; On Friday, October 7th, 2022 at 5:37 PM, Dario Sneidermanis via bitcoin-dev bitcoin-dev at lists.linuxfoundation.org wrote:&lt;br/&gt;&amp;gt; &amp;gt; &lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Thanks for the fast answer! It seems I missed the link to the PR, sorry for the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; confusion. I&amp;#39;m referring to the opt-in flag for full-RBF from #25353&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; (&lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25353&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25353&lt;/a&gt;).&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; It is not clear to me why you believe the merging of this particular pull request poses an immediate risk to you.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Did you see the rest of Dario&amp;#39;s reply, bottom-posted after the quoted&lt;br/&gt;&amp;gt; text? Namely:&lt;br/&gt;&lt;br/&gt;Oh, my mail client for some reason chose to hide all that. Dario, I&amp;#39;m sorry for missing this; I see now that you were certainly aware of what the PR under consideration did.&lt;br/&gt;&lt;br/&gt;Further comments inline.&lt;br/&gt;&lt;br/&gt;&amp;gt; On Fri, Oct 07, 2022 at 06:37:38PM -0300, Dario Sneidermanis via&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; The question then is whether an opt-in flag for full-RBF will have enough&lt;br/&gt;&amp;gt; &amp;gt; adoption to get us from 1 to 2. If it isn&amp;#39;t, then #25353 won&amp;#39;t meet its&lt;br/&gt;&amp;gt; &amp;gt; objective of allowing nodes participating in multi-party funding protocols&lt;br/&gt;&amp;gt; &amp;gt; to assume that they can rely on full-RBF. If it is, then zero-conf applications&lt;br/&gt;&amp;gt; &amp;gt; will be at severe risk (per the logic in the initial email).&lt;br/&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; That logic seems reasonably sound to me:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; - if adding the option does nothing, then there&amp;#39;s no point adding it,&lt;br/&gt;&amp;gt; and no harm in restricting it to test nets only&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; - if adding the option does do something, then businesses using zero-conf&lt;br/&gt;&amp;gt; need to react immediately, or will go from approximately zero risk of&lt;br/&gt;&amp;gt; losing funds, to substantial risk&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; (I guess having the option today may allow you to manually switch your&lt;br/&gt;&amp;gt; node over to supporting fullrbf in future when the majority of the network&lt;br/&gt;&amp;gt; supports it, without needing to do an additional upgrade in the meantime;&lt;br/&gt;&amp;gt; but that seems like a pretty weak benefit)&lt;br/&gt;&lt;br/&gt;I certainly recognize that adding the flag is a likely step towards, over time, the full RBF policy becoming more widely adopted on the network. That is presumably the reason why people are in favor of having the flag, even default off - including me. I believe that policy&amp;#39;s adoption is inevitable eventually, but the speed at which that is achieved is certainly a function of availability and adopted of software which provides the option.&lt;br/&gt;&lt;br/&gt;That said, I think it&amp;#39;s a bit of a jump to conclude that the only two options are that either the existence of the flag either has no effect at all, or poses an immediate threat to those relying on its absence. In my view, it is just what I said: a step towards getting full RBF on the network, by allowing experimentation and socializing the notion that developers believe it is time. So I have a hard time imagining how it would change anything *immediately* on the network at large (without things like default on and/or preferential peering, ...), but I still believe it&amp;#39;s an important step.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:14:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp4gxr9j0p6gsgw55n034u80thz8l25zjd3husd90xl7acjjwh9pszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvs5je02</id>
    
      <title type="html">📅 Original date posted:2022-10-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp4gxr9j0p6gsgw55n034u80thz8l25zjd3husd90xl7acjjwh9pszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvs5je02" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8rp43wagam92rl6rhvkww83kfdzsusvutncmf5flmm4ww3umewlg69ct4d&#39;&gt;nevent1q…ct4d&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-11&lt;br/&gt;📝 Original message:On Friday, October 7th, 2022 at 5:37 PM, Dario Sneidermanis via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Hello David,&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Thanks for the fast answer! It seems I missed the link to the PR, sorry for the&lt;br/&gt;&amp;gt; confusion. I&amp;#39;m referring to the opt-in flag for full-RBF from #25353&lt;br/&gt;&amp;gt; (&lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/25353&#34;&gt;https://github.com/bitcoin/bitcoin/pull/25353&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;Hello Dario,&lt;br/&gt;&lt;br/&gt;It is not clear to me why you believe the merging of this particular pull request poses an immediate risk to you.&lt;br/&gt;&lt;br/&gt;As explained by others, it&amp;#39;s only a configuration option that is default off, and the possibility of running rull-RBF policy nodes on the network have been trivial for anyone who wanted to for a long time on the network.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t want to sound dismissive of your concerns, but at this point I&amp;#39;m not convinced you&amp;#39;re actually aware of what this PR does and doesn&amp;#39;t do.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:14:18Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgwselld06m72fj8mltm05xkfl5s85ce72aazy3r35vjwfgx9jagszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvhs6rph</id>
    
      <title type="html">📅 Original date posted:2022-07-28 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgwselld06m72fj8mltm05xkfl5s85ce72aazy3r35vjwfgx9jagszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvhs6rph" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyshvy0u4tf5qrxtv38frhrr2hhtz08pzucm5aqthmvgxaymgu2xq7w0y5k&#39;&gt;nevent1q…0y5k&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-28&lt;br/&gt;📝 Original message:------- Original Message -------&lt;br/&gt;On Thursday, July 28th, 2022 at 3:27 AM, Ali Sherief via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Essentially, zero-knowledge proofs such as Schnorr are not compatible with address message signing - the public key cannot be retrieved from the address or the signature, so the address does not actually prove the authenticity of a Schnorr signature. That&amp;#39;s why the public key is required as an input in the first place.&lt;br/&gt;&lt;br/&gt;Yes, that&amp;#39;s an intentional design choice in BIP340, see note 5: &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#cite_ref-5-0&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#cite_ref-5-0&lt;/a&gt;. The choice is either batch verifiability or public key recovery.&lt;br/&gt;&lt;br/&gt;I regret ever using public key recovery when introducing the old legacy message signing scheme. It should just have used script signatures like BIP322 proposes.&lt;br/&gt;&lt;br/&gt;&amp;gt; In order to make it compatible with the address signing mechanism, the zero-knowledge part would have to be sacrificed in my BIP, or else a completely separate message signing format just for Taproot would be required&lt;br/&gt;&lt;br/&gt;You can avoid relying on public key recovery, and include the public key &#43; BIP340 signature in the encoded signature.&lt;br/&gt;&lt;br/&gt;&amp;gt; (which, in my view, is redundant - there is already the draft BIP322 which can verify anything and everything, but nobody is implementing that&lt;br/&gt;&lt;br/&gt;I think it would be much better if people would cooperate to get BIP322 to move forward than to keep inventing other formats. It&amp;#39;s the obvious solution in my opinion: not restricted to single-key policies, compatible with every script type, and trivially extensible to future schemes.&lt;br/&gt;&lt;br/&gt;&amp;gt; , just like BIP340).&lt;br/&gt;&lt;br/&gt;How so? Every taproot compatible wallet has a BIP340 implementation.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:12:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxcy0dup99jcw2s3la54yd4haqu0f0ajfdaf9mypzx3thvmausz8czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv0pp4s0</id>
    
      <title type="html">📅 Original date posted:2022-02-06 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxcy0dup99jcw2s3la54yd4haqu0f0ajfdaf9mypzx3thvmausz8czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv0pp4s0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxs54tz20rs8kqvtauqndu7ffxl7k3v3saef6td2947ur9ec9wftskwlq89&#39;&gt;nevent1q…lq89&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-06&lt;br/&gt;📝 Original message:&amp;gt; Dear Bitcoin Developers,&lt;br/&gt;&lt;br/&gt;&amp;gt; -When I contacted bitInfoCharts to divide the first interval of addresses, they kindly did divided to 3 intervals. From here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html&#34;&gt;https://bitinfocharts.com/top-100-richest-bitcoin-addresses.html&lt;/a&gt;&lt;br/&gt;&amp;gt; -You can see that there are more than 3.1m addresses holding ≤ 0.000001 BTC (1000 Sat) with total value of 14.9BTC; an average of 473 Sat per address.&lt;br/&gt;&lt;br/&gt;&amp;gt; -Therefore, a simple solution would be to follow the difficulty adjustment idea and just delete all those&lt;br/&gt;&lt;br/&gt;That would be a soft-fork, and arguably could be considered theft. While commonly (but non universally) implemented standardness rules may prevent spending them currently, there is no requirement that such a rule remain in place. Depending on how feerate economics work out in the future, such outputs may not even remain uneconomical to spend. Therefore, dropping them entirely from the UTXO set is potentially destroying potentially useful funds people own.&lt;br/&gt;&lt;br/&gt;&amp;gt; or at least remove them to secondary storage&lt;br/&gt;&lt;br/&gt;Commonly adopted Bitcoin full nodes already have two levels of storage effectively (disk and in-RAM cache). It may be useful to investigate using amount as a heuristic about what to keep and how long. IIRC, not even every full node implementation even uses a UTXO model.&lt;br/&gt;&lt;br/&gt;&amp;gt; for Archiving with extra cost to get them back, along with non-standard UTXOs and Burned ones (at least for publicly known, published, burn addresses).&lt;br/&gt;&lt;br/&gt;Do you mean this as a standardness rule, or a consensus rule?&lt;br/&gt;&lt;br/&gt;* As a standardness rule it&amp;#39;s feasible, but it makes policy (further) deviate from economically rational behavior. There is no reason for miners to require a higher price for spending such outputs.&lt;br/&gt;* As a consensus rule, I expect something like this to be very controversial. There are currently no rules that demand any minimal fee for anything, and given uncertainly over how fee levels could evolve in the future, it&amp;#39;s unclear what those rules, if any, should be.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:03:52Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqd2w8lccyfv8uda3y8vra3znk85muxxpj7vy33gsf5zrqu3pgavgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvryedt6</id>
    
      <title type="html">📅 Original date posted:2021-12-12 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqd2w8lccyfv8uda3y8vra3znk85muxxpj7vy33gsf5zrqu3pgavgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvryedt6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8h2wrpw9ukuw3ep5hk8slx4a8dsdpc06ayank9mcayc5zu4mnsfqa2x7fz&#39;&gt;nevent1q…x7fz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-12-12&lt;br/&gt;📝 Original message:On Sunday, December 12th, 2021 at 9:23 AM, Aymeric Vitte via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Using the Tor network to bypass censorship for bitcoin can work but is a very poor solution, the Tor network is very centralized, very small, watched and controlled, with plenty of features that do not apply to other protocols than those made to be used with the Tor Browser, Pieter gave a simple example, that you can solve easily changing the circuits, the problem remains that you really need to be a super expert to escape all the dangers of the Tor network, not even sure it&amp;#39;s possible unless you use something else than the Tor project code&lt;br/&gt;&lt;br/&gt;FWIW, I wasn&amp;#39;t talking about anything related to Tor&amp;#39;s protocol or organization at all. What I meant is that because creating a hidden service has ~0 cost, it is trivial for anyone to spin up an arbitrary number of Bitcoin hidden services. Thus, if one runs a node that only connects to hidden services, it is fairly easily eclipsable.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s just one example of a downside of (a particular way of) using Tor. That doesn&amp;#39;t mean I recommend against using Tor for Bitcoin traffic at all; my point was simply that there are trade-offs, and aspects of privacy of the P2P protocol that Tor does not address, and thus one shouldn&amp;#39;t assume that all problems are solved by &amp;#34;just use Tor&amp;#34;.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter&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/20211212/f92b2ade/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20211212/f92b2ade/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:01:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdl9r0qdte6esp6yc3ayv7heudxkr67pvf2q77qswepxfklhyyg5szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv3rvnm6</id>
    
      <title type="html">📅 Original date posted:2021-12-11 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdl9r0qdte6esp6yc3ayv7heudxkr67pvf2q77qswepxfklhyyg5szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv3rvnm6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrl43dsrumrj6yu5kly33x9qjnl8wts79e6dkjqe0pdzm4yqndrag79qghz&#39;&gt;nevent1q…qghz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-12-11&lt;br/&gt;📝 Original message:&amp;gt; It is that the solution to privacy is to use privacy-enhancing network&lt;br/&gt;&amp;gt; communications, such as TOR. I am not against a mechanism to rebroadcast&lt;br/&gt;&amp;gt; transactions more robustly if the mempool of adjoining nodes has&lt;br/&gt;&amp;gt; forgotten about them, but the truth is, all transactions originate from&lt;br/&gt;&amp;gt; some node, and there are methods that allow an individual node to be&lt;br/&gt;&amp;gt; identified as the likely source of a transaction unless privacy-enabled&lt;br/&gt;&amp;gt; networks are utilised. Having a different method to cause rebroadcast&lt;br/&gt;&amp;gt; does not obfuscate the origin.&lt;br/&gt;&lt;br/&gt;You&amp;#39;re talking about distinct aspects of transaction privacy.&lt;br/&gt;&lt;br/&gt;The rebroadcasting approach as it exists on the network, where wallets are responsible for their own rebroadcasting, directly reveals to your peers a relation between nodes and transactions: whenever any node relays the same transaction twice, it almost certainly implies they are the origin.&lt;br/&gt;&lt;br/&gt;This is just a node-transaction relation, and not necessarily IP-transaction relation. The latter can indeed be avoided by only connecting over Tor, or using other privacy networks, but just hiding the relation with IP addresses isn&amp;#39;t sufficient (and has its own downsides; e.g. Tor-only connectivity is far more susceptible to partition/Eclipse/DoS attacks). For example seeing the same node (even without knowing its IP) rebroadcast two transaction lets an observe infer a relation between those transactions, and that too is a privacy leak.&lt;br/&gt;&lt;br/&gt;I believe moving to a model where mempools/nodes themselves are responsible for rebroadcasting is a great solution to improving this specific problem, simply because if everyone rebroadcasts, the original author doing it too does not stand out anymore. It isn&amp;#39;t &amp;#34;fixing privacy&amp;#34;, it&amp;#39;s fixing a specific leak, one of many, but this isn&amp;#39;t a black and white property.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T23:01:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrhefa8w3t08v53fzmvdaucqfwtkl08rdevmdtkq94t27qnj4t7aczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvgn7z08</id>
    
      <title type="html">📅 Original date posted:2021-08-29 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrhefa8w3t08v53fzmvdaucqfwtkl08rdevmdtkq94t27qnj4t7aczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvgn7z08" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdc8pwf9shz2vhzar65w0cljmragzt78s4k9gx3987e955mcta6gg0uzlul&#39;&gt;nevent1q…zlul&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-08-29&lt;br/&gt;📝 Original message:On Saturday, August 28th, 2021 at 5:17 PM, ts via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Following up on my original proposal, I would like to get some more feedback of the community&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; to see if this could be realized at some point. Also, any recommendations as to who to contact&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; to get things rolling?&lt;br/&gt;&lt;br/&gt;I honestly don&amp;#39;t understand the point of what you&amp;#39;re suggesting.&lt;br/&gt;&lt;br/&gt;* If you&amp;#39;re concerned about random typos, this is something already automatically protected against through the checksum (both base58check or bech32/bech32m).&lt;br/&gt;&lt;br/&gt;* If you&amp;#39;re concerned about accidentally entering the wrong - but honestly created - address, comparing any few characters of the address is just as good as any other. It doesn&amp;#39;t even require the presence of a checksum. Looking at the last N characters, or the middle N, or anything except the first few, will do, and is just as good as an &amp;#34;external&amp;#34; checksum added at the end. For randomly-generated addresses (as honest ones are), each of those has exactly as much entropy.&lt;br/&gt;&lt;br/&gt;* If you&amp;#39;re concerned about maliciously constructed addresses, which are designed to look similar in specific places, an attacker can just as easily make the external checksum collide (and having one might even worsen this, as now the attacker can focus on exactly that, rather than needing to focus on every other character).&lt;br/&gt;&lt;br/&gt;Things would be different if you&amp;#39;d suggest a checksum in another medium than text (e.g. a visual/drawing/colorcoding one). But I don&amp;#39;t see any added value for an additional text-based checksum when addresses are already text themselves. This is even disregarding the difficulty of getting the ecosystem to adopt such changes.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T22:58:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2zgqmpzjp6sahjavev2uw0fjsdfrkjp77gen9hg62mq0r2m58awqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvqa6sqx</id>
    
      <title type="html">📅 Original date posted:2021-02-11 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2zgqmpzjp6sahjavev2uw0fjsdfrkjp77gen9hg62mq0r2m58awqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvqa6sqx" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9z9l8q0th0ha5gkqzdjv86dge7qrx0aqn9fqfxhz2heddccewysc59cyac&#39;&gt;nevent1q…cyac&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-11&lt;br/&gt;📝 Original message:‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;On Thursday, February 11, 2021 6:38 AM, Dr Maxim Orlovsky &amp;lt;orlovsky at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Thank you very much for all the clarifications; it’s good to have them sorted out and clearly structured. From what you wrote it follows that we still need to reserve a dedicated purpose (with new BIP) for BIP340 signatures to avoid key reuse, am I right?&lt;br/&gt;&lt;br/&gt;Maybe, but it would be for a particular way of using keys (presumably: single-key pay-to-taproot), not just the signature scheme itself. If you go down this path you&amp;#39;ll also want dedicated branches for multisig participation, and presumably several interesting new policies that become possible with Taproot.&lt;br/&gt;&lt;br/&gt;The only thing ECDSA/Schnorr specific about this is that - if you want to maintain provable security - the keys used for ECDSA and BIP340 should be separated by a hardened step. It seems however that all approaches people actually use to prevent reuse do that already.&lt;br/&gt;&lt;br/&gt;And as I said, dedicated branches only help for the simple case. For example, it doesn&amp;#39;t address the more general problem of preventing reuse of keys in multiple distinct groups of multisig sets you participate in. If you want to solve that you need to keep track of  index is for participating in what - and once you have something like that you don&amp;#39;t need dedicated purpose based derivation at all anymore.&lt;br/&gt;&lt;br/&gt;So I&amp;#39;m not sure I&amp;#39;d state it as us *needing* a dedicated purpose/branch for single-key P2TR (and probably many other useful ways of using taproot based spending policies...). But perhaps it&amp;#39;s useful to have.&lt;br/&gt;&lt;br/&gt;Greg Maxwell pointed out to me that there may be another reason to want non-reuse across ECDSA and BIP340 keys: if someone were to do all of these wrong:&lt;br/&gt;* not follow BIP340 and re-use RFC6979 for BIP340 nonce generation&lt;br/&gt;* reuse the same keys for both&lt;br/&gt;* sign the same message with both&lt;br/&gt;... you would actually leak your private key. This isn&amp;#39;t a concern for Bitcoin transaction signing however, as the sighash (message) indirectly commits to BIP341 or not, and thus it&amp;#39;d be impossible to construct colliding messages. Still, it&amp;#39;s a consideration to factor in.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:28:29Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspp2us8wjkgpm6ka5mf97886h39vt3gcghwqqkr996skytrglh22szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvanntdf</id>
    
      <title type="html">📅 Original date posted:2021-02-05 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspp2us8wjkgpm6ka5mf97886h39vt3gcghwqqkr996skytrglh22szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvanntdf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0hm8s3ve8qzqqlsvpc2jzzwhp5rlynl6qlltqytkung9rm2x0auqqrxmc4&#39;&gt;nevent1q…xmc4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-02-05&lt;br/&gt;📝 Original message:On Friday, February 5, 2021 9:51 AM, Dr Maxim Orlovsky via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Background&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ====================&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Had a discussion last night in Bitcoin Core IRC with Peter Wuille on different topics regarding key derivations, security, key tweaks in context of Schnorr signatures &amp;amp; Taproot. Would like to share some action points and plans that emerged from there:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  There is a real need for BIP-43 based new BIP with a new purpose field for keys used in Schnorr signatures. Peter will not do it (he is not very much interested in spending his time on wallet-level stuff), so someone else should.&lt;br/&gt;&amp;gt; 2.  Keys used in Schnorr signatures MUST NEVER BE used in ECDSA signatures, otherwise there is a risk of private key leak via correlation attack. This is rationale behind N1.&lt;br/&gt;&lt;br/&gt;Hi Maxim,&lt;br/&gt;&lt;br/&gt;thanks for bringing up this discussion here. I&amp;#39;d like to clarify a few things though, as I think the above is formulated far too strongly.&lt;br/&gt;&lt;br/&gt;There are two issues here: (1) reasons to avoid reusing the same key for privacy reasons, and (2) reasons to avoid using related keys for cryptographic reasons. And in practice, solutions to the first (which we already need, unrelated to Taproot/Schnorr) mean the second is largely moot.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# Don&amp;#39;t reuse keys for privacy/organizational reasons.&lt;br/&gt;&lt;br/&gt;Reusing the same key in Bitcoin scripts - for use in distinct signature schemes or not - should always be avoided. It has obvious privacy implications; I don&amp;#39;t think this is controversial, and it&amp;#39;s a problem that exists today, unrelated to Taproot. E.g. you don&amp;#39;t want to reuse the same keys as both single-sig and participation in multisig.&lt;br/&gt;&lt;br/&gt;My personal view here is that distinct standard derivation paths help with this in the simple cases, but they&amp;#39;re not a full solution in the most general case. E.g. if you want to use one seed/root to participate in multiple sets of multisig policies, you&amp;#39;ll need some kind of index to assign to each anyway. For this reason in general I prefer solutions that explicitly track what path is used for what.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# Don&amp;#39;t use related keys for cryptographic reasons&lt;br/&gt;&lt;br/&gt;There are some concerns to address here, but I want to make it clear there are no known attacks against usage of related keys across ECDSA and Schnorr, and I don&amp;#39;t expect there will be. However, there is probably no proof for this, and creating one may be tricky. On the other hand, the ecosystem (Bitcoin, but also many other applications) has accepted ECDSA long ago, while it had no security proofs whatsoever (and even the ones that exist now rely on fairly unusual assumption; a proof for security of mixed Schnorr/ECDSA usage would inherently need equally unusual assumptions too).&lt;br/&gt;&lt;br/&gt;Now, as soon as a hardened derivation separates different uses there is no concern at all. So any solution for avoiding key reuse (section above) that works by assigning (implicitly or explicitly) different hardened derivation paths (as BIP43 etc. do) to different uses implies there is never any concern about related keys across Schnorr/ECDSA.&lt;br/&gt;&lt;br/&gt;If the keys are not separated by a hardened step, it&amp;#39;s more complicated. Looking at the different cases:&lt;br/&gt;&lt;br/&gt;(1) Signing with related ECDSA keys (e.g. two unhardened child keys from the same xpub)&lt;br/&gt;&lt;br/&gt;- This is very common on BIP32 usage today, so hopefully it is secure! Tim Ruffing pointed me today to &lt;a href=&#34;https://link.springer.com/chapter/10.1007/978-3-030-36938-5_8&#34;&gt;https://link.springer.com/chapter/10.1007/978-3-030-36938-5_8&lt;/a&gt; whose abstract seems to indicate they prove this is actually secure, but I don&amp;#39;t know under what assumptions. Note that the comment there about Schnorr not having this property does not apply to BIP340, because it uses key-prefixed Schnorr.&lt;br/&gt;&lt;br/&gt;(2) Signing with related Schnorr keys.&lt;br/&gt;&lt;br/&gt;- I believe this is secure simply because BIP340 challenges commit to the pubkey (key prefixing), and thus a signature on one shouldn&amp;#39;t teach you anything about others. A formal proof is probably a bit longer, but still trivial to construct.&lt;br/&gt;&lt;br/&gt;(3) The real question: signing with a Schnorr key that is related to an ECDSA key.&lt;br/&gt;&lt;br/&gt;- I don&amp;#39;t expect that this is easy to prove, but I have a very hard time imagining how it could be exploitable, given the use of domain-separated hashes. Aspects such as BIP340&amp;#39;s key prefixing and the fact that Bitcoin sighashes indirectly commit to the (set of) signing pubkeys make it even harder.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# TL;DR&lt;br/&gt;&lt;br/&gt;* For privacy reasons, you should use separate keys/derivation branches for different uses in all circumstances (duh).&lt;br/&gt;* To stay within the realm of provably security it&amp;#39;s advisable to make sure ECDSA key and Schnorr keys use distinct hardened derivation steps.&lt;br/&gt;* Even if you don&amp;#39;t, you&amp;#39;re really just back to the level of assurance we had about unhardened BIP32 ECDSA keys before a proof was known (which I think most people aren&amp;#39;t even aware of).&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:28:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0aqawh4a39zcrawe5z9ycwlxw67zvatesn0gqckp7h6szkl63esczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv8vtwtm</id>
    
      <title type="html">📅 Original date posted:2020-12-21 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0aqawh4a39zcrawe5z9ycwlxw67zvatesn0gqckp7h6szkl63esczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv8vtwtm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfr57j7f5c6dwf3n05jjesg639j032e8jrcwpx8v7hns0uh5qcc6cu8wjhw&#39;&gt;nevent1q…wjhw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-12-21&lt;br/&gt;📝 Original message:On Sunday, December 20, 2020 9:37 PM, Karl-Johan Alm via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Thanks a lot for taking the time to brush up the BIP. For what it&amp;#39;s&lt;br/&gt;&amp;gt; worth, I am all for these changes, and I see them as clear&lt;br/&gt;&amp;gt; improvements all around.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; IIRC Pieter was the one who originally suggested the two-checks&lt;br/&gt;&amp;gt; approach (invalid, inconclusive, valid) which is being modified here,&lt;br/&gt;&amp;gt; so would be good if you chimed in (or not -- which I&amp;#39;ll assume means&lt;br/&gt;&amp;gt; you don&amp;#39;t mind).&lt;br/&gt;&lt;br/&gt;I agree with the idea of permitting incomplete validators to return inconclusive as well. That doesn&amp;#39;t really reduce the functionality (given that &amp;#34;inconclusive&amp;#34; was already a potential result), and it obviously makes it much more accessible to a variety of software.&lt;br/&gt;&lt;br/&gt;This suggestion breaks the original use of inconclusive though: the ability to detect that future features are used in the signature. The idea was to use divergence between &amp;#34;consensus valid&amp;#34; and &amp;#34;standardness valid&amp;#34; as a proxy for future extensions to be detected (e.g. OP_NOPn, future witness versions, ...). I think it&amp;#39;s undesirable that these things now become unconditionally invalid (until the BIP is updated, but once that happens old validators will give a different result than new ones).&lt;br/&gt;&lt;br/&gt;Since the BIP no longer relies on a nebulous concept of standardness, and instead specifically defines which standardness features are to be considered, this seems easy to fix: whenever validation fails due to any of those, require reporting inconclusive instead of invalid (unless of course something actually invalid also happens). In practice I guess you&amp;#39;d implement that (in capable validators) by still doing validation twice, once with all features enabled that distinguish between valid/invalid, and if valid, again but now with the features enabled that distinguish between valid and (invalid or inconclusive).&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:27:52Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs23eut3fue9nq8cgcg3jyg6hzl5m6fxpnsyu2qaq77xdk9tk5p9dgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvzpn35g</id>
    
      <title type="html">📅 Original date posted:2020-12-21 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs23eut3fue9nq8cgcg3jyg6hzl5m6fxpnsyu2qaq77xdk9tk5p9dgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvzpn35g" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0aqawh4a39zcrawe5z9ycwlxw67zvatesn0gqckp7h6szkl63escngfc3d&#39;&gt;nevent1q…fc3d&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-12-21&lt;br/&gt;📝 Original message:On Monday, December 21, 2020 2:57 PM, Pieter Wuille via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Sunday, December 20, 2020 9:37 PM, Karl-Johan Alm via bitcoin-dev bitcoin-dev at lists.linuxfoundation.org wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thanks a lot for taking the time to brush up the BIP. For what it&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; worth, I am all for these changes, and I see them as clear&lt;br/&gt;&amp;gt; &amp;gt; improvements all around.&lt;br/&gt;&amp;gt; &amp;gt; IIRC Pieter was the one who originally suggested the two-checks&lt;br/&gt;&amp;gt; &amp;gt; approach (invalid, inconclusive, valid) which is being modified here,&lt;br/&gt;&amp;gt; &amp;gt; so would be good if you chimed in (or not -- which I&amp;#39;ll assume means&lt;br/&gt;&amp;gt; &amp;gt; you don&amp;#39;t mind).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree with the idea of permitting incomplete validators to return inconclusive as well. That doesn&amp;#39;t really reduce the functionality (given that &amp;#34;inconclusive&amp;#34; was already a potential result), and it obviously makes it much more accessible to a variety of software.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This suggestion breaks the original use of inconclusive though: the ability to detect that future features are used in the signature. The idea was to use divergence between &amp;#34;consensus valid&amp;#34; and &amp;#34;standardness valid&amp;#34; as a proxy for future extensions to be detected (e.g. OP_NOPn, future witness versions, ...). I think it&amp;#39;s undesirable that these things now become unconditionally invalid (until the BIP is updated, but once that happens old validators will give a different result than new ones).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since the BIP no longer relies on a nebulous concept of standardness, and instead specifically defines which standardness features are to be considered, this seems easy to fix: whenever validation fails due to any of those, require reporting inconclusive instead of invalid (unless of course something actually invalid also happens). In practice I guess you&amp;#39;d implement that (in capable validators) by still doing validation twice, once with all features enabled that distinguish between valid/invalid, and if valid, again but now with the features enabled that distinguish between valid and (invalid or inconclusive).&lt;br/&gt;&lt;br/&gt;Re-reading your proposed text, I&amp;#39;m wondering if the &amp;#34;consensus-only validation&amp;#34; extension is intended to replace the inconclusive-due-to-consensus-and-standardness-differ state. If so, I don&amp;#39;t think it does, and regardless it doesn&amp;#39;t seem very useful.&lt;br/&gt;&lt;br/&gt;What I&amp;#39;m suggestion could be specified this way:&lt;br/&gt;* If validator understands the script:&lt;br/&gt;  * If signature is consensus valid (as far as the validator knows):&lt;br/&gt;    * If signature is not known to trigger standardness rules intended for future extension (well-defined set of rules listed in BIP, and revisable): return valid&lt;br/&gt;    * Otherwise: return inconclusive&lt;br/&gt;  * Otherwise: return invalid&lt;br/&gt;* Otherwise: return inconclusive&lt;br/&gt;&lt;br/&gt;Or in other words: every signature has a well-defined result (valid, invalid, inconclusive) &#43; validators may choose to report inconclusive for anything they don&amp;#39;t understand.&lt;br/&gt;&lt;br/&gt;This has the property that as long as new consensus rules only change things that were covered under for-future-extension standardness rules, no two validators will ever claim valid and invalid for the same signature. Only valid&#43;inconclusive or invalid&#43;inconclusive.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:27:52Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxxq8a2clqamngj502xxawjtjju0f9xdqmkr84yuh3uw8a60vdwcczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvxfzjfu</id>
    
      <title type="html">📅 Original date posted:2020-12-06 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxxq8a2clqamngj502xxawjtjju0f9xdqmkr84yuh3uw8a60vdwcczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvxfzjfu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp7wrcgejsgylzfj4xpzlvuul3cscyqdk4460jmnn3cxwktytprpcgy0tcr&#39;&gt;nevent1q…0tcr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-12-06&lt;br/&gt;📝 Original message:‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;On Sunday, December 6, 2020 5:04 AM, David A. Harding &amp;lt;dave at dtrt.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Sat, Dec 05, 2020 at 11:10:51PM &#43;0000, Pieter Wuille via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think these results really show there is no reason to try to&lt;br/&gt;&amp;gt; &amp;gt; maintain the old-software-can-send-to-future-segwit-versions property,&lt;br/&gt;&amp;gt; &amp;gt; given that more than one not just didn&amp;#39;t support it, but actually sent&lt;br/&gt;&amp;gt; &amp;gt; coins into a black hole.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think this is a good criteria to use for making a decision. We&lt;br/&gt;&amp;gt; shouldn&amp;#39;t deny users of working implementations the benefit of a feature&lt;br/&gt;&amp;gt; because some other developers didn&amp;#39;t implement it correctly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thus, I agree with Rusty that we should change the checksum for v1&#43;&lt;br/&gt;&amp;gt; &amp;gt; unconditionally.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I disagreed with Rusty previously and he proposed we check to see how&lt;br/&gt;&amp;gt; disruptive an address format change would be by seeing how many wallets&lt;br/&gt;&amp;gt; already provide forward compatibility and how many would need to be&lt;br/&gt;&amp;gt; updated for taproot no matter what address format is used. I think that&lt;br/&gt;&amp;gt; instead is a good criteria for making a decision.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I understand the results of that survey to be that only two wallets&lt;br/&gt;&amp;gt; correctly handled v1&#43; BIP173 addresses. One of those wallets is Bitcoin&lt;br/&gt;&amp;gt; Core, which I personally believe will unhesitatingly update to a new&lt;br/&gt;&amp;gt; address format that&amp;#39;s technically sound and which has widespread support&lt;br/&gt;&amp;gt; (doubly so if it&amp;#39;s just a tweak to an already-implemented checksum&lt;br/&gt;&amp;gt; algorithm).&lt;br/&gt;&lt;br/&gt;Hi Dave,&lt;br/&gt;&lt;br/&gt;You&amp;#39;re right to point out there is nuance I skipped over.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s look at the behavior of different classes of software/services that exist today when trying to send to v1&#43; addresses:&lt;br/&gt;&lt;br/&gt;(A) Supports sending to v1&#43; today&lt;br/&gt;  * Old proposal: works, but subject to bech32 insertion issue&lt;br/&gt;  * New proposal: fails&lt;br/&gt;(B) Fails to send to v1&#43; today&lt;br/&gt;  * Old proposal: fails&lt;br/&gt;  * New proposal: fails&lt;br/&gt;(C) Incorrectly sends to v1&#43; today&lt;br/&gt;  * Old proposal: lost funds&lt;br/&gt;  * New proposal: fails&lt;br/&gt;&lt;br/&gt;So the question is how the support for sending to v1&#43; in (a) software weighs up against protecting both (a) from the insertion issue, and (c) from lost funds. I do think (c) matters in this equation - people may choose to avoid adopting v1&#43; witnesses if it were to be known that some senders out there would misdirect funds. But the fact that (a) is small also means there is very little to gain from the old proposal.&lt;br/&gt;&lt;br/&gt;So perhaps I should have formulated it as: the small number of v1&#43; compatible senders today (regardless of the reasons for that) shows how futile the attempt to have one address type for all witness versions was, and the fact that there are even some who misdirect(ed) funds is the final nail in the coffin. Changing the checksum unconditionally gives us a new attempt at that.&lt;br/&gt;&lt;br/&gt;&amp;gt; Given that, I also now agree with changing the checksum for v1&#43;.&lt;br/&gt;&lt;br/&gt;Great.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:27:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrkkcwatc366akucwghxkh76juu6l60r2kuntv7dey4z5ak2fjn9gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvksmlzu</id>
    
      <title type="html">📅 Original date posted:2020-12-05 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrkkcwatc366akucwghxkh76juu6l60r2kuntv7dey4z5ak2fjn9gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvksmlzu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswv6x70xexrs6eyja5pflpenmg4ya7ygzv56ysryxwh0yn4cy4qrq0yyd3c&#39;&gt;nevent1q…yd3c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-12-05&lt;br/&gt;📝 Original message:On Friday, November 6, 2020 11:49 AM, Mike Schmidt via bitcoin-dev &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Well I sure picked a bad couple weeks to volunteer to send a bunch of Bitcoin test transactions...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While I tested less than I would have liked, there are some notable results:&lt;br/&gt;&lt;br/&gt;I think these results really show there is no reason to try to maintain the old-software-can-send-to-future-segwit-versions property, given that more than one not just didn&amp;#39;t support it, but actually sent coins into a black hole.&lt;br/&gt;&lt;br/&gt;Thus, I agree with Rusty that we should change the checksum for v1&#43; unconditionally. That also means that old senders are protected from the insertion issue (by failing, as we can guarantee that new-checksum addresses, even after a few errors, are invalid to old software).&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve sent another mail in this thread with details, but the TL;DR is that we should use the constant M=0x2bc830a3 rather than 0x3fffffff as previous suggested. More information on &lt;a href=&#34;https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e&#34;&gt;https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Absent objections, I&amp;#39;ll write up a BIP soon.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter&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/20201205/32d286a4/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20201205/32d286a4/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:27:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswv6x70xexrs6eyja5pflpenmg4ya7ygzv56ysryxwh0yn4cy4qrqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvu9quk6</id>
    
      <title type="html">📅 Original date posted:2020-12-05 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswv6x70xexrs6eyja5pflpenmg4ya7ygzv56ysryxwh0yn4cy4qrqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvu9quk6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2xwe3x9xvz3hm74sqzjkmy354wrzaarhpr2nlrelhp6x08gr6qtgqa0ws7&#39;&gt;nevent1q…0ws7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-12-05&lt;br/&gt;📝 Original message:&amp;gt; On Wednesday, October 7, 2020 5:21 PM, Rusty Russell via bitcoin-dev bitcoin-dev at lists.linuxfoundation.org wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I propose an alternative to length restrictions suggested by&lt;br/&gt;&amp;gt; &amp;gt; Russell in &lt;a href=&#34;https://github.com/bitcoin/bips/pull/945&#34;&gt;https://github.com/bitcoin/bips/pull/945&lt;/a&gt;: use the&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb&#34;&gt;https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb&lt;/a&gt; variant,&lt;br/&gt;&amp;gt; &amp;gt; unless the first byte is 0.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; starting a slight side-thread here.&lt;br/&gt;&lt;br/&gt;Another update, and a longer write-up.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Introduction&lt;br/&gt;------------&lt;br/&gt;&lt;br/&gt;Bech32&amp;#39;s checksum algorithm was designed to be strong against substitution&lt;br/&gt;errors, but it also provides some protection against more general classes of&lt;br/&gt;errors. The final constant M that is XOR&amp;#39;ed into the checksum influences that&lt;br/&gt;protection. BIP173 today uses M=1, but it is now known that this has a&lt;br/&gt;weakness: if the final character is a &amp;#34;p&amp;#34;, any number of &amp;#34;q&amp;#34; characters can be&lt;br/&gt;inserted or erased right before it, without invalidating the checksum.&lt;br/&gt;&lt;br/&gt;As it was recognized that other constants do not have this issue, the obvious&lt;br/&gt;question is whether this is the only possible type of weakness, and if not, if&lt;br/&gt;there is an optimal constant to use that minimizes the largest number of&lt;br/&gt;weaknesses.&lt;br/&gt;&lt;br/&gt;Since my last mail I&amp;#39;ve realized that it is actually possible to analyse the&lt;br/&gt;behavior of these final constants under a wide variety of error classes&lt;br/&gt;(substitutions, deletions, insertions, swaps, duplications) programatically.&lt;br/&gt;Greg Maxwell and I have used this to perform an exhaustive analysis of certain&lt;br/&gt;error patterns for all 2^30 possible M values, selected a number of criteria&lt;br/&gt;to optimize for, and conclude that we should use as constant:&lt;br/&gt;&lt;br/&gt;  M = 0x2bc830a3&lt;br/&gt;&lt;br/&gt;The code used to do this analysis, as well as the code used to verify some&lt;br/&gt;expected properties of the final result, and more, can be found on&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e&#34;&gt;https://gist.github.com/sipa/14c248c288c3880a3b191f978a34508e&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;See results_final.txt to see how this constant compares with the previously&lt;br/&gt;suggested constants 1, 0x3fffffff, and 0x3fefffff.&lt;br/&gt;&lt;br/&gt;Properties&lt;br/&gt;----------&lt;br/&gt;&lt;br/&gt;If we define an error as a deletion of one position, a swap of adjacent&lt;br/&gt;positions, a substitution in a specific position with a random character, an&lt;br/&gt;insertion of one random character in a specific position, or a duplication of&lt;br/&gt;the character in a specific position, then this M constant above gives us the&lt;br/&gt;following properties:&lt;br/&gt;&lt;br/&gt;* For generic HRPs and errors that don&amp;#39;t affect the first 6 data characters,&lt;br/&gt;  or alternatively averaged over all HRPs (see details futher):&lt;br/&gt;  * Always detected:&lt;br/&gt;    * (P) Up to 4 substitution errors (true for any constant).&lt;br/&gt;    * (Q) Any valid code with the new constant, fed without modification to&lt;br/&gt;          software that uses the old constant 1 (true for any constant).&lt;br/&gt;  * Any error pattern has failure to detect probability &amp;lt;= 2^-30:&lt;br/&gt;    * (L) Any number of errors restricted to a single window of up to 4&lt;br/&gt;          characters.&lt;br/&gt;    * (B) Up to two errors restricted to a window of up to 68 characters.&lt;br/&gt;    * (D) Any one error made to a valid code with the new constant, and fed to&lt;br/&gt;          software that uses the old constant 1&lt;br/&gt;  * Most error patterns have probability &amp;lt;= 2^-30:&lt;br/&gt;    * (C) Up to two errors in general: out of 23926796 such error patterns,&lt;br/&gt;          0.0040% have probability 2^-25.&lt;br/&gt;    * (N) Up to three errors restricted to a window of up to 69 characters:&lt;br/&gt;          out of 284708444 such patterns, 0.033% have probability 2^-25.&lt;br/&gt;    * (O) Up to three errors in general: out of 295744442 such error patterns,&lt;br/&gt;          0.034% have probability 2^-25; 0.000065% have probability 2^-20.&lt;br/&gt;    * (G) Up to two errors made to a valid code with the new constant, and fed&lt;br/&gt;          to software that uses the old constant 1: out of 2831622 such error&lt;br/&gt;          patterns, 0.048% have probability 2^-25.&lt;br/&gt;&lt;br/&gt;* Specifically for the bc1 HRP, with the BIP173 length restrictions:&lt;br/&gt;  * Always detected:&lt;br/&gt;    * (R) Up to 4 substitution errors (true for any constant).&lt;br/&gt;    * (A) Up to 3 substitution errors made to a valid code with the new&lt;br/&gt;          constant, and fed to software that uses the old constant 1.&lt;br/&gt;  * Any error pattern has failure to detect probability &amp;lt;= 2^-30:&lt;br/&gt;    * (E) Any one error.&lt;br/&gt;    * (F) Any one error made to a valid code with the new constant, and fed to&lt;br/&gt;          software that uses the old constant 1.&lt;br/&gt;    * (H) Up to two errors restricted to a window of 28 characters.&lt;br/&gt;  * Most error patterns have probability &amp;lt;= 2^-30:&lt;br/&gt;    * (J) Up to two errors in general: out of 455916 such error patterns,&lt;br/&gt;          0.039% have probability 2^-25; 0.0053% have 2^-20.&lt;br/&gt;    * (K) Any number of errors restricted to a window of 4 characters: out of&lt;br/&gt;          5813139 such error patterns, 0.0016% have probability 2^-25.&lt;br/&gt;    * (M) Up to three errors: out of 50713466 such error patterns, 0.078% have&lt;br/&gt;          probability 2^-25; 0.00063% have 2^-20.&lt;br/&gt;    * (I) Up to two errors made to a valid code with the new constant, and fed&lt;br/&gt;          to software that uses the old constant 1: out of 610683 such error&lt;br/&gt;          patterns, 0.092% have probability 2^-25; 0.00049% have probability&lt;br/&gt;          2^-20.&lt;br/&gt;&lt;br/&gt;To give an idea of what these probabilities mean, consider the known BIP173&lt;br/&gt;insertion issue. It admits an error pattern of 1 error (insertion in&lt;br/&gt;penultimate position) that has a failure to detect probability of 2^-10:&lt;br/&gt;it requires the final character to be &amp;#39;p&amp;#39;, and the inserted character to be&lt;br/&gt;&amp;#39;q&amp;#39;. Assuming those are both random, we have a chance of 1 in 32*32 to hit it.&lt;br/&gt;Note that the choice of *what* the error pattern is (whether it&amp;#39;s insertion,&lt;br/&gt;and where) isn&amp;#39;t part of our probabilities: we try to make sure that *every*&lt;br/&gt;pattern behaves well, not just randomly chosen ones, because presumably humans&lt;br/&gt;make some kinds of errors more than others, and we don&amp;#39;t know which ones.&lt;br/&gt;&lt;br/&gt;All the analyzed patterns above are guaranteed to be detected with probability&lt;br/&gt;2^-20 or better (and most are 2^-30). Of course, if we&amp;#39;d search for even&lt;br/&gt;larger classes of errors, say any 4 independent errors of any type, we would&lt;br/&gt;probably discover patterns with worse probabilities, but at that point the&lt;br/&gt;probability of the pattern itself being hit should be taken into account.&lt;br/&gt;&lt;br/&gt;The selection was made based on these same properties:&lt;br/&gt;* Start with the set of all 2^30 constants.&lt;br/&gt;* The generic properties (L), (B), (D), (C), (N), (O), and (G) were selected&lt;br/&gt;  for by rejecting all constants that left any worse error patterns (e.g.&lt;br/&gt;  all codes for which patterns matching (N) existed with failure probability&lt;br/&gt;  above 2^-25 were removed). All these restrictions are as strong as they&lt;br/&gt;  can be: making them over longer strings, wider windows, or more errors with&lt;br/&gt;  the same restrictions removes all remaining constants. This leaves us with&lt;br/&gt;  just 12054 acceptable constants.&lt;br/&gt;* The same was then done for the bc1/BIP173 specific properties (A), (E), (J),&lt;br/&gt;  (F), (H), (K), (M), and (I). This reduces the set further to 79 acceptable&lt;br/&gt;  constants. The full analysis output for all of these can be found in&lt;br/&gt;  output.txt.&lt;br/&gt;* Finally, the constant with the minimal number of worst-probability patterns&lt;br/&gt;  was chosen for the generic property (N). The single constant 0x2bc830a3&lt;br/&gt;  remains.&lt;br/&gt;* This solution and a few of its expected properties were then validated using&lt;br/&gt;  a simple program that makes random errors (see the monte_carlo.py file).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Technical details&lt;br/&gt;-----------------&lt;br/&gt;&lt;br/&gt;For the purpose of this analysis, define an &amp;#34;error pattern&amp;#34; as a starting&lt;br/&gt;length (of a valid string consisting of otherwise randomly chosen characters)&lt;br/&gt;combined with a sequence of the following (in this order):&lt;br/&gt;* 0 or more deletions of characters at specific positions (without&lt;br/&gt;  constraining what those characters are)&lt;br/&gt;* 0 or more swaps of characters at specific positions with the character&lt;br/&gt;  following it&lt;br/&gt;* 0 or more substitutions of characters at specific positions with a uniformly&lt;br/&gt;  randomly selected character&lt;br/&gt;* 0 or more insertions of uniformly randomly selected characters at specific&lt;br/&gt;  positions&lt;br/&gt;* 0 or more duplications of characters at specific positions (including&lt;br/&gt;  duplications of characters inserted/substituted in the previous steps)&lt;br/&gt;&lt;br/&gt;Examples:&lt;br/&gt;* &amp;#34;Start with a random valid 58 character string, remove the 17th character,&lt;br/&gt;  swap the 11th character with the 12th character, and insert a random&lt;br/&gt;  character in the 24th position&amp;#34; is an error pattern.&lt;br/&gt;* &amp;#34;Replace the 17th through 24th characters in a 78 character string with&lt;br/&gt;  &amp;#39;aardvark&amp;#39;&amp;#34; is not an error pattern, because substituted characters have to&lt;br/&gt;  be random, and can&amp;#39;t be specific values.&lt;br/&gt;&lt;br/&gt;Given such a pattern, assign variable names to every input character, and to&lt;br/&gt;every inserted/substituted character. For example, the pattern &amp;#34;Start with&lt;br/&gt;a 6 character string, delete the 1st character, swap the 2nd and 3rd&lt;br/&gt;character, and insert a random character between those&amp;#34; would be represented&lt;br/&gt;as [v0 v1 v2 v3 v4 v5] and [v1 v3 v6 v2 v4 v5]. Treat these variables as&lt;br/&gt;elements of GF(32), and write out the equations that both the first and second&lt;br/&gt;list have a valid checksum. Due to the fact that BCH codes are linear, this is&lt;br/&gt;just a linear set of equations over GF(32), and we can use Gaussian&lt;br/&gt;elimination to find the size of the solution space. If the input and output&lt;br/&gt;are the same length, we need to subtract the number of solutions for which the&lt;br/&gt;input and output are exactly the same, which is easy to find with another set&lt;br/&gt;of equations. Now compute the ratio of this number divided by (32^numvars /&lt;br/&gt;32^6), where the 32^6 is due to the precondition that the input string is&lt;br/&gt;valid. This gives us the probability of failure, assuming input and output are&lt;br/&gt;random, apart from the known relation between the two, and the fact that both&lt;br/&gt;are valid.&lt;br/&gt;&lt;br/&gt;This technique has an important limitation: it can only reason about randomly-&lt;br/&gt;chosen input strings, and the presence of the HRP and version numbers at the&lt;br/&gt;start violates that assumption. These are not random, and we&amp;#39;re forced to&lt;br/&gt;make one of these concessions:&lt;br/&gt;1) Ignore the problem, and treat the HRP as random. This lets us derive&lt;br/&gt;   properties that hold over all potential HRPs on average, but will thus fail&lt;br/&gt;   to account for the possibility that for a small numbers of potential HRPs&lt;br/&gt;   some error patterns may exist that behave worse. For technical reasons,&lt;br/&gt;   this averaging makes all constants behave identically for error patterns&lt;br/&gt;   that don&amp;#39;t change the length of the string. Given that substitution/swap&lt;br/&gt;   only errors are already dealt with well due to the BCH design this is&lt;br/&gt;   perhaps not too important. One exception is frame-shifting errors (a&lt;br/&gt;   deletion in one place compensated with an insertion in another place).&lt;br/&gt;2) Restrict analysis to error patterns that don&amp;#39;t affect the first 6 actual&lt;br/&gt;   characters. Doing so &amp;#34;masks&amp;#34; the effect of the HRP completely.&lt;br/&gt;3) Do analysis for specific HRPs only, allowing much more accurate statements,&lt;br/&gt;   but HRP-specific ones that may not hold for every HRP.&lt;br/&gt;&lt;br/&gt;Our final selection primarily optimizes for 1) and 2) as those benefit all&lt;br/&gt;potential uses of the encoding, but do optimize for 3) the &amp;#34;bc1&amp;#34; prefix&lt;br/&gt;specifically (and the BIP173 length restriction) as a tiebreaker.&lt;br/&gt;&lt;br/&gt;The code for this can be found under the link above, in const_analysis.cpp.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:27:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfwqrqzze392j0mxqw9krxxmsnasvvkasez8ud5nryufprnallqwszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvkhvza9</id>
    
      <title type="html">📅 Original date posted:2020-08-19 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfwqrqzze392j0mxqw9krxxmsnasvvkasez8ud5nryufprnallqwszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvkhvza9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd5flevgdze7k742dm5trzre4hxwphqzamd58sc7rrh96t7a2kyus6n5ue8&#39;&gt;nevent1q…5ue8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-19&lt;br/&gt;📝 Original message:On Wednesday, August 12, 2020 11:49 AM, Pieter Wuille &amp;lt;bitcoin-dev at wuille.net&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; It is late in the process, but I feel I owe this explanation so that at least the possibility of changing can be discussed with all information.&lt;br/&gt;&lt;br/&gt;As the responses have been pretty positive so far, we&amp;#39;ve gone ahead and made a patch to implement the change to the even tiebreaker: &lt;a href=&#34;https://github.com/sipa/bips/pull/210&#34;&gt;https://github.com/sipa/bips/pull/210&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;If there are no other arguments (against), I&amp;#39;ll PR it to the BIPs repo in a week or so.&lt;br/&gt;&lt;br/&gt;All comments/questions/... still welcome.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:26:21Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs28h8cswt06h8scde2gdk3l8hxvvsh78ad84ny9nqfqfm00l70r7szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvr3fpzr</id>
    
      <title type="html">📅 Original date posted:2020-08-12 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs28h8cswt06h8scde2gdk3l8hxvvsh78ad84ny9nqfqfm00l70r7szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvr3fpzr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsf654h4ld72cnr0qyfzt7rk5qyku0y4lekgm7y5q5f0ntut962z9cdm9a5p&#39;&gt;nevent1q…9a5p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-12&lt;br/&gt;📝 Original message:Hello all,&lt;br/&gt;&lt;br/&gt;The current BIP340 draft[1] uses two different tiebreakers for conveying the Y coordinate of points: for the R point inside signatures squaredness is used, while for public keys evenness is used. Originally both used squaredness, but it was changed[2] for public keys after observing this results in additional complexity for compatibility with existing systems.&lt;br/&gt;&lt;br/&gt;The reason for choosing squaredness as tiebreaker was performance: in non-batch signature validation, the recomputed R point must be verified to have the correct sign, to guarantee consistency with batch validation. Whether the Y coordinate is square can be computed directly in Jacobian coordinates, while determining evenness requires a conversion to affine coordinates first.&lt;br/&gt;&lt;br/&gt;This argument of course relies on the assumption that determining whether the Y coordinate is square can be done more efficiently than a conversion to affine coordinates. It appears now that this assumption is incorrect, and the justification for picking the squaredness tiebreaking doesn&amp;#39;t really exist. As it comes with other trade-offs (it slows down signing, and is a less conventional choice), it would seem that we should reconsider the option of having the R point use the evenness tiebreaker (like public keys).&lt;br/&gt;&lt;br/&gt;It is late in the process, but I feel I owe this explanation so that at least the possibility of changing can be discussed with all information. On the upside, this was discovered in the context of looking into a cool improvement to libsecp256k1[5], which makes things faster in general, but specifically benefits the evenness variant.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# 1. What happened?&lt;br/&gt;&lt;br/&gt;Computing squaredness is done through the Jacobi symbol (same inventor, but unrelated to Jacobian coordinates). Computing evenness requires converting points to affine coordinates first, and that needs a modular inverse. The assumption that Jacobi symbols are faster to compute than inverses was based on:&lt;br/&gt;&lt;br/&gt;* A (possibly) mistaken belief about the theory: fast algorithms for both Jacobi symbols and inverses are internally based on variants of the same extended GCD algorithm[3]. Since an inverse needs to extract a full big integer out of the transition steps made in the extgcd algorithm, while the Jacobi symbol just extracts a single bit, it had seemed that any advances applicable to one would be applicable to the other, but inverses would always need additional work on top. It appears however that a class of extgcd algorithms exists (LSB based ones) that cannot be used for Jacobi calculations without losing efficiency. Recent developments[4] and a proposed implementation in libsecp256k1[5] by Peter Dettman show that using this, inverses in some cases can in fact be faster than Jacobi symbols.&lt;br/&gt;&lt;br/&gt;* A broken benchmark. This belief was incorrectly confirmed by a broken benchmark[6] in libsecp256k1 for the libgmp-based Jacobi symbol calculation and modular inverse. The benchmark was repeatedly testing the same constant input, which apparently was around 2.5x faster than the average speed. It is a variable-time algorithm, so a good variation of inputs matters. This mistake had me (and probably others) convinced for years that Jacobi symbols were amazingly fast, while in reality they were always very close in performance to inverses.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# 2. What is the actual impact of picking evenness instead?&lt;br/&gt;&lt;br/&gt;It is hard to make very generic statements here, as BIP340 will hopefully be used for a long time, and hardware advancements and algorithmic improvements may change the balance. That said, performance on current hardware with optimized algorithms is the best approximation we have.&lt;br/&gt;&lt;br/&gt;The numbers below give the expected performance change from squareness to evenness, for single BIP340 validation, and for signing. Positive numbers mean evenness is faster. Batch validation is not impacted at all.&lt;br/&gt;&lt;br/&gt;In the short term, for block validation in Bitcoin Core, the numbers for master-nogmp are probably the most relevant (as Bitcoin Core uses libsecp256k1 without libgmp, to reduce consensus-critical dependencies). If/when [5] gets merged, safegcd-nogmp will be what matters. On a longer time scale, the gmp numbers may be more relevant, as the Jacobi implementation there is certainly closer to the state of the art.&lt;br/&gt;&lt;br/&gt;* i7-7820HQ: (verify) (sign)&lt;br/&gt;  - master-nogmp: -0.3% &#43;16.1%&lt;br/&gt;  - safegcd-nogmp: &#43;6.7% &#43;17.1%&lt;br/&gt;  - master-gmp: &#43;0.6% &#43;7.7%&lt;br/&gt;  - safegcd-gmp: &#43;1.6% &#43;8.6%&lt;br/&gt;&lt;br/&gt;* Cortex-A53: (verify) (sign)&lt;br/&gt;  - master-nogmp: -0.3% &#43;15.7%&lt;br/&gt;  - safegcd-nogmp: &#43;7.5% &#43;16.9%&lt;br/&gt;  - master-gmp: &#43;0.3% &#43;4.1%&lt;br/&gt;  - safegcd-gmp: 0.0% &#43;3.5%&lt;br/&gt;&lt;br/&gt;* EPYC 7742: (verify) (sign)&lt;br/&gt;  - master-nogmp: -0.3% &#43;16.8%&lt;br/&gt;  - safegcd-nogmp: &#43;8.6% &#43;18.4%&lt;br/&gt;  - master-gmp: 0.0% &#43;7.4%&lt;br/&gt;  - safegcd-gmp: &#43;2.3% &#43;7.8%&lt;br/&gt;&lt;br/&gt;In well optimized cryptographic code speedups as large as a couple percent are difficult to come by, so we would usually consider changes of this magnitude relevant. Note however that while the percentages for signing speed are larger, they are not what is unexpected here. The choice for the square tiebreaker was intended to improve verification speed at the cost of signing speed. As it turns out that it doesn&amp;#39;t actually benefit verification speed, this is a bad trade-off.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# 3. How big a change is it&lt;br/&gt;&lt;br/&gt;* In the BIP:&lt;br/&gt;  - Changing both invocations of `has_square_y` to `has_even_y`.&lt;br/&gt;  - Changing the `lift_x_square_y` invocation to `lift_x_even_y`.&lt;br/&gt;  - Applying the same change to the test vector generation code, and the resulting test vectors.&lt;br/&gt;* In the libsecp256k1:&lt;br/&gt;  - An 8-line patch to the proposed BIP340 implementation[7]: see [8]&lt;br/&gt;* In Bitcoin Core:&lt;br/&gt;  - Similarly small changes to the Python test reimplementation[9]&lt;br/&gt;* Duplicating these changes in other draft implementations that may already exist.&lt;br/&gt;* Review for all the above.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# 4. Conclusion&lt;br/&gt;&lt;br/&gt;We discovered that the justification for using squaredness tiebreakers in BIP340 is based on a misunderstanding, and recent developments show that it may in fact be a somewhat worse choice than the alternative. It is a relatively simple change to address this, but that has be weighed against the impact of changing the standard at this stage.&lt;br/&gt;&lt;br/&gt;Thoughts?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;# 5. References&lt;br/&gt;&lt;br/&gt;  [1] &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#design&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#design&lt;/a&gt;&lt;br/&gt;  [2] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017639.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017639.html&lt;/a&gt;&lt;br/&gt;  [3] &lt;a href=&#34;https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm&#34;&gt;https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm&lt;/a&gt;&lt;br/&gt;  [4] &lt;a href=&#34;https://gcd.cr.yp.to/safegcd-20190413.pdf&#34;&gt;https://gcd.cr.yp.to/safegcd-20190413.pdf&lt;/a&gt;&lt;br/&gt;  [5] &lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/767&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/767&lt;/a&gt;&lt;br/&gt;  [6] &lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/797&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/797&lt;/a&gt;&lt;br/&gt;  [7] &lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/558&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/558&lt;/a&gt;&lt;br/&gt;  [8] &lt;a href=&#34;https://github.com/sipa/secp256k1/commit/822311ca230a48d2c373f3e48b91b2a59e1371d6&#34;&gt;https://github.com/sipa/secp256k1/commit/822311ca230a48d2c373f3e48b91b2a59e1371d6&lt;/a&gt;&lt;br/&gt;  [9] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/17977&#34;&gt;https://github.com/bitcoin/bitcoin/pull/17977&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:26:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrnne05yv8jns8wu40mkrppc30ws8eccxvuv2w9re3m4pjdj0kcygzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvavxveu</id>
    
      <title type="html">📅 Original date posted:2020-03-03 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrnne05yv8jns8wu40mkrppc30ws8eccxvuv2w9re3m4pjdj0kcygzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvavxveu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdc4ldq3kaz7lmmc453tjujw6pjleneduw3534u2p76c9l5878yxgr82ja7&#39;&gt;nevent1q…2ja7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-03&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;Given the recent activity and attention [1,2] around anti-covert channel&lt;br/&gt;signing schemes, I decided to create this overview of the various techniques&lt;br/&gt;that I know of, their trade-offs, and the various issues they protect against.&lt;br/&gt;Most of this is based on various schemes by a number of authors, and credit&lt;br/&gt;goes to them. I&amp;#39;m putting this together into something hopefully more&lt;br/&gt;comprehensive, but mistakes and omissions in this writeup are likely mine.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t believe we have security proofs for any of the schemes, or for any of&lt;br/&gt;the claims I make about the mitigation techniques below. I hope that having&lt;br/&gt;all properties written up in one place makes it easier to eventually get those.&lt;br/&gt;&lt;br/&gt;1) Security model&lt;br/&gt;-----------------&lt;br/&gt;&lt;br/&gt;When talking about signing with covert channels, we consider 3 parties:&lt;br/&gt;* HW, the hardware wallet (or other offline signing device) with secret data&lt;br/&gt;  (a private key, or a seed from which the private key is derived).&lt;br/&gt;* SW, the software wallet (or whatever communicates with HW and the network).&lt;br/&gt;* OO, the outside observer who is trying to learn information about HW&amp;#39;s&lt;br/&gt;  secret data.&lt;br/&gt;&lt;br/&gt;We consider two distinct attack models:&lt;br/&gt;* MSW, &amp;#34;malicious software wallet&amp;#34;, but with honest HW. OO and SW are the&lt;br/&gt;  same party here, so this models the usual scenarios hardware wallets are&lt;br/&gt;  designed for, including side-channel attacks if those are considered to be&lt;br/&gt;  part of the threat model.&lt;br/&gt;* MHW, &amp;#34;malicious hardware wallet&amp;#34;, but with honest SW and no malicious party&lt;br/&gt;  being able to communicate with HW directly. OO and HW may have shared secret&lt;br/&gt;  information that SW (or anyone else) is unaware of. SW&amp;#39;s job is trying to&lt;br/&gt;  prevent HW from using this to leak any information about its secret.&lt;br/&gt;&lt;br/&gt;When both the HW and the SW are compromised, clearly no security is possible,&lt;br/&gt;as all entities are controlled by the same party in that case.&lt;br/&gt;&lt;br/&gt;In case HW uses a deterministic algorithm, it is possible to protect against&lt;br/&gt;the MHW case by spot checking HW&amp;#39;s behavior, by using an externally known&lt;br/&gt;secret/seed. However, we&amp;#39;d like to have better than just spot checking&lt;br/&gt;security, and for protection against side-channel attacks we may want&lt;br/&gt;something that keeps working even when randomness is used by HW.&lt;br/&gt;&lt;br/&gt;To keep the scope limited, we assume SW has no secret key of their own. This&lt;br/&gt;rules out solutions like using 2-of-2 MuSig between HW and SW, which work, but&lt;br/&gt;come with their own complications (like needing secure storage for that&lt;br/&gt;secret).&lt;br/&gt;&lt;br/&gt;2) Issues and solutions&lt;br/&gt;-----------------------&lt;br/&gt;&lt;br/&gt;In this section I will go over the various issues that exist in the MHW and MSW&lt;br/&gt;models, the known mitigation techniques, and the resulting schemes.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m assuming a Schnorr-like signature protocol, though everything should apply&lt;br/&gt;equally to ECDSA, and to a lesser extent probably also to multisignature&lt;br/&gt;schemes. These variable names are used:&lt;br/&gt;* H is a hash function.&lt;br/&gt;* G is the curve generator.&lt;br/&gt;* m is the message to be signed, known to and agreed upon by SW and HW.&lt;br/&gt;* d is HW&amp;#39;s secret key, with corresponding public key Q=dG.&lt;br/&gt;* k is the secret nonce k, with corresponding public nonce R=kG.&lt;br/&gt;&lt;br/&gt;The simplest protocol is naive Schnorr with deterministic nonce generation,&lt;br/&gt;where SW only verifies that a signature created by HW is valid:&lt;br/&gt;&lt;br/&gt;[Scheme 1: deterministic nonce, no tweak]&lt;br/&gt;* SW requests a signature by sending (Q,m) to HW.&lt;br/&gt;* HW computes k=H(d,m), R=kG, s=k&#43;H(R,Q,m)d, and sends (R,s) to SW.&lt;br/&gt;* SW verifies sG=R&#43;H(R,Q,m)Q, and publishes sig (R,s) in case of success.&lt;br/&gt;&lt;br/&gt;2.a) Predictable k value&lt;br/&gt;&lt;br/&gt;There is a simple attack against Scheme 1 that will leak the entire private&lt;br/&gt;key undetectably using a single signature, under MHW. Assume HW and OO both&lt;br/&gt;have access to a shared secret a, unknown to anyone else. HW computes&lt;br/&gt;k=H(a,Q,m) instead, which SW cannot distinguish from the honest k=H(d,m) as it&lt;br/&gt;knows neither a or d. OO can compute k using the same formula, and thus&lt;br/&gt;recover the private key as d=(s-k)/H(R,Q,m).&lt;br/&gt;&lt;br/&gt;The general strategy to avoid this is by letting SW provide entropy that is&lt;br/&gt;included into the nonce computation. A very naive (and ineffective) way of&lt;br/&gt;doing that would be:&lt;br/&gt;* SW generates random t, and requests a signature by sending (Q,m,t) to HW.&lt;br/&gt;* HW computes k0=H(d,m,t), R0=k0G, k=k0&#43;t, R=kG, s=k&#43;H(R,Q,m)d, and sends&lt;br/&gt;  (R0,R,s) to SW.&lt;br/&gt;* SW verifies sG=R&#43;H(R,Q,m)Q, R=R0&#43;tG, and publishes sig (R,s) if all is good.&lt;br/&gt;&lt;br/&gt;This does not help as HW can still choose k directly, and retroactively&lt;br/&gt;compute R0 as R-tG, satsifying SW&amp;#39;s requirements. To address that, there are&lt;br/&gt;two options:&lt;br/&gt;* Turning R into a binding commitment to R0 and t (see Scheme 2).&lt;br/&gt;* Only revealing t after HW has revealed their R0 (see Scheme 3).&lt;br/&gt;&lt;br/&gt;The first approach is based on making R a commitment to R0 and t using&lt;br/&gt;R=R0&#43;H(R0,t)G. When applied to public keys this is known as pay-to-contract&lt;br/&gt;(and is the basis for Taproot); when applied to the R point in signatures it&amp;#39;s&lt;br/&gt;known as sign-to-contract [3]. These are generally useful approaches to make&lt;br/&gt;public keys and signatures commit to/timestamp external data, but using this&lt;br/&gt;to protect against covert channels in signatures was first discussed by Greg&lt;br/&gt;Maxwell [4]:&lt;br/&gt;&lt;br/&gt;[Scheme 2: deterministic nonce, S2C tweak]&lt;br/&gt;* SW generates random t, and requests a signature by sending (Q,m,t) to HW.&lt;br/&gt;* HW computes k0=H(d,m,t), R0=k0G, k=k0&#43;H(R0,t), R=kG,&lt;br/&gt;  s=k&#43;H(R,Q,m)d, and sends (R0,R,s) to SW.&lt;br/&gt;* SW verifies sG=R&#43;H(R,Q,m)Q, R=R0&#43;H(R0,t)G, and publishes sig (R,s) if all&lt;br/&gt;  is good.&lt;br/&gt;&lt;br/&gt;The second approach is adding a round, and only revealing the tweak t after HW&lt;br/&gt;has revealed their R0:&lt;br/&gt;&lt;br/&gt;[Scheme 3: deterministic nonce, tweak revealed after nonce]&lt;br/&gt;* SW requests a signature by sending (Q,m) to HW.&lt;br/&gt;* HW computes k0=H(d,m), R0=k0G, and sends R0 to SW.&lt;br/&gt;* SW generates a random t, and sends it to HW.&lt;br/&gt;* HW computes k=k0&#43;t, R=kG, s=k&#43;H(R,Q,m)d, and sends (R,s) to SW.&lt;br/&gt;* SW verifies sG=R&#43;H(R,Q,m)Q, R=R0&#43;tG, and publishes (R,s) if all is good.&lt;br/&gt;&lt;br/&gt;2.b) Replay attacks&lt;br/&gt;&lt;br/&gt;Scheme 3 introduces another problem however, this time under MSW. SW can ask&lt;br/&gt;HW to sign the same message twice, but then pick distinct values for t (t and&lt;br/&gt;t&amp;#39;). The resulting R points will be R=(k0&#43;t)G and R&amp;#39;=(k0&#43;t&amp;#39;)G, and the s&lt;br/&gt;values will be s=k0&#43;t&#43;H(R,Q,m)d and s&amp;#39;=k0&#43;t&amp;#39;&#43;H(R&amp;#39;,Q,m)d. This allows SW to&lt;br/&gt;compute d=(s&amp;#39;-t&amp;#39;-s&#43;t)/(H(R&amp;#39;,Q,m)-H(R,Q,m)). A similar problem would also exist&lt;br/&gt;in Scheme 2 if t wasn&amp;#39;t included in the formula for k0.&lt;br/&gt;&lt;br/&gt;The problem is that SW is allowed to change their tweak while the nonce&lt;br/&gt;only undergoes a linear function known to SW. There are again two ways to&lt;br/&gt;address this problem:&lt;br/&gt;* Making k0 generation non-repeating by including a counter or randomness&lt;br/&gt;  in it (Scheme 4).&lt;br/&gt;* Making SW commit to their tweak before revealing it as well (Scheme 5).&lt;br/&gt;&lt;br/&gt;[Scheme 4: counter/random nonce, tweak revealed after nonce]&lt;br/&gt;* SW requests a signature by sending (Q,m) to HW.&lt;br/&gt;* HW uses a global counter c, or fresh randomness b, and computes k0=H(d,m,c)&lt;br/&gt;  or k0=H(d,m,b), R0=k0G, and sends R0 to SW.&lt;br/&gt;* SW generates a random t, and sends it to HW.&lt;br/&gt;* HW computes k=k0&#43;t, R=kG, s=k&#43;H(R,Q,m)d, and sends (R,s) to SW.&lt;br/&gt;* SW verifies sG=R&#43;H(R,Q,m)Q, R=R0&#43;tH, and publishes (R,s) if all is good.&lt;br/&gt;&lt;br/&gt;A variant of Scheme 4, but with multiplicative tweak rather than additive,&lt;br/&gt;and only revealing H(R0) rather than R0 immediately, was suggested by Sergio&lt;br/&gt;Demian Lerner in [5].&lt;br/&gt;&lt;br/&gt;[Scheme 5: deterministic nonce, precommited tweak revealed after nonce]&lt;br/&gt;* SW generates a random t, computes h=H(t), and requests a signature by&lt;br/&gt;  sending (Q,m,h) to HW.&lt;br/&gt;* HW computes k0=H(d,m,h), R0=k0G, and sends R0 to SW.&lt;br/&gt;* SW sends t to HW.&lt;br/&gt;* HW verifies h=H(t), and if so, computes k=k0&#43;t, R=kG, s=k&#43;H(R,Q,m)d, and&lt;br/&gt;  sends (R,s) to SW.&lt;br/&gt;* SW verifies sG=R&#43;H(R,Q,m)Q, R=R0&#43;tG, and publishes (R,s) if all is good.&lt;br/&gt;&lt;br/&gt;Scheme 5 is the one suggested by Stepan Snigirev in [2,6]. A variant with&lt;br/&gt;S2C tweaking instead of additive tweaked was suggested by Andrew Poelstra&lt;br/&gt;in his talk [7], with transcript by Bryan Bishop in [8].&lt;br/&gt;&lt;br/&gt;2.c) k0 grinding&lt;br/&gt;&lt;br/&gt;So far Schemes 2, 4, and 5 protect against predictable k values and replay&lt;br/&gt;attacks. Predictable k values are however not the only way MWH can leak&lt;br/&gt;secrets.&lt;br/&gt;&lt;br/&gt;If we imagine HW has significant computational power, in Scheme 2 it can try&lt;br/&gt;many different k0 values (by deviating from k0=H(d,m,t)), and observe what the&lt;br/&gt;resulting (R,s) signature will be. For example, by iterating on average 256&lt;br/&gt;times, it can choose 8 bits in (R,s) that convey information about k, d, or&lt;br/&gt;whatever seed or master key they are derived from. Using forward error&lt;br/&gt;correction (FEC) schemes, this channel of a few bits per signature may be&lt;br/&gt;enough to leak an entire seed over enough signatures. Using a shared secret a&lt;br/&gt;between HW and OO those bits can again be made undetectable to anyone else.&lt;br/&gt;&lt;br/&gt;Schemes 4 and 5 are not vulnerable to this problem, as they force HW to commit&lt;br/&gt;to its R0 before knowing the resulting R. One might think that Scheme 4 merely&lt;br/&gt;shifts this problem to MSW, where SW can grind t to make R biased in a similar&lt;br/&gt;way. We assumed that SW does not have access to any secrets however, so this&lt;br/&gt;is harmless.&lt;br/&gt;&lt;br/&gt;2.d) Statefulness&lt;br/&gt;&lt;br/&gt;We&amp;#39;re left with Schemes 4 and 5 that protect against all listed issues. Both&lt;br/&gt;need two interaction rounds, with state that needs to be kept by HW between&lt;br/&gt;the rounds (the k0 value). While not a problem in theory, this may be hard to&lt;br/&gt;implement safely in simple APIs.&lt;br/&gt;&lt;br/&gt;One possibility is sticking with our &amp;#34;best one-round&amp;#34; Scheme 2, and accepting&lt;br/&gt;that that implies the k0 grinding vulnerability.&lt;br/&gt;&lt;br/&gt;There is another possibility, namely splitting Scheme 5 into two independent&lt;br/&gt;interactions with HW, where no memory between them is needed on the HW side:&lt;br/&gt;&lt;br/&gt;[Scheme 6: deterministic nonce, precommitted tweak revealed separately]&lt;br/&gt;First interaction:&lt;br/&gt;* SW generates a random t, computes h=H(t), and requests the R0 point that HW&lt;br/&gt;  would use by sending (Q,m,h) to HW.&lt;br/&gt;* HW computes k0=H(d,m,h), R0=k0G, and sends R0 to SW.&lt;br/&gt;Second interaction:&lt;br/&gt;* SW requests a signature by sending (Q,m,t) to HW&lt;br/&gt;* HW computes k0=H(d,m,H(t)), k=k0&#43;t, R0=R0k, R=kG, s=k&#43;H(R,Q,m)d, and sends&lt;br/&gt;  (R0,R,s) to SW.&lt;br/&gt;* SW verifies that R0 matches the earlier R0 it received, and that&lt;br/&gt;  sG=R&#43;H(R,Q,m)Q, R=R0&#43;tG, and publishes (R,s) if all is good.&lt;br/&gt;&lt;br/&gt;A variant of Scheme 6, with S2C tweaking instead of additive tweaking, is what&lt;br/&gt;is being worked on by Jonas Nick [9] and Marko Bencun [10] for the&lt;br/&gt;libsecp256k1 library.&lt;br/&gt;&lt;br/&gt;The same technique cannot be applied to Scheme 4, as HW inherently needs state&lt;br/&gt;to keep the counter c, or to remember the randomness b between interactions&lt;br/&gt;there.&lt;br/&gt;&lt;br/&gt;2.e) Failure bias&lt;br/&gt;&lt;br/&gt;There is yet another, and even weaker, leak that is available in MHW: whenever&lt;br/&gt;HW learns what the eventual signature (R,s) will be, it could pretend to fail&lt;br/&gt;and go offline, or return some kind of error. In theory, this is enough to&lt;br/&gt;introduce a similar bias, though it would come at possibly enormous failure&lt;br/&gt;rates. If HW is allowed to fail 255 times out of 256, it can introduce an&lt;br/&gt;8-bit bias, and employ similar techniques (FEC and shared HW/OO secret).&lt;br/&gt;The obvious solution is showing a big warning to the user whenever any kind of&lt;br/&gt;failure occurs (including device going offline, or returning invalid&lt;br/&gt;responses) that the device is failing, and that if this happens frequently, it&lt;br/&gt;should be treated as malicious.&lt;br/&gt;&lt;br/&gt;Interestingly, Scheme 6 can be adapted to reduce this (already very weak)&lt;br/&gt;channel further. The observation is that HW cannot predict during the first&lt;br/&gt;interaction what (R,s) is going to be, as t is not known. This means it can&lt;br/&gt;only fail during the second interaction when the result is already committed&lt;br/&gt;to. Thus, if failure occurs during the second interaction, SW can simply&lt;br/&gt;retry it with the same t value. If that succeeds, either a glitch occurred and&lt;br/&gt;was safely retried, or the device&amp;#39;s attempt to bias was prevented. If the&lt;br/&gt;failure persists, the user should still be warned - as restarting with a&lt;br/&gt;different k would reintroduce the possibility for bias.&lt;br/&gt;&lt;br/&gt;2.f) Side-channel attacks&lt;br/&gt;&lt;br/&gt;As a last consideration, let&amp;#39;s see if these schemes have an impact on&lt;br/&gt;potential resilience against side-channel attacks. I say potential, because&lt;br/&gt;these classes of attacks are in general hard to protect against and model,&lt;br/&gt;as they depend on implementation details and hardware protections. Still,&lt;br/&gt;there are some general observations possible.&lt;br/&gt;&lt;br/&gt;A significant amount of time in HW is likely spent on the EC multiplications&lt;br/&gt;to obtain R0 and R from k0 and k. As s=k&#43;H(R,Q,m)d, an variation of the replay&lt;br/&gt;attack is possible here. In schemes with deterministic nonces, SW can ask for&lt;br/&gt;the same signature twice, but use a fault injection to hopefully (only) cause&lt;br/&gt;an error in R, R&amp;#39;. This would reveal (R,s) and (R&amp;#39;,s&amp;#39;) to SW, where s&amp;#39; is&lt;br/&gt;k&#43;H(R&amp;#39;,Q,m)d, which would let them compute d=(s&amp;#39;-s)/(H(R&amp;#39;,Q,m)-H(R,q,m)).&lt;br/&gt;There is an easy solution against this, namely verifying the final signature&lt;br/&gt;(R,s) in HW before sending it to SW, as almost certainly the result of such&lt;br/&gt;a fault would not result in a valid signature. This comes at an extra&lt;br/&gt;computational cost, though.&lt;br/&gt;&lt;br/&gt;For other side-channel attacks like different power analysis, research [11]&lt;br/&gt;shows that introducing fresh randomness in the right place may be helpful.&lt;br/&gt;This approach is called &amp;#34;synthetic nonces&amp;#34; [12]. Unfortunately usage of these&lt;br/&gt;rules out the deterministic approach from Scheme 6. A variant of Scheme 5&lt;br/&gt;with fresh randomness in the k0 computation can be used, though.&lt;br/&gt;&lt;br/&gt;3) Summary&lt;br/&gt;----------&lt;br/&gt;&lt;br/&gt;Six different issues of various levels of severity were discussed:&lt;br/&gt;  (a) Predictable k: (MHW) a single signature leaks the entire private key.&lt;br/&gt;  (b) Replay attacks: (MSW) a single signature leaks the entire private key.&lt;br/&gt;  (c) k0 grinding: (MHW) the HW can leak n bits with 2^n work.&lt;br/&gt;  (d) Statefulness: HW has to correctly maintain state, complicating things.&lt;br/&gt;  (e) Failure bias: (MHW) a selective failure rate of (2^n-1)/2^n can be used&lt;br/&gt;      to leak n bits of secret per signature.&lt;br/&gt;  (f) Side-channel attacks: (MSW) physical access to HW can help extracting&lt;br/&gt;      secrets.&lt;br/&gt;&lt;br/&gt;It seems any reasonable solution should at least protect against (a), (b), and&lt;br/&gt;(c), but it seems no solution can be optimal for all of (d), (e), and (f) too.&lt;br/&gt;&lt;br/&gt;If statelessness and protection against failure bias are prioritized, Scheme 6&lt;br/&gt;seems best. Its additive tweaking can be replaced with S2C (or multiplicative)&lt;br/&gt;tweaking too. S2C in particular may be desirable to unify with support for&lt;br/&gt;S2C-based timestamping.&lt;br/&gt;&lt;br/&gt;If resistance against side-channels is prioritized, solutions with synthetic&lt;br/&gt;nonces seem best; either Scheme 4, or Scheme 5 with randomness added to the&lt;br/&gt;k0 computation. Again, any tweaking approach can be chosen.&lt;br/&gt;&lt;br/&gt;If the 2-round approaches for Schemes 4, 5, and 6 are really unacceptable,&lt;br/&gt;Scheme 2 (with S2C tweaking) could be used, but in that case protection&lt;br/&gt;against k0 grinding is reduced to spot checking. If randomness is additionally&lt;br/&gt;added for side-channel resistance, the ability to spot check disappears&lt;br/&gt;entirely.&lt;br/&gt;&lt;br/&gt;4) References&lt;br/&gt;-------------&lt;br/&gt;&lt;br/&gt;  [1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017649.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017649.html&lt;/a&gt;&lt;br/&gt;  [2] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017655.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-February/017655.html&lt;/a&gt;&lt;br/&gt;  [3] &lt;a href=&#34;https://blog.eternitywall.com/2018/04/13/sign-to-contract/&#34;&gt;https://blog.eternitywall.com/2018/04/13/sign-to-contract/&lt;/a&gt;&lt;br/&gt;  [4] &lt;a href=&#34;https://bitcointalk.org/index.php?topic=893898.msg9861102#msg9861102&#34;&gt;https://bitcointalk.org/index.php?topic=893898.msg9861102#msg9861102&lt;/a&gt;&lt;br/&gt;  [5] &lt;a href=&#34;https://bitcointalk.org/index.php?topic=893898.msg9841502#msg9841502&#34;&gt;https://bitcointalk.org/index.php?topic=893898.msg9841502#msg9841502&lt;/a&gt;&lt;br/&gt;  [6] &lt;a href=&#34;https://medium.com/cryptoadvance/hardware-wallets-can-be-hacked-but-this-is-fine-a6156bbd199&#34;&gt;https://medium.com/cryptoadvance/hardware-wallets-can-be-hacked-but-this-is-fine-a6156bbd199&lt;/a&gt;&lt;br/&gt;  [7] &lt;a href=&#34;https://youtu.be/j9Wvz7zI_Ac?t=640&#34;&gt;https://youtu.be/j9Wvz7zI_Ac?t=640&lt;/a&gt;&lt;br/&gt;  [8] &lt;a href=&#34;https://diyhpl.us/wiki/transcripts/sf-bitcoin-meetup/2019-02-04-threshold-signatures-and-accountability/&#34;&gt;https://diyhpl.us/wiki/transcripts/sf-bitcoin-meetup/2019-02-04-threshold-signatures-and-accountability/&lt;/a&gt;&lt;br/&gt;  [9] &lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/590&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/590&lt;/a&gt;&lt;br/&gt;  [10] &lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/669&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/669&lt;/a&gt;&lt;br/&gt;  [11] &lt;a href=&#34;https://eprint.iacr.org/2017/985&#34;&gt;https://eprint.iacr.org/2017/985&lt;/a&gt;&lt;br/&gt;  [12] &lt;a href=&#34;https://moderncrypto.org/mail-archive/curves/2017/000925.html&#34;&gt;https://moderncrypto.org/mail-archive/curves/2017/000925.html&lt;/a&gt;
    </content>
    <updated>2023-06-07T18:23:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyryy8lp5gljsnuhzzjfr6387mnus2d35hz66jndu3fua2v8apv4szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv6kysts</id>
    
      <title type="html">📅 Original date posted:2019-11-10 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyryy8lp5gljsnuhzzjfr6387mnus2d35hz66jndu3fua2v8apv4szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv6kysts" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq6mafhqypg6gm2tjw0dt0acs49qmv26lmwhyzmnrlpgl9p65fmfqmkklep&#39;&gt;nevent1q…klep&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-10&lt;br/&gt;📝 Original message:On Thu, Nov 7, 2019, 18:16 David A. Harding &amp;lt;dave at dtrt.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Thu, Nov 07, 2019 at 02:35:42PM -0800, Pieter Wuille via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; In the current draft, witness v1 outputs of length other&lt;br/&gt;&amp;gt; &amp;gt; than 32 remain unencumbered, which means that for now such an&lt;br/&gt;&amp;gt; &amp;gt; insertion or erasure would result in an output that can be spent by&lt;br/&gt;&amp;gt; &amp;gt; anyone. If that is considered unacceptable, it could be prevented by&lt;br/&gt;&amp;gt; &amp;gt; for example outlawing v1 witness outputs of length 31 and 33.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Either a consensus rule or a standardness rule[1] would require anyone&lt;br/&gt;&amp;gt; using a bech32 library supporting v1&#43; segwit to upgrade their library.&lt;br/&gt;&amp;gt; Otherwise, users of old libraries will still attempt to pay v1 witness&lt;br/&gt;&amp;gt; outputs of length 31 or 33, causing their transactions to get rejected&lt;br/&gt;&amp;gt; by newer nodes or get stuck on older nodes.  This is basically the&lt;br/&gt;&amp;gt; problem #15846[2] was meant to prevent.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If we&amp;#39;re going to need everyone to upgrade their bech32 libraries&lt;br/&gt;&amp;gt; anyway, I think it&amp;#39;s probably best that the problem is fixed in the&lt;br/&gt;&amp;gt; bech32 algorithm rather than at the consensus/standardness layer.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Admittedly, this affecting development of consensus or standardness rules&lt;br/&gt;would feel unnatural. In addition, it also has the potential downside of&lt;br/&gt;breaking batched transactions in some settings (ask an exchange for a&lt;br/&gt;withdrawal to a invalid/nonstandard version, which they batch with other&lt;br/&gt;outputs that then get stuck because the transaction does not go through).&lt;br/&gt;&lt;br/&gt;So, Ideally this is indeed solved entirely on the bech32/address encoding&lt;br/&gt;side of things. I did not initially expect the discussion here to go in&lt;br/&gt;that direction, as that could come with all problems that rolling out a new&lt;br/&gt;address scheme in the first place has. However, there may be a way to&lt;br/&gt;mostly avoid those problems for the time being, while also not having any&lt;br/&gt;impact on consensus or standardness rules.&lt;br/&gt;&lt;br/&gt;I believe that most new witness programs we&amp;#39;d want to introduce anyway will&lt;br/&gt;be 32 bytes in the future, if the option exists. It&amp;#39;s enough for a 256-bit&lt;br/&gt;hash (which has up to 128-bit collision security, and more than 128 bits is&lt;br/&gt;hard to achieve in Bitcoin anyway), or for X coordinates directly. Either&lt;br/&gt;of those, plus a small version number to indicate the commitment structure&lt;br/&gt;should be enough to encode any spendability condition we&amp;#39;d want with any&lt;br/&gt;achievable security level.&lt;br/&gt;&lt;br/&gt;With that observation, I propose the following. We amend BIP173 to be&lt;br/&gt;restricted to witness programs of length 20 or 32 (but still support&lt;br/&gt;versions other than 0). This seems like it may be sufficient for several&lt;br/&gt;years, until version numbers run out. I believe that some wallet&lt;br/&gt;implementations already restrict sending to known versions only, which&lt;br/&gt;means effectively no change for them in addition to normal deployment.&lt;br/&gt;&lt;br/&gt;In the mean time we develop a variant of bech32 with better&lt;br/&gt;insertion/erasure detecting properties, which will be used for witness&lt;br/&gt;programs of length different from 20 or 32. If we make sure that there are&lt;br/&gt;never two distinct valid checksum algorithms for the same output, I don&amp;#39;t&lt;br/&gt;believe there is any need for a new address scheme or a different HRP. The&lt;br/&gt;latter is something I&amp;#39;d strongly try to avoid anyway, as it would mean&lt;br/&gt;additional cognitive load on users because of another visually distinct&lt;br/&gt;address style, plus more logistical overhead (coordination and keeping&lt;br/&gt;track of 2 HRPs per chain).&lt;br/&gt;&lt;br/&gt;I believe improving bech32 itself is preferable over changing the way&lt;br/&gt;segwit addresses use bech32, as that can be done without making addresses&lt;br/&gt;even longer. Furthermore, the root of the issue is in bech32, and it is&lt;br/&gt;simplest to fix things there. The easiest solution is to simply change the&lt;br/&gt;constant 1 that is xor&amp;#39;ed into the checksum before encoding it to a 30-bit&lt;br/&gt;number. This has the advantage that a single checksum is never valid for&lt;br/&gt;both algoritgms simultaneously. Another approach is to implicitly including&lt;br/&gt;the length into the checksummed data.&lt;br/&gt;&lt;br/&gt;What do people think?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20191110/5894b93f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191110/5894b93f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:21:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgzee7yz75z9ma4s73se97c5d2mkjfdkhmqlqvyywx8894s9u95zqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvfgu2gs</id>
    
      <title type="html">📅 Original date posted:2019-11-07 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgzee7yz75z9ma4s73se97c5d2mkjfdkhmqlqvyywx8894s9u95zqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvfgu2gs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszvnhhqq6mgv38qkh4dm8frk3g069zee4t8p8c7pk2acatq3gywlq7amdtw&#39;&gt;nevent1q…mdtw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-07&lt;br/&gt;📝 Original message:Hello all,&lt;br/&gt;&lt;br/&gt;A while ago it was discovered that bech32 has a mutation weakness (see&lt;br/&gt;&lt;a href=&#34;https://github.com/sipa/bech32/issues/51&#34;&gt;https://github.com/sipa/bech32/issues/51&lt;/a&gt; for details). Specifically,&lt;br/&gt;when a bech32 string ends with a &amp;#34;p&amp;#34;, inserting or erasing &amp;#34;q&amp;#34;s right&lt;br/&gt;before that &amp;#34;p&amp;#34; does not invalidate it. While insertion/erasure&lt;br/&gt;robustness was not an explicit goal (BCH codes in general only have&lt;br/&gt;guarantees about substitution errors), this is very much not by&lt;br/&gt;design, and this specific issue could have been made much less&lt;br/&gt;impactful with a slightly different approach. I&amp;#39;m sorry it wasn&amp;#39;t&lt;br/&gt;caught earlier.&lt;br/&gt;&lt;br/&gt;This has little effect on the security of P2WPKH/P2WSH addresses, as&lt;br/&gt;those are only valid (per BIP173) for specific lengths (42 and 62&lt;br/&gt;characters respectively). Inserting 20 consecutive &amp;#34;p&amp;#34;s in a typo&lt;br/&gt;seems highly improbable.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m making this post because this property may unfortunately influence&lt;br/&gt;design decisions around bip-taproot, as was brought up in the review&lt;br/&gt;session (&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-October/017427.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-October/017427.html&lt;/a&gt;)&lt;br/&gt;past tuesday. In the current draft, witness v1 outputs of length other&lt;br/&gt;than 32 remain unencumbered, which means that for now such an&lt;br/&gt;insertion or erasure would result in an output that can be spent by&lt;br/&gt;anyone. If that is considered unacceptable, it could be prevented by&lt;br/&gt;for example outlawing v1 witness outputs of length 31 and 33.&lt;br/&gt;&lt;br/&gt;Thoughts?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:21:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstkg679hwx3txrkmk8hax6l27hh28ydvg433u8c52crzuu38dpjmszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvauf4uy</id>
    
      <title type="html">📅 Original date posted:2019-05-26 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstkg679hwx3txrkmk8hax6l27hh28ydvg433u8c52crzuu38dpjmszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvauf4uy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfqxpn9ewxkqlea88yn2vhjkmm50dtm85yzmzjh78plr62yjemr7c6yuvpe&#39;&gt;nevent1q…uvpe&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-26&lt;br/&gt;📝 Original message:On Sun, May 26, 2019, 07:07 Aymeric Vitte 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; I realized recently that my segwit implementation was not correct,&lt;br/&gt;&amp;gt; basically some time ago, wrongly reading the specs (and misleaded by&lt;br/&gt;&amp;gt; what follows), I thought that scriptsig would go into witness data as it&lt;br/&gt;&amp;gt; was, but that&amp;#39;s not the case, op_pushdata is replaced by varlen&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Now reading correctly the specs, they seem to be not totally correct,&lt;br/&gt;&amp;gt; then the first question is: why OP_0 is 00 in witness data and not 0100?&lt;br/&gt;&amp;gt; Does this apply to other op_codes? This does not look logical at all&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The second question is: why for non segwit inputs there is a 00 length&lt;br/&gt;&amp;gt; in segwit data, what is the rational for that? It should just be nothing&lt;br/&gt;&amp;gt; since you don&amp;#39;t need this to reconciliate things&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This is a question that belongs on &lt;a href=&#34;https://bitcoin.stackexchange.com&#34;&gt;https://bitcoin.stackexchange.com&lt;/a&gt;, not&lt;br/&gt;this list.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20190526/7df58353/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190526/7df58353/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9rpypwnxeqmalffdgmdmg0sn966edqzxe754n6kx9spuwjsekgggzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvcn3yqn</id>
    
      <title type="html">📅 Original date posted:2019-05-23 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9rpypwnxeqmalffdgmdmg0sn966edqzxe754n6kx9spuwjsekgggzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvcn3yqn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsp6qnza7v9720qxy45eqqxk7j9r7clvrjjzeawk4hmv57y2r5kclcv5j8zz&#39;&gt;nevent1q…j8zz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-23&lt;br/&gt;📝 Original message:On Thu, 23 May 2019 at 11:33, Tamas Blummer via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Difficulty change has profound impact on miner’s production thereby introduce the biggest risk while considering an investment.&lt;br/&gt;&amp;gt; Commodity markets offer futures and options to hedge risks on traditional trading venues. Some might soon list difficulty futures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think we could do much better than them natively within Bitcoin.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A better solution could be a transaction that uses nLocktime denominated in block height, such that it is valid after the difficulty adjusted block in the future.&lt;br/&gt;&amp;gt; A new OP_DIFFICULTY opcode would put onto stack the value of difficulty for the block the transaction is included into.&lt;br/&gt;&amp;gt; The output script may then decide comparing that value with a strike which key can spend it.&lt;br/&gt;&amp;gt; The input of the transaction would be a multi-sig escrow of those who entered the bet.&lt;br/&gt;&amp;gt; The winner would broadcast.&lt;br/&gt;&lt;br/&gt;If the difficulty can be directly observed by the script language, you&lt;br/&gt;would need to re-evaluate all scripts in unconfirmed transactions&lt;br/&gt;whenever the difficulty changes. This complicates implementation of&lt;br/&gt;mempools, but it also makes reasoning about validity of (chains of)&lt;br/&gt;unconfirmed transactions harder, as an unconfirmed predecessor may&lt;br/&gt;have conditions that change over time.&lt;br/&gt;&lt;br/&gt;For things like block time/height, this is solved by not having the&lt;br/&gt;script itself observe the context state directly, but instead having&lt;br/&gt;an assertion on the state outside of script (nLockTime for absolute&lt;br/&gt;time/height and nSequence for relative), and then having opcodes&lt;br/&gt;inside script that observe the assertion (OP_CLTV and OP_CSV). By&lt;br/&gt;doing so, script validity is a single context-free yes or not that can&lt;br/&gt;be evaluated once, and the variable part is just transaction-level&lt;br/&gt;reasoning that doesn&amp;#39;t involve a full script interpreter.&lt;br/&gt;Additionally, the supported assertions are restricted in such a way&lt;br/&gt;that if they are true within a particular block, they&amp;#39;re also true in&lt;br/&gt;any descendant, removing the complexity of reasoning about validity&lt;br/&gt;(apart from the inevitable reasoning about possible double-spend&lt;br/&gt;before confirmation).&lt;br/&gt;&lt;br/&gt;I feel a similar construction is needed for observing block&lt;br/&gt;difficulty. This can be done by either having an opcode that as a side&lt;br/&gt;effect of execution &amp;#34;posts&amp;#34; an assertion (e.g. &amp;#34;difficulty at block&lt;br/&gt;height X is at least Y&amp;#34;), instead of putting the difficulty on the&lt;br/&gt;stack. An alternative is having the assertion be part of the&lt;br/&gt;transaction structure (for example in the annex we propose in&lt;br/&gt;bip-taproot), and having an opcode that observes the difficulty&lt;br/&gt;assertion inside script.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t have a strong opinion either way on the usefulness of having&lt;br/&gt;difficulty-dependent transaction/scripts.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:18:14Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstuwmtug67wsff77rkye3l55lu8vtue544k330mfua90yyjxeemrqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvfhq72m</id>
    
      <title type="html">📅 Original date posted:2019-05-22 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstuwmtug67wsff77rkye3l55lu8vtue544k330mfua90yyjxeemrqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvfhq72m" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy0y8agt8gj253kzue5dayzuzrqdk29e3uq5su7et74cq8f0hqylcqpr4du&#39;&gt;nevent1q…r4du&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-22&lt;br/&gt;📝 Original message:On Tue, 21 May 2019 at 10:20, Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.io&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regarding Tapscript, the specification calls for the final value of the stack being a single non-false value:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The tapscript is executed according to the rules in the following section, with the initial stack as input&lt;br/&gt;&amp;gt;&amp;gt;     II. If the execution results in anything but exactly one element on the stack which evaluates to true with CastToBool(), fail.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Perhaps it is worth taking this opportunity here to remove a minor wart of the Script language and instead require the stack to be exactly empty upon completion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In addition to removing a potential malleability vector, I expect it would simplify development of Bitcoin Script.  A rule requiring an empty stack means that the conjunction (logical and) of two policies can be implemented by the simple concatenation of Bitcoin Scripts.  This combined with the taproot ability to form the disjunction (logical or) of policies by having multiple Merkle branches, means that the translation of a policy written in disjunctive normal form (the logical ors of logical ands of primitive policies) can be straightforwardly translated to a taproot of tapscript.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That said, I think the developers of miniscript &amp;lt;&lt;a href=&#34;http://bitcoin.sipa.be/miniscript/miniscript.html&amp;gt&#34;&gt;http://bitcoin.sipa.be/miniscript/miniscript.html&amp;gt&lt;/a&gt;; are in a much better position to comment on whether my above intuition is correct given that they&amp;#39;ve had to implement a host of various calling conventions.  I understand that at least some of this complexity is due to Bitcoin Script&amp;#39;s one element stack rule.&lt;br/&gt;&lt;br/&gt;IIRC I looked into this a few months ago, and found that the spending&lt;br/&gt;cost (script size &#43; expected witness size) of the optimal script for&lt;br/&gt;every Miniscript policy at most changes by 1 WU (in either direction)&lt;br/&gt;by requiring an empty stack rather than a true value, though in a&lt;br/&gt;(admittedly very arbitrarily biased) distribution, more policies were&lt;br/&gt;improved by it than degraded. This is not taking Taproot into account&lt;br/&gt;(as many of those policies in a Taproot-supporting world should&lt;br/&gt;optimally make use of the internal key and Merkle tree, rather than&lt;br/&gt;turning everything into a monolithic script). I expect that this may&lt;br/&gt;make the impact somewhat larger, but still never more than a 1 WU&lt;br/&gt;gain.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think the spending cost changes justify this change, so the&lt;br/&gt;remaining criteria are complexity ones. In my view, the main benefit&lt;br/&gt;would be to authors of hand-written scripts where the consistency&lt;br/&gt;benefits matter, but this needs to be weighed against the mental cost&lt;br/&gt;of learning the new semantics. For Miniscript itself, this doesn&amp;#39;t&lt;br/&gt;make much difference - the top level calling convention would become&lt;br/&gt;&amp;#39;V&amp;#39; instead of &amp;#39;T&amp;#39;, but &amp;#39;T&amp;#39; would still exist as a calling convention&lt;br/&gt;that may be used internally; it&amp;#39;s a few lines change.&lt;br/&gt;&lt;br/&gt;So overall this feels like something with marginal costs, but also at&lt;br/&gt;most marginal benefits. Perhaps other people have stronger opinions.&lt;br/&gt;&lt;br/&gt;&amp;gt; Even if we choose not to implement the empty stack rule, we should at least require that the last element be 0x01 to remove a potential malleability vector and bring it in line with MINIMAL_IF semantics.&lt;br/&gt;&lt;br/&gt;This feels like the right thing to do; as we&amp;#39;re making MINIMALIF part&lt;br/&gt;of consensus for Tapscript it would make sense to apply the same rule&lt;br/&gt;to the &amp;#34;return&amp;#34; value of the script. There is a downside though,&lt;br/&gt;namely that in some places where you&amp;#39;d use &amp;#34;&amp;lt;n&amp;gt;&lt;br/&gt;OP_CHECKSEQUENCEVERIFY&amp;#34; or &amp;#34;&amp;lt;n&amp;gt; OP_CHECKLOCKTIMEVERIFY&amp;#34; you now need&lt;br/&gt;to add an additional OP_0NOTEQUAL to convert the left-over element n&lt;br/&gt;into an exact 0x01. I also can&amp;#39;t come up with any practical benefits&lt;br/&gt;that this would have; if the top stack element in a particular code&lt;br/&gt;path comes directly from the input, it&amp;#39;s insecure regardless; if there&lt;br/&gt;isn&amp;#39;t, it&amp;#39;ll generally be a a boolean (or an intentional non-boolean&lt;br/&gt;true value) computed by the script.&lt;br/&gt;&lt;br/&gt;On Tue, 21 May 2019 at 13:05, John Newbery &amp;lt;john at johnnewbery.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hi,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A Taproot output is a SegWit output [...]  with&lt;br/&gt;&amp;gt; &amp;gt; version number 1, and a 33-byte witness program whose first byte is 0 or 1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given a secret key k and public key P=(x,y), a signer with the knowledge of k&lt;br/&gt;&amp;gt; can sign for -P=(x,p-y) since -k is the secret key for that point. Encoding the&lt;br/&gt;&amp;gt; y value of the public key therefore adds no security.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s a good point; without security benefit there&amp;#39;s no reason to&lt;br/&gt;make pay-to-taproots more expensive. Making them the same cost as&lt;br/&gt;P2WSH is nice in any case.&lt;br/&gt;&lt;br/&gt;&amp;gt; As an alternative to&lt;br/&gt;&amp;gt; providing the y value of the taproot output key Q when constructing the taproot&lt;br/&gt;&amp;gt; output, the signer can provide it when signing. We can also restrict the y value&lt;br/&gt;&amp;gt; of the internal key P to be even (or high, or a quadratic residue). That gives&lt;br/&gt;&amp;gt; us 4 options for how to set the y signs for P and Q.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Q sign is explictly set in the witness program, P sign is explicitly set in the control block&lt;br/&gt;&amp;gt;     =&amp;gt; witness program is 33 bytes, 32 possible leaf versions (one for each pair of 0xc0..0xff)&lt;br/&gt;&amp;gt; 2. Q sign is explictly set in the witness program, P sign is implicitly even&lt;br/&gt;&amp;gt;     =&amp;gt; witness program is 33 bytes, 64 possible leaf versions (one for each 0xc0..0xff)&lt;br/&gt;&amp;gt; 3. Q sign is explictly set in the control block, P sign is explicitly set in the control block&lt;br/&gt;&amp;gt;     =&amp;gt; witness program is 32 bytes, 16 possible leaf versions (one for each 4-tuple of 0xc0..0xff)&lt;br/&gt;&amp;gt; 4. Q sign is explictly set in the control block, P sign is implicitly even&lt;br/&gt;&amp;gt;     =&amp;gt; witness program is 32 bytes, 32 possible leaf versions (one for pair of 0xc0..0xff)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The current proposal uses (1). Using (3) or (4) would reduce the size of a&lt;br/&gt;&amp;gt; taproot output by one byte to be the same size as a P2WSH output. That means&lt;br/&gt;&amp;gt; that it&amp;#39;s not more expensive for senders compared to sending to P2WSH.&lt;br/&gt;&lt;br/&gt;I prefer (4). There is a slight complexity in needing a conditional&lt;br/&gt;sign swap when signing (to make sure the corresponding key is even),&lt;br/&gt;but I think it&amp;#39;s minimal compared to the other changes needed here&lt;br/&gt;already. I&amp;#39;ll try to amend the reference code soon to see what impact&lt;br/&gt;this idea has.&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; (native or P2SH-nested, see BIP141)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d prefer to not support P2SH-nested TR. P2SH wrapping was useful for segwit&lt;br/&gt;&amp;gt; v0 for compatibility reasons. Most wallets/exchanges/services now support sending&lt;br/&gt;&amp;gt; to native segwit addresses (&lt;a href=&#34;https://en.bitcoin.it/wiki/Bech32_adoption&#34;&gt;https://en.bitcoin.it/wiki/Bech32_adoption&lt;/a&gt;) and that&lt;br/&gt;&amp;gt; will be even more true if Schnorr/Taproot activate in 12&#43; months time.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure there is much to gain here. There is perhaps a minimal&lt;br/&gt;fungibility improvement by not having another bit (P2SH or not) that&lt;br/&gt;can leak some information about the software you&amp;#39;re using. On the&lt;br/&gt;other hand, until native taproot outputs are common, choosing P2SH&lt;br/&gt;wrapped ones leak less information at output creation time. Apart from&lt;br/&gt;that, I think it would only minimally impact implementation&lt;br/&gt;complexity. Are there other advantages I&amp;#39;m missing?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:18:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxpdnejmg4q9gyjqaw57gaxlr7tdzjn2h2qysk5n7kext2xdzx6fszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv25uam5</id>
    
      <title type="html">📅 Original date posted:2019-05-06 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxpdnejmg4q9gyjqaw57gaxlr7tdzjn2h2qysk5n7kext2xdzx6fszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv25uam5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs998n8ze3faaxar0gans7cfaca8ry3fvyvq0w95jeq95uh068ygyq85xwvk&#39;&gt;nevent1q…xwvk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-06&lt;br/&gt;📝 Original message:Hello everyone,&lt;br/&gt;&lt;br/&gt;Here are two BIP drafts that specify a proposal for a Taproot&lt;br/&gt;softfork. A number of ideas are included:&lt;br/&gt;&lt;br/&gt;* Taproot to make all outputs and cooperative spends indistinguishable&lt;br/&gt;from eachother.&lt;br/&gt;* Merkle branches to hide the unexecuted branches in scripts.&lt;br/&gt;* Schnorr signatures enable wallet software to use key&lt;br/&gt;aggregation/thresholds within one input.&lt;br/&gt;* Improvements to the signature hashing algorithm (including signing&lt;br/&gt;all input amounts).&lt;br/&gt;* Replacing OP_CHECKMULTISIG(VERIFY) with OP_CHECKSIGADD, to support&lt;br/&gt;batch validation.&lt;br/&gt;* Tagged hashing for domain separation (avoiding issues like&lt;br/&gt;CVE-2012-2459 in Merkle trees).&lt;br/&gt;* Extensibility through leaf versions, OP_SUCCESS opcodes, and&lt;br/&gt;upgradable pubkey types.&lt;br/&gt;&lt;br/&gt;The BIP drafts can be found here:&lt;br/&gt;* &lt;a href=&#34;https://github.com/sipa/bips/blob/bip-schnorr/bip-taproot.mediawiki&#34;&gt;https://github.com/sipa/bips/blob/bip-schnorr/bip-taproot.mediawiki&lt;/a&gt;&lt;br/&gt;specifies the transaction input spending rules.&lt;br/&gt;* &lt;a href=&#34;https://github.com/sipa/bips/blob/bip-schnorr/bip-tapscript.mediawiki&#34;&gt;https://github.com/sipa/bips/blob/bip-schnorr/bip-tapscript.mediawiki&lt;/a&gt;&lt;br/&gt;specifies the changes to Script inside such spends.&lt;br/&gt;* &lt;a href=&#34;https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr.mediawiki&#34;&gt;https://github.com/sipa/bips/blob/bip-schnorr/bip-schnorr.mediawiki&lt;/a&gt;&lt;br/&gt;is the Schnorr signature proposal that was discussed earlier on this&lt;br/&gt;list (See &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-July/016203.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-July/016203.html&lt;/a&gt;)&lt;br/&gt;&lt;br/&gt;An initial reference implementation of the consensus changes, plus&lt;br/&gt;preliminary construction/signing tests in the Python framework can be&lt;br/&gt;found on &lt;a href=&#34;https://github.com/sipa/bitcoin/commits/taproot&#34;&gt;https://github.com/sipa/bitcoin/commits/taproot&lt;/a&gt;. All&lt;br/&gt;together, excluding the Schnorr signature module in libsecp256k1, the&lt;br/&gt;consensus changes are around 520 LoC.&lt;br/&gt;&lt;br/&gt;While many other ideas exist, not everything is incorporated. This&lt;br/&gt;includes several ideas that can be implemented separately without loss&lt;br/&gt;of effectiveness. One such idea is a way to integrate SIGHASH_NOINPUT,&lt;br/&gt;which we&amp;#39;re working on as an independent proposal.&lt;br/&gt;&lt;br/&gt;The document explains basic wallet operations, such as constructing&lt;br/&gt;outputs and signing. However, a wide variety of more complex&lt;br/&gt;constructions exist. Standardizing these is useful, but out of scope&lt;br/&gt;for now. It is likely also desirable to define extensions to PSBT&lt;br/&gt;(BIP174) for interacting with Taproot. That too is not included here.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:17:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2ct9dgmcg3wgrr7wn55pwta4fs7cctfce8uuaps9khckudxexsrqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvuv8n0w</id>
    
      <title type="html">📅 Original date posted:2018-11-28 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2ct9dgmcg3wgrr7wn55pwta4fs7cctfce8uuaps9khckudxexsrqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvuv8n0w" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspr8ry9nczmdt5672m620nfqcag2twrxz0uagt7mg2d3e5f679g8qgk4yvq&#39;&gt;nevent1q…4yvq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-28&lt;br/&gt;📝 Original message:On Mon, 19 Nov 2018 at 14:37, Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; Here is a combined proposal:&lt;br/&gt;&amp;gt; * Three new sighash flags are added: SIGHASH_NOINPUT, SIGHASH_NOFEE, and SIGHASH_SCRIPTMASK.&lt;br/&gt;&amp;gt; * A new opcode OP_MASK is added, which acts as a NOP during execution.&lt;br/&gt;&amp;gt; * The sighash is computed like in BIP143, but:&lt;br/&gt;&amp;gt;   * If SIGHASH_SCRIPTMASK is present, for every OP_MASK in scriptCode the subsequent opcode/push is removed.&lt;br/&gt;&amp;gt;   * The scriptPubKey being spent is added to the sighash, unless SIGHASH_SCRIPTMASK is set.&lt;br/&gt;&amp;gt;   * The transaction fee is added to the sighash, unless SIGHASH_NOFEE is set.&lt;br/&gt;&amp;gt;   * hashPrevouts, hashSequence, and outpoint are set to null when SIGHASH_NOINPUT is set (like BIP118, but not for scriptCode).&lt;br/&gt;&lt;br/&gt;Thanks for all the input so far. Going over the suggestions and other ideas:&lt;br/&gt;&lt;br/&gt;* OP_MASK should be required to be followed by a push, as suggested by&lt;br/&gt;Anthony Towns. The alternative would permit substituting arbitrary&lt;br/&gt;opcodes for masked pushes, which is at least very hard to reason&lt;br/&gt;about. This would effectively turn it into a multi-byte OP_MASKEDPUSH&lt;br/&gt;opcode.&lt;br/&gt;&lt;br/&gt;* It&amp;#39;s probably better to sign the amounts of all inputs, as suggested&lt;br/&gt;by Johnson Lau. As that would cause default sighashes to sign all&lt;br/&gt;input and output amounts, is there still a need to sign the tx fee&lt;br/&gt;explicitly? Or in other words, are there situations where changing the&lt;br/&gt;set of inputs or outputs after signing is desired, but the net&lt;br/&gt;difference between them cannot change? If not, that would remove the&lt;br/&gt;need for NOFEE.&lt;br/&gt;&lt;br/&gt;* Do we need to keep the rule that sequence values of other inputs are&lt;br/&gt;only signed with default sighash? It feels cleaner to always sign the&lt;br/&gt;sequence values of all inputs that are included in the sighash anyway&lt;br/&gt;(so all of them, unless ANYONECANPAY or NOINPUT, which would make it&lt;br/&gt;sign only the current input&amp;#39;s sequence value). If NOINPUT also blanks&lt;br/&gt;the sequence values (as currently specified by BIP118), and all input&lt;br/&gt;amounts are signed, that would make amounts/sequence values always be&lt;br/&gt;treated identically.&lt;br/&gt;&lt;br/&gt;* If MASK implies NOINPUT, and NOINPUT implies ANYONECANPAY, the 3 of&lt;br/&gt;them can be encoded in just 2 bits using the&lt;br/&gt;PARTIALSCRIPT/KNOWNSCRIPT/KNOWNTX/ALL_INPUTS encoding Anthony Towns&lt;br/&gt;suggested.&lt;br/&gt;&lt;br/&gt;* Regarding the discussion about preventing signatures from being&lt;br/&gt;rebound to a different script(path)/checksig:&lt;br/&gt;  * With MAST there is indeed less need for this, but at least&lt;br/&gt;single-tree MAST constructions cannot replace all script branches (a&lt;br/&gt;script with 40 IF/THEN/ELSE constructions may have 2^40 different&lt;br/&gt;execution paths, for which computing a Merkle tree is intractable).&lt;br/&gt;  * Just signing the opcode position of the CHECKSIG operator isn&amp;#39;t&lt;br/&gt;enough for all cases either. For example, you could have a complex&lt;br/&gt;nested set of branches that puts a number of pubkeys on the stack, and&lt;br/&gt;then a CHECKMULTISIG after the last ENDIF to verify all of them. In&lt;br/&gt;such a situation, if the same key can occur in multiple combinations,&lt;br/&gt;you still may want to prevent a signature generated for one&lt;br/&gt;combination from being rebindable to the same key in another&lt;br/&gt;combination. I believe that signing the opcode position plus the&lt;br/&gt;true/false condition of all previous(?) IF statements is probably&lt;br/&gt;sufficient to achieve that, but it would also introduce unnecessary&lt;br/&gt;complexity for signers in most cases (see next point).&lt;br/&gt;  * Thinking about signing code, adding these sort of execution trace&lt;br/&gt;commitments to the sighash means they need to know which checksig&lt;br/&gt;operator etc. they are signing for. I believe that in practice for&lt;br/&gt;example HW devices will just whatever position the wallet indicated,&lt;br/&gt;rather than verifying it corresponds with a particular intended code&lt;br/&gt;path. Preventing rebinding isn&amp;#39;t very useful if an attacker can make&lt;br/&gt;you bind to the wrong thing regardless, so I&amp;#39;m not convinced this is&lt;br/&gt;even worth having by default.&lt;br/&gt;  * An alternative (not sure who suggested it) is to simply make every&lt;br/&gt;CHECKSIG sign the opcode position of the last executed CODESEPARATOR&lt;br/&gt;(and remove the earlier cut-of-scriptCode effect of CODESEPARATOR).&lt;br/&gt;This gives a simple (but somewhat limited) way for scripts that need&lt;br/&gt;to prevent certain kinds of cross-execution-trace rebinding.&lt;br/&gt;&lt;br/&gt;A few misc ideas:&lt;br/&gt;* (Taken from &lt;a href=&#34;https://github.com/jl2012/bips/blob/sighash2/bip-sighash2.mediawiki&#34;&gt;https://github.com/jl2012/bips/blob/sighash2/bip-sighash2.mediawiki&lt;/a&gt;)&lt;br/&gt;For a default sign-everything sighash, the sighash byte can be&lt;br/&gt;dropped.&lt;br/&gt;* For the commitments to the scriptPubKey and scriptCode, an&lt;br/&gt;intermediary hash should be used (so the data included in the sighash&lt;br/&gt;includes a hash of those, rather than the script directly). This&lt;br/&gt;prevents a blow up in hashing time for large scripts with many&lt;br/&gt;different sighash types in its signatures.&lt;br/&gt;* When masking the scriptCode, the push opcode immediately following&lt;br/&gt;OP_MASKEDPUSH can be replaced by OP_VERIF (which will never collide&lt;br/&gt;with any real script, as OP_VERIF makes a script invalid even when&lt;br/&gt;occurring in an unexecuted branch).&lt;br/&gt;* Sighashes (and really all new hashes that are introduced) should be&lt;br/&gt;prefixed with a fixed 64-byte array as &amp;#34;tag&amp;#34;, chosen to not collide&lt;br/&gt;with any existing use of SHA256 in Bitcoin, to prevent signatures from&lt;br/&gt;being re-interpretable as something else. Picking 64 bytes as tag size&lt;br/&gt;means it can be efficiently implemented as just a modified SHA256 IV.&lt;br/&gt;&lt;br/&gt;So a combined proposal:&lt;br/&gt;* All existing sighash flags, plus NOINPUT and MASK&lt;br/&gt;(ANYONECANPAY/NOINPUT/MASK are encoded in 2 bits).&lt;br/&gt;* A new opcode called OP_MASKEDPUSH, whose only runtime behaviour is&lt;br/&gt;failing if not immediately followed by a push, or when appearing as&lt;br/&gt;last opcode in the script.&lt;br/&gt;* Signatures are 64 plus an optional sighash byte. A missing sighash&lt;br/&gt;byte implies ALL, and ALL cannot be specified explicitly.&lt;br/&gt;* The sighash is computed from the following:&lt;br/&gt;  * A 64-byte constant tag&lt;br/&gt;  * Data about the spending transaction:&lt;br/&gt;    * The transaction version number&lt;br/&gt;    * The hash of txins&amp;#39; prevouts&#43;amounts&#43;sequences (or nothing if ANYONECANPAY)&lt;br/&gt;    * The hash of all txouts (or just the corresponding txout if&lt;br/&gt;SINGLE; nothing if NONE)&lt;br/&gt;    * The transaction locktime&lt;br/&gt;  * Data about the output being spent:&lt;br/&gt;    * The prevout (or nothing if NOINPUT)&lt;br/&gt;    * The amount&lt;br/&gt;    * The sequence number&lt;br/&gt;    * The hash of the scriptPubKey (or nothing if MASK)&lt;br/&gt;  * Data about the script being executed:&lt;br/&gt;    * The hash of the scriptCode (after masking out, if MASK is set)&lt;br/&gt;    * The opcode number of the last executed OP_CODESEPARATOR (or&lt;br/&gt;0xFFFFFFFF if none)&lt;br/&gt;  * The sighash mode&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:15:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqqahnnxjay3qs0e6h56y8jymgnsft407mnj8yflyscjkkhkmegqczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvyns5uv</id>
    
      <title type="html">📅 Original date posted:2018-11-19 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqqahnnxjay3qs0e6h56y8jymgnsft407mnj8yflyscjkkhkmegqczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvyns5uv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsph4a8s83vl5txl7dr8vd6ch77g7n82wz045dzlyf76vydvf5el6s5ykudz&#39;&gt;nevent1q…kudz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-11-19&lt;br/&gt;📝 Original message:Hello everyone,&lt;br/&gt;&lt;br/&gt;For future segwit versions, I think it would be good add a few things&lt;br/&gt;to the sighash by default that were overlooked in BIP143:&lt;br/&gt;* Committing to the absolute transaction fee (in addition to just the&lt;br/&gt;amount being spent in each input) would categorically remove concerns&lt;br/&gt;about wallets lying about fees to HW devices or airgapped signers.&lt;br/&gt;* Committing to the scriptPubKey (in addition to the scriptCode) would&lt;br/&gt;prevent lying to devices about the type of output being spent, even&lt;br/&gt;when the scriptCode is correct. As a reminder, the scriptCode is the&lt;br/&gt;actually executed script (which is the redeemscript in non-segwit&lt;br/&gt;P2SH, and the witnesscript in P2WSH/P2WPKH).&lt;br/&gt;&lt;br/&gt;As this implies additional information that may not be desirable to&lt;br/&gt;commit to in all circumstances, it makes sense to make these optional.&lt;br/&gt;This obviously interacts with SIGHASH_NOINPUT, which really adds two&lt;br/&gt;different ways of rebinding signatures to inputs:&lt;br/&gt;* Changing the prevout (so that the txid doesn&amp;#39;t need to be known when&lt;br/&gt;the signature is created)&lt;br/&gt;* Changing the script (so that the exact scriptPubKey/redeemScript/...&lt;br/&gt;doesn&amp;#39;t need to be known when the signature is created)&lt;br/&gt;&lt;br/&gt;Of course, the second implies the first, but do all use cases require&lt;br/&gt;both being able to change the prevout and (arbitrarily) changing the&lt;br/&gt;scriptPubKey? While BIP118 correctly points out this is secure if the&lt;br/&gt;same keys are only used in scripts with which binding is to be&lt;br/&gt;permitted, I feel it would be preferable if signatures/scripts would&lt;br/&gt;explicitly state what can change. One way to accomplish this is by&lt;br/&gt;indicating exactly what in a script is subject to change.&lt;br/&gt;&lt;br/&gt;Here is a combined proposal:&lt;br/&gt;* Three new sighash flags are added: SIGHASH_NOINPUT, SIGHASH_NOFEE,&lt;br/&gt;and SIGHASH_SCRIPTMASK.&lt;br/&gt;* A new opcode OP_MASK is added, which acts as a NOP during execution.&lt;br/&gt;* The sighash is computed like in BIP143, but:&lt;br/&gt;  * If SIGHASH_SCRIPTMASK is present, for every OP_MASK in scriptCode&lt;br/&gt;the subsequent opcode/push is removed.&lt;br/&gt;  * The scriptPubKey being spent is added to the sighash, unless&lt;br/&gt;SIGHASH_SCRIPTMASK is set.&lt;br/&gt;  * The transaction fee is added to the sighash, unless SIGHASH_NOFEE is set.&lt;br/&gt;  * hashPrevouts, hashSequence, and outpoint are set to null when&lt;br/&gt;SIGHASH_NOINPUT is set (like BIP118, but not for scriptCode).&lt;br/&gt;&lt;br/&gt;So my question is whether anyone can see ways in which this introduces&lt;br/&gt;redundant flexibility, or misses obvious use cases?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:15:15Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgtxykt2z54e3dl60mwlv0w3283vtkcs8ecql60paf0d4u6zvflxszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvra2qa7</id>
    
      <title type="html">📅 Original date posted:2018-07-08 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgtxykt2z54e3dl60mwlv0w3283vtkcs8ecql60paf0d4u6zvflxszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvra2qa7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstk6rqgm30903sdxfkdmshzhrvas9d8244eccp4lhdl996szrljkcgt5ql6&#39;&gt;nevent1q…5ql6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-07-08&lt;br/&gt;📝 Original message:On Sun, Jul 8, 2018, 07:26 Erik Aronesty 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; To save space, start with the wiki terminology on schnorr sigs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Consider changing the &amp;#34;e&amp;#34; term in the schnorr algorithm to hash of message&lt;br/&gt;&amp;gt; (elligator style) to the power of r, rather than using concatenation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This is a very vague description. Is there some paper you can reference, or&lt;br/&gt;a more detailed explanation of the algorithm?&lt;br/&gt;&lt;br/&gt;This would allow m of n devices to sign a transaction without any of them&lt;br/&gt;&amp;gt; knowing a private key at all.&lt;br/&gt;&amp;gt;&lt;br/&gt;IE: each device can roll a random number as a share and the interpolation&lt;br/&gt;&amp;gt; of that is the private key.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The public shares can be broadcast and combines.  And signature shares can&lt;br/&gt;&amp;gt; be broadcast and combined.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The net result of this is it really possible for an arbitrary set of&lt;br/&gt;&amp;gt; devices to create a perfectly secure public-private key pair set.&lt;br/&gt;&amp;gt;&lt;br/&gt;At no point was the private key anywhere.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;All of this sounds like a threshold signature scheme, which as Tim pointed&lt;br/&gt;out is already possible with Schnorr.&lt;br/&gt;&lt;br/&gt;What are the advantages of what you&amp;#39;re describing?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180708/396b25b7/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180708/396b25b7/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:13:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0lt40fe0745xr7uljsauhwya35hnf9wamnhl04qyns95spya65cczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvyg86vu</id>
    
      <title type="html">📅 Original date posted:2018-07-08 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0lt40fe0745xr7uljsauhwya35hnf9wamnhl04qyns95spya65cczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvyg86vu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfzhrde6qrumc0qt7dgp9592ujzj2qple6mv2ruupy2hgjwdpnvrgh7jnhy&#39;&gt;nevent1q…jnhy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-07-08&lt;br/&gt;📝 Original message:On Sun, Jul 8, 2018, 19:23 Erik Aronesty 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; Pretty sure these non interactive sigs are more secure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Schnorr signatures are provably secure in the random oracle model assuming&lt;br/&gt;the discrete logarithm problem is hard in the used group.&lt;br/&gt;&lt;br/&gt;What does &amp;#34;more secure&amp;#34; mean? Is your construction secure with weaker&lt;br/&gt;assumptions?&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180708/4f9bcb27/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180708/4f9bcb27/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:13:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0cwcrgpze8a0hexm3f8f6fwrkqqqrt9r2zt7fl87d6kn7kfu0neszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv4vz3e0</id>
    
      <title type="html">📅 Original date posted:2018-07-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0cwcrgpze8a0hexm3f8f6fwrkqqqrt9r2zt7fl87d6kn7kfu0neszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv4vz3e0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspfycusy2te0ls20vg8szelyj5md6agmzc4vkhykku5fgwe57qqfgnushmk&#39;&gt;nevent1q…shmk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-07-11&lt;br/&gt;📝 Original message:On Tue, Jul 10, 2018 at 5:10 AM, matejcik &amp;lt;jan.matejek at satoshilabs.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; On 6.7.2018 00:06, Pieter Wuille wrote:&amp;gt; The only case where &amp;#34;malicious&amp;#34;&lt;br/&gt;&amp;gt; conflicting values can occur is when&lt;br/&gt;&amp;gt;&amp;gt; one of the Signers produces an invalid signature, or modifies any of&lt;br/&gt;&amp;gt;&amp;gt; the other fields already present in the PSBT for consumption by&lt;br/&gt;&amp;gt;&amp;gt; others. If this were an issue, it would be an issue regardless of the&lt;br/&gt;&amp;gt;&amp;gt; Combiner&amp;#39;s operation, as in topology A no Combiner is even present.&lt;br/&gt;&amp;gt;&amp;gt; This is generally true I think - Combiners can always be replaced with&lt;br/&gt;&amp;gt;&amp;gt; just a different (and possibly less parallel) topology of data flow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is an interesting thesis, and also an unspoken assumption ISTM. It&lt;br/&gt;&amp;gt; seems worth adding something like this to the spec:&lt;br/&gt;&amp;gt; &amp;#34;&amp;#34;&amp;#34;&lt;br/&gt;&amp;gt; In general, the result of Combiner combining two PSBTs from independent&lt;br/&gt;&amp;gt; participants A and B should be functionally equivalent to a result&lt;br/&gt;&amp;gt; obtained from processing the original PSBT by A and then B in a sequence.&lt;br/&gt;&amp;gt; or, for participants performing fA(psbt) and fB(psbt):&lt;br/&gt;&amp;gt; Combine(fA(psbt), fB(psbt)) == fA(fB(psbt)) == fB(fA(psbt))&lt;br/&gt;&amp;gt; &amp;#34;&amp;#34;&amp;#34;&lt;br/&gt;&lt;br/&gt;Adding that sounds like a good idea, indeed.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; The bottom line is that a Combiner which picks arbitrarily in case of&lt;br/&gt;&amp;gt;&amp;gt; conflicts will never end up with something worse than what you already&lt;br/&gt;&amp;gt;&amp;gt; need to deal with. If you disregard the case of invalid fields&lt;br/&gt;&amp;gt;&amp;gt; (because the result will just be an invalid transaction), then any&lt;br/&gt;&amp;gt;&amp;gt; choice the Combiner makes is fine, because all the values it can pick&lt;br/&gt;&amp;gt;&amp;gt; from are valid.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This sounds reasonable and IMHO it would be good to have a summary of&lt;br/&gt;&amp;gt; this argument in the Rationale section.&lt;br/&gt;&lt;br/&gt;Sounds good.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; If you&amp;#39;re worried about attack surface, I don&amp;#39;t believe rejecting&lt;br/&gt;&amp;gt;&amp;gt; invalid fields ever matters. An attacker can always drop the fields&lt;br/&gt;&amp;gt;&amp;gt; you don&amp;#39;t understand before giving you the PSBT, making your behavior&lt;br/&gt;&amp;gt;&amp;gt; identical to one where you&amp;#39;d have ignore those fields in the first&lt;br/&gt;&amp;gt;&amp;gt; place.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m reluctant to sign an input with unknown data, on the premise that there could be *anything* in that data&lt;br/&gt;&lt;br/&gt;But the point is: you are not signing an input with unknown data. You&lt;br/&gt;are signing your own interpretation (since you compute the sighash&lt;br/&gt;yourself), which doesn&amp;#39;t include what you don&amp;#39;t understand. If that&lt;br/&gt;interpretation doesn&amp;#39;t match reality, the signature is at worst&lt;br/&gt;useless. Who cares that someone added information about a transaction&lt;br/&gt;that doesn&amp;#39;t affect what you sign?&lt;br/&gt;&lt;br/&gt;&amp;gt; We are most likely to implement the &amp;#34;do not sign with unknown fields&amp;#34;&lt;br/&gt;&amp;gt; rule in any case (technically a whitelist of &amp;#34;known OK&amp;#34; field types),&lt;br/&gt;&amp;gt; and resolve potential problems as they arise. I raised this point mainly&lt;br/&gt;&amp;gt; because I think discussing this explicitly in the spec is beneficial: a&lt;br/&gt;&amp;gt; distinction between mandatory and optional fields is one way, mentioning&lt;br/&gt;&amp;gt; or prescribing possible signing strategies is another.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think that&amp;#39;s a particularly useful policy, but certainly&lt;br/&gt;Signers are allowed to implement any policy they like about what they&lt;br/&gt;accept in signing.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspfycusy2te0ls20vg8szelyj5md6agmzc4vkhykku5fgwe57qqfgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvuxvdsu</id>
    
      <title type="html">📅 Original date posted:2018-07-05 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspfycusy2te0ls20vg8szelyj5md6agmzc4vkhykku5fgwe57qqfgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvuxvdsu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8z57ejrs27rkkaud4uckay7apqjemkpaqscgugv5nlnx2rr4xt8g5nh984&#39;&gt;nevent1q…h984&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-07-05&lt;br/&gt;📝 Original message:On Thu, Jul 5, 2018 at 4:52 AM, matejcik &amp;lt;jan.matejek at satoshilabs.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; Allowing combiners to choose any value also allows for intelligent combiners to choose the&lt;br/&gt;&amp;gt;&amp;gt; correct values in the case of conflicts. A smart combiner could, when combining redeem scripts&lt;br/&gt;&amp;gt;&amp;gt; and witness scripts, check that the redeem scripts and witness scripts match the hash provided&lt;br/&gt;&amp;gt;&amp;gt; in the UTXO (or in the redeem script) and choose the correct redeem script and witness script&lt;br/&gt;&amp;gt;&amp;gt; accordingly if there were, for some reason, a conflict there.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Can you explain why it would be unsafe for combiners to arbitrarily choose a value?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We&amp;#39;re worried that the &amp;#34;pick one of non-deterministic signatures&amp;#34; is a&lt;br/&gt;&amp;gt; special case and that most fields don&amp;#39;t have this property:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * conflicts in UTXOs, sighash type, redeem/witness scripts, derivation&lt;br/&gt;&amp;gt; paths, are at best a recoverable error, usually an unrecoverable error,&lt;br/&gt;&amp;gt; at worst malicious activity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * conflict in finalized scripts, in case more than one valid&lt;br/&gt;&amp;gt; finalization exists, might indicate that the Finalizers picked different&lt;br/&gt;&amp;gt; ND signatures, or it might indicate two possible interpretations of the&lt;br/&gt;&amp;gt; transaction (see next point). Picking arbitrarily in the latter case&lt;br/&gt;&amp;gt; would be an error.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * even for partial signatures: if two Signers with the same public key&lt;br/&gt;&amp;gt; use different sighash types, the Combiner shouldn&amp;#39;t pick the winning one&lt;br/&gt;&amp;gt; arbitrarily.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems generally safer to default to rejecting conflicts, and&lt;br/&gt;&amp;gt; explicitly allowing the Combiner to process them intelligently if it&lt;br/&gt;&amp;gt; understands the relevant fields.&lt;br/&gt;&lt;br/&gt;So consider two possible topologies for a multiparty signing:&lt;br/&gt;&lt;br/&gt;A) Creator and Updater produce a PSBT T. T is sent to signer 1 who&lt;br/&gt;turns it into PSBT T1. T1 is then forwarded to Signer 2 who turns it&lt;br/&gt;into T12. A Finalizer extracts the transaction.&lt;br/&gt;B) Creator and Updater produce a PSBT T. T is sent to signer 1 and 2&lt;br/&gt;simultaneously, who then produce T1 and T2 respectively. A Combiner&lt;br/&gt;combines those into T12. A Finalizer extracts the transaction.&lt;br/&gt;&lt;br/&gt;The only case where &amp;#34;malicious&amp;#34; conflicting values can occur is when&lt;br/&gt;one of the Signers produces an invalid signature, or modifies any of&lt;br/&gt;the other fields already present in the PSBT for consumption by&lt;br/&gt;others. If this were an issue, it would be an issue regardless of the&lt;br/&gt;Combiner&amp;#39;s operation, as in topology A no Combiner is even present.&lt;br/&gt;This is generally true I think - Combiners can always be replaced with&lt;br/&gt;just a different (and possibly less parallel) topology of data flow.&lt;br/&gt;&lt;br/&gt;So the question is independent of Combiners IMHO, and really about how&lt;br/&gt;we deal with roles that intentionally or unintentionally produce&lt;br/&gt;invalid values. I believe this is mostly not an issue. Let&amp;#39;s go over&lt;br/&gt;the cases:&lt;br/&gt;* If a partial signature is invalid, the resulting transaction will be invalid.&lt;br/&gt;* if a non-witness UTXO is incorrect, you&amp;#39;ll fail to sign because the&lt;br/&gt;txid mismatches the input&amp;#39;s prevout (which you do have to check)&lt;br/&gt;* If a witness UTXO is incorrect, the resulting signature will be invalid.&lt;br/&gt;* If a derivation path is incorrect, the signer will fail to find the&lt;br/&gt;key, or sign with the wrong key resulting in an invalid transaction.&lt;br/&gt;* If a witnessscript or redeemscript is incorrect, the resulting&lt;br/&gt;signature will be invalid (as those go into the scriptCode of the&lt;br/&gt;sighash, and affect the type of sighashing)&lt;br/&gt;* If a sighash type is incorrect, the resulting transaction may be&lt;br/&gt;useless for its intended purpose (but still something every signer&lt;br/&gt;agreed to sign).&lt;br/&gt;&lt;br/&gt;So all of this boils down to dealing with the possibility that there&lt;br/&gt;can be roles which intentionally or unintentionally create incorrect&lt;br/&gt;fields in a PSBT, and the solution is (a) checking that prevout txids&lt;br/&gt;match non-witness utxos (b) checking that the transaction you&amp;#39;re&lt;br/&gt;signing is one you want to sign (including sighash type) (c) worst&lt;br/&gt;case accepting that the resulting transaction may be invalid.&lt;br/&gt;&lt;br/&gt;Now, (c) can sometimes be caught early, by implementing additional&lt;br/&gt;sanity checks for known fields. For example, rejecting PSBTs with&lt;br/&gt;partial signatures that are invalid (feed them through a verifier).&lt;br/&gt;This is something a Combiner can of course optionally do, but so can a&lt;br/&gt;Signer or any other role.&lt;br/&gt;&lt;br/&gt;The bottom line is that a Combiner which picks arbitrarily in case of&lt;br/&gt;conflicts will never end up with something worse than what you already&lt;br/&gt;need to deal with. If you disregard the case of invalid fields&lt;br/&gt;(because the result will just be an invalid transaction), then any&lt;br/&gt;choice the Combiner makes is fine, because all the values it can pick&lt;br/&gt;from are valid.&lt;br/&gt;&lt;br/&gt;&amp;gt; I agree with your response, and I also think that in technical sense,&lt;br/&gt;&amp;gt; the worst that can happen is an invalid signature. Our concern is twofold:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. the produced signature is most likely valid, _for a different&lt;br/&gt;&amp;gt; transaction_ than the Creator intended. It is a transaction that the&lt;br/&gt;&amp;gt; Signer must have authorized, so we could argue that they would not mind&lt;br/&gt;&amp;gt; if that unintended transaction was published. Nevertheless, this opens&lt;br/&gt;&amp;gt; an attack surface.&lt;br/&gt;&lt;br/&gt;If you&amp;#39;re worried about attack surface, I don&amp;#39;t believe rejecting&lt;br/&gt;invalid fields ever matters. An attacker can always drop the fields&lt;br/&gt;you don&amp;#39;t understand before giving you the PSBT, making your behavior&lt;br/&gt;identical to one where you&amp;#39;d have ignore those fields in the first&lt;br/&gt;place.&lt;br/&gt;&lt;br/&gt;At best, you can make it protect against accidental mistakes that&lt;br/&gt;would result in invalid transactions anyway.&lt;br/&gt;&lt;br/&gt;If there is a way to sign a message in a way that can be&lt;br/&gt;misinterpreted as a signature on a different message with a different&lt;br/&gt;meaning, then that is a huge flaw in Bitcoin itself, and not going to&lt;br/&gt;be solved by rejecting to sign unknown fields.&lt;br/&gt;&lt;br/&gt;With regard to defense in depth:&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; I would not be opposed to having fields with an explicit flag bit that&lt;br/&gt;&amp;gt;&amp;gt; says &amp;#34;Don&amp;#39;t sign if you don&amp;#39;t understand this&amp;#34;, but I expect that that&lt;br/&gt;&amp;gt;&amp;gt; can also be left for future extensions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems safer to consider this flag be on by default, and leave it to a&lt;br/&gt;&amp;gt; future extension to allow non-mandatory fields. The worst case here is&lt;br/&gt;&amp;gt; that legacy Signers can&amp;#39;t natively process new PSBTs (solvable by a&lt;br/&gt;&amp;gt; preprocessor) - as opposed to legacy Signers signing unintended values.&lt;br/&gt;&lt;br/&gt;There could be some rule like &amp;#34;if the highest bit of the field type is&lt;br/&gt;set, don&amp;#39;t sign&amp;#34;, but I don&amp;#39;t think there is any current field where&lt;br/&gt;such a flag would be necessary right now.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstxpsc8sg06w9ty4enejdfynfdtyfj8mctvf5gjeweyx9h4m9yzuszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvl65spq</id>
    
      <title type="html">📅 Original date posted:2018-07-04 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstxpsc8sg06w9ty4enejdfynfdtyfj8mctvf5gjeweyx9h4m9yzuszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvl65spq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr9yakcn49d4xlgrnjpnzlfd7mlguhc0026m5htzznrw0jurdchjqt857u2&#39;&gt;nevent1q…57u2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-07-04&lt;br/&gt;📝 Original message:On Wed, Jul 4, 2018 at 6:19 AM, matejcik &amp;lt;jan.matejek at satoshilabs.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; hello,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; we still have some concerns about the BIP as currently proposed - not&lt;br/&gt;&amp;gt; about the format or data contents, but more about strictness and&lt;br/&gt;&amp;gt; security properties. I have raised some in the previous e-mails, but&lt;br/&gt;&amp;gt; they might have been lost in the overall talk about format.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Choosing from duplicate keys when combining.&lt;br/&gt;&amp;gt; We believe that &amp;#34;choose whichever value it wishes&amp;#34; is not a good&lt;br/&gt;&amp;gt; resolution strategy. We propose to either change this to &amp;#34;in case of&lt;br/&gt;&amp;gt; conflicts, software MUST reject the conflicting PSBTs&amp;#34;, or explain in&lt;br/&gt;&amp;gt; more detail why picking at random is a safe choice.&lt;br/&gt;&lt;br/&gt;Outlawing conflicting values would imply forcing all Signers to&lt;br/&gt;implement fixed deterministic nonce generation, which I don&amp;#39;t think it&lt;br/&gt;very desirable. Otherwise PSBTs that got copied and signed and&lt;br/&gt;combined again may fail. So I think we should see it the other way: we&lt;br/&gt;choose the keys in such a way that picking arbitrarily is safe. If&lt;br/&gt;there really is a future extension for which it would not be the case&lt;br/&gt;that picking arbitrarily is acceptable, more data can be moved to the&lt;br/&gt;keys, and leave the actual resolution strategy to the Finalizer. That&lt;br/&gt;way Combiners can remain dumb and not need script-specific logic in&lt;br/&gt;every interaction.&lt;br/&gt;&lt;br/&gt;An alternative would be to have a fixed resolution strategy (for&lt;br/&gt;example, when combining multiple PSBTs, pick the value from the first&lt;br/&gt;one that has a particular key set), but I don&amp;#39;t think this adds very&lt;br/&gt;much - if picking the first is fine, picking a arbitrary one should be&lt;br/&gt;fine too.&lt;br/&gt;&lt;br/&gt;&amp;gt; * Signing records with unknown keys.&lt;br/&gt;&amp;gt; There&amp;#39;s been some talk about this at start, but there should be a clear&lt;br/&gt;&amp;gt; strategy for Signers when unknown fields are encountered. We intend to&lt;br/&gt;&amp;gt; implement the rule: &amp;#34;will not sign an input with any unknown fields&lt;br/&gt;&amp;gt; present&amp;#34;.&lt;br/&gt;&amp;gt; Maybe it is worth codifying this behavior in the standard, or maybe&lt;br/&gt;&amp;gt; there should be a way to mark a field as &amp;#34;optional&amp;#34; so that strict&lt;br/&gt;&amp;gt; Signers know they can _safely_ ignore the unknown field.&lt;br/&gt;&lt;br/&gt;Can you envision a situation in which this is needed? In every&lt;br/&gt;scenario I can come up with, the worst that can happen is that the&lt;br/&gt;resulting signature is just invalid. For example, if PSBT existed&lt;br/&gt;before segwit, and then was later extended to support it, a pre-segwit&lt;br/&gt;signer would not recognize that BIP143 would need to be used for&lt;br/&gt;segwit inputs, and produce signatures using the old sighashing&lt;br/&gt;algorithm. The result is just an invalid signature.&lt;br/&gt;&lt;br/&gt;I believe that what you&amp;#39;re trying to accomplish is preventing signing&lt;br/&gt;something you don&amp;#39;t understand, but that&amp;#39;s an independent issue.&lt;br/&gt;Signers generally will want to inspect the transaction they&amp;#39;re&lt;br/&gt;signing, or ask for confirmation w.r.t. fees or payment destinations&lt;br/&gt;involved. The case where unknown fields are present for a reason you&amp;#39;d&lt;br/&gt;want to withhold signing for will generally also just be the situation&lt;br/&gt;where you don&amp;#39;t understand the transaction you&amp;#39;re signing.&lt;br/&gt;&lt;br/&gt;Here is (perhaps far fetched) example of why it may not be desirable&lt;br/&gt;to reject unknown fields when signing. Imagine an extension is defined&lt;br/&gt;which adds pay-to-contract derivation for keys (Q = P &#43; H(Q||C)G);&lt;br/&gt;this would be a field similar to the current BIP32 derivation one, but&lt;br/&gt;instead give a base key P and a contract C. Now say there is a 2-of-2&lt;br/&gt;multisig in which you&amp;#39;re one signer, and the other signer is (unknown&lt;br/&gt;to you) using P2C. After the other party Updating, the input would&lt;br/&gt;contain a P2C field which you don&amp;#39;t understand - but it also isn&amp;#39;t&lt;br/&gt;something you care about or affects you.&lt;br/&gt;&lt;br/&gt;I would not be opposed to having fields with an explicit flag bit that&lt;br/&gt;says &amp;#34;Don&amp;#39;t sign if you don&amp;#39;t understand this&amp;#34;, but I expect that that&lt;br/&gt;can also be left for future extensions.&lt;br/&gt;&lt;br/&gt;&amp;gt; * Fields with empty keys.&lt;br/&gt;&amp;gt; This might be inferred from the definition, but is probably worth&lt;br/&gt;&amp;gt; spelling out explicitly: If a field definition states that the key data&lt;br/&gt;&amp;gt; is empty, an implementation MUST enforce this and reject PSBTs that&lt;br/&gt;&amp;gt; contain non-empty data.&lt;br/&gt;&amp;gt; We suggest adding something to the effect of:&lt;br/&gt;&amp;gt; &amp;#34;If a key or value data in a field doesn&amp;#39;t match the specified format,&lt;br/&gt;&amp;gt; the PSBT is invalid. In particular, if key data is specified as &amp;#34;none&amp;#34;&lt;br/&gt;&amp;gt; but the key contains data beyond the type specifier, implementation MUST&lt;br/&gt;&amp;gt; reject the PSBT.&amp;#34;&lt;br/&gt;&amp;gt; (not sure about the languge, this should of course allow processing&lt;br/&gt;&amp;gt; unknown fields)&lt;br/&gt;&lt;br/&gt;Completely agree here. Any implementation that understands a&lt;br/&gt;particular field must enforce whatever structure the field is known to&lt;br/&gt;have.&lt;br/&gt;&lt;br/&gt;&amp;gt; * &amp;#34;Combiner can detect inconsistencies&amp;#34;&lt;br/&gt;&amp;gt; Added in response to this comment [1], the current wording looks like&lt;br/&gt;&amp;gt; it&amp;#39;s describing what the Combiner is _capable of_, as opposed to&lt;br/&gt;&amp;gt; prescribing what the combiner is _allowed to_ do.&lt;br/&gt;&amp;gt; We suggest changing to something like:&lt;br/&gt;&amp;gt; &amp;#34;For every field type that the Combiner understands, it MAY also refuse&lt;br/&gt;&amp;gt; to combine PSBTs that have inconsistencies in that field, or cause a&lt;br/&gt;&amp;gt; conflict when combined.&amp;#34;&lt;br/&gt;&lt;br/&gt;Agree, just because Combiners are expected to work correctly on&lt;br/&gt;unknown fields doesn&amp;#39;t mean they can&amp;#39;t enforce extra consistency&lt;br/&gt;checks on known fields.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsg8y6zjzuxaela5lvkx5vddtdvpmhzx0ympc5t3eh4ru9a23pf9uczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvnhk9jy</id>
    
      <title type="html">📅 Original date posted:2018-06-27 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsg8y6zjzuxaela5lvkx5vddtdvpmhzx0ympc5t3eh4ru9a23pf9uczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvnhk9jy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsy4dr6e8qaxjran0c3kwf9zqzn06naqqflkyep8pnnnhm990uy5aqhzak3j&#39;&gt;nevent1q…ak3j&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-27&lt;br/&gt;📝 Original message:On Wed, Jun 27, 2018, 07:04 matejcik &amp;lt;jan.matejek at satoshilabs.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; hello,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On 26.6.2018 22:30, Pieter Wuille wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; (Moreover, as I wrote previously, the Combiner seems like a weirdly&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; placed role. I still don&amp;#39;t see its significance and why is it important&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; to correctly combine PSBTs by agents that don&amp;#39;t understand them. If you&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; have a usecase in mind, please explain.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Forward compatibility with new script types. A transaction may spend&lt;br/&gt;&amp;gt; &amp;gt; inputs from different outputs, with different script types. Perhaps&lt;br/&gt;&amp;gt; &amp;gt; some of these are highly specialized things only implemented by some&lt;br/&gt;&amp;gt; &amp;gt; software (say HTLCs of a particular structure), in non-overlapping&lt;br/&gt;&amp;gt; &amp;gt; ways where no piece of software can handle all scripts involved in a&lt;br/&gt;&amp;gt; &amp;gt; single transaction. If Combiners cannot deal with unknown fields, they&lt;br/&gt;&amp;gt; &amp;gt; won&amp;#39;t be able to deal with unknown scripts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Record-based Combiners *can* deal with unknown fields. Either by&lt;br/&gt;&amp;gt; including both versions, or by including one selected at random. This is&lt;br/&gt;&amp;gt; the same in k-v model.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, I wasn&amp;#39;t claiming otherwise. This was just a response to your question&lt;br/&gt;why it is important that Combiners can process unknown fields. It is not an&lt;br/&gt;argument in favor of one model or the other.&lt;br/&gt;&lt;br/&gt;&amp;gt; combining must be done independently by Combiner implementations for&lt;br/&gt;&amp;gt; &amp;gt; each script type involved. As this is easily avoided by adding a&lt;br/&gt;&amp;gt; &amp;gt; slight bit of structure (parts of the fields that need to be unique -&lt;br/&gt;&amp;gt; &amp;gt; &amp;#34;keys&amp;#34;), this seems the preferable option.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; IIUC, you&amp;#39;re proposing a &amp;#34;semi-smart Combiner&amp;#34; that understands and&lt;br/&gt;&amp;gt; processes some fields but not others? That doesn&amp;#39;t seem to change&lt;br/&gt;&amp;gt; things. Either the &amp;#34;dumb&amp;#34; combiner throws data away before the &amp;#34;smart&amp;#34;&lt;br/&gt;&amp;gt; one sees it, or it needs to include all of it anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;No, I&amp;#39;m exactly arguing against smartness in the Combiner. It should always&lt;br/&gt;be possible to implement a Combiner without any script specific logic.&lt;br/&gt;&lt;br/&gt;&amp;gt; No, a Combiner can pick any of the values in case different PSBTs have&lt;br/&gt;&amp;gt; &amp;gt; different values for the same key. That&amp;#39;s the point: by having a&lt;br/&gt;&amp;gt; &amp;gt; key-value structure the choice of fields can be made such that&lt;br/&gt;&amp;gt; &amp;gt; Combiners don&amp;#39;t need to care about the contents. Finalizers do need to&lt;br/&gt;&amp;gt; &amp;gt; understand the contents, but they only operate once at the end.&lt;br/&gt;&amp;gt; &amp;gt; Combiners may be involved in any PSBT passing from one entity to&lt;br/&gt;&amp;gt; &amp;gt; another.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes. Combiners don&amp;#39;t need to care about the contents.&lt;br/&gt;&amp;gt; So why is it important that a Combiner properly de-duplicates the case&lt;br/&gt;&amp;gt; where keys are the same but values are different? This is a job that,&lt;br/&gt;&amp;gt; AFAICT so far, can be safely left to someone along the chain who&lt;br/&gt;&amp;gt; understands that particular record.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s because PSBTs can be copied, signed, and combined back together. A&lt;br/&gt;Combiner which does not deduplicate (at all) would end up having every&lt;br/&gt;original record present N times, one for each copy, a possibly large blowup.&lt;br/&gt;&lt;br/&gt;For all fields I can think of right now, that type of deduplication can be&lt;br/&gt;done through whole-record uniqueness.&lt;br/&gt;&lt;br/&gt;The question whether you need whole-record uniqueness or specified-length&lt;br/&gt;uniqueness (=what is offered by a key-value model) is a philosophical one&lt;br/&gt;(as I mentioned before). I have a preference for stronger invariants on the&lt;br/&gt;file format, so that it becomes illegal for a PSBT to contain multiple&lt;br/&gt;signatures for the same key for example, and implementations do not need to&lt;br/&gt;deal with the case where multiple are present.&lt;br/&gt;&lt;br/&gt;It seems that you consider the latter PSBT &amp;#34;invalid&amp;#34;. But it is well&lt;br/&gt;&amp;gt; formed and doesn&amp;#39;t contain duplicate records. A Finalizer, or a&lt;br/&gt;&amp;gt; different Combiner that understands field F, can as well have the rule&lt;br/&gt;&amp;gt; &amp;#34;throw away all but one&amp;#34; for this case.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It&amp;#39;s not about considering. We&amp;#39;re writing a specification. Either it is&lt;br/&gt;made invalid, or not.&lt;br/&gt;&lt;br/&gt;In a key-value model you can have dumb combiners that must pick one of the&lt;br/&gt;keys in case of duplication, and remove the necessity of dealing with&lt;br/&gt;duplication from all other implementations (which I consider to be a good&lt;br/&gt;thing). In a record-based model you cannot guarantee deduplication of&lt;br/&gt;records that permit repetition per type, because a dumb combiner cannot&lt;br/&gt;understand what part is supposed to be unique. As a result, a record-based&lt;br/&gt;model forces you to let all implementations deal with e.g. multiple partial&lt;br/&gt;signatures for a single key. This is a minor issue, but in my view shows&lt;br/&gt;how records are a less than perfect match for the problem at hand.&lt;br/&gt;&lt;br/&gt;To repeat and restate my central question:&lt;br/&gt;&amp;gt; Why is it important, that an agent which doesn&amp;#39;t understand a particular&lt;br/&gt;&amp;gt; field structure, can nevertheless make decisions about its inclusion or&lt;br/&gt;&amp;gt; omission from the result (based on a repeated prefix)?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Again, because otherwise you may need a separate Combiner for each type of&lt;br/&gt;script involved. That would be unfortunate, and is very easily avoided.&lt;br/&gt;&lt;br/&gt;Actually, I can imagine the opposite: having fields with same &amp;#34;key&amp;#34;&lt;br/&gt;&amp;gt; (identifying data), and wanting to combine their &amp;#34;values&amp;#34; intelligently&lt;br/&gt;&amp;gt; without losing any of the data. Say, two Signers producing separate&lt;br/&gt;&amp;gt; parts of a combined-signature under the same common public key?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That can always be avoided by using different identifying information as&lt;br/&gt;key for these fields. In your example, assuming you&amp;#39;re talking about some&lt;br/&gt;form of threshold signature scheme, every party has their own &amp;#34;shard&amp;#34; of&lt;br/&gt;the key, which still uniquely identifies the participant. If they have no&lt;br/&gt;data that is unique to the participant, they are clones, and don&amp;#39;t need to&lt;br/&gt;interact regardless.&lt;br/&gt;&lt;br/&gt;&amp;gt; In case of BIP32 derivation, computing the pubkeys is possibly&lt;br/&gt;&amp;gt; &amp;gt; expensive. A simple signer can choose to just sign with whatever keys&lt;br/&gt;&amp;gt; &amp;gt; are present, but they&amp;#39;re not the only way to implement a signer, and&lt;br/&gt;&amp;gt; &amp;gt; even less the only software interacting with this format. Others may&lt;br/&gt;&amp;gt; &amp;gt; want to use a matching approach to find keys that are relevant;&lt;br/&gt;&amp;gt; &amp;gt; without pubkeys in the format, they&amp;#39;re forced to perform derivations&lt;br/&gt;&amp;gt; &amp;gt; for all keys present.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m going to search for relevant keys by comparing master fingerprint; I&lt;br/&gt;&amp;gt; would expect HWWs generally don&amp;#39;t have index based on leaf pubkeys.&lt;br/&gt;&amp;gt; OTOH, Signers with lots of keys probably aren&amp;#39;t resource-constrained and&lt;br/&gt;&amp;gt; can do the derivations in case of collisions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Perhaps you want to avoid signing with keys that are already signed with?&lt;br/&gt;If you need to derive all the keys before even knowing what was already&lt;br/&gt;signed with, you&amp;#39;ve already performed 80% of the work.&lt;br/&gt;&lt;br/&gt;&amp;gt; If you take the records model, and then additionally drop the&lt;br/&gt;&amp;gt; &amp;gt; whole-record uniqueness constraint, yes, though that seems pushing it&lt;br/&gt;&amp;gt; &amp;gt; a bit by moving even more guarantees from the file format to&lt;br/&gt;&amp;gt; &amp;gt; application level code.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The &amp;#34;file format&amp;#34; makes no guarantees, because the parsing code and&lt;br/&gt;&amp;gt; application code is the same anyway. You could say I&amp;#39;m proposing to&lt;br/&gt;&amp;gt; separate these concerns ;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Of course a file format can make guarantees. If certain combinations of&lt;br/&gt;data in it do not satsify the specification, the file is illegal, and&lt;br/&gt;implementations do not need to deal with it. Stricter file formats are&lt;br/&gt;easier to deal with, because there are less edge cases to consider.&lt;br/&gt;&lt;br/&gt;To your point: proto v2 afaik has no way to declare &amp;#34;whole record&lt;br/&gt;uniqueness&amp;#34;, so either you drop that (which I think is unacceptable - see&lt;br/&gt;the copy/sign/combine argument above), or you deal with it in your&lt;br/&gt;application code.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180627/fecd0346/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180627/fecd0346/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:13:14Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9k8lyy8lfl0enz3tphfr3u3j5xeqkh3ykmpvqhma8rd4vfwruphczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv94r4z6</id>
    
      <title type="html">📅 Original date posted:2018-06-22 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9k8lyy8lfl0enz3tphfr3u3j5xeqkh3ykmpvqhma8rd4vfwruphczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv94r4z6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0gc63gfz3t7rq34n4jx8k30q9xwt6fkwwcwc4qa7dpvsm0tevsngpxgrdk&#39;&gt;nevent1q…grdk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-22&lt;br/&gt;📝 Original message:On Thu, Jun 21, 2018 at 12:56 PM, Peter D. Gray via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; I have personally implemented this spec on an embedded micro, as&lt;br/&gt;&amp;gt; the signer and finalizer roles, and written multiple parsers for&lt;br/&gt;&amp;gt; it as well. There is nothing wrong with it, and it perfectly meets&lt;br/&gt;&amp;gt; my needs as a hardware wallet.&lt;br/&gt;&lt;br/&gt;This is awesome to hear. We need to hear from people who have comments&lt;br/&gt;or issues they encounter while implementing, but also cases where&lt;br/&gt;things are fine as is.&lt;br/&gt;&lt;br/&gt;&amp;gt; So, there is a good proposal already spec&amp;#39;ed and implemented by&lt;br/&gt;&amp;gt; multiple parties. Andrew has been very patiently shepherding the PR&lt;br/&gt;&amp;gt; for over six months already.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; PSBT is something we need, and has been missing from the ecosystem&lt;br/&gt;&amp;gt; for a long time. Let&amp;#39;s push this out and start talking about future&lt;br/&gt;&amp;gt; versions after we learn from this one.&lt;br/&gt;&lt;br/&gt;I understand you find the suggestions being brought up in this thread&lt;br/&gt;to be bikeshedding over details, and I certainly agree that &amp;#34;changing&lt;br/&gt;X will gratuitously cause us more work&amp;#34; is a good reason not to make&lt;br/&gt;breaking changes to minutiae. However, at least abstractly speaking,&lt;br/&gt;it would be highly unfortunate if the fact that someone implemented a&lt;br/&gt;draft specification results in a vested interest against changes which&lt;br/&gt;may materially improve the standard.&lt;br/&gt;&lt;br/&gt;In practice, the process surrounding BIPs&amp;#39; production readiness is not&lt;br/&gt;nearly as clear as it could be, and there are plenty of BIPs actually&lt;br/&gt;deployed in production which are still marked as draft. So in reality,&lt;br/&gt;truth is that this thread is &amp;#34;late&amp;#34;, and also why I started the&lt;br/&gt;discussion by asking what the state of implementations was. As a&lt;br/&gt;result, the discussion should be &amp;#34;which changes are worth the hassle&amp;#34;,&lt;br/&gt;and not &amp;#34;what other ideas can we throw in&amp;#34; - and some of the things&lt;br/&gt;brought up are certainly the latter.&lt;br/&gt;&lt;br/&gt;So to get back to the question what changes are worth the hassle - I&lt;br/&gt;believe the per-input derivation paths suggested by matejcik may be&lt;br/&gt;one. As is written right now, I believe BIP174 requires Signers to&lt;br/&gt;pretty much always parse or template match the scripts involved. This&lt;br/&gt;means it is relatively hard to implement a Signer which is compatible&lt;br/&gt;with many types of scripts - including ones that haven&amp;#39;t been&lt;br/&gt;considered yet. However, if derivation paths are per-input, a signer&lt;br/&gt;can just produce partial signatures for all keys it has the master&lt;br/&gt;for. As long as the Finalizer understands the script type, this would&lt;br/&gt;mean that Signers will work with any script. My guess is that this&lt;br/&gt;would be especially relevant to devices where the Signer&lt;br/&gt;implementation is hard to change, like when it is implemented in a&lt;br/&gt;hardware signer directly.&lt;br/&gt;&lt;br/&gt;What do you think?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:09Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswa4tzy2htf25sayeh9auya6d5xev4wrdwtpujp3g8jl5whl9557czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv22tygy</id>
    
      <title type="html">📅 Original date posted:2018-06-21 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswa4tzy2htf25sayeh9auya6d5xev4wrdwtpujp3g8jl5whl9557czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv22tygy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9adkpszxjy7v4a9as6j936naq7z9y0qnf959lsuwcupj3ymx2tlskkuxxz&#39;&gt;nevent1q…uxxz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-21&lt;br/&gt;📝 Original message:On Thu, Jun 21, 2018 at 4:29 AM, matejcik &amp;lt;jan.matejek at satoshilabs.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; In the case of everything per-input, the naive Signer can do this:&lt;br/&gt;&amp;gt; 1. (in the global section) pre-serialize the transaction&lt;br/&gt;&amp;gt; 2. (in each input) find and fill out scriptPubKey from the provided UTXO&lt;br/&gt;&amp;gt; 3. (for a given BIP32 path) check if the master fingerprint matches&lt;br/&gt;&amp;gt; mine, if yes, derive secret key, output pubkey, signature&lt;br/&gt;&amp;gt; 4. goto 3 (more keys per input), goto 2 (next input)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that this flow works perfectly for multisig; it’s going to be the&lt;br/&gt;&amp;gt; job of a Finalizer to build the final scriptSig, but each input can have&lt;br/&gt;&amp;gt; multiple partial signatures -- and, interestingly, the naive Signer&lt;br/&gt;&amp;gt; doesn’t even need to know about multisig.&lt;br/&gt;&lt;br/&gt;Ah, you&amp;#39;re thinking of an even simpler signer than I was imagining. I&lt;br/&gt;don&amp;#39;t think this works in general, because the hash being signed&lt;br/&gt;depends on the structure of the script. For example, if it is P2SH, it&lt;br/&gt;is the redeemscript that goes into the scriptCode serialization rather&lt;br/&gt;than the scriptPubKey. If it is segwit, BIP143 serialization needs to&lt;br/&gt;be used, etc. It may work if your signing is restricted to just one of&lt;br/&gt;those structures, though.&lt;br/&gt;&lt;br/&gt;&amp;gt; A less naive Signer will want to check things, maybe derive a scriptSig&lt;br/&gt;&amp;gt; itself and check if it matches the given hash, etc., but it can do this&lt;br/&gt;&amp;gt; all in place. You go linearly through the signing flow and place a&lt;br/&gt;&amp;gt; couple strategic assertions along the way.&lt;br/&gt;&lt;br/&gt;Right - but I think anything but the simplest signer must do this,&lt;br/&gt;just to be able to distinguish between different kinds of signature&lt;br/&gt;hashing.&lt;br/&gt;&lt;br/&gt;But you&amp;#39;re right, having per-input redeemscript/witnessscript&lt;br/&gt;simplifies things still - instead of needing to look a script hash in&lt;br/&gt;a map, you can just compare it with *the* redeemscript/witnessscript.&lt;br/&gt;&lt;br/&gt;&amp;gt; However, if the data is global, as is now, it gets more complicated:&lt;br/&gt;&amp;gt; 1. (in the global section) pre-serialize the transaction, prefill lookup&lt;br/&gt;&amp;gt; tables&lt;br/&gt;&amp;gt; 2. (for a given BIP32 path) check if mine, then derive public key and&lt;br/&gt;&amp;gt; store in a dictionary&lt;br/&gt;&amp;gt; 3. (for each input) find _and parse_ scriptPubKey, extract (PK or)&lt;br/&gt;&amp;gt; script hash&lt;br/&gt;&amp;gt; 4. lookup redeem script based on script-hash; if not found, goto 2; if&lt;br/&gt;&amp;gt; found, parse out public key&lt;br/&gt;&amp;gt; 5. lookup public key in the BIP32 dictionary; if not found, goto 2&lt;br/&gt;&amp;gt; 6. output pubkey, signature&lt;br/&gt;&lt;br/&gt;I understand your point now. I hadn&amp;#39;t considered the possibility of&lt;br/&gt;just signing with all BIP32 derivation paths given for which the&lt;br/&gt;master matches, instead of extracting pubkeys/pkhs from the script.&lt;br/&gt;That&amp;#39;s a major simplification for signers indeed. I do think you need&lt;br/&gt;some conditions before to determine the script structure (see above),&lt;br/&gt;but this is a good point in favour of making the derivation paths&lt;br/&gt;per-input.&lt;br/&gt;&lt;br/&gt;&amp;gt; In general, you seem to focus a lot on the role of Combiners, esp.&lt;br/&gt;&amp;gt; simple Combiners. To me, that doesn’t look like a significant role. As I&lt;br/&gt;&amp;gt; envision it, a Combiner really doesn’t need to do anything more&lt;br/&gt;&amp;gt; complicated than merge and deduplicate records, simply based on the&lt;br/&gt;&amp;gt; uniqueness of the whole record.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s more a side-effect of focusing on forward compatibility. I expect&lt;br/&gt;that we will have transactions with inputs spending different kinds of&lt;br/&gt;outputs, and some signers may not be able to understand all of them.&lt;br/&gt;However, as long as the design goal of having Combiners function&lt;br/&gt;correctly for things they don&amp;#39;t understand, everything should be able&lt;br/&gt;to work together fine.&lt;br/&gt;&lt;br/&gt;&amp;gt; It’s the Finalizer’s job to reconstruct and validate the result. Also&lt;br/&gt;&amp;gt; ISTM if something messes up the PSBT (such as including multiple&lt;br/&gt;&amp;gt; conflicting fields anywhere), it’s OK to leave it to Finalizer to fail.&lt;br/&gt;&lt;br/&gt;Agree.&lt;br/&gt;&lt;br/&gt;&amp;gt; An aside to this in particular, I’ve been thinking about the requirement&lt;br/&gt;&amp;gt; to share derivation paths and public keys with the Creator. The spec&lt;br/&gt;&amp;gt; assumes that this will happen; you’re talking about providing full&lt;br/&gt;&amp;gt; xpub&#43;chaincode too. At least, the Creator must prefill BIP32 paths and&lt;br/&gt;&amp;gt; master key fingerprints. Possibly also prefill public keys in the redeem&lt;br/&gt;&amp;gt; scripts?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This might not be an improvement proposal, but a point worth being&lt;br/&gt;&amp;gt; raised and maybe explained in the spec. Perhaps the original Creator&lt;br/&gt;&amp;gt; doesn’t have access to this data, and delegates this to some&lt;br/&gt;&amp;gt; “sub-Creators”  - I imagine a coordinator sending a PSBT to signing&lt;br/&gt;&amp;gt; parties, each of which acts as a sub-Creator (fills out derivation paths&lt;br/&gt;&amp;gt; and public keys) and a Signer (forwarding to a HWW). Some of the&lt;br/&gt;&amp;gt; discussion even suggests some sort of generic “key derivation field”&lt;br/&gt;&amp;gt; with arbitrary contents - fingerprint &#43; bip32 path? xpub &#43; chain code?&lt;br/&gt;&amp;gt; derivation points? encrypted xprv?&lt;br/&gt;&lt;br/&gt;That makes sense - I think we&amp;#39;ve already touched this when discussing&lt;br/&gt;the requirement for UTXOs to be added. Perhaps those aren&amp;#39;t added by&lt;br/&gt;the Creator, but by some index server. The same could be true for the&lt;br/&gt;scripts or derivations paths.&lt;br/&gt;&lt;br/&gt;And indeed, most of the information in the derivation paths is&lt;br/&gt;effectively opaque to the Creator - it&amp;#39;s just some data given out by&lt;br/&gt;the Signer about its keys that gets passed back to it so it can&lt;br/&gt;identify the key. There is benefit in keeping it in a fixed structure&lt;br/&gt;(like xpub/chaincode, or fingerprint &#43; derivation indexes), to&lt;br/&gt;guarantee compatibility between multiple signer implementations with&lt;br/&gt;access to the same key.&lt;br/&gt;&lt;br/&gt;On Tue, Jun 19, 2018 at 5:39 PM, Jason Les via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;Hex encoding?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I was hoping for some standard here was well and I agree using something&lt;br/&gt;&amp;gt; more compact than hex is important. My understanding is Z85 is better for&lt;br/&gt;&amp;gt; use with JSON than Base64, which is probably a good benefit to have here.&lt;br/&gt;&lt;br/&gt;Both Base64 and Z85 can be stored in JSON strings without quoting&lt;br/&gt;(neither uses quotation characters or backslashes), but Z85 is&lt;br/&gt;slightly more compact (Z85 is 5 characters for 4 bytes, Base64 is 4&lt;br/&gt;characters for 3 bytes). Both use non-alphanumeric characters, so I&lt;br/&gt;don&amp;#39;t think there is much difference w.r.t. copy-pastability either.&lt;br/&gt;Z85 is far less common though.&lt;br/&gt;&lt;br/&gt;On Thu, Jun 21, 2018 at 4:44 AM, Tomas Susanka via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; I think here it makes sense because there can actually only be (up to)&lt;br/&gt;&amp;gt;&amp;gt; one redeemscript and (up to) one witnessscript. So if we made those&lt;br/&gt;&amp;gt;&amp;gt; per-input and per-output, it may simplify signers as they don&amp;#39;t need a&lt;br/&gt;&amp;gt;&amp;gt; table lookup to find the correct one. That would also mean we can drop&lt;br/&gt;&amp;gt;&amp;gt; their hashes, even if we keep a key-value model.&lt;br/&gt;&amp;gt; Yes, indeed. Just to clarify: in the first sentence you mean &amp;#34;per&lt;br/&gt;&amp;gt; output&amp;#34;, right? There can actually only be (up to) one redeemscript and&lt;br/&gt;&amp;gt; (up to) one witnessscript *per output*.&lt;br/&gt;&lt;br/&gt;Up to one per output, and up to one per input - indeed.&lt;br/&gt;&lt;br/&gt;On Thu, Jun 21, 2018 at 7:32 AM, Tomas Susanka via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A question to consider is,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; will there be more per-output data? If yes, it might make sense to have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; an output section.&lt;br/&gt;&amp;gt;&amp;gt; I think it is unlikely that there would be anymore per-output data.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hmm, upon further reflection, maybe it&amp;#39;s not even worth including *any*&lt;br/&gt;&amp;gt; per-output data, aside from what the original transaction contains.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The output redeem script is either:&lt;br/&gt;&amp;gt; - unknown, because we have received only an address from the receiver&lt;br/&gt;&amp;gt; - or it is known, because it is ours and in that case it doesn’t make&lt;br/&gt;&amp;gt; sense to include it in PSBT&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We got stuck on the idea of the Creator providing future (output)&lt;br/&gt;&amp;gt; redeem/witness scripts. But that seems to be a minority use case and can&lt;br/&gt;&amp;gt; be solved efficiently via the same channels that coordinate the PSBT&lt;br/&gt;&amp;gt; creation. Sorry to change opinions so quickly on this one.&lt;br/&gt;&lt;br/&gt;Perhaps you&amp;#39;re missing the reason for having output scripts? It is so&lt;br/&gt;that signers that wish to known the amounts transferred can be told&lt;br/&gt;which outputs of the to-be transaction are change, and thus shouldn&amp;#39;t&lt;br/&gt;be counted towards the balance. By providing the scripts and&lt;br/&gt;derivation paths in a PSBT, the Creator can prove to the Signer that&lt;br/&gt;certain outputs do not actually move funds to some other entity.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Based on the points before, my preference is having everything&lt;br/&gt;per-input and per-output except the transaction (with empty&lt;br/&gt;scriptSig/witness) itself, and having exactly one set/map per input&lt;br/&gt;and output (which may include a &amp;#34;finalized scriptSig/witness field&amp;#34;&lt;br/&gt;for finalized inputs). The overhead of having at least one separator&lt;br/&gt;byte for every input and output in the transaction is at most a few&lt;br/&gt;percent compared to the data in the transaction itself. If size is&lt;br/&gt;really an issue (but I think we&amp;#39;ve already established that small size&lt;br/&gt;gains aren&amp;#39;t worth much extra complexity), we could also serialize the&lt;br/&gt;transaction without scriptSigs/witnesses (which are at least one byte&lt;br/&gt;each, and guaranteed to be empty).&lt;br/&gt;&lt;br/&gt;I&amp;#39;m unsure about typed record vs. key-value model. If we&amp;#39;d go with a&lt;br/&gt;per-input script approach, the key would just be a single byte (&amp;#34;the&lt;br/&gt;redeemscript&amp;#34; and &amp;#34;the witnessscript&amp;#34;), so the advantage of being able&lt;br/&gt;to drop the script hashes applies equally to both models. After that,&lt;br/&gt;it seems the only difference seems to be that a well-defined prefix of&lt;br/&gt;the records is enforced to be unique as opposed to the entire record&lt;br/&gt;being enforced to be unique. I don&amp;#39;t think there is much difference in&lt;br/&gt;complexity, as Combiners and Signers still need to enforce some kind&lt;br/&gt;of uniqueness even in a typed records model.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:06Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs89ttrvcr2jy092uqa8q6wdhwad8ax3fg3g9fxjnu2gsxn0uhqrwgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv932k9q</id>
    
      <title type="html">📅 Original date posted:2018-06-19 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs89ttrvcr2jy092uqa8q6wdhwad8ax3fg3g9fxjnu2gsxn0uhqrwgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv932k9q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspfd36r62ddxh6uzahxjhwgdemmnj54r6hq68mftgds7gqa8dl83g245e9l&#39;&gt;nevent1q…5e9l&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-19&lt;br/&gt;📝 Original message:On Tue, Jun 19, 2018 at 7:20 AM, matejcik via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;Thanks for your comments so far. I&amp;#39;m very happy to see people dig into&lt;br/&gt;the details, and consider alternative approaches.&lt;br/&gt;&lt;br/&gt;&amp;gt; 1) Why isn&amp;#39;t the global type 0x03 (BIP-32 path) per-input? How do we&lt;br/&gt;&amp;gt; know, which BIP-32 path goes to which input? The only idea that comes to&lt;br/&gt;&amp;gt; my mind is that we should match the input&amp;#39;s scriptPubKey&amp;#39;s pubkey to&lt;br/&gt;&amp;gt; this 0x03&amp;#39;s key (the public key).&lt;br/&gt;&lt;br/&gt;&amp;gt; If our understanding is correct, the BIP-32 path is global to save space&lt;br/&gt;&amp;gt; in case two inputs share the same BIP-32 path? How often does that&lt;br/&gt;&amp;gt; happen? And in case it does, doesn&amp;#39;t it mean an address reuse which is&lt;br/&gt;&amp;gt; discouraged?&lt;br/&gt;&lt;br/&gt;Yes, the reason is address reuse. It may be discouraged, but it still&lt;br/&gt;happens in practice (and unfortunately it&amp;#39;s very hard to prevent&lt;br/&gt;people from sending to the same address twice).&lt;br/&gt;&lt;br/&gt;It&amp;#39;s certainly possible to make them per-input (and even per-output as&lt;br/&gt;suggested below), but I don&amp;#39;t think it gains you much. At least when a&lt;br/&gt;signer supports any kind of multisig, it needs to match up public keys&lt;br/&gt;with derivation paths. If several can be provided, looking them up&lt;br/&gt;from a global table or a per-input table shouldn&amp;#39;t fundamentally&lt;br/&gt;change anything.&lt;br/&gt;&lt;br/&gt;However, perhaps it makes sense to get rid of the global section&lt;br/&gt;entirely, and make the whole format a transaction plus per-input and&lt;br/&gt;per-output extra fields. This would result in duplication in case of&lt;br/&gt;key reuse, but perhaps that&amp;#39;s worth the complexity reduction.&lt;br/&gt;&lt;br/&gt;&amp;gt; 2) The global items 0x01 (redeem script) and 0x02 (witness script) are&lt;br/&gt;&amp;gt; somewhat confusing. Let&amp;#39;s consider only the redeem script (0x01) to make&lt;br/&gt;&amp;gt; it simple. The value description says: &amp;#34;A redeem script that will be&lt;br/&gt;&amp;gt; needed to sign a Pay-To-Script-Hash input or is spent to by an output.&amp;#34;.&lt;br/&gt;&amp;gt; Does this mean that the record includes both input&amp;#39;s redeem script&lt;br/&gt;&amp;gt; (because we need to sign it), but also a redeem script for the output&lt;br/&gt;&amp;gt; (to verify we are sending to a correct P2SH)? To mix those two seems&lt;br/&gt;&amp;gt; really confusing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yet again, adding a new output section would make this more readable. We&lt;br/&gt;&amp;gt; would include the input’s redeem script in the input section and the&lt;br/&gt;&amp;gt; output’s redeem script again in the output section, because they’ll most&lt;br/&gt;&amp;gt; likely differ anyway.&lt;br/&gt;&lt;br/&gt;I think here it makes sense because there can actually only be (up to)&lt;br/&gt;one redeemscript and (up to) one witnessscript. So if we made those&lt;br/&gt;per-input and per-output, it may simplify signers as they don&amp;#39;t need a&lt;br/&gt;table lookup to find the correct one. That would also mean we can drop&lt;br/&gt;their hashes, even if we keep a key-value model.&lt;br/&gt;&lt;br/&gt;&amp;gt; 3) The sighash type 0x03 says the sighash is only a recommendation. That&lt;br/&gt;&amp;gt; seems rather ambiguous. If the field is specified shouldn&amp;#39;t it be binding?&lt;br/&gt;&lt;br/&gt;Perhaps, yes.&lt;br/&gt;&lt;br/&gt;&amp;gt; 4) Is it a good idea to skip records which types we are unaware of? We&lt;br/&gt;&amp;gt; can&amp;#39;t come up with a reasonable example, but intuitively this seems as a&lt;br/&gt;&amp;gt; potential security issue. We think we should consider  introducing a&lt;br/&gt;&amp;gt; flag, which would define if the record is &amp;#34;optional&amp;#34;. In case the signer&lt;br/&gt;&amp;gt; encounters a record it doesn&amp;#39;t recognize and such flag is not set, it&lt;br/&gt;&amp;gt; aborts the procedure. If we assume the set model we could change the&lt;br/&gt;&amp;gt; structure to &amp;lt;type&amp;gt;&amp;lt;optional flag&amp;gt;&amp;lt;length&amp;gt;{data}. We are not keen on&lt;br/&gt;&amp;gt; this, but we wanted to include this idea to see what you think.&lt;br/&gt;&lt;br/&gt;Originally there was at least this intuition for why it shouldn&amp;#39;t be&lt;br/&gt;necessary: the resulting signature for an input is either valid or&lt;br/&gt;invalid. Adding information to a PSBT (which is what signers do)&lt;br/&gt;either helps with that or not. The worst case is that they simply&lt;br/&gt;don&amp;#39;t have enough information to produce a signature together. But an&lt;br/&gt;ignored unknown field being present should never result in signing the&lt;br/&gt;wrong thing (they can always see the transaction being signed), or&lt;br/&gt;failing to sign if signing was possible in the first place. Another&lt;br/&gt;way of looking at it, the operation of a signer is driven by queries:&lt;br/&gt;it looks at the scriptPubKey of the output being spent, sees it is&lt;br/&gt;P2SH, looks for the redeemscript, sees it is P2WSH, looks for the&lt;br/&gt;witnessscript, sees it is multisig, looks for other signers&amp;#39;&lt;br/&gt;signatures, finds enough for the threshold, and proceeds to sign and&lt;br/&gt;create a full transaction. If at any point one of those things is&lt;br/&gt;missing or not comprehensible to the signer, he simply fails and&lt;br/&gt;doesn&amp;#39;t modify the PSBT.&lt;br/&gt;&lt;br/&gt;However, if the sighash request type becomes mandatory, perhaps this&lt;br/&gt;is not the case anymore, as misinterpreting something like this could&lt;br/&gt;indeed result in an incorrect signature.&lt;br/&gt;&lt;br/&gt;If we go down this route, if a field is marked as mandatory, can you&lt;br/&gt;still act as a combiner for it? Future extensions should always&lt;br/&gt;maintain the invariant that a simple combiner which just merges all&lt;br/&gt;the fields and deduplicates should always be correct, I think. So such&lt;br/&gt;a mandatory field should only apply to signers?&lt;br/&gt;&lt;br/&gt;&amp;gt; In general, the standard is trying to be very space-conservative,&lt;br/&gt;&amp;gt; however is that really necessary? We would argue for clarity and ease of&lt;br/&gt;&amp;gt; use over space constraints. We think more straightforward approach is&lt;br/&gt;&amp;gt; desired, although more space demanding. What are the arguments to make&lt;br/&gt;&amp;gt; this as small as possible? If we understand correctly, this format is&lt;br/&gt;&amp;gt; not intended for blockchain nor for persistent storage, so size doesn’t&lt;br/&gt;&amp;gt; matter nearly as much.&lt;br/&gt;&lt;br/&gt;I wouldn&amp;#39;t say it&amp;#39;s trying very hard to be space-conservative. The&lt;br/&gt;design train of thought started from &amp;#34;what information does a signer&lt;br/&gt;need&amp;#34;, and found a signer would need information on the transaction to&lt;br/&gt;sign, and on scripts to descend into, information on keys to derive,&lt;br/&gt;and information on signatures provided by other participants. Given&lt;br/&gt;that some of this information was global (at least the transaction),&lt;br/&gt;and some of this information was per-input (at least the signatures),&lt;br/&gt;separate scopes were needed for those. Once you have a global scope,&lt;br/&gt;and you envision a signer which looks up scripts and keys in a map of&lt;br/&gt;known ones (like the signing code in Bitcoin Core), there is basically&lt;br/&gt;no downside to make the keys and scripts global - while giving space&lt;br/&gt;savings for free to deduplication.&lt;br/&gt;&lt;br/&gt;However, perhaps that&amp;#39;s not the right way to think about things, and&lt;br/&gt;the result is simpler if we only keep the transaction itself global,&lt;br/&gt;and everything else per-input (and per-output).&lt;br/&gt;&lt;br/&gt;I think there are good reasons to not be gratuitously large (I expect&lt;br/&gt;that at least while experimenting, people will copy-paste these things&lt;br/&gt;a lot and page-long copy pastes become unwieldy quickly), but maybe&lt;br/&gt;not at the cost of structural complexity.&lt;br/&gt;&lt;br/&gt;On Tue, Jun 19, 2018 at 7:22 AM, matejcik via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; hello,&lt;br/&gt;&amp;gt; this is our second e-mail with replies to Pieter&amp;#39;s suggestions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On 16.6.2018 01:34, pieter.wuille at gmail.com (Pieter Wuille) wrote:&lt;br/&gt;&amp;gt;&amp;gt; * Key-value map model or set model.&lt;br/&gt;&lt;br/&gt;&amp;gt; Just to note, we should probably use varint for the &amp;lt;type&amp;gt; field - this&lt;br/&gt;&amp;gt; allows us, e.g., to create “namespaces” for future extensions by using&lt;br/&gt;&amp;gt; one byte as namespace identifier and one as field identifier.&lt;br/&gt;&lt;br/&gt;Agree, but this doesn&amp;#39;t actually need to be specified right now. As&lt;br/&gt;the key&amp;#39;s (and or value&amp;#39;s) interpretation (including the type) is&lt;br/&gt;completely unspecified, an extension can just start using 2-byte keys&lt;br/&gt;(as long as the first byte of those 2 isn&amp;#39;t used by another field&lt;br/&gt;already).&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; One exception is the &amp;#34;transaction&amp;#34; record, which needs to be unique.&lt;br/&gt;&amp;gt;&amp;gt; That can either be done by adding an exception (&amp;#34;there can only be one&lt;br/&gt;&amp;gt;&amp;gt; transaction record&amp;#34;), or by encoding it separately outside the normal&lt;br/&gt;&amp;gt;&amp;gt; records (that may also be useful to make it clear that it is always&lt;br/&gt;&amp;gt;&amp;gt; required).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This seems to be the case for some fields already - i.e., an input field&lt;br/&gt;&amp;gt; must have exactly one of Non-witness UTXO or Witness Output. So “adding&lt;br/&gt;&amp;gt; an exception” is probably just a matter of language?&lt;br/&gt;&lt;br/&gt;Hmm, I wouldn&amp;#39;t say so. Perhaps the transaction&amp;#39;s inputs and outputs&lt;br/&gt;are chosen by one entity, and then sent to another entity which has&lt;br/&gt;access to the UTXOs or previous transactions. So while the UTXOs must&lt;br/&gt;be present before signing, I wouldn&amp;#39;t say the file format itself must&lt;br/&gt;enforce that the UTXOs are present.&lt;br/&gt;&lt;br/&gt;However, perhaps we do want to enforce at-most one UTXO per input. If&lt;br/&gt;there are more potential extensions like this, perhaps a key-value&lt;br/&gt;model is better, as it&amp;#39;s much easier to enforce no duplicate keys than&lt;br/&gt;it is to add field-specific logic to combiners (especially for&lt;br/&gt;extensions they don&amp;#39;t know about yet).&lt;br/&gt;&lt;br/&gt;&amp;gt; We’d also like to note that the “number of inputs” field should be&lt;br/&gt;&amp;gt; mandatory - and as such, possibly also a candidate for outside-record field.&lt;br/&gt;&lt;br/&gt;If we go with the &amp;#34;not put signatures/witnesses inside the transaction&lt;br/&gt;until all of them are finalized&amp;#34; suggestion, perhaps the number of&lt;br/&gt;inputs field can be dropped. There would be always one exactly for&lt;br/&gt;each input (but some may have the &amp;#34;final script/witness&amp;#34; field and&lt;br/&gt;others won&amp;#39;t).&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt; * Derivation from xpub or fingerprint&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For BIP32 derivation paths, the spec currently only encodes the 32-bit&lt;br/&gt;&amp;gt;&amp;gt; fingerprint of the parent or master xpub. When the Signer only has a&lt;br/&gt;&amp;gt;&amp;gt; single xprv from which everything is derived, this is obviously&lt;br/&gt;&amp;gt;&amp;gt; sufficient. When there are many xprv, or when they&amp;#39;re not available&lt;br/&gt;&amp;gt;&amp;gt; indexed by fingerprint, this may be less convenient for the signer.&lt;br/&gt;&amp;gt;&amp;gt; Furthermore, it violates the &amp;#34;PSBT contains all information necessary&lt;br/&gt;&amp;gt;&amp;gt; for signing, excluding private keys&amp;#34; idea - at least if we don&amp;#39;t treat&lt;br/&gt;&amp;gt;&amp;gt; the chaincode as part of the private key.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For that reason I would suggest that the derivation paths include the&lt;br/&gt;&amp;gt;&amp;gt; full public key and chaincode of the parent or master things are&lt;br/&gt;&amp;gt;&amp;gt; derived from. This does mean that the Creator needs to know the full&lt;br/&gt;&amp;gt;&amp;gt; xpub which things are derived from, rather than just its fingerprint.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We don’t understand the rationale for this idea. Do you see a scenario&lt;br/&gt;&amp;gt; where an index on master fingerprint is not available but index by xpubs&lt;br/&gt;&amp;gt; is? In our envisioned use cases at least, indexing private keys by xpubs&lt;br/&gt;&amp;gt; (as opposed to deriving from a BIP32 path) makes no sense.&lt;br/&gt;&lt;br/&gt;Let me elaborate.&lt;br/&gt;&lt;br/&gt;Right now, the BIP32 fields are of the form &amp;lt;master&lt;br/&gt;fingerprint&amp;gt;&amp;lt;childidx&amp;gt;&amp;lt;childidx&amp;gt;&amp;lt;childidx&amp;gt;...&lt;br/&gt;&lt;br/&gt;Instead, I suggest fields of the form &amp;lt;master pubkey&amp;gt;&amp;lt;master&lt;br/&gt;chaincode&amp;gt;&amp;lt;childidx&amp;gt;&amp;lt;childidx&amp;gt;&amp;lt;childidx&amp;gt;...&lt;br/&gt;&lt;br/&gt;The fingerprint in this case is identical to the first 32 bit of the&lt;br/&gt;Hash160 of &amp;lt;master pubkey&amp;gt;, so certainly no information is lost by&lt;br/&gt;making this change.&lt;br/&gt;&lt;br/&gt;This may be advantageous for three reasons:&lt;br/&gt;* It permits signers to have ~thousands of master keys (at which point&lt;br/&gt;32-bit fingerprints would start having reasonable chance for&lt;br/&gt;collisions, meaning multiple derivation attempts would be needed to&lt;br/&gt;figure out which one to use).&lt;br/&gt;* It permits signers to index their master keys by whatever they like&lt;br/&gt;(for example, SHA256 rather than Hash160 or prefix thereof).&lt;br/&gt;* It permits signers who don&amp;#39;t store a chaincode at all, and just&lt;br/&gt;protect a single private key.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:04Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsduzdauwgv5dlnhwra8uqcddq4647za9qtzg5m6vjmr2tkhmexdxczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv34y69h</id>
    
      <title type="html">📅 Original date posted:2018-06-15 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsduzdauwgv5dlnhwra8uqcddq4647za9qtzg5m6vjmr2tkhmexdxczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv34y69h" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvmc7z7xh4a38ryq8r93lahja9fdv8gx5avhfcm5uru7pjtms0lngvzuxvg&#39;&gt;nevent1q…uxvg&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-15&lt;br/&gt;📝 Original message:Hello all,&lt;br/&gt;&lt;br/&gt;given some recent work and discussions around BIP 174 (Partially&lt;br/&gt;Signed Bitcoin Transaction Format) I&amp;#39;d like to bring up a few ideas.&lt;br/&gt;&lt;br/&gt;First of all, it&amp;#39;s unclear to me to what extent projects have already&lt;br/&gt;worked on implementations, and thus to what extent the specification&lt;br/&gt;is still subject to change. A response of &amp;#34;this is way too late&amp;#34; is&lt;br/&gt;perfectly fine.&lt;br/&gt;&lt;br/&gt;So here goes:&lt;br/&gt;&lt;br/&gt;* Key-value map model or set model.&lt;br/&gt;&lt;br/&gt;This was suggested in this thread:&lt;br/&gt;&lt;a href=&#34;https://twitter.com/matejcik/status/1002618633472892929&#34;&gt;https://twitter.com/matejcik/status/1002618633472892929&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;The motivation behind using a key-value model rather than a simple&lt;br/&gt;list of records was that PSBTs can be duplicated (given to multiple&lt;br/&gt;people for signing, for example), and merged back together after&lt;br/&gt;signing. With a generic key-value model, any implementation can remove&lt;br/&gt;the duplication even if they don&amp;#39;t understand fields that may have&lt;br/&gt;been added in future extensions.&lt;br/&gt;&lt;br/&gt;However, almost the same can be accomplished by using the simpler set&lt;br/&gt;model (the file consists of a set of records, with no duplication&lt;br/&gt;allowed). This would mean that it would technically be legal to have&lt;br/&gt;two partial signatures with the same key for the same input, if a&lt;br/&gt;non-deterministic signer is used.&lt;br/&gt;&lt;br/&gt;On the other hand, this means that certain data currently encoded&lt;br/&gt;inside keys can be dropped, reducing the PSBT size. This is&lt;br/&gt;particularly true for redeemscripts and witnessscripts, as they can&lt;br/&gt;just be computed by the client when deserializing. The two types could&lt;br/&gt;even be merged into just &amp;#34;scripts&amp;#34; records - as they don&amp;#39;t need to be&lt;br/&gt;separated based on the way they&amp;#39;re looked up (Hash160 for P2SH, SHA256&lt;br/&gt;for P2WSH). The same could be done for the BIP32 derivation paths,&lt;br/&gt;though this may be expensive, as the client would need to derive all&lt;br/&gt;keys before being able to figure out which one(s) it needs.&lt;br/&gt;&lt;br/&gt;One exception is the &amp;#34;transaction&amp;#34; record, which needs to be unique.&lt;br/&gt;That can either be done by adding an exception (&amp;#34;there can only be one&lt;br/&gt;transaction record&amp;#34;), or by encoding it separately outside the normal&lt;br/&gt;records (that may also be useful to make it clear that it is always&lt;br/&gt;required).&lt;br/&gt;&lt;br/&gt;* Ability for Combiners to verify two PSBT are for the same transaction&lt;br/&gt;&lt;br/&gt;Clearly two PSBTs for incompatible transactions cannot be combined,&lt;br/&gt;and this should not be allowed.&lt;br/&gt;&lt;br/&gt;It may be easier to enforce this if the &amp;#34;transaction&amp;#34; record inside a&lt;br/&gt;PSBT was required to be in a canonical form, meaning with empty&lt;br/&gt;scriptSigs and witnesses. In order to do so, there could be per-input&lt;br/&gt;records for &amp;#34;finalized scriptSig&amp;#34; and &amp;#34;finalized witness&amp;#34;. Actually&lt;br/&gt;placing those inside the transaction itself would only be allowed when&lt;br/&gt;all inputs are finalized.&lt;br/&gt;&lt;br/&gt;* Optional signing&lt;br/&gt;&lt;br/&gt;I think all operation for the Signer responsibility should be&lt;br/&gt;optional. This will inevitably lead to incompatibilities, but with the&lt;br/&gt;intent of being forward compatible with future developments, I don&amp;#39;t&lt;br/&gt;think it is possible to require every implementation to support the&lt;br/&gt;same set of scripts or contracts. For example, some signers may only&lt;br/&gt;implement single-key P2PKH, or may only support signing SegWit inputs.&lt;br/&gt;It&amp;#39;s the user&amp;#39;s responsibility to find compatible signers (which is&lt;br/&gt;generally not an issue, as the different participants in a setup&lt;br/&gt;necessarily have this figured out before being able to create an&lt;br/&gt;address). This does mean that there can&amp;#39;t be an unconditional test&lt;br/&gt;vector that specifies the produced signature in certain circumstances,&lt;br/&gt;but there could be &amp;#34;For implementations that choose to implement&lt;br/&gt;signing for P2PKH inputs using RFC6979, the expected output given&lt;br/&gt;input X and access to key Y is Z&amp;#34;.&lt;br/&gt;&lt;br/&gt;On the other hand, the Combiner and Finalizer roles can probably be&lt;br/&gt;specified much more accurately than they are now.&lt;br/&gt;&lt;br/&gt;* Derivation from xpub or fingerprint&lt;br/&gt;&lt;br/&gt;For BIP32 derivation paths, the spec currently only encodes the 32-bit&lt;br/&gt;fingerprint of the parent or master xpub. When the Signer only has a&lt;br/&gt;single xprv from which everything is derived, this is obviously&lt;br/&gt;sufficient. When there are many xprv, or when they&amp;#39;re not available&lt;br/&gt;indexed by fingerprint, this may be less convenient for the signer.&lt;br/&gt;Furthermore, it violates the &amp;#34;PSBT contains all information necessary&lt;br/&gt;for signing, excluding private keys&amp;#34; idea - at least if we don&amp;#39;t treat&lt;br/&gt;the chaincode as part of the private key.&lt;br/&gt;&lt;br/&gt;For that reason I would suggest that the derivation paths include the&lt;br/&gt;full public key and chaincode of the parent or master things are&lt;br/&gt;derived from. This does mean that the Creator needs to know the full&lt;br/&gt;xpub which things are derived from, rather than just its fingerprint.&lt;br/&gt;&lt;br/&gt;* Generic key offset derivation&lt;br/&gt;&lt;br/&gt;Whenever a BIP32 derivation path does not include any hardened steps,&lt;br/&gt;the entirety of the derivation can be conveyed as &amp;#34;The private key for&lt;br/&gt;P is equal to the private key for Q plus x&amp;#34;, with P and Q points and x&lt;br/&gt;a scalar. This representation is more flexible (it also supports&lt;br/&gt;pay-to-contract derivations), more efficient, and more compact. The&lt;br/&gt;downside is that it requires the Signer to support such derivation,&lt;br/&gt;which I don&amp;#39;t believe any current hardware devices do.&lt;br/&gt;&lt;br/&gt;Would it make sense to add this as an additional derivation method?&lt;br/&gt;&lt;br/&gt;* Hex encoding?&lt;br/&gt;&lt;br/&gt;This is a very minor thing. But presumably there will be some standard&lt;br/&gt;way to store PSBTs as text for copy-pasting - either prescribed by the&lt;br/&gt;spec, or de facto. These structures may become pretty large, so&lt;br/&gt;perhaps it&amp;#39;s worth choosing something more compact than hexadecimal -&lt;br/&gt;for example Base64 or even Z85 (&lt;a href=&#34;https://rfc.zeromq.org/spec:32/Z85/&#34;&gt;https://rfc.zeromq.org/spec:32/Z85/&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:13:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdz0ah22gfkqcztxnsmr699zda2a2a9zfrwemu2d58azy0mavkm2szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvvhfa5k</id>
    
      <title type="html">📅 Original date posted:2018-06-03 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdz0ah22gfkqcztxnsmr699zda2a2a9zfrwemu2d58azy0mavkm2szypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvvhfa5k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsquaseaskata686eqnuguerlux7lufprue9ywps30vndfvnx7xt9q93frr3&#39;&gt;nevent1q…frr3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-03&lt;br/&gt;📝 Original message:On Sun, Jun 3, 2018 at 9:51 AM, Jonas Schnelli via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; Hi&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The BIP proposal is now available here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/jonasschnelli/68a2a5a5a5b796dc9992f432e794d719&#34;&gt;https://gist.github.com/jonasschnelli/68a2a5a5a5b796dc9992f432e794d719&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reference C code is available here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/jonasschnelli/bech32_keys&#34;&gt;https://github.com/jonasschnelli/bech32_keys&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Feedback, criticism, etc. welcome!&lt;br/&gt;&lt;br/&gt;First of all, thanks for working on this.&lt;br/&gt;&lt;br/&gt;I have some concerns about the use of Bech32. It is designed for&lt;br/&gt;detecting 3 errors up to length 1023 (but is then picked specifically&lt;br/&gt;to support 4 errors up to length 89). However, for error correction&lt;br/&gt;this translates to just being able to efficiently correct 1 error&lt;br/&gt;(3/2, rounded down) up to length 1023. You can of course always try&lt;br/&gt;all combinations of up to N changes to the input (for any N), testing&lt;br/&gt;the checksum, and comparing the results against the UTXO set or other&lt;br/&gt;wallet information that may have been recovered. However, the checksum&lt;br/&gt;at best gives you a small constant speedup here, not a fundamentally&lt;br/&gt;improved way for recovery.&lt;br/&gt;&lt;br/&gt;However, we can design other base32 BCH codes easily with different&lt;br/&gt;properties. As we mostly care about efficient algorithms for recovery&lt;br/&gt;(and not just error detection properties), it seems more important to&lt;br/&gt;have good design strength (as opposed to picking a code from a large&lt;br/&gt;set which happens to have better properties, but without efficient&lt;br/&gt;algorithm, like Bech32).&lt;br/&gt;&lt;br/&gt;This is what I find for codes designed for length 93 (the first length&lt;br/&gt;for which efficient codes exist with length long enough to support 256&lt;br/&gt;bits of data):&lt;br/&gt;* correct 1 error = 3 checksum characters&lt;br/&gt;* correct 2 errors = 6 checksum characters&lt;br/&gt;* correct 3 errors = 10 checksum characters&lt;br/&gt;* correct 4 errors = 13 checksum characters&lt;br/&gt;* correct 5 errors = 16 checksum characters&lt;br/&gt;* ...&lt;br/&gt;* correct 8 errors = 26 checksum characters (~ length * 1.5)&lt;br/&gt;* correct 11 errors = 36 checksum characters (~ maximum length without&lt;br/&gt;pushing checksum &#43; data over 93 characters)&lt;br/&gt;&lt;br/&gt;For codes designed for length 341 (the first length enough to support&lt;br/&gt;512 bits of data):&lt;br/&gt;* correct 1 error = 3 checksum characters&lt;br/&gt;* correct 2 errors = 7 checksum characters&lt;br/&gt;* correct 3 errors = 11 checksum characters&lt;br/&gt;* correct 4 errors = 15 checksum characters&lt;br/&gt;* correct 5 errors = 19 checksum characters&lt;br/&gt;* ...&lt;br/&gt;* correct 7 errors = 26 checksum characters (~ length * 1.25)&lt;br/&gt;* correct 13 errors = 51 checksum characters (~ length * 1.5)&lt;br/&gt;* correct 28 errors = 102 checksum characters (~ length * 2)&lt;br/&gt;&lt;br/&gt;So it really boils down to a trade-off between length of the code, and&lt;br/&gt;recovery properties.&lt;br/&gt;&lt;br/&gt;These two sets of codes are distinct (a code designed for length 93&lt;br/&gt;has zero error correction properties when going above 93), so either&lt;br/&gt;we can pick a separate code for the two purposes, or be limited to the&lt;br/&gt;second set.&lt;br/&gt;&lt;br/&gt;If there is interest, I can construct a code &#43; implementation for any&lt;br/&gt;of these in a few days probably, once the requirements are clear.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:12:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxujun8vj376xql9c7f00ma6duma2lh4k5wpyq240gxur3jqkqpngzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv9zttmy</id>
    
      <title type="html">📅 Original date posted:2018-06-03 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxujun8vj376xql9c7f00ma6duma2lh4k5wpyq240gxur3jqkqpngzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv9zttmy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfwjzus888t5rjccwdgyv804azld6t38pmm838u8lffp9mmcf8c0q090k7f&#39;&gt;nevent1q…0k7f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-06-03&lt;br/&gt;📝 Original message:On Sat, Jun 2, 2018, 22:56 Tamas Blummer 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; Lighter but SPV secure nodes (filter committed) would help the network&lt;br/&gt;&amp;gt; (esp. Layer 2) to grow mesh like, but add more user that blindly follow POW.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On longer term most users&amp;#39; security will be determined by either trusted&lt;br/&gt;&amp;gt; hubs or POW.&lt;br/&gt;&amp;gt; I do not know which is worse, but we should at least offer the choice to&lt;br/&gt;&amp;gt; the user, therefore commit filters.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think that&amp;#39;s the point of discussion here. Of course, in order to&lt;br/&gt;have filters that verifiably don&amp;#39;t lie by omission, the filters need to be&lt;br/&gt;committed to by blocks.&lt;br/&gt;&lt;br/&gt;The question is what data that filter should contain.&lt;br/&gt;&lt;br/&gt;There are two suggestions:&lt;br/&gt;(a) The scriptPubKeys of the block&amp;#39;s outputs, and prevouts of the block&amp;#39;s&lt;br/&gt;inputs.&lt;br/&gt;(b) The scriptPubKeys of the block&amp;#39;s outputs, and scriptPubKeys of outputs&lt;br/&gt;being spent by the block&amp;#39;s inputs.&lt;br/&gt;&lt;br/&gt;The advantage of (a) is that it can be verified against a full block&lt;br/&gt;without access to the outputs being spent by it. This allows light clients&lt;br/&gt;to ban nodes that give them incorrect filters, but they do need to actually&lt;br/&gt;see the blocks (partially defeating the purpose of having filters in the&lt;br/&gt;first place).&lt;br/&gt;&lt;br/&gt;The advantage of (b) is that it is more compact (scriot reuse, and outputs&lt;br/&gt;spent within the same block as they are created). It also had the advantage&lt;br/&gt;of being more easily usable for scanning of a wallet&amp;#39;s transactions. Using&lt;br/&gt;(a) for that in some cases may need to restart and refetch when an output&lt;br/&gt;is discovered, to go test for its spending (whose outpoint is not known&lt;br/&gt;ahead of time). Especially when fetching multiple filters at a time this&lt;br/&gt;may be an issue.&lt;br/&gt;&lt;br/&gt;I think both of these potentially good arguments. However, once a committed&lt;br/&gt;filter exists, the advantage of (a) goes away completely - validation of&lt;br/&gt;committed filters is trivial and can be done without needing the full&lt;br/&gt;blocks in the first place.&lt;br/&gt;&lt;br/&gt;So I think the question is do we aim for an uncommitted (a) first and a&lt;br/&gt;committed (b) later, or go for (b) immediately?&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180602/ddc0b29e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180602/ddc0b29e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:12:39Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyexkjeeyuz0nlufj3g7m46ue7j2g623z8kuhy3y8lan3gr03zp2gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvaf5rnm</id>
    
      <title type="html">📅 Original date posted:2018-05-31 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyexkjeeyuz0nlufj3g7m46ue7j2g623z8kuhy3y8lan3gr03zp2gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvaf5rnm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst35sn26kg5yqgyy292rwr6tq67pk6yy89chp2yeqxz97xvctlkws52yrp2&#39;&gt;nevent1q…yrp2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-31&lt;br/&gt;📝 Original message:On Fri, May 25, 2018 at 3:14 AM, Johnson Lau &amp;lt;jl2012 at xbt.hk&amp;gt; wrote:&lt;br/&gt;&amp;gt; A graftroot design like this is a strict subset of existing signature checking rules. If this is dangerous, the existing signature checking rules must be dangerous.&lt;br/&gt;&lt;br/&gt;While you may be right in this situation, I&amp;#39;m not sure that conclusion&lt;br/&gt;follows from your argument. Whether or not a construction is safe does&lt;br/&gt;not just depend on the consensus rules, but also on how it is used.&lt;br/&gt;Otherwise you could as well argue that since OP_TRUE is possible right&lt;br/&gt;now which is obviously insecure, nothing more dangerous can be&lt;br/&gt;accomplished through any soft fork.&lt;br/&gt;&lt;br/&gt;The best argument for why Graftroot does not need to be optional I&lt;br/&gt;think was how Greg put it: &amp;#34;since the signer(s) could have signed an&lt;br/&gt;arbitrary transaction instead, being able to delegate is strictly less&lt;br/&gt;powerful.&amp;#34;.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:12:34Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqzvyeqfqqj4w99vurgnlpl8hp7vtaf7ndux0wazfvjhn4ua7et8gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5xz2kz</id>
    
      <title type="html">📅 Original date posted:2018-05-25 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqzvyeqfqqj4w99vurgnlpl8hp7vtaf7ndux0wazfvjhn4ua7et8gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5xz2kz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsplv5ee4gumg97fmmy7xasu3at8mwa9g56dcs649mqluyxedydm7c9p9hpm&#39;&gt;nevent1q…9hpm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-25&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;I spent some time working out the optimal parameter selection for the&lt;br/&gt;Golomb Coded Sets that are proposed in BIP158:&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/sipa/576d5f09c3b86c3b1b75598d799fc845&#34;&gt;https://gist.github.com/sipa/576d5f09c3b86c3b1b75598d799fc845&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;TL;DR: if we really want an FP rate of exactly 1 in 2^20, the Rice&lt;br/&gt;parameter should be 19, not 20. If we don&amp;#39;t, we should pick an FP rate&lt;br/&gt;of 1 in a 1.4971*2^B. So for example M=784931 B=19 or M=1569861 B=20.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:12:29Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrf7p028cy49yy65kdce96v566raqxkkjes0s0fhw55clhf90u02qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv6em4y3</id>
    
      <title type="html">📅 Original date posted:2018-05-23 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrf7p028cy49yy65kdce96v566raqxkkjes0s0fhw55clhf90u02qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv6em4y3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspxurjmzg93nk55yvuqzmry4m5r403f2t3zm4m4njudyzkl6apvkca5c0h9&#39;&gt;nevent1q…c0h9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-23&lt;br/&gt;📝 Original message:On Tue, May 22, 2018 at 11:17 AM, Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; Hello all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given the recent discussions about Taproot [1] and Graftroot [2], I&lt;br/&gt;&amp;gt; was wondering if a practical deployment needs a way to explicitly&lt;br/&gt;&amp;gt; enable or disable the Graftroot spending path. I have no strong&lt;br/&gt;&amp;gt; reasons why this would be necessary, but I&amp;#39;d like to hear other&lt;br/&gt;&amp;gt; people&amp;#39;s thoughts.&lt;br/&gt;&lt;br/&gt;Thanks everyone who commented so far, but let me clarify the context&lt;br/&gt;of this question first a bit more to avoid getting into the weeds too&lt;br/&gt;much.&lt;br/&gt;&lt;br/&gt;If it turns out to be necessary to explicitly commit to permitting&lt;br/&gt;Graftroot spending, there are a number of approaches:&lt;br/&gt;* Use a different witness version (or other marker directly in the&lt;br/&gt;scriptPubKey) to enable Graftroot.&lt;br/&gt;* Signal the permission to spend through Graftroot inside the Taproot&lt;br/&gt;script as suggested by ZmnSCPxj.&lt;br/&gt;* Make &amp;#34;Spend through Graftroot&amp;#34; a special script (possibly indirectly&lt;br/&gt;with a Merkle tree in Taproot).&lt;br/&gt;* Implement Graftroot as an opcode/feature inside the scripting&lt;br/&gt;language (which may be more generically useful as a delegation&lt;br/&gt;mechanism).&lt;br/&gt;* Postpone Graftroot.&lt;br/&gt;&lt;br/&gt;All of these are worse in either efficiency or privacy than always&lt;br/&gt;permitting Graftroot spends directly. Because of that, I think we&lt;br/&gt;should first focus on reasons why a lack of commitment to enabling&lt;br/&gt;Graftroot may result in it being incompatible with certain use cases,&lt;br/&gt;or other reasons why it could interfere with applications adopting&lt;br/&gt;such outputs.&lt;br/&gt;&lt;br/&gt;@Natanael: all of these concerns only apply to a new hypothetical&lt;br/&gt;Taproot/Graftroot output type, which combines pay-to-pubkey and&lt;br/&gt;pay-to-script in a single scriptPubKey that just contains a public&lt;br/&gt;key. It doesn&amp;#39;t apply to existing P2SH like constructions.&lt;br/&gt;&lt;br/&gt;Also, the concern of making Graftroot optional does not apply to&lt;br/&gt;Taproot, as the Taproot spending path&amp;#39;s script is committed to (using&lt;br/&gt;scriptPubKey = P &#43; H(P,script)*G), allowing the script to be&lt;br/&gt;explicitly chosen to be a non-spendable script, which the author could&lt;br/&gt;prove is the case (without revealing it to the entire world).&lt;br/&gt;&lt;br/&gt;It is also always possible to create a &amp;#34;script only&amp;#34; Taproot output&lt;br/&gt;(without key that can unconditionally spend), by picking a pubkey that&lt;br/&gt;is provably unspendable (hashing onto a curve point, in particular),&lt;br/&gt;or through pubkey recovery.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:12:26Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs89va6sfy4p5eyumastdqdcr7zalary9wq9vej7jctc5cp0rwp8wgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv89kx9e</id>
    
      <title type="html">📅 Original date posted:2018-05-22 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs89va6sfy4p5eyumastdqdcr7zalary9wq9vej7jctc5cp0rwp8wgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv89kx9e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswy6eadq7d0dd7cyngdprukmj9sjxrutda0a4enev6jjcmcsfxnasjhqpn3&#39;&gt;nevent1q…qpn3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-22&lt;br/&gt;📝 Original message:Hello all,&lt;br/&gt;&lt;br/&gt;Given the recent discussions about Taproot [1] and Graftroot [2], I&lt;br/&gt;was wondering if a practical deployment needs a way to explicitly&lt;br/&gt;enable or disable the Graftroot spending path. I have no strong&lt;br/&gt;reasons why this would be necessary, but I&amp;#39;d like to hear other&lt;br/&gt;people&amp;#39;s thoughts.&lt;br/&gt;&lt;br/&gt;As a refresher, the idea is that a script type could exists which&lt;br/&gt;looks like a pubkey Q, but can be spent either:&lt;br/&gt;* By signing the spending transaction directly using Q (key spending)&lt;br/&gt;* By proving Q was derived as Q = P &#43; H(P,S)*G, with a script S and&lt;br/&gt;its inputs (Taproot script spending).&lt;br/&gt;* By signing a script S using Q, and providing S&amp;#39;s inputs (Graftroot&lt;br/&gt;script spending).&lt;br/&gt;&lt;br/&gt;Overall, these constructions let us create combined&lt;br/&gt;pay-to-pubkey-or-script outputs that are indistinguishable, and don&amp;#39;t&lt;br/&gt;even reveal a script spending path existed in the first place when the&lt;br/&gt;key spending path is used. The two approaches ((T)aproot and&lt;br/&gt;(G)raftroot) for the script spending path have different trade-offs:&lt;br/&gt;* T outputs can be derived noninteractively from key and scripts; G&lt;br/&gt;outputs need an interaction phase where the key owner(s) sign off on&lt;br/&gt;the potential script spending paths.&lt;br/&gt;* T lets you prove what all the different spending paths are.&lt;br/&gt;* T without any other technology only needs to reveal an additional&lt;br/&gt;point when spending a single script; G needs half-aggregated&lt;br/&gt;signatures [3] to achieve the same, which complicates design (see&lt;br/&gt;[4]).&lt;br/&gt;* G is more compact when dealing with many spending paths (O(1) in the&lt;br/&gt;number of spending paths), while T spends need to be combined with&lt;br/&gt;Merkle branches to deal with large number of spends (and even then is&lt;br/&gt;still O(log n)).&lt;br/&gt;* G spending paths can be added after the output is created; T&lt;br/&gt;requires them be fixed at output creation time.&lt;br/&gt;&lt;br/&gt;My question is whether it is safe to always permit both types of&lt;br/&gt;script spending paths, or an explicit commitment to whether Graftroot&lt;br/&gt;is permitted is necessary. In theory, it seems that this shouldn&amp;#39;t be&lt;br/&gt;needed: the key owners are always capable of spending the funds&lt;br/&gt;anyway, so them choosing to delegate to others shouldn&amp;#39;t enable&lt;br/&gt;anything that isn&amp;#39;t&lt;br/&gt;possible by the key owners already.&lt;br/&gt;&lt;br/&gt;There are a few concerns, however:&lt;br/&gt;&lt;br/&gt;* Accidentally (participating in) signing a script may have more broad&lt;br/&gt;consequences. Without Graftroot, that effect is limited to a single&lt;br/&gt;transaction with specific inputs and outputs, and only as long as all&lt;br/&gt;those inputs are unspent. A similar but weaker concern exists for&lt;br/&gt;SIGHASH_NOINPUT.&lt;br/&gt;&lt;br/&gt;* In a multisignature setting (where the top level key is an aggregate&lt;br/&gt;of multiple participants), the above translates to the ability for a&lt;br/&gt;(threshold satsisfying) subset of participants being able to (possibly&lt;br/&gt;permanently) remove others from the set of signers (rather than for a&lt;br/&gt;single output).&lt;br/&gt;&lt;br/&gt;* In a situation where private keys are stored in an HSM, without&lt;br/&gt;Graftroot an attacker needs access to the device and convince it to&lt;br/&gt;sign for every output he wants to steal (assuming the HSM prevents&lt;br/&gt;leaking private keys). With Graftroot, the HSM may be tricked into&lt;br/&gt;signing a script that does not include itself. Arguably, in a&lt;br/&gt;Graftroot setting such an HSM would need a degree of protection&lt;br/&gt;similar to not leaking private keys applied to not signing scripts,&lt;br/&gt;but this may be less obvious.&lt;br/&gt;&lt;br/&gt;Overall, none of these are convincing points, but they do make me&lt;br/&gt;uncomfortable about the effect the Graftroot spending path may have on&lt;br/&gt;some use cases. Given that Taproot/Graftroot&amp;#39;s primary advantage is&lt;br/&gt;increasing fungibility by making all outputs look identical, it seems&lt;br/&gt;good to discuss potential reasons such outputs couldn&amp;#39;t or wouldn&amp;#39;t be&lt;br/&gt;adopted in certain applications.&lt;br/&gt;&lt;br/&gt;  [1] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-January/015614.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-January/015614.html&lt;/a&gt;&lt;br/&gt;  [2] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-February/015700.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-February/015700.html&lt;/a&gt;&lt;br/&gt;  [3] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014308.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-May/014308.html&lt;/a&gt;&lt;br/&gt;  [4] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-March/015838.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-March/015838.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:12:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsw3q2etrzg0r270g5ks4yt7937pywtxwut9vmeh55l93mdcc8r7lgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvds5rf8</id>
    
      <title type="html">📅 Original date posted:2018-05-19 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsw3q2etrzg0r270g5ks4yt7937pywtxwut9vmeh55l93mdcc8r7lgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvds5rf8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvzlxn9yq4cdausyc6k37tazm4e7qsmu7qu4ju5kh6kdjjrf8e92crdufz6&#39;&gt;nevent1q…ufz6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-05-19&lt;br/&gt;📝 Original message:On Fri, May 18, 2018, 19:57 Olaoluwa Osuntokun 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; Greg wrote:&lt;br/&gt;&amp;gt; &amp;gt; What about also making input prevouts filter based on the scriptpubkey&lt;br/&gt;&amp;gt; being&lt;br/&gt;&amp;gt; &amp;gt; _spent_?  Layering wise in the processing it&amp;#39;s a bit ugly, but if you&lt;br/&gt;&amp;gt; &amp;gt; validated the block you have the data needed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; AFAICT, this would mean that in order for a new node to catch up the filter&lt;br/&gt;&amp;gt; index (index all historical blocks), they&amp;#39;d either need to: build up a&lt;br/&gt;&amp;gt; utxo-set in memory during indexing, or would require a txindex in order to&lt;br/&gt;&amp;gt; look up the prev out&amp;#39;s script. The first option increases the memory load&lt;br/&gt;&amp;gt; during indexing, and the second requires nodes to have a transaction index&lt;br/&gt;&amp;gt; (and would also add considerable I/O load). When proceeding from tip, this&lt;br/&gt;&amp;gt; doesn&amp;#39;t add any additional load assuming that your synchronously index the&lt;br/&gt;&amp;gt; block as you validate it, otherwise the utxo set will already have been&lt;br/&gt;&amp;gt; updated (the spent scripts removed).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I was wondering about that too, but it turns out that isn&amp;#39;t necessary. At&lt;br/&gt;least in Bitcoin Core, all the data needed for such a filter is in the&lt;br/&gt;block &#43; undo files (the latter contain the scriptPubKeys of the outputs&lt;br/&gt;being spent).&lt;br/&gt;&lt;br/&gt;I have a script running to compare the filter sizes assuming the regular&lt;br/&gt;&amp;gt; filter switches to include the prev out&amp;#39;s script rather than the prev&lt;br/&gt;&amp;gt; outpoint itself. The script hasn&amp;#39;t yet finished (due to the increased I/O&lt;br/&gt;&amp;gt; load to look up the scripts when indexing), but I&amp;#39;ll report back once it&amp;#39;s&lt;br/&gt;&amp;gt; finished.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s very helpful, thank you.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180518/3077040c/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180518/3077040c/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:12:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsw4hlzf5faflrlnl8dtkx0lvk4w0grfqyzkhrx5d66hn70us9k0fszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvd3e5y6</id>
    
      <title type="html">📅 Original date posted:2018-03-26 📝 Original message:Hello, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsw4hlzf5faflrlnl8dtkx0lvk4w0grfqyzkhrx5d66hn70us9k0fszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvd3e5y6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxnv7799ud4unws5cs40f26xf8uad403e2nvrkvnr6qfn3s5r5xms0j56fc&#39;&gt;nevent1q…56fc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-03-26&lt;br/&gt;📝 Original message:Hello,&lt;br/&gt;&lt;br/&gt;Thanks for starting a discussion about this idea.&lt;br/&gt;&lt;br/&gt;A few comments inline:&lt;br/&gt;&lt;br/&gt;On Wed, Mar 14, 2018 at 1:09 AM, Karl Johan Alm 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; Hello,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am considering writing a replacement for the message signing tools&lt;br/&gt;&amp;gt; that are currently broken for all but the legacy 1xx addresses. The&lt;br/&gt;&amp;gt; approach (suggested by Pieter Wuille) is to do a script based&lt;br/&gt;&amp;gt; approach. This does not seem to require a lot of effort for&lt;br/&gt;&amp;gt; implementing in Bitcoin Core*. Below is my proposal for this system:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A new structure SignatureProof is added, which is a simple scriptSig &amp;amp;&lt;br/&gt;&amp;gt; witnessProgram container that can be serialized. This is passed out&lt;br/&gt;&amp;gt; from/into the signer/verifier.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;You need a bit more logic to deal with softforks and compatibility. The&lt;br/&gt;question is which script validation flags you verify with:&lt;br/&gt;* If you make them fixed, it means signatures can&amp;#39;t evolve with new address&lt;br/&gt;types being introduced that rely on new features.&lt;br/&gt;* If you make it just consensus flags (following mainnet), it means that&lt;br/&gt;people with old software will see future invalid signatures as always&lt;br/&gt;valid; this is probably not acceptable.&lt;br/&gt;* If you make it standardness flags, you will get future valid signatures&lt;br/&gt;that fail to verify.&lt;br/&gt;&lt;br/&gt;One solution is to include a version number in the signature, which&lt;br/&gt;explicitly corresponds to a set of validation flags. When the version&lt;br/&gt;number is something a verifier doesn&amp;#39;t know, it can be reported as&lt;br/&gt;inconclusive (it&amp;#39;s relying on features you don&amp;#39;t know about).&lt;br/&gt;&lt;br/&gt;An solution is to verify twice; once with all consensus rules you know&lt;br/&gt;about, and once with standardness rules. If they&amp;#39;re both valid, the&lt;br/&gt;signature is valid. If they&amp;#39;re both invalid, the signature is invalid. If&lt;br/&gt;they&amp;#39;re different (consensus valid but standardness invalid), you report&lt;br/&gt;the signature validation as inconclusive (it&amp;#39;s relying on features you&lt;br/&gt;don&amp;#39;t know about). This approach works as long as new features only use&lt;br/&gt;previous standardness-invalid scripts, but perhaps a version number is&lt;br/&gt;still needed to indicate the standardness flags.&lt;br/&gt;&lt;br/&gt;RPC commands:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; sign &amp;lt;address&amp;gt; &amp;lt;message&amp;gt; [&amp;lt;prehashed&amp;gt;=false]&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Why not extend the existing signmessage/verifymessage RPC? For legacy&lt;br/&gt;addresses it can fall back to the existing signature algorithm, while using&lt;br/&gt;the script-based approach for all others.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Generates a signature proof for &amp;lt;message&amp;gt; using the same method that&lt;br/&gt;&amp;gt; would be used to spend coins sent to &amp;lt;address&amp;gt;.**&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; verify &amp;lt;address&amp;gt; &amp;lt;message&amp;gt; &amp;lt;proof&amp;gt; [&amp;lt;prehashed&amp;gt;=false]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Deserializes and executes the proof using a custom signature checker&lt;br/&gt;&amp;gt; whose sighash is derived from &amp;lt;message&amp;gt;. Returns true if the check&lt;br/&gt;&amp;gt; succeeds, and false otherwise. The scriptPubKey is derived directly&lt;br/&gt;&amp;gt; from &amp;lt;address&amp;gt;.**&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Feedback welcome.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Kalle.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;(**) If &amp;lt;prehashed&amp;gt; is true, &amp;lt;message&amp;gt; is the sighash, otherwise&lt;br/&gt;&amp;gt; sighash=sha256d(message).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s very dangerous I&amp;#39;m afraid. It could be used to trick someone into&lt;br/&gt;signing off on an actual transaction, if you get them to sign a &amp;#34;random&lt;br/&gt;looking&amp;#34; prehashed message. Even if you have a prehashed message, there is&lt;br/&gt;no problem with treating it as hex input to a second hashing step, so I&lt;br/&gt;think the prehashed option isn&amp;#39;t needed. It&amp;#39;s why the existing message&lt;br/&gt;signing functionality always forcibly prefixes &amp;#34;Bitcoin signed message:&amp;#34;,&lt;br/&gt;to avoid signing something that unintentionally corresponds to a message&lt;br/&gt;intended for another goal.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180326/8324b4f3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180326/8324b4f3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:11:15Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvqrnafzwhhkazwjdf4xctsy0gcdkq6wgna9996x0fqxcs8c6s5qgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvaxfsxn</id>
    
      <title type="html">📅 Original date posted:2018-01-09 📝 Original message:On Jan ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvqrnafzwhhkazwjdf4xctsy0gcdkq6wgna9996x0fqxcs8c6s5qgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvaxfsxn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspqyyqgj9vcycxjxq4wa0njsuzs3n6wt4wgfxag7wzu2a7ycvs66gelmfy3&#39;&gt;nevent1q…mfy3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-01-09&lt;br/&gt;📝 Original message:On Jan 9, 2018 13:41, &amp;#34;Mark Friedenbach via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;The use of the alt stack is a hack for segwit script version 0 which has&lt;br/&gt;the clean stack rule. Anticipated future improvements here are to switch to&lt;br/&gt;a witness script version, and a new segwit output version which supports&lt;br/&gt;native MAST to save an additional 40 or so witness bytes. Either approach&lt;br/&gt;would allow getting rid of the alt stack hack. They are not part of the&lt;br/&gt;proposal now because it is better to do things incrementally, and because&lt;br/&gt;we anticipate usage of MAST to better inform these less generic changes.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;If the goal is to introduce a native MAST output type later, what is gained&lt;br/&gt;by first having the tailcall semantics?&lt;br/&gt;&lt;br/&gt;As far as I can see, this proposal does not have any benefits over Johnson&lt;br/&gt;Lau&amp;#39;s MAST idea [1]:&lt;br/&gt;* It is more compact, already giving us the space savings a native MAST&lt;br/&gt;version of the tail call semantics would bring.&lt;br/&gt;* It does not need to work around limitations of push size limits or&lt;br/&gt;cleanstack rules.&lt;br/&gt;* The implementation (of code I&amp;#39;ve seen) is easier to reason about, as it&amp;#39;s&lt;br/&gt;just another case in VerifyScript (which you&amp;#39;d need for a native MAST&lt;br/&gt;output later too) without introducing jumps or loops inside EvalScript.&lt;br/&gt;* It can express the same, as even though the MBV opcode supports proving&lt;br/&gt;multiple elements simultaneously, I don&amp;#39;t see a way to use that in the tail&lt;br/&gt;call. Every scenario that consists of some logic before deciding what the&lt;br/&gt;tail call is going to be can be rewritten to have that logic inside each of&lt;br/&gt;the branches, I believe.&lt;br/&gt;* It does not interfere with static analysis (see further).&lt;br/&gt;* Tail call semantics may be easier to extend in the future to enable&lt;br/&gt;semantics that are not compactly representable in either proposal right&lt;br/&gt;now, by allowing a single top-level script may invoke multiple subscripts,&lt;br/&gt;or recursion. However, those sound even riskier and harder to analyse to&lt;br/&gt;me, and I don&amp;#39;t think there is sufficient evidence they&amp;#39;re needed.&lt;br/&gt;&lt;br/&gt;Native MAST outputs would need a new witness script version, which your&lt;br/&gt;current proposal does indeed not need. However, I believe a new script&lt;br/&gt;version will be desirable for other reasons regardless (returning invalid&lt;br/&gt;opcodes to the pool of NOPs available for softforks, for example).&lt;br/&gt;&lt;br/&gt;I will make a strong assertion: static analyzing the number of opcodes and&lt;br/&gt;sigops gets us absolutely nothing. It is cargo cult safety engineering. No&lt;br/&gt;need to perpetuate it when it is now in the way.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure I agree here. While I&amp;#39;d like to see the separate execution&lt;br/&gt;limits go away, removing them entirely and complicating future ability to&lt;br/&gt;introduce unified costing towards weight of execution cost seems the wrong&lt;br/&gt;way to go.&lt;br/&gt;&lt;br/&gt;My reasoning is this: perhaps you can currently make an argument that the&lt;br/&gt;current weight limit is sufficient in preventing overly expensive block&lt;br/&gt;validation costs, due to a minimal ratio between script sizes and their&lt;br/&gt;execution cost. But such an argument needs to rely on assumptions about&lt;br/&gt;sighash caching and low per-opcode CPU time, which may change in the&lt;br/&gt;future. In my view, tail call semantics gratuitously remove or complicate&lt;br/&gt;the ability to reason about the executed code.&lt;br/&gt;&lt;br/&gt;One suggestion to reduce the impact of this is limiting the per-script&lt;br/&gt;execution to something proportional to the script size. However, I don&amp;#39;t&lt;br/&gt;think that addresses all potential concerns about static analysis (for&lt;br/&gt;example, it doesn&amp;#39;t easily let you prove all possible execution paths to a&lt;br/&gt;participant in a smart contract).&lt;br/&gt;&lt;br/&gt;Another idea that has been suggested on this list is to mark pushes of&lt;br/&gt;potentially executable code on the stack/witness explicitly. This would&lt;br/&gt;retain all ability to analyse, while still leaving the flexibility of&lt;br/&gt;future extensions to tail call execution. If tail call semantics are&lt;br/&gt;adopted, I strongly prefer an approach like that to blindly throwing out&lt;br/&gt;all limits and analysis.&lt;br/&gt;&lt;br/&gt;  [1] &lt;a href=&#34;https://github.com/jl2012/bips/blob/mast/bip-mast.mediawiki&#34;&gt;https://github.com/jl2012/bips/blob/mast/bip-mast.mediawiki&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20180109/6c862414/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180109/6c862414/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:09:38Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8ne3hxmnqsjav7dd0was42tfn04tg28grxzdmmf60ys8d5rxmufqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvd9rfsk</id>
    
      <title type="html">📅 Original date posted:2017-10-30 📝 Original message:On Oct ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8ne3hxmnqsjav7dd0was42tfn04tg28grxzdmmf60ys8d5rxmufqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvd9rfsk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2482pejsx6v8r9qp3avnyyp4ml97n5g5dw6dpmhlvr0dq48ke9zqf0fn8d&#39;&gt;nevent1q…fn8d&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-10-30&lt;br/&gt;📝 Original message:On Oct 30, 2017 15:21, &amp;#34;shiva sitamraju via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;For example bc1qeklep85ntjz4605drds6aww9u0qr46qzrv5xswd35uhjuj8ahfcqgf6hak&lt;br/&gt;in 461e8a4aa0a0e75c06602c505bd7aa06e7116ba5cd98fd6e046e8cbeb00379d6 is 62&lt;br/&gt;bytes !&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;...&lt;br/&gt;&lt;br/&gt;While I get the error/checksum capabilities Bech32 brings, any user would&lt;br/&gt;prefer a 20 byte address with a checksum  over an address that would wrap&lt;br/&gt;several lines !!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s an unfair comparison. You&amp;#39;re pasting a P2WSH address which contains&lt;br/&gt;a 256-bit hash.&lt;br/&gt;&lt;br/&gt;A P2WPKH address (which only contains a 160-bit hash, just like P2PKH and&lt;br/&gt;P2SH) in Bech32 is only 42 characters, not 62.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20171030/00d5cdc5/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171030/00d5cdc5/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:07:14Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxpr6v44my36hxayfhqarxluhwtkyaueqtpm75pjkfxjla4a2uheszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv029zp5</id>
    
      <title type="html">📅 Original date posted:2017-09-22 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxpr6v44my36hxayfhqarxluhwtkyaueqtpm75pjkfxjla4a2uheszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv029zp5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx07hmpj9lfdmq7lddxtv2rysjdmn9fwluc7utyve8022v96d7eus4r0fym&#39;&gt;nevent1q…0fym&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-09-22&lt;br/&gt;📝 Original message:On Fri, Sep 22, 2017 at 2:54 PM, Sergio Demian Lerner 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; If the variable size increase is only a few bytes, then three&lt;br/&gt;&amp;gt; possibilities arise:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - one should allow signatures to be zero padded (to reach the maximum&lt;br/&gt;&amp;gt; size) and abandon strict DER encoding&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - one should allow spare witness stack elements (to pad the size to match&lt;br/&gt;&amp;gt; the maximum size) and remove the cleanstack rule. But this is tricky&lt;br/&gt;&amp;gt; because empty stack elements must be counted as 1 byte.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - signers must loop the generation of signatures until the signature&lt;br/&gt;&amp;gt; generated is of its maximum size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Or (my preference);&lt;br/&gt;&lt;br/&gt;- Get rid of DER encoding alltogether and switch to fixed size signatures.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20170922/5cb68030/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170922/5cb68030/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:05:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsykcg2pgmgm3dw2tfa9cpzp5ggycupp4udv323r6emxugh9cj8pzczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv8h9yyf</id>
    
      <title type="html">📅 Original date posted:2017-07-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsykcg2pgmgm3dw2tfa9cpzp5ggycupp4udv323r6emxugh9cj8pzczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv8h9yyf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswnt8hgelja5ru325kx9vuahx2wan2h3wvul5puvz6guu8allgaegqdchg6&#39;&gt;nevent1q…chg6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-07-11&lt;br/&gt;📝 Original message:On Tue, Jul 11, 2017 at 1:36 PM, Paul Sztorc &amp;lt;truthcoin at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; Pieter,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that you have misrepresented Chris&amp;#39; view by taking it out of&lt;br/&gt;&amp;gt; context. His complete quote reads &amp;#34;If drivechains are successful they should&lt;br/&gt;&amp;gt; be viewed as the way we scale -- not hard forking the protocol.&amp;#34; Chris is&lt;br/&gt;&amp;gt; comparing Drivechains/sidechains to a hard fork.&lt;br/&gt;&lt;br/&gt;I apologize here; I didn&amp;#39;t mean to misrepresent his viewpoint.&lt;br/&gt;&lt;br/&gt;&amp;gt; You went on to &amp;#34;disagree&amp;#34;, but every point of contention you introduced was&lt;br/&gt;&amp;gt; something that would apply to both drivechain-sourced capacity and&lt;br/&gt;&amp;gt; hardfork-sourced capacity. Neither improves scalability, and both allow&lt;br/&gt;&amp;gt; users only the opportunity to select a different security model. If I&lt;br/&gt;&amp;gt; understand you, the point at which a security model does not become&lt;br/&gt;&amp;gt; &amp;#34;interesting&amp;#34; to you, would be the exact same point in the drivechain and&lt;br/&gt;&amp;gt; hardfork worlds. Both, at any rate, have the same effect on &amp;#34;validation cost&lt;br/&gt;&amp;gt; to auditors&amp;#34;.&lt;br/&gt;&lt;br/&gt;If you&amp;#39;re talking about the extreme case where every full node in the&lt;br/&gt;increased capacity single chain model corresponds to a node that&lt;br/&gt;validates both chains and all transfers between them in the&lt;br/&gt;drivechains, I agree. At that point they become nearly equivalent in&lt;br/&gt;terms of ease of adoption, resource costs, and capacity.&lt;br/&gt;&lt;br/&gt;However, I don&amp;#39;t think that is a realistic expectation. When&lt;br/&gt;considering drivechains as a capacity increase, I believe most people&lt;br/&gt;think about a situation where there are many chains that give an&lt;br/&gt;increased capacity combined, but not everyone verifies all of them.&lt;br/&gt;This is what I meant with uninteresting security model, as it requires&lt;br/&gt;increased miner trust for preventing the other chains&amp;#39; coins from&lt;br/&gt;being illegally transferred to the chain you&amp;#39;re operating on.&lt;br/&gt;&lt;br/&gt;Regardless, people are free experiment and adopt such an approach. The&lt;br/&gt;nice thing about it not being a hardfork is that it does not require&lt;br/&gt;network-wide consensus to deploy. However, I don&amp;#39;t think they offer a&lt;br/&gt;security model that should be encouraged, and thus doesn&amp;#39;t have a&lt;br/&gt;place on a roadmap.&lt;br/&gt;&lt;br/&gt;&amp;gt; Since their sidechain coins cannot appreciate in value relative&lt;br/&gt;&amp;gt; to the mainchain coins, users would only opt-in if they felt that they were&lt;br/&gt;&amp;gt; sufficiently compensated for any and all risks. Hence, it is difficult to&lt;br/&gt;&amp;gt; list this item as a drawback when, to the user, it is a strict improvement&lt;br/&gt;&amp;gt; (at least, by any epistemological standard that I can think of). If you have&lt;br/&gt;&amp;gt; new objections to these claims, I&amp;#39;m sure we would all benefit from hearing&lt;br/&gt;&amp;gt; them, myself most of all.&lt;br/&gt;&lt;br/&gt;Am I right in summarizing your point here as &amp;#34;This approach cannot&lt;br/&gt;hurt, because if it were insecure, people can choose to not use it.&amp;#34;?&lt;br/&gt;I&amp;#39;m not sure I agree with that, as network effects or misinformation&lt;br/&gt;may push users beyond what is reasonable.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:04:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxdf42d7fp5rgs2cy64pptva96pg4ez0mdz5dapxw7us0j4wl7qcczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvz6gx37</id>
    
      <title type="html">📅 Original date posted:2017-07-11 📝 Original message:On Jul ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxdf42d7fp5rgs2cy64pptva96pg4ez0mdz5dapxw7us0j4wl7qcczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvz6gx37" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9zeudx6uv8tyjfl3gq9z3az99g9feaaxtwmtker7qumxgvn600wcdj88me&#39;&gt;nevent1q…88me&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-07-11&lt;br/&gt;📝 Original message:On Jul 11, 2017 09:18, &amp;#34;Chris Stewart via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;Concept ACK.&lt;br/&gt;&lt;br/&gt;If drivechains are successful they should be viewed as the way we scale&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I strongly disagree with that statement.&lt;br/&gt;&lt;br/&gt;Drivechains, and several earlier sidechains ideas, are not a scalability&lt;br/&gt;improvement, but merely enabling users to opt-in for another security model.&lt;br/&gt;&lt;br/&gt;While obviously any future with wider adoption will need different&lt;br/&gt;technologies that have different trade-offs, and anyone is free to choose&lt;br/&gt;their security model, I don&amp;#39;t think this particular one is interesting. In&lt;br/&gt;terms of validation cost to auditors, it is as bad as just a capacity&lt;br/&gt;increase on chain, while simultaneously adding the extra risk of miners&lt;br/&gt;being able to vote to steal your money.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20170711/6c7b8145/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170711/6c7b8145/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:04:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8pwhss22rsqk6nawdhuvf4xg0k9tc06pfd8u3ekv6cruzz0jhxegzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvpugujc</id>
    
      <title type="html">📅 Original date posted:2017-05-15 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8pwhss22rsqk6nawdhuvf4xg0k9tc06pfd8u3ekv6cruzz0jhxegzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvpugujc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszgck9al4qsn4lakumv3m5uj3ut52yugluag9gfmyamxqjwszwqwgw4m0kt&#39;&gt;nevent1q…m0kt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-05-15&lt;br/&gt;📝 Original message:Hello all,&lt;br/&gt;&lt;br/&gt;I would like to discuss a way of computing a UTXO set hash that is&lt;br/&gt;very efficient to update, but does not support any compact proofs of&lt;br/&gt;existence or non-existence.&lt;br/&gt;&lt;br/&gt;Much has been written on the topic of various data structures and&lt;br/&gt;derived hashes for the UTXO/TXO set before (including Alan Reiner&amp;#39;s&lt;br/&gt;trust-free lite nodes [1], Peter Todd&amp;#39;s TXO MMR commitments [2] [3],&lt;br/&gt;or Bram Cohen&amp;#39;s TXO bitfield [4]). They all provide interesting extra&lt;br/&gt;functionality or tradeoffs, but require invasive changes to the P2P&lt;br/&gt;protocol or how wallets work, or force nodes to maintain their&lt;br/&gt;database in a normative fashion. Instead, here I focus on an efficient&lt;br/&gt;hash that supports nothing but comparing two UTXO sets. However, it is&lt;br/&gt;not incompatible with any of those other approaches, so we can gain&lt;br/&gt;some of the advantages of a UTXO hash without adopting something that&lt;br/&gt;may be incompatible with future protocol enhancements.&lt;br/&gt;&lt;br/&gt;1. Incremental hashing&lt;br/&gt;&lt;br/&gt;Computing a hash of the UTXO set is easy when it does not need&lt;br/&gt;efficient updates, and when we can assume a fixed serialization with a&lt;br/&gt;normative ordering for the data in it - just serialize the whole thing&lt;br/&gt;and hash it. As different software or releases may use different&lt;br/&gt;database models for the UTXO set, a solution that is order-independent&lt;br/&gt;would seem preferable.&lt;br/&gt;&lt;br/&gt;This brings us to the problem of computing a hash of unordered data.&lt;br/&gt;Several approaches that accomplish this through incremental hashing&lt;br/&gt;were suggested in [5], including XHASH, AdHash, and MuHash. XHASH&lt;br/&gt;consists of first hashing all the set elements independently, and&lt;br/&gt;XORing all those hashes together. This is insecure, as Gaussian&lt;br/&gt;elimination can easily find a subset of random hashes that XOR to a&lt;br/&gt;given value. AdHash/MuHash are similar, except addition/multiplication&lt;br/&gt;modulo a large prime are used instead of XOR. Wagner [6] showed that&lt;br/&gt;attacking XHASH or AdHash is an instance of a generalized birthday&lt;br/&gt;problem (called the k-sum problem in his paper, with unrestricted k),&lt;br/&gt;and gives a O(2^(2*sqrt(n)-1)) algorithm to attack it (for n-bit&lt;br/&gt;hashes). As a result, AdHash with 256-bit hashes only has 31 bits of&lt;br/&gt;security.&lt;br/&gt;&lt;br/&gt;Thankfully, [6] also shows that the k-sum problem cannot be&lt;br/&gt;efficiently solved in groups in which the discrete logarithm problem&lt;br/&gt;is hard, as an efficient k-sum solver can be used to compute discrete&lt;br/&gt;logarithms. As a result, MuHash modulo a sufficiently large safe prime&lt;br/&gt;is provably secure under the DL assumption. Common guidelines on&lt;br/&gt;security parameters [7] say that 3072-bit DL has about 128 bits of&lt;br/&gt;security. A final 256-bit hash can be applied to the 3072-bit result&lt;br/&gt;without loss of security to reduce the final size.&lt;br/&gt;&lt;br/&gt;An alternative to multiplication modulo a prime is using an elliptic&lt;br/&gt;curve group. Due to the ECDLP assumption, which the security of&lt;br/&gt;Bitcoin signatures already relies on, this also results in security&lt;br/&gt;against k-sum solving. This approach is used in the Elliptic Curve&lt;br/&gt;Multiset Hash (ECMH) in [8]. For this to work, we must &amp;#34;hash onto a&lt;br/&gt;curve point&amp;#34; in a way that results in points without known discrete&lt;br/&gt;logarithm. The paper suggests using (controversial) binary elliptic&lt;br/&gt;curves to make that operation efficient. If we only consider&lt;br/&gt;secp256k1, one approach is just reading potential X coordinates from a&lt;br/&gt;PRNG until one is found that has a corresponding Y coordinate&lt;br/&gt;according to the curve equation. On average, 2 iterations are needed.&lt;br/&gt;A constant time algorithm to hash onto the curve exists as well [9],&lt;br/&gt;but it is only slightly faster and is much more complicated to&lt;br/&gt;implement.&lt;br/&gt;&lt;br/&gt;AdHash-like constructions with a sufficiently large intermediate hash&lt;br/&gt;can be made secure against Wagner&amp;#39;s algorithm, as suggested in [10].&lt;br/&gt;4160-bit hashes would be needed for 128 bits of security. When&lt;br/&gt;repetition is allowed, [8] gives a stronger attack against AdHash,&lt;br/&gt;suggesting that as much as 400000 bits are needed. While repetition is&lt;br/&gt;not directly an issue for our use case, it would be nice if&lt;br/&gt;verification software would not be required to check for duplicated&lt;br/&gt;entries.&lt;br/&gt;&lt;br/&gt;2. Efficient addition and deletion&lt;br/&gt;&lt;br/&gt;Interestingly, both ECMH and MuHash not only support adding set&lt;br/&gt;elements in any order but also deleting in any order. As a result, we&lt;br/&gt;can simply maintain a running sum for the UTXO set as a whole, and&lt;br/&gt;add/subtract when creating/spending an output in it. In the case of&lt;br/&gt;MuHash it is slightly more complicated, as computing an inverse is&lt;br/&gt;relatively expensive. This can be solved by representing the running&lt;br/&gt;value as a fraction, and multiplying created elements into the&lt;br/&gt;numerator and spent elements into the denominator. Only when the final&lt;br/&gt;hash is desired, a single modular inverse and multiplication is needed&lt;br/&gt;to combine the two.&lt;br/&gt;&lt;br/&gt;As the update operations are also associative, H(a)&#43;H(b)&#43;H(c)&#43;H(d) can&lt;br/&gt;in fact be computed as (H(a)&#43;H(b)) &#43; (H(c)&#43;H(d)). This implies that&lt;br/&gt;all of this is perfectly parallellizable: each thread can process an&lt;br/&gt;arbitrary subset of the update operations, allowing them to be&lt;br/&gt;efficiently combined later.&lt;br/&gt;&lt;br/&gt;3. Comparison of approaches&lt;br/&gt;&lt;br/&gt;Numbers below are based on preliminary benchmarks on a single thread&lt;br/&gt;of a i7-6820HQ CPU running at 3.4GHz.&lt;br/&gt;&lt;br/&gt;(1) (MuHash) Multiplying 3072-bit hashes mod 2^3072 - 1103717 (the&lt;br/&gt;largest 3072-bit safe prime).&lt;br/&gt;    * Needs a fast modular multiplication/inverse implementation.&lt;br/&gt;    * Using SHA512 &#43; ChaCha20 for generating the hashes takes 1.2us per element.&lt;br/&gt;    * Modular multiplication using GMP takes 1.5us per element (2.5us&lt;br/&gt;with a 60-line C&#43;asm implementation).&lt;br/&gt;    * 768 bytes for maintaining a running sum (384 for numerator, 384&lt;br/&gt;for denominator)&lt;br/&gt;    * Very common security assumption. Even if the DL assumption would&lt;br/&gt;be broken (but no k-sum algorithm faster than Wagner&amp;#39;s is found), this&lt;br/&gt;still maintains 110 bits of security.&lt;br/&gt;&lt;br/&gt;(2) (ECMH) Adding secp256k1 EC points&lt;br/&gt;    * Much more complicated than the previous approaches when&lt;br/&gt;implementing from scratch, but almost no extra complexity when ECDSA&lt;br/&gt;secp256k1 signature validation is already implemented.&lt;br/&gt;    * Using SHA512 &#43; libsecp256k1&amp;#39;s point decompression for generating&lt;br/&gt;the points takes 11us per element on average.&lt;br/&gt;    * Addition/subtracting of N points takes 5.25us &#43; 0.25us*N.&lt;br/&gt;    * 64 bytes for a running sum.&lt;br/&gt;    * Identical security assumption as Bitcoin&amp;#39;s signatures.&lt;br/&gt;&lt;br/&gt;Using the numbers above, we find that:&lt;br/&gt;* Computing the hash from just the UTXO set takes (1) 2m15s (2) 9m20s&lt;br/&gt;* Processing all creations and spends in an average block takes (1)&lt;br/&gt;24ms (2) 100ms&lt;br/&gt;* Processing precomputed per-transaction aggregates in an average&lt;br/&gt;block takes (1) 3ms (2) 0.5ms&lt;br/&gt;&lt;br/&gt;Note that while (2) has higher CPU usage than (1) in general, it has&lt;br/&gt;lower latency when using precomputed per-transaction aggregates. Using&lt;br/&gt;such aggregates is also more feasible as they&amp;#39;re only 64 bytes rather&lt;br/&gt;than 768. Because of simplicity, (1) has my preference.&lt;br/&gt;&lt;br/&gt;Overall, these numbers are sufficiently low (note that they can be&lt;br/&gt;parallellized) that it would be reasonable for full nodes and/or other&lt;br/&gt;software to always maintain one of them, and effectively have a&lt;br/&gt;rolling cryptographical checksum of the UTXO set at all times.&lt;br/&gt;&lt;br/&gt;4. Use cases&lt;br/&gt;&lt;br/&gt;* Replacement for Bitcoin Core&amp;#39;s gettxoutsetinfo RPC&amp;#39;s hash&lt;br/&gt;computation. This currently requires minutes of I/O and CPU, as it&lt;br/&gt;serializes and hashes the entire UTXO set. A rolling set hash would&lt;br/&gt;make this instant, making the whole RPC much more usable for sanity&lt;br/&gt;checking.&lt;br/&gt;* Assisting in implementation of fast sync methods with known good&lt;br/&gt;blocks/UTXO sets.&lt;br/&gt;* Database consistency checking: by remembering the UTXO set hash of&lt;br/&gt;the past few blocks (computed on the fly), a consistency check can be&lt;br/&gt;done that recomputes it based on the database.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;  [1] &lt;a href=&#34;https://bitcointalk.org/index.php?topic=88208.0&#34;&gt;https://bitcointalk.org/index.php?topic=88208.0&lt;/a&gt;&lt;br/&gt;  [2] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-May/012715.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-May/012715.html&lt;/a&gt;&lt;br/&gt;  [3] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-February/013591.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-February/013591.html&lt;/a&gt;&lt;br/&gt;  [4] &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-March/013928.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-March/013928.html&lt;/a&gt;&lt;br/&gt;  [5] &lt;a href=&#34;https://cseweb.ucsd.edu/~mihir/papers/inchash.pdf&#34;&gt;https://cseweb.ucsd.edu/~mihir/papers/inchash.pdf&lt;/a&gt;&lt;br/&gt;  [6] &lt;a href=&#34;https://people.eecs.berkeley.edu/~daw/papers/genbday.html&#34;&gt;https://people.eecs.berkeley.edu/~daw/papers/genbday.html&lt;/a&gt;&lt;br/&gt;  [7] &lt;a href=&#34;https://www.keylength.com/&#34;&gt;https://www.keylength.com/&lt;/a&gt;&lt;br/&gt;  [8] &lt;a href=&#34;https://arxiv.org/pdf/1601.06502.pdf&#34;&gt;https://arxiv.org/pdf/1601.06502.pdf&lt;/a&gt;&lt;br/&gt;  [9] &lt;a href=&#34;https://www.di.ens.fr/~fouque/pub/latincrypt12.pdf&#34;&gt;https://www.di.ens.fr/~fouque/pub/latincrypt12.pdf&lt;/a&gt;&lt;br/&gt;  [10] &lt;a href=&#34;http://csrc.nist.gov/groups/ST/hash/sha-3/Aug2014/documents/gligoroski_paper_sha3_2014_workshop.pdf&#34;&gt;http://csrc.nist.gov/groups/ST/hash/sha-3/Aug2014/documents/gligoroski_paper_sha3_2014_workshop.pdf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T18:01:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsx9n3wty70zpqxqufn5zdv58zfj92ehylqp9lsdfeywfheeudgpvszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvxpu6hs</id>
    
      <title type="html">📅 Original date posted:2017-05-07 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsx9n3wty70zpqxqufn5zdv58zfj92ehylqp9lsdfeywfheeudgpvszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvxpu6hs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxgm7kxzqwfy5802x2h6qryr5ehjw72da9z2w08qjhunjhpzj9e9cdqa3he&#39;&gt;nevent1q…a3he&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-05-07&lt;br/&gt;📝 Original message:On Mon, Mar 20, 2017 at 2:35 PM, Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hello everyone,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You can find the text here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/sipa/bech32/blob/master/bip-witaddr.mediawiki&#34;&gt;https://github.com/sipa/bech32/blob/master/bip-witaddr.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Responding to a few comments:&lt;br/&gt;&lt;br/&gt;By Andreas Schildbach:&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m not convinced that transmitting addresses via voice should be a&lt;br/&gt;usecase to target at&lt;br/&gt;&lt;br/&gt;I think it should be. It&amp;#39;s certainly not the most important way through&lt;br/&gt;which addresses are communicated or verified, but I am trying to address&lt;br/&gt;all places where humans interact with addresses. I have certainly tried to&lt;br/&gt;verify addresses a few times through voice, when dealing with significant&lt;br/&gt;amounts.&lt;br/&gt;&lt;br/&gt;Regarding your QR code comments: it is certainly possible to find a more&lt;br/&gt;compact QR code representation. That is not the goal of the BIP though -&lt;br/&gt;it&amp;#39;s trying to introduce one commonly recognizable format that has good&lt;br/&gt;properties for all use cases, even if that means being suboptimal in&lt;br/&gt;certain aspects for some.&lt;br/&gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t understand your comment about non-english speaking users.&lt;br/&gt;Obviously they cannot voice-communicate at all with only-english-speaking&lt;br/&gt;users, so there is no need to communicate voice-communicate addresses&lt;br/&gt;between them.&lt;br/&gt;&lt;br/&gt;I assume that Peter Todd is talking about cases where English speakers are&lt;br/&gt;interacting with non-native English speakers, who may know how to pronounce&lt;br/&gt;numbers or alphabetical characters, but not all special characters.&lt;br/&gt;&lt;br/&gt;&amp;gt; Speaking of URLs, actually Base 32 (as well as Base 43) makes QR codes&lt;br/&gt;*bigger* because due to the characters used for URL parameters (?&amp;amp;=) those&lt;br/&gt;QR codes are locked to binary mode.&lt;br/&gt;&lt;br/&gt;I believe that is incorrect. Data in QR codes can switch from one mode to&lt;br/&gt;another on a per-character basis (with an overhead of a few bits). I don&amp;#39;t&lt;br/&gt;know to what extent common QR encoders make intelligent decisions about&lt;br/&gt;this, but it does not seem very hard.&lt;br/&gt;&lt;br/&gt;By Lucas Ontivero:&lt;br/&gt;&lt;br/&gt;&amp;gt; Here I think it could worth to mention that 58 requires mathematical&lt;br/&gt;operations over big numbers. This is not very fast and most of the&lt;br/&gt;programming languages don&amp;#39;t provide support for big numbers OOB.&lt;br/&gt;&lt;br/&gt;It&amp;#39;s not that hard to emulate the bignum logic in languages that don&amp;#39;t&lt;br/&gt;support it. See for example this code in Bitcoin Core:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/v0.14.1/src/base58.cpp#L37L53&#34;&gt;https://github.com/bitcoin/bitcoin/blob/v0.14.1/src/base58.cpp#L37L53&lt;/a&gt;. So I&lt;br/&gt;think it&amp;#39;s not necessary to go into all the possible ways Base58 can be&lt;br/&gt;implemented in the document, and the existing language (&amp;#34;Base58 decoding is&lt;br/&gt;complicated and relatively slow.&amp;#34;) is sufficient.&lt;br/&gt;&lt;br/&gt;&amp;gt; I understand that if a new generic encoding format is introduced that&lt;br/&gt;could lead to some confusions but what if in the future there is a new type&lt;br/&gt;of address that can also be encoded with bech32? Don&amp;#39;t we need a address&lt;br/&gt;type anyway?&lt;br/&gt;&lt;br/&gt;I believe that it&amp;#39;s likely that new types of outputs that may be introduced&lt;br/&gt;in the future will most likely not be a simple constant byte sequence that&lt;br/&gt;can be computed directly from addresses, but need some processing by the&lt;br/&gt;sender. This is the case for example for Reusable/Stealth addresses and&lt;br/&gt;Confidential Transactions addresses. Such outputs, if ever introduced on a&lt;br/&gt;wide scale, should ideally not be representable as existing address types,&lt;br/&gt;as that could not only lead to confusion, but also to lost privacy and&lt;br/&gt;funds.&lt;br/&gt;&lt;br/&gt;And, If there ever is a need for introducing a &amp;#34;constant scriptPubKey&amp;#34; type&lt;br/&gt;address again, the encoding proposed in this document can be reused.&lt;br/&gt;Currently, the header value can be at most 17. In the future new proposals&lt;br/&gt;could give a meaning to values 18 through 31.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;In general:&lt;br/&gt;&lt;br/&gt;In the past weeks people have contributed two new reference implementations&lt;br/&gt;(Haskell and Rust), and a C&#43;&#43; and Go one are underway (see&lt;br/&gt;&lt;a href=&#34;https://github.com/sipa/bech32&#34;&gt;https://github.com/sipa/bech32&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;I&amp;#39;d like to move forward and request a BIP number assignment for this&lt;br/&gt;proposal.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20170507/926b2de1/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170507/926b2de1/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:00:53Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsq6wccnegwvjku47pgxwe826kdprlhwvn5ztjrxgpu5w947mljtqgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvx7ud7u</id>
    
      <title type="html">📅 Original date posted:2017-03-28 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsq6wccnegwvjku47pgxwe826kdprlhwvn5ztjrxgpu5w947mljtqgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvx7ud7u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspk0tcsec0xu8m2rrztnf7et8hnqjskexyqgsh9yfs30fmjtclvwqc3wne8&#39;&gt;nevent1q…wne8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-03-28&lt;br/&gt;📝 Original message:On Tue, Mar 28, 2017 at 12:56 PM, Paul Iverson via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; So I think Core can&amp;#39;t decide on hard forks like this. It must be left up to&lt;br/&gt;&amp;gt; the users. I think only choice is for Core to add a run-time option to allow&lt;br/&gt;&amp;gt; node operators to increase block size limit, so that this very controversial&lt;br/&gt;&amp;gt; decision is not coming from Core. It must come from the community.&lt;br/&gt;&lt;br/&gt;Bitcoin Core&amp;#39;s (nor any other software&amp;#39;s) maintainers can already not&lt;br/&gt;decide on a hard fork, and I keep being confused by the focus on Core&lt;br/&gt;in this topic. Even if a hard forking change (or lack thereof) was&lt;br/&gt;included into a new release, it is still up to the community to choose&lt;br/&gt;to run the new software. Bitcoin Core has very intentionally no&lt;br/&gt;auto-update feature, as the choice for what network rules to implement&lt;br/&gt;must come from node operators, not developers. Ask yourself this: if a&lt;br/&gt;new Bitcoin Core release would include a new rule that blacklists&lt;br/&gt;&amp;lt;random famous person&amp;gt;&amp;#39;s coins. What do you think would happen? I hope&lt;br/&gt;that people would refuse to update, and choose to run different full&lt;br/&gt;node software.&lt;br/&gt;&lt;br/&gt;Core is not special. It is one of many pieces of software that&lt;br/&gt;implement today&amp;#39;s Bitcoin consensus rules. If a hardfork is to take&lt;br/&gt;place in a way that does not result in two currencies, it must be&lt;br/&gt;clear that the entire ecosystem will adopt it. Bitcoin Core will not&lt;br/&gt;merge any consensus changes that do not clearly satisfy that&lt;br/&gt;criterion.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:58:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstm7vpavxy9epzxzrjc6drvgputk7c4d5s04ulm500nqjfu83rvzszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvdjtfjk</id>
    
      <title type="html">📅 Original date posted:2017-03-23 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstm7vpavxy9epzxzrjc6drvgputk7c4d5s04ulm500nqjfu83rvzszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvdjtfjk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr2ssp54dq73ysmjdfwvjezt9mjvc2jw79lzjgkjqfs06sssdjfmcqspsuj&#39;&gt;nevent1q…psuj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-03-23&lt;br/&gt;📝 Original message:On Thu, Mar 23, 2017 at 3:37 PM, Juan Garavaglia via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; Long story short, when nodes 0.13&#43; receive blocks from 0.13&#43; nodes all is&lt;br/&gt;&amp;gt; ok, and those blocks propagate to older nodes with no issues. But when a&lt;br/&gt;&amp;gt; block tries to be propagated from bitcoind 0.12.&#43; to newer ones those blocks&lt;br/&gt;&amp;gt; are NOT being propagated to the peers with newer versions while these newer&lt;br/&gt;&amp;gt; blocks are being propagated to peers with older versions with no issues.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My conclusion is that we have a backward compatibility issue between 0.13.X&#43;&lt;br/&gt;&amp;gt; and older versions.&lt;br/&gt;&lt;br/&gt;Hello Juan,&lt;br/&gt;&lt;br/&gt;this is expected behaviour. Nodes with segwit active only download&lt;br/&gt;blocks from other segwit peers, as old peers cannot provide the&lt;br/&gt;witness data they need to verify the blocks.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:57:43Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv54f72whrul2exdmesqu63z0hpstgqnlesqua82p9uuum6vuhdzszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvawxh46</id>
    
      <title type="html">📅 Original date posted:2017-03-20 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv54f72whrul2exdmesqu63z0hpstgqnlesqua82p9uuum6vuhdzszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvawxh46" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvfsc464l0pw7yfl4m8ju888fewdl7hcd8krqg8sl4jfh9ut5f0kq0je7pd&#39;&gt;nevent1q…e7pd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-03-20&lt;br/&gt;📝 Original message:Hello everyone,&lt;br/&gt;&lt;br/&gt;I&amp;#39;d like to propose a new BIP for native segwit addresses to replace&lt;br/&gt;BIP 142. These addresses are not required for segwit, but are more&lt;br/&gt;efficient, flexible, and nicer to use.&lt;br/&gt;&lt;br/&gt;The format is base 32 and uses a simple checksum algorithm with strong&lt;br/&gt;error detection properties. Reference code in several languages as&lt;br/&gt;well as a website demonstrating it are included.&lt;br/&gt;&lt;br/&gt;You can find the text here:&lt;br/&gt;&lt;a href=&#34;https://github.com/sipa/bech32/blob/master/bip-witaddr.mediawiki&#34;&gt;https://github.com/sipa/bech32/blob/master/bip-witaddr.mediawiki&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:57:37Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvsddfdlw32rs4ak7lu9n4eanhlxyc7juufgudwc7mlcnrh9er7lczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvslxs6n</id>
    
      <title type="html">📅 Original date posted:2017-02-26 📝 Original message:On Feb ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvsddfdlw32rs4ak7lu9n4eanhlxyc7juufgudwc7mlcnrh9er7lczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvslxs6n" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswhrgkkrx66zmu6lw6n9cfwf7caxrxxjx7rgp5xprrhvrdwut8a3cw7z9dh&#39;&gt;nevent1q…z9dh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-02-26&lt;br/&gt;📝 Original message:On Feb 25, 2017 22:26, &amp;#34;Steve Davis&amp;#34; &amp;lt;steven.charles.davis at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;Hi Pieter,&lt;br/&gt;&lt;br/&gt;&amp;gt; On Feb 25, 2017, at 4:14 PM, Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Any alternative to move us away from RIPEMD160 would require:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;lt;snipped&amp;gt;&lt;br/&gt;&lt;br/&gt;“Any alternative”? What about reverting to:&lt;br/&gt;&lt;br/&gt;[&amp;lt;public_key&amp;gt;, OP_CHECKSIG]&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;snip&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Could that be the alternative?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Ok, fair enough, that is an alternative that avoids the 160-bit hash&lt;br/&gt;function, but not where it matters. The 80-bit collision attack only&lt;br/&gt;applies to jointly constructed addresses like multisig P2SH, not single-key&lt;br/&gt;ones. As far as I know for those we only rely preimage security, and&lt;br/&gt;RIPEMD160 has 160 bit security there, which is even more than our ECDSA&lt;br/&gt;signatures offer.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20170225/6f7d3907/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170225/6f7d3907/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:56:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsy45c97m98rnhydtqrwaxtjwsufkg6um50d0pg32303qpcwmfg6fgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvszwzdw</id>
    
      <title type="html">📅 Original date posted:2017-02-25 📝 Original message:On Feb ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsy45c97m98rnhydtqrwaxtjwsufkg6um50d0pg32303qpcwmfg6fgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvszwzdw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw9mmmntdy2ucxkxz5mnklsxm88pd4re4nkyzsu230cv5ywyq0zpg2qnwu6&#39;&gt;nevent1q…nwu6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-02-25&lt;br/&gt;📝 Original message:On Feb 25, 2017 14:09, &amp;#34;Steve Davis via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;Hi Peter,&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I really, really don’t want to get into it but segwit has many aspects that&lt;br/&gt;are less appealing, not least of which being the amount of time it would&lt;br/&gt;take to reach the critical mass.&lt;br/&gt;&lt;br/&gt;Surely there&amp;#39;s a number of alternative approaches which could be explored,&lt;br/&gt;even if only to make a fair assessment of a best response?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Any alternative to move us away from RIPEMD160 would require:&lt;br/&gt;* A drafting of a softfork proposal, implementation, testing, review.&lt;br/&gt;* A new address format&lt;br/&gt;* Miners accepting the new consensus rules&lt;br/&gt;* Wallets adopting the new address format, both on the sender side and&lt;br/&gt;receiver side (which requires new signatures).&lt;br/&gt;&lt;br/&gt;I.e., exactly the same as segwit, for which most of these are already done.&lt;br/&gt;And it would still only apply to wallets adopting it.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20170225/e3856947/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170225/e3856947/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:56:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswptxgaqc7sflrunp3m604a2d6sxnwarm6h7vk5e3s44mp234xn4gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvsqzkcd</id>
    
      <title type="html">📅 Original date posted:2016-12-10 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswptxgaqc7sflrunp3m604a2d6sxnwarm6h7vk5e3s44mp234xn4gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvsqzkcd" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfqw9zmr6vsynw5ks4t2zdn557q40ludtrqpgyvpus4atvqx7wyaqc5d3a8&#39;&gt;nevent1q…d3a8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-12-10&lt;br/&gt;📝 Original message:On Sat, Dec 10, 2016 at 4:23 AM, Daniele Pinna 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; We have models for estimating the probability that a block is orphaned&lt;br/&gt;&amp;gt; given average network bandwidth and block size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The question is, do we have objective measures of these two quantities?&lt;br/&gt;&amp;gt; Couldn&amp;#39;t we target an orphan_rate &amp;lt; max_rate?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Models can predict orphan rate given block size and network/hashrate&lt;br/&gt;topology, but you can&amp;#39;t control the topology (and things like FIBRE hide&lt;br/&gt;the effect of block size on this as well). The result is that if you&amp;#39;re&lt;br/&gt;purely optimizing for minimal orphan rate, you can end up with a single&lt;br/&gt;(conglomerate of) pools producing all the blocks. Such a setup has no&lt;br/&gt;propagation delay at all, and as a result can always achieve 0 orphans.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20161210/edca6d6b/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20161210/edca6d6b/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:54:54Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2hlyjn2gekf47y4mzknahpew6ptnkvghsdx039gh999kdhstr4rgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv97hstd</id>
    
      <title type="html">📅 Original date posted:2016-11-16 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2hlyjn2gekf47y4mzknahpew6ptnkvghsdx039gh999kdhstr4rgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv97hstd" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0nr5ah4kza74sna90fzfq8jf3twazt6dlrczgt4q7w7d8urskkdc87gszf&#39;&gt;nevent1q…gszf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-11-16&lt;br/&gt;📝 Original message:On Wed, Nov 16, 2016 at 5:58 AM, Eric Voskuil 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; This sort of statement represents one consequence of the aforementioned&lt;br/&gt;&amp;gt; bad precedent.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Are checkpoints good now?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;So far in this discussion, and in a thread that has forked off, I think 3&lt;br/&gt;cases of implementation aspects have been mentioned that under certain&lt;br/&gt;circumstances result in the validity of chains changing:&lt;br/&gt;* Buried softforks (by simplifying the activation rules for certain rules)&lt;br/&gt;* Not verifying BIP30 after BIP34 is active (since only under a SHA256^2&lt;br/&gt;collision a duplicate txid can occur)&lt;br/&gt;* The existence (and/or removal) of checkpoints (in one form or another).&lt;br/&gt;&lt;br/&gt;None of these will influence the accepted main chain, however. If they ever&lt;br/&gt;do, Bitcoin has far worse things to worry about (years-deep reorgs, or&lt;br/&gt;SHA256 collisions).&lt;br/&gt;&lt;br/&gt;If you were trying to point out that buried softforks are similar to&lt;br/&gt;checkpoints in this regard, I agree. So are checkpoints good now? I believe&lt;br/&gt;we should get rid of checkpoints because they seem to be misunderstood as a&lt;br/&gt;security feature rather than as an optimization. I don&amp;#39;t think buried&lt;br/&gt;softforks have that problem.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20161116/8b6f55ed/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20161116/8b6f55ed/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:54:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8d5qq5k4q0kmuwdsxqhc5eh3wvlk2v0jf8dmttnw3v6ydpxejgxczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvnc6083</id>
    
      <title type="html">📅 Original date posted:2016-10-16 📝 Original message:Hello ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8d5qq5k4q0kmuwdsxqhc5eh3wvlk2v0jf8dmttnw3v6ydpxejgxczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvnc6083" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqzwz3je8qqpk538dv5cswznrud33ntzmehle5vg8ewq7rr0xuwcgj4wfe0&#39;&gt;nevent1q…wfe0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-10-16&lt;br/&gt;📝 Original message:Hello all,&lt;br/&gt;&lt;br/&gt;We&amp;#39;re getting ready for Bitcoin Core&amp;#39;s 0.13.1 release - the first one&lt;br/&gt;to include segregated witness (BIP 141, 143, 144, 145) for Bitcoin&lt;br/&gt;mainnet, after being extensively tested on testnet and in other&lt;br/&gt;software. Following the BIP9 recommendation [1] to set the versionbits&lt;br/&gt;start time a month in the future and discussion in the last IRC&lt;br/&gt;meeting [2], I propose we set BIP 141&amp;#39;s start time to November 15,&lt;br/&gt;2016, 0:00 UTC (unix time 1479168000).&lt;br/&gt;&lt;br/&gt;Note that this is just a lower bound on the time when the versionbits&lt;br/&gt;signalling can begin. Activation on the network requires:&lt;br/&gt;(1) This date to pass&lt;br/&gt;(2) A full retarget window of 2016 blocks with 95% signalling the&lt;br/&gt;version bit (bit 1 for BIP141)&lt;br/&gt;(3) A fallow period consisting of another 2016 blocks.&lt;br/&gt;&lt;br/&gt;  [1] &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki&lt;/a&gt;&lt;br/&gt;  [2] &lt;a href=&#34;http://www.erisian.com.au/meetbot/bitcoin-core-dev/2016/bitcoin-core-dev.2016-10-13-19.04.log.html&#34;&gt;http://www.erisian.com.au/meetbot/bitcoin-core-dev/2016/bitcoin-core-dev.2016-10-13-19.04.log.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:54:00Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxja9lp6mefrm736xcmy9nhlx4pjvcqgshpcmyg5qrxctq8rw07hczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw0j59j</id>
    
      <title type="html">📅 Original date posted:2016-08-16 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxja9lp6mefrm736xcmy9nhlx4pjvcqgshpcmyg5qrxctq8rw07hczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw0j59j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs03vcfx3yqklz8x49sp4v2kqaemqwa6clrm6vxextakng2rrkd5nstumyna&#39;&gt;nevent1q…myna&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-08-16&lt;br/&gt;📝 Original message:On Aug 17, 2016 00:36, &amp;#34;Russell O&amp;#39;Connor&amp;#34; &amp;lt;roconnor at blockstream.io&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Can I already do something similar with replace by fee, or are there&lt;br/&gt;limits on that?&lt;br/&gt;&lt;br/&gt;BIP125 and mempool eviction both require the replacing transaction to have&lt;br/&gt;higher fee, to compensate for the cost of relaying the replaced&lt;br/&gt;transaction(s).&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160817/3710f5b7/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160817/3710f5b7/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:52:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsz9c6yhysfthrk3xea9wqezglpltu3l8ufcc7lxjwy60z4y3t3wygzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvg0rmyy</id>
    
      <title type="html">📅 Original date posted:2016-08-16 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsz9c6yhysfthrk3xea9wqezglpltu3l8ufcc7lxjwy60z4y3t3wygzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvg0rmyy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0fu4ecc2jcxaxvz0k3r230zhhz7v52h25wk0g2989zpdpmn43ywswj9aux&#39;&gt;nevent1q…9aux&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-08-16&lt;br/&gt;📝 Original message:On Aug 17, 2016 00:23, &amp;#34;Russell O&amp;#39;Connor via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; If one&amp;#39;s goal is to mess with an transaction to prevent it from being&lt;br/&gt;mined, it is more effective to just not relay the transaction rather than&lt;br/&gt;to mess with the witness.  Given two transactions with the same txid and&lt;br/&gt;different witness data, miners and good nodes ought to mine/relay the&lt;br/&gt;version with the lower cost (smaller?) witness data.&lt;br/&gt;&lt;br/&gt;That implies that everyone will see both versions and be able to make that&lt;br/&gt;choice. Unfortunately, those two versions will be definition be in conflict&lt;br/&gt;with each other, and thus only one will end up paying a fee. We&amp;#39;re can&amp;#39;t&lt;br/&gt;relay two transactions for the price of one, or we&amp;#39;d expose the p2p network&lt;br/&gt;to a very cheap DDoS attack: just send increasingly small versions of the&lt;br/&gt;same transaction.&lt;br/&gt;&lt;br/&gt;Segwit&amp;#39;s third party mallebility protection makes it not an issue for&lt;br/&gt;dependent contracts if transactions are mauled (=apparently the verb&lt;br/&gt;related to malleability), but there are still good reasons for senders not&lt;br/&gt;to gratuitously make their transactions extensible in size or other&lt;br/&gt;resources.&lt;br/&gt;&lt;br/&gt;--&lt;br/&gt;Pieter&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/20160817/2c5284a7/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160817/2c5284a7/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:52:56Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxatmma79upjaeq9mgv9mte03a60x5uktqpc8wt6a93h4d7unkszczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw0g5qh</id>
    
      <title type="html">📅 Original date posted:2016-08-10 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxatmma79upjaeq9mgv9mte03a60x5uktqpc8wt6a93h4d7unkszczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw0g5qh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswhwgpd2swfwyspm8vvx8eupl792y5rqk7cnnzplf80j2dx8saxxgg6l794&#39;&gt;nevent1q…l794&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-08-10&lt;br/&gt;📝 Original message:On Wed, Aug 10, 2016 at 7:28 PM, Erik Aronesty via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; By sending a public seed,  there&amp;#39;s no way for someone to use the transmitted&lt;br/&gt;&amp;gt; address and trace the total amount of payments to it.&lt;br/&gt;&lt;br/&gt;Worse. By revealing a public seed, anyone who has seen it (= anyone&lt;br/&gt;who ever pays you through it) can identity all payments to _any_&lt;br/&gt;address derived from that seed.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:52:37Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsf7h0kda3ywuuzudcxyp2gw82hhu52frp3s7yjuj8wpgejxwhjpxczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv53kwuf</id>
    
      <title type="html">📅 Original date posted:2016-06-30 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsf7h0kda3ywuuzudcxyp2gw82hhu52frp3s7yjuj8wpgejxwhjpxczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv53kwuf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg3uht5c5hy3m63h8swwzd24wgspsjdcmsq0zl3qacjs642wegpmsua4r38&#39;&gt;nevent1q…4r38&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-06-30&lt;br/&gt;📝 Original message:On Thu, Jun 30, 2016 at 11:57 AM, Eric Voskuil via bitcoin-dev&lt;br/&gt;&amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; The proliferation of node identity is my primary concern - this relates to privacy and the security of the network.&lt;br/&gt;&lt;br/&gt;I think this is a reasonable concern.&lt;br/&gt;&lt;br/&gt;However, node identity is already being used widely, and in a very&lt;br/&gt;inadvisable way:&lt;br/&gt;* Since forever there have been lists of &amp;#39;good nodes&amp;#39; to pass in&lt;br/&gt;addnode= configuration options.&lt;br/&gt;* Various people run multiple nodes in different geographic locations,&lt;br/&gt;peering with each other.&lt;br/&gt;* Various pieces of infrastructure exist that relies on connecting to&lt;br/&gt;well-behaving nodes (miner relay networks, large players peering&lt;br/&gt;directly with each other, ...)&lt;br/&gt;* Several lightweight clients support configuring a trusted host to connect to.&lt;br/&gt;&lt;br/&gt;Perhaps you deplore that fact, but I believe it is inevitable that&lt;br/&gt;different pieces of the network will make different choices here. You&lt;br/&gt;can&amp;#39;tg prevent people from create connections along preexisting trust&lt;br/&gt;lines. That does not mean that the network as a whole relies on first&lt;br/&gt;establishing trust everywhere.&lt;br/&gt;&lt;br/&gt;And I do think there are advantages.&lt;br/&gt;&lt;br/&gt;BIP 151 on its own gives you opportunistic encryption. You&amp;#39;re very&lt;br/&gt;right to point out that this does not give you protection from active&lt;br/&gt;attackers, and that active attacking is relatively easy through sybil&lt;br/&gt;attacks. I still prefer my attacker to actually do that over just&lt;br/&gt;listening in on my connection. And yes, we should also work on&lt;br/&gt;improving the privacy nodes and wallets have orthogonal to encryption,&lt;br/&gt;but nothing will make everything perfectly private.&lt;br/&gt;&lt;br/&gt;BIP 151 plus a simple optional pre-shared-secret authentication&lt;br/&gt;extension can improve upon pure IP-based authentication, as well as&lt;br/&gt;simplify things like SSL tunnels, and onion addresses purely used as&lt;br/&gt;identity. This will still require explicit configuration, but not more&lt;br/&gt;than now.&lt;br/&gt;&lt;br/&gt;BIP 151 plus a non-leaking public key authentication scheme (where&lt;br/&gt;peers can query &amp;#34;are you the peer with pubkey X?&amp;#34; but don&amp;#39;t learn&lt;br/&gt;anything if the answer is no) with keys specific to the IP addresses&lt;br/&gt;can give a TOFU-like security. Nodes already remember IP addresses&lt;br/&gt;they&amp;#39;ve succesfully interacted with in the past, and ban IP addresses&lt;br/&gt;that misbehave. Being able to tell whether a node you connect to is&lt;br/&gt;the same as one you&amp;#39;ve connected to before is a natural extension of&lt;br/&gt;this, and does not require establishing any real-world identity beyond&lt;br/&gt;what we&amp;#39;re already implicitly relying on.&lt;br/&gt;&lt;br/&gt;Perhaps these use cases and their security assumptions should be&lt;br/&gt;spelled out more clearly in the BIP. If there is a misunderstanding,&lt;br/&gt;it should be clearly stated that BIP 151 is only a building block for&lt;br/&gt;further improvements&lt;br/&gt;&lt;br/&gt;&amp;gt; Secondarily I am concerned about users operating under a false assumption about the strength of privacy.&lt;br/&gt;&lt;br/&gt;This is a widespread problem, but it exists far outside the scope of&lt;br/&gt;this proposal. The privacy properties of Bitcoin are often&lt;br/&gt;misrepresented and even used as advertizements. The solution is&lt;br/&gt;education, not avoiding improvements because they may be&lt;br/&gt;misunderstood.&lt;br/&gt;&lt;br/&gt;&amp;gt; The complexity of the proposed construction is comparable to that of Bitcoin itself.&lt;br/&gt;&lt;br/&gt;I really think this is an exaggeration. It&amp;#39;s a diffie-hellman&lt;br/&gt;handshake and a stream cipher (both very common constructions), that&lt;br/&gt;apply to individual connections. There are no consensus risks nor a&lt;br/&gt;requirement for coordinated change through the network. The&lt;br/&gt;cryptographic code can be directly reused from a well-known project&lt;br/&gt;(OpenSSH), and is very small in size.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:51:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxvqt3fqz9lanjz4wnjpj0csvthr98xqdn9zjhnjnkvc5f4whsq2czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvu94lwq</id>
    
      <title type="html">📅 Original date posted:2016-06-29 📝 Original message:On Jun ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxvqt3fqz9lanjz4wnjpj0csvthr98xqdn9zjhnjnkvc5f4whsq2czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvu94lwq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs03kgg8pann394hhsnpfp0m056gd00xx6rvf8gltl3tf925f3mawse4v7wm&#39;&gt;nevent1q…v7wm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-06-29&lt;br/&gt;📝 Original message:On Jun 29, 2016 07:05, &amp;#34;Ethan Heilman via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;It&amp;#39;s also not clear to me why the HMAC, vs just&lt;br/&gt;SHA256(key|cipher-type|mesg).  But that&amp;#39;s probably just my crypto&lt;br/&gt;ignorance...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; SHA256(key|cipher-type|mesg) is an extremely insecure MAC because of&lt;br/&gt;&amp;gt; the length extension property of SHA256.&lt;br/&gt;&lt;br/&gt;This property does technically not apply here, as the output of the hash is&lt;br/&gt;kept secret, and the possible messages are constants (which are presumably&lt;br/&gt;chosen in such a way that one is never an extension of another).&lt;br/&gt;&lt;br/&gt;However, this is a good example of why you can&amp;#39;t generically use a hash&lt;br/&gt;function in places where you want a MAC (aka &amp;#34;a hash with a shared&lt;br/&gt;secret&amp;#34;). Furthermore, if you already have a hash function anyway, HMAC is&lt;br/&gt;very easy construct on top of it.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160629/72f9c103/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160629/72f9c103/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:51:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9c2z5a9kxm3rkd7ssm287z8fdsrexkgf695kgk5u39t8jtka3zvszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvqka5gn</id>
    
      <title type="html">📅 Original date posted:2016-06-23 📝 Original message:On Jun ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9c2z5a9kxm3rkd7ssm287z8fdsrexkgf695kgk5u39t8jtka3zvszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvqka5gn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdzjh3f2m7wccclnke2p7ct9s9vt6t7zzgaqfwk50l0nz43zadg7cyx8h6g&#39;&gt;nevent1q…8h6g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-06-23&lt;br/&gt;📝 Original message:On Jun 23, 2016 14:10, &amp;#34;Peter Todd&amp;#34; &amp;lt;pete at petertodd.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Right, so you accept that we&amp;#39;ll exert some degree of editorial control;&lt;br/&gt;the&lt;br/&gt;&amp;gt; question now is what editorial policies should we exert?&lt;br/&gt;&lt;br/&gt;No, I do not. I am saying that some degree of editorial control will&lt;br/&gt;inevitably exist, simply because there is some human making the choice of&lt;br/&gt;assigning a BIP number and merging. My opinion is that we should try to&lt;br/&gt;restrict that editorial control to only be subject to objective process,&lt;br/&gt;and not be dependent on personal opinions.&lt;br/&gt;&lt;br/&gt;&amp;gt; My argument is that rejecting BIP75 is something we should do on&lt;br/&gt;&amp;gt; ethical/strategic grounds. You may disagree with that, but please don&amp;#39;t&lt;br/&gt;troll&lt;br/&gt;&amp;gt; and call that &amp;#34;advocating censorship&amp;#34;&lt;br/&gt;&lt;br/&gt;I think that you are free to express dislike of BIP75. Suggesting to remove&lt;br/&gt;it for that reason is utterly ridiculous to me, whatever you want to call&lt;br/&gt;it.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160623/ba7a229f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160623/ba7a229f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:51:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqdfxwgzu458lj2p0q24sjfrax8kd2txfcl67ad3ksg8cussftcaczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvj5r5mn</id>
    
      <title type="html">📅 Original date posted:2016-06-23 📝 Original message:On Jun ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqdfxwgzu458lj2p0q24sjfrax8kd2txfcl67ad3ksg8cussftcaczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvj5r5mn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd6680f5ajlg2mpl6s68c6wqn34uenu0ur4yklmkhwrdjy6s7dxhsx7x8ln&#39;&gt;nevent1q…x8ln&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-06-23&lt;br/&gt;📝 Original message:On Jun 23, 2016 12:56, &amp;#34;Peter Todd via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; In any case, I&amp;#39;d strongly argue that we remove BIP75 from the bips&lt;br/&gt;repository,&lt;br/&gt;&amp;gt; and boycott wallets that implement it. It&amp;#39;s bad strategy for Bitcoin&lt;br/&gt;developers&lt;br/&gt;&amp;gt; to willingly participate in AML/KYC, just the same way as it&amp;#39;s bad for&lt;br/&gt;Tor to&lt;br/&gt;&amp;gt; add wiretapping functionality, and W3C to support DRM tech. The minor&lt;br/&gt;tactical&lt;br/&gt;&amp;gt; wins you&amp;#39;ll get our of this aren&amp;#39;t worth it.&lt;br/&gt;&lt;br/&gt;I hope you&amp;#39;re not seriously suggesting to censor a BIP because you feel it&lt;br/&gt;is a bad idea.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160623/b6c34061/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160623/b6c34061/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:51:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8r5ya2wlx8ylsgvvlsrsnph4gtlhrd0635l207xrcv256me7qxxgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv46rnw4</id>
    
      <title type="html">📅 Original date posted:2016-05-09 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8r5ya2wlx8ylsgvvlsrsnph4gtlhrd0635l207xrcv256me7qxxgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv46rnw4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8heegfnggg7lay7puhu093jculspvypev9658645cxpw8f3re4yqdddskn&#39;&gt;nevent1q…dskn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-05-09&lt;br/&gt;📝 Original message:On 05/03/2016 12:13 AM, lf-lists at mattcorallo.com (Matt Corallo) wrote:&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;&lt;br/&gt;Hi Matt,&lt;br/&gt;&lt;br/&gt;thank you for working on this!&lt;br/&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;&lt;br/&gt;This is a not, but I think it&amp;#39;s a bit strange to have two separate&lt;br/&gt;variable length integers in the same specification. I understand is one&lt;br/&gt;is already the default for variable-length integers currently, and there&lt;br/&gt;are reasons to use the other one for efficiency reasons in some places,&lt;br/&gt;but perhaps we should aim to get everything using the latter?&lt;br/&gt;&lt;br/&gt;&amp;gt; ====New VarInt====&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;&lt;br/&gt;Maybe it&amp;#39;s worth mentioning that it is based on ASN.1 BER&amp;#39;s compressed&lt;br/&gt;integer format (see&lt;br/&gt;&lt;a href=&#34;https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf&#34;&gt;https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf&lt;/a&gt;&lt;br/&gt;section 8.1.3.5), though with a small modification to make every integer&lt;br/&gt;have a single unique encoding.&lt;br/&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; |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;&lt;br/&gt;I tried to derive what length of short ids is actually necessary (some&lt;br/&gt;write-up is on&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/sipa/b2eb2e486156b5509ac711edd16153ed&#34;&gt;https://gist.github.com/sipa/b2eb2e486156b5509ac711edd16153ed&lt;/a&gt; but it&amp;#39;s&lt;br/&gt;incomplete).&lt;br/&gt;&lt;br/&gt;For any reasonable numbers I can come up with (in a very wide range),&lt;br/&gt;the number of bits needed is very well approximated by:&lt;br/&gt;&lt;br/&gt;  log2(#receiver_mempool_txn * #block_txn_not_in_receiver_mempool /&lt;br/&gt;acceptable_per_block_failure_rate)&lt;br/&gt;&lt;br/&gt;For example, with 20000 mempool transactions, 2500 transactions in a&lt;br/&gt;block, 95% hitrate, and a chance of 1 in 10000 blocks to fail to&lt;br/&gt;reconstruct, needed_bits = log2(20000 * 2500 * (1 - 0.95) / 0.0001) =&lt;br/&gt;34.54, or 5 byte txids would suffice.&lt;br/&gt;&lt;br/&gt;Note that 1 in 10000 failures may sound like a lot, but this is for each&lt;br/&gt;individual connection, and since every transmission uses separately&lt;br/&gt;salted identifiers, occasional failures should not affect global&lt;br/&gt;propagation. Given that transmission failures due to timeouts, network&lt;br/&gt;connectivity, ... already occur much more frequently than once every few&lt;br/&gt;gigabytes (what 10000 blocks corresponds to), that&amp;#39;s probably already&lt;br/&gt;more than enough.&lt;br/&gt;&lt;br/&gt;In short: I believe 5 or 6 byte txids should be enough, but perhaps it&lt;br/&gt;makes sense to allow the sender to choose (so he can weigh trying&lt;br/&gt;multiple nonces against increasing the short txid length).&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;An alternative would be using SipHash-1-3 (a form of SipHash with&lt;br/&gt;reduced iteration counts; the default is SipHash-2-4). SipHash was&lt;br/&gt;designed as a Message Authentication Code, where the security&lt;br/&gt;requirements are much stronger than in our case (in particular, we don&amp;#39;t&lt;br/&gt;care about observers being able to finding the key, as the key is just&lt;br/&gt;public knowledge here). One of the designers of SipHash has commented&lt;br/&gt;that SipHash-1-3 for collision resistance in hash tables may be enough:&lt;br/&gt;&lt;a href=&#34;https://github.com/rust-lang/rust/issues/29754#issuecomment-156073946&#34;&gt;https://github.com/rust-lang/rust/issues/29754#issuecomment-156073946&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Using SipHash-1-3 on modern hardware would take ~32 CPU cycles per txid.&lt;br/&gt;&lt;br/&gt;&amp;gt; ===Implementation Notes===&lt;br/&gt;&lt;br/&gt;There are a few more heuristics that MAY be used to improve performance:&lt;br/&gt;&lt;br/&gt;* Receivers should treat short txids in blocks that match multiple&lt;br/&gt;mempool transactions as non-matches, and request the transactions. This&lt;br/&gt;significantly reduces the failure to reconstruct.&lt;br/&gt;&lt;br/&gt;* When constructing a compact block to send, the sender can verify it&lt;br/&gt;against its own mempool to check for collisions, and if so, choose to&lt;br/&gt;either try another nonce, or increase the short txid length.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:50:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrs6lkyjxpq456f75hdem6me56nk9e5grqhslqp5cw3dfml6dcclqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvry5q5k</id>
    
      <title type="html">📅 Original date posted:2016-01-07 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrs6lkyjxpq456f75hdem6me56nk9e5grqhslqp5cw3dfml6dcclqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvry5q5k" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs20qrgk3d8f0cagaq6s5ks2496p69vtl23tcprvdwu3fgtd0dx3mghuksqt&#39;&gt;nevent1q…ksqt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-01-07&lt;br/&gt;📝 Original message:&amp;gt; &amp;#34;The problem case is where someone in a contract setup shows you a&lt;br/&gt;script, which you accept as being a payment to yourself. An attacker could&lt;br/&gt;use a collision attack to construct scripts with identical hashes, only one&lt;br/&gt;of which does have the property you want, and steal coins.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So you really want collision security, and I don&amp;#39;t think 80 bits is&lt;br/&gt;something we should encourage for that. Normal pubkey hashes don&amp;#39;t have&lt;br/&gt;that problem, as they can&amp;#39;t be constructed to pay to you.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ... but I&amp;#39;m unconvinced:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;But it is trivial for contract wallets to protect against collision&lt;br/&gt;attacks-- if you give me a script that is &amp;#34;gavin_pubkey CHECKSIG&lt;br/&gt;arbitrary_data OP_DROP&amp;#34; with &amp;#34;I promise I&amp;#39;m not trying to rip you off, just&lt;br/&gt;ignore that arbitrary data&amp;#34; a wallet can just refuse. Even more likely, a&lt;br/&gt;contract wallet won&amp;#39;t even recognize that as a pay-to-gavin transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suppose it could be looking for some form of &amp;#34;gavin_pubkey&lt;br/&gt;somebody_else_pubkey CHECKMULTISIG ... with the attacker using&lt;br/&gt;somebody_else_pubkey to force the collision, but, again, trivial contract&lt;br/&gt;protocol tweaks (&amp;#34;send along a proof you have the private key corresponding&lt;br/&gt;to the public key&amp;#34; or &amp;#34;everybody pre-commits pubkeys they&amp;#39;ll use at&lt;br/&gt;protocol start&amp;#34;) would protect against that.&lt;br/&gt;&lt;br/&gt;Yes, this is what I worry about. We&amp;#39;re constructing a 2-of-2 multisig&lt;br/&gt;escrow in a contract. I reveal my public key A, you do a 80-bit search for&lt;br/&gt;B and C such that H(A and B) = H(B and C). You tell me your keys B, and I&lt;br/&gt;happily send to H(A and B), which you steal with H(B and C).&lt;br/&gt;&lt;br/&gt;Sending along a proof does not help, you can&amp;#39;t prove that you do not know&lt;br/&gt;of a collision. Pre-committing does help, but is a very non-obvious&lt;br/&gt;security requirement, something I strongly believe is far riskier in&lt;br/&gt;practice.&lt;br/&gt;&lt;br/&gt;Bitcoin does have parts that rely on economic arguments for security or&lt;br/&gt;privacy, but can we please stick to using cryptography that is up to par&lt;br/&gt;for parts where we can? It&amp;#39;s a small constant factor of data, and it&lt;br/&gt;categorically removes the worry about security levels.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160108/e2e921fb/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160108/e2e921fb/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:47:42Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxr3j28kcwygt98mdykk3ljszplpez2nwyduvvr0pydhthjcaz3sqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv4gwjzz</id>
    
      <title type="html">📅 Original date posted:2015-12-16 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxr3j28kcwygt98mdykk3ljszplpez2nwyduvvr0pydhthjcaz3sqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv4gwjzz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr442dx93urzt3h7d9hk9s5xkdxpwmjks88x7u65ake05rke2p8lc53533z&#39;&gt;nevent1q…533z&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-16&lt;br/&gt;📝 Original message:On Wed, Dec 16, 2015 at 10:27 PM, Jeff Garzik &amp;lt;jgarzik at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; Not correct. I propose defining the virtual_block_size as base_size &#43;&lt;br/&gt;&amp;gt;&amp;gt; witness_size * 0.25, and limiting virtual_block_size to 1M. This&lt;br/&gt;&amp;gt;&amp;gt; creates a single variable to optimize for. If accepted, miners are&lt;br/&gt;&amp;gt;&amp;gt; incentived to maximize fee per virtual_block_size instead of per size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is correct.  There are two separate sets of economic actors and levels of&lt;br/&gt;&amp;gt; contention for each set of space.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That is true regardless of the proposed miner selection algorithm.&lt;br/&gt;&lt;br/&gt;Maybe I haven&amp;#39;t explained this properly, so consider this example:&lt;br/&gt;&lt;br/&gt;A miner receives sets of 200 byte transactions with all identical&lt;br/&gt;fees. Non-witness ones (whose virtual size is thus 200 bytes) and a&lt;br/&gt;witness one (where 120 of the 200 bytes are witness data, so its&lt;br/&gt;virtual size is 80 &#43; 120*0.25 = 110 bytes).&lt;br/&gt;&lt;br/&gt;The consensus rules would limit 1) the base size to 1000000 bytes 2)&lt;br/&gt;the virtual size to 1000000 bytes. However, as the virtual size is&lt;br/&gt;defined as the sum of the base size plus a non-negative number,&lt;br/&gt;satisfying (2) always implies satisfying (1).&lt;br/&gt;&lt;br/&gt;Thus, the miners&amp;#39; best strategy is to accept the witness transactions,&lt;br/&gt;as it allows 1000000/110=9090 transactions rather than&lt;br/&gt;1000000/200=5000.&lt;br/&gt;&lt;br/&gt;In fact, the optimal fee maximizing strategy is always to maximize fee&lt;br/&gt;per virtual size.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:46:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvjmvng6k5dflq03unsreszrgnu7y4p5y77wvk302wk5hlv7c0ncgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvmj7m5t</id>
    
      <title type="html">📅 Original date posted:2015-12-26 📝 Original message:On Dec ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvjmvng6k5dflq03unsreszrgnu7y4p5y77wvk302wk5hlv7c0ncgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvmj7m5t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs052c52hpcn77hp0q926zqm06ump4lmqlslangeh8fvu9a0ekxjwgkf6psd&#39;&gt;nevent1q…6psd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-26&lt;br/&gt;📝 Original message:On Dec 26, 2015 23:55, &amp;#34;Jonathan Toomim&amp;#34; &amp;lt;j at toom.im&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Dec 26, 2015, at 8:44 AM, Pieter Wuille via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Furthermore, 75% is pretty terrible as a switchover point, as it&lt;br/&gt;guarantees that old nodes will still see a 25% forked off chain temporarily.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, 75% plus a grace period is better. I prefer a grace period of about&lt;br/&gt;4000 to 8000 blocks (1 to 2 months).&lt;br/&gt;&lt;br/&gt;I think that&amp;#39;s extremely short, even assuming there is no controversy about&lt;br/&gt;changing the rules at all. Things like BIP65 and BIP66 already took&lt;br/&gt;significantly longer than that, were uncontroversial, and only need miner&lt;br/&gt;adoption. Full node adoption is even slower.&lt;br/&gt;&lt;br/&gt;I think the shortest reasonable timeframe for an uncontroversial hardfork&lt;br/&gt;is somewhere in the range between 6 and 12 months.&lt;br/&gt;&lt;br/&gt;For a controversial one, not at all.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20151227/9446849d/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20151227/9446849d/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:46:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsf88qu6vsjml8qspnnay8d4ypwvp770pyd8yc47qrjekfrhz53dsgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw7r3q7</id>
    
      <title type="html">📅 Original date posted:2015-12-26 📝 Original message:On Dec ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsf88qu6vsjml8qspnnay8d4ypwvp770pyd8yc47qrjekfrhz53dsgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw7r3q7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspy6lm28rffffhw0eahzs0ez549kgtf3jpz32f72clxzde0aygjns4d37cl&#39;&gt;nevent1q…37cl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-26&lt;br/&gt;📝 Original message:On Dec 27, 2015 00:06, &amp;#34;Jonathan Toomim&amp;#34; &amp;lt;j at toom.im&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Given that a supermajority of users and miners have been asking for a&lt;br/&gt;hard fork to increase the blocksize for years, I do not think that&lt;br/&gt;mobilizing people to upgrade their nodes is going to be hard.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; When we do the hard fork, we will need to encourage people to upgrade&lt;br/&gt;their full nodes. We may want to request that miners not trigger the fork&lt;br/&gt;until some percentage of visible full nodes have upgraded.&lt;br/&gt;&lt;br/&gt;I am generally not interested in a system where we rely on miners to make&lt;br/&gt;that judgement call to fork off nodes that don&amp;#39;t pay attention and/or&lt;br/&gt;disagree with the change. This is not because I don&amp;#39;t trust them, but&lt;br/&gt;because I believe one of the principle values of the system is that its&lt;br/&gt;consensus system should be hard to change.&lt;br/&gt;&lt;br/&gt;I can&amp;#39;t tell you what code to run of course, but I can decide what system I&lt;br/&gt;find interesting to build. And it seems many people have signed off on&lt;br/&gt;working towards a plan that does not include a hard fork being scheduled&lt;br/&gt;right now: &lt;a href=&#34;https://bitcoin.org/en/bitcoin-core/capacity-increases&#34;&gt;https://bitcoin.org/en/bitcoin-core/capacity-increases&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20151227/96ee711e/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20151227/96ee711e/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:46:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvnjddp3lrjw8lrj05mqngkc88ypdnt09rssqnnwl5q44tyd47jagzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5gq455</id>
    
      <title type="html">📅 Original date posted:2015-12-18 📝 Original message:On Dec ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvnjddp3lrjw8lrj05mqngkc88ypdnt09rssqnnwl5q44tyd47jagzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5gq455" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyq8069rvgnv7j0quuz3xvw2dqxexvtc42tpsjt3ecv2h5xq2uqhgs6ech7&#39;&gt;nevent1q…ech7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-18&lt;br/&gt;📝 Original message:On Dec 18, 2015 2:13 AM, &amp;#34;sickpig at gmail.com&amp;#34; &amp;lt;sickpig at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt; 1.75 x 0.5 &#43; 1 x 0.5 = 1.375&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; after six month.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An hard-fork on the others side would bring 1.75 since the activation, am&lt;br/&gt;I right?&lt;br/&gt;&lt;br/&gt;Yes.&lt;br/&gt;&lt;br/&gt;However, SW immediately gives a 1.75 capacity increase for anyone who&lt;br/&gt;adopts it, after the softfork, instantly. They don&amp;#39;t need to wait for&lt;br/&gt;anyone else.&lt;br/&gt;&lt;br/&gt;A hard fork is an orthogonal improvement, which is also needed if we don&amp;#39;t&lt;br/&gt;want to be stuck with a constant maximum ultimately.&lt;br/&gt;&lt;br/&gt;Hardforks can however only be deployed at a time when all full node&lt;br/&gt;software can reasonably have agreed to upgrade, while a softfork can be&lt;br/&gt;deployed much earlier.&lt;br/&gt;&lt;br/&gt;They are independent improvements, and we need both. I am however of the&lt;br/&gt;opinion that hard forks need a much clearer consensus and much longer&lt;br/&gt;rollout timeframes to be safe (see my thread on the security of softforks).&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20151218/5a9ace37/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20151218/5a9ace37/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:46:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2f22qtdgkdnykn0660lrttmj7egcqvm6xcsw0gaxfnlcg0qfk9tqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv656uee</id>
    
      <title type="html">📅 Original date posted:2015-12-18 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2f22qtdgkdnykn0660lrttmj7egcqvm6xcsw0gaxfnlcg0qfk9tqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv656uee" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw5nrj2ga5tnh9pce85wn4l6klt0ju7lrttpp0gmmar67mggvcm9s8jyn2f&#39;&gt;nevent1q…yn2f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-18&lt;br/&gt;📝 Original message:On Fri, Dec 18, 2015 at 6:11 AM, Jeff Garzik &amp;lt;jgarzik at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; You present this as if the Bitcoin Core development team is in charge&lt;br/&gt;&amp;gt;&amp;gt; of deciding the network consensus rules, and is responsible for making&lt;br/&gt;&amp;gt;&amp;gt; changes to it in order to satisfy economic demand. If that is the&lt;br/&gt;&amp;gt;&amp;gt; case, Bitcoin has failed, in my opinion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Diverging from the satoshi block size change plan[1] and current economics&lt;br/&gt;&amp;gt; would seem to require a high level of months-ahead communication to users.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t see any plan, but will you say the same thing when the subsidy&lt;br/&gt;dwindles, and mining income seems to become uncertain? It will equally&lt;br/&gt;be an economic change, which equally well will have been predictable,&lt;br/&gt;and it will equally well be treatable with a hardfork to increase the&lt;br/&gt;subsidy.&lt;br/&gt;&lt;br/&gt;Yes, I&amp;#39;m aware the argument above is a straw man, because there was&lt;br/&gt;clear expectation that the subsidy would go down asymptotically, and&lt;br/&gt;much less an expectation that the blocksize would remain fixed&lt;br/&gt;forever.&lt;br/&gt;&lt;br/&gt;But I am not against a block size increase hard fork. My talk on&lt;br/&gt;segregated witness even included proposed pursuing a hard fork at a&lt;br/&gt;slightly later stage.&lt;br/&gt;&lt;br/&gt;But what you&amp;#39;re arguing for is that - despite being completely&lt;br/&gt;expected - blocks grew fuller, and people didn&amp;#39;t adapt to block size&lt;br/&gt;pressure and a fee market, so the Core committee now needs to kick the&lt;br/&gt;can down the road, because we can&amp;#39;t accept the risk of economic&lt;br/&gt;change. That sounds very much like a bailout to me.&lt;br/&gt;&lt;br/&gt;Again. I am not against growth, but increasing in response to fear of&lt;br/&gt;economic change is the wrong approach. Economic change is inevitable.&lt;br/&gt;&lt;br/&gt;&amp;gt; Segregated Witness does not kick the can, it solves none of the problems #1,&lt;br/&gt;&amp;gt; #3 - #8 explicitly defined and listed in email #1.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1)  A plan of &amp;#34;SW &#43; no hard fork&amp;#34; is gambling with ECE risk, gambling there&lt;br/&gt;&amp;gt; will be no Fee Event, because the core block size is still heavily contended&lt;br/&gt;&amp;gt; -- 100% contended at time out SW rollout.&lt;br/&gt;&lt;br/&gt;That is an assumption. I expect demand for transactions at a given&lt;br/&gt;feerate to stop growing at a certain contention level (and we&amp;#39;ve&lt;br/&gt;reached some level of contention already, with mempools not being&lt;br/&gt;cleared for significant amounts of time already).&lt;br/&gt;&lt;br/&gt;&amp;gt; SW mitigates this&lt;br/&gt;&amp;gt; - only after several months&lt;br/&gt;&lt;br/&gt;That is assuming a hard fork consensus forming, deployment,&lt;br/&gt;activation, ... goes faster than a softfork.&lt;br/&gt;&lt;br/&gt;&amp;gt; - only assuming robust adoption rates by up-layer ecosystem software, and&lt;br/&gt;&lt;br/&gt;That&amp;#39;s not required. Everyone who individually switches to new&lt;br/&gt;transactions gets to do 1.75x more transactions for the same price&lt;br/&gt;(and at the same time gets safer contracts, better script&lt;br/&gt;upgradability, and more security models at their disposal), completely&lt;br/&gt;independent of whether anyone else in the ecosystem does the same.&lt;br/&gt;&lt;br/&gt;&amp;gt; - only assuming transaction volume growth is flat or sub-linear&lt;br/&gt;&lt;br/&gt;The only question is how many transactions for what price. Contention&lt;br/&gt;always happens at a specific feerate level anyway.&lt;br/&gt;&lt;br/&gt;&amp;gt; Those conditions must go as planned to fulfill &amp;#34;SW kicked the can&amp;#34; -- a lot&lt;br/&gt;&amp;gt; of if&amp;#39;s.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As stated, SW is orthogonal to the drift-into-uncharted-waters problem&lt;br/&gt;&amp;gt; outlined in email #1, which a short term bump does address.&lt;br/&gt;&lt;br/&gt;Both SW and a short bump (which is apparently not what BIP102 does&lt;br/&gt;anymore?) increase capacity available per price, and yes, they are&lt;br/&gt;completely orthogonal.&lt;br/&gt;&lt;br/&gt;My only disagreement is the motivation (avoiding economic change, as&lt;br/&gt;opposed to aiming for safe growth) and the claim that a capacity&lt;br/&gt;increase hardfork is easier and safe(r) to roll out quickly than&lt;br/&gt;sortfork SW.&lt;br/&gt;&lt;br/&gt;Apart from that, we clearly need to do both at some point.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:46:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsthxzts5qksuuj89pglyqmwzus8w7w8sdmf43v7wvpsuufw335yaszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvzvfrz0</id>
    
      <title type="html">📅 Original date posted:2015-12-16 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsthxzts5qksuuj89pglyqmwzus8w7w8sdmf43v7wvpsuufw335yaszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvzvfrz0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxkyzp9ym23epg0n4fqpytxxcrjrsw809nz5460rd0h8wxrlzacdq7w885h&#39;&gt;nevent1q…885h&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-12-16&lt;br/&gt;📝 Original message:On Wed, Dec 16, 2015 at 10:08 PM, Jeff Garzik &amp;lt;jgarzik at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; You present this as if the Bitcoin Core development team is in charge&lt;br/&gt;&amp;gt;&amp;gt; of deciding the network consensus rules, and is responsible for making&lt;br/&gt;&amp;gt;&amp;gt; changes to it in order to satisfy economic demand. If that is the&lt;br/&gt;&amp;gt;&amp;gt; case, Bitcoin has failed, in my opinion.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This circles back to Problem #1:   Avoidance of a choice is a still a choice&lt;br/&gt;&amp;gt; - failing to ACK a MAX_BLOCK_SIZE increase still creates very real Economic&lt;br/&gt;&amp;gt; Change Event risk.&lt;br/&gt;&lt;br/&gt;We are not avoiding a choice. We don&amp;#39;t have the authority to make a choice.&lt;br/&gt;&lt;br/&gt;&amp;gt; And #3:  If the likely predicted course is that Bitcoin Core will not accept&lt;br/&gt;&amp;gt; a protocol change changing MAX_BLOCK_SIZE via hard fork in the short term,&lt;br/&gt;&amp;gt; the core dev team should communicate that position clearly to users and&lt;br/&gt;&amp;gt; media.&lt;br/&gt;&lt;br/&gt;I indeed think we can communicate much better that deciding consensus&lt;br/&gt;rules is not within our power.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter
    </content>
    <updated>2023-06-07T17:46:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdfqmk88fkj4e97saw4s3pae6zf9gsunrqkjzgkj64lhv8qxj2n7qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv467sut</id>
    
      <title type="html">📅 Original date posted:2015-08-10 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdfqmk88fkj4e97saw4s3pae6zf9gsunrqkjzgkj64lhv8qxj2n7qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv467sut" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsra5heackv83n23zvnftld8y3y4nv3h8l8ct2vcerwxz776843njcf6zjk5&#39;&gt;nevent1q…zjk5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-10&lt;br/&gt;📝 Original message:On Aug 11, 2015 12:52 AM, &amp;#34;Pieter Wuille&amp;#34; &amp;lt;pieter.wuille at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Aug 11, 2015 12:18 AM, &amp;#34;Thomas Zander via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Have you ever been to a concert that was far away from public&lt;br/&gt;transport? They&lt;br/&gt;&amp;gt; &amp;gt; typically set up bus shuttles, or taxis to get people back into town&lt;br/&gt;&amp;gt; &amp;gt; afterwards.&lt;br/&gt;&amp;gt; &amp;gt; The result there is always you end up waiting forever and it actually&lt;br/&gt;may be&lt;br/&gt;&amp;gt; &amp;gt; easier to just walk instead of wait.&lt;br/&gt;&amp;gt; &amp;gt; The amount you pay is irrelevant if everyone is paying it. There still&lt;br/&gt;is more&lt;br/&gt;&amp;gt; &amp;gt; demand than there is capacity.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That&amp;#39;s an incorrect analogy. You choose the rate you pay, and get higher&lt;br/&gt;priority when you pay more. Taxi drivers can&amp;#39;t pick out higher-paying&lt;br/&gt;customers in advance.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m sorry, I missed your &amp;#34;if everyone is paying it&amp;#34;. This changes a lot. I&lt;br/&gt;agree with you: if everyone wants to pay much then it becomes unreliable.&lt;br/&gt;&lt;br/&gt;But I don&amp;#39;t think that is something we can avoid with a small constant&lt;br/&gt;factor block size increase, and we don&amp;#39;t do the world a service by making&lt;br/&gt;it look like it works for longer.&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s grow within bounderies set by technology and centralization pressure&lt;br/&gt;that we can agree on. Let the market decide whether how they will that will&lt;br/&gt;low volume reliable transactions and/or high volume unreliable ones.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/59b198e8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/59b198e8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:59Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsra5heackv83n23zvnftld8y3y4nv3h8l8ct2vcerwxz776843njczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw4z708</id>
    
      <title type="html">📅 Original date posted:2015-08-10 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsra5heackv83n23zvnftld8y3y4nv3h8l8ct2vcerwxz776843njczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvw4z708" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs22uwmxgs79k382qf00r9q4ejsesx6lvs8e6mmr48nn7wwnufmacq6wgz9u&#39;&gt;nevent1q…gz9u&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-10&lt;br/&gt;📝 Original message:On Aug 11, 2015 12:18 AM, &amp;#34;Thomas Zander via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Have you ever been to a concert that was far away from public transport?&lt;br/&gt;They&lt;br/&gt;&amp;gt; typically set up bus shuttles, or taxis to get people back into town&lt;br/&gt;&amp;gt; afterwards.&lt;br/&gt;&amp;gt; The result there is always you end up waiting forever and it actually may&lt;br/&gt;be&lt;br/&gt;&amp;gt; easier to just walk instead of wait.&lt;br/&gt;&amp;gt; The amount you pay is irrelevant if everyone is paying it. There still is&lt;br/&gt;more&lt;br/&gt;&amp;gt; demand than there is capacity.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s an incorrect analogy. You choose the rate you pay, and get higher&lt;br/&gt;priority when you pay more. Taxi drivers can&amp;#39;t pick out higher-paying&lt;br/&gt;customers in advance.&lt;br/&gt;&lt;br/&gt;A better comparison is Uber, which charges more in places with high demand,&lt;br/&gt;and you can accept or refuse in advance. And yes, it remains reliable if&lt;br/&gt;you&amp;#39;re among those with the highest willingness to pay.&lt;br/&gt;&lt;br/&gt;&amp;gt; So, no, its not unreliable for cheap free transactions.&lt;br/&gt;&amp;gt; Its unreliable for all types of transactions.&lt;br/&gt;&lt;br/&gt;If 2500 transactions fit in the block chain per day (assuming constant&lt;br/&gt;size) and there are less than 2500 per hour that pay at least 0.001 BTC in&lt;br/&gt;fee, then any transaction which pays more than 0.001 BTC will have a very&lt;br/&gt;high chance of getting in a small multiple of one hour, since miners&lt;br/&gt;prioritize by feerate.&lt;br/&gt;&lt;br/&gt;If there are in addition to that 5000 transactions per hour which pay less,&lt;br/&gt;then yes, they need to compete for the remaiming space and their&lt;br/&gt;confirmation will be unreliable.&lt;br/&gt;&lt;br/&gt;The whole point is that whether confirmation at a particular price point is&lt;br/&gt;reliable depends on how much demand there is at that price point. And&lt;br/&gt;increasing the block size out of fear of what might happen is failing to&lt;br/&gt;recognize that it can always happen that there is a sudden change in demand&lt;br/&gt;that outcompetes the rest.&lt;br/&gt;&lt;br/&gt;The point is not that evolution towards a specific higher feerate needs to&lt;br/&gt;happen, but an evolution to an ecosystem that accepts that there is never a&lt;br/&gt;guarantee for reliability, unless you&amp;#39;re willing to pay more than everyone&lt;br/&gt;else - whatever that number is.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/b117bc74/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/b117bc74/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:59Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2fgrz90k6ghyfxl8m6aqknvrzqck0pyl9p4fl6v65ln33lln0qsqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvtgf4s6</id>
    
      <title type="html">📅 Original date posted:2015-08-10 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2fgrz90k6ghyfxl8m6aqknvrzqck0pyl9p4fl6v65ln33lln0qsqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvtgf4s6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs20lz6364wwnlaza8dxgxfc785e8fr79kr65du77nmagzpaaeqv0cukge2w&#39;&gt;nevent1q…ge2w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-10&lt;br/&gt;📝 Original message:On Mon, Aug 10, 2015 at 4:12 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Executive summary: when networks get over-saturated, they become&lt;br/&gt;&amp;gt; unreliable.  Unreliable is bad.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unreliable and expensive is extra bad, and that&amp;#39;s where we&amp;#39;re headed&lt;br/&gt;&amp;gt; without an increase to the max block size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think I see your point of view. You see demand for on-chain transactions&lt;br/&gt;as a single number that grows with adoption. Once the transaction creation&lt;br/&gt;rate grows close to the capacity, transactions will become unreliable, and&lt;br/&gt;you consider this a bad thing.&lt;br/&gt;&lt;br/&gt;And if you see Bitcoin as a payment system where guaranteed time to&lt;br/&gt;confirmation is a feature, I fully agree. But I think that is an&lt;br/&gt;unrealistic dream. It only seems reliable because of lack of use. It costs&lt;br/&gt;1.5 BTC per day to create enough transactions to fill the block chain at&lt;br/&gt;the minimum relay fee, and a small multiple of that at actual fee levels.&lt;br/&gt;Assuming that rate remains similar with an increased block size, that&lt;br/&gt;remains cheap.&lt;br/&gt;&lt;br/&gt;If you want transactions to be cheap, it will also be cheap to make them&lt;br/&gt;unreliable.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150810/0fff338b/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150810/0fff338b/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0cann43gn85fq8gfq3qaa5d63qs7z7cc0s6gd9zr6j3h94cjpz8czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvnc7u9c</id>
    
      <title type="html">📅 Original date posted:2015-08-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0cann43gn85fq8gfq3qaa5d63qs7z7cc0s6gd9zr6j3h94cjpz8czypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvnc7u9c" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9vkj7zsygj0saxme3zk0zjcwgcdca87q2jhmvmctwp3auyp7jg4cw9vj4a&#39;&gt;nevent1q…vj4a&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-11&lt;br/&gt;📝 Original message:On Tue, Aug 11, 2015 at 11:35 PM, Michael Naber &amp;lt;mickeybob at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Bitcoin would be better money than current money even if it were a bit&lt;br/&gt;&amp;gt; more expensive to transact, simply because of its other great&lt;br/&gt;&amp;gt; characteristics (trustlessness, limited supply, etc). However... it is not&lt;br/&gt;&amp;gt; better than something else sharing all those same characteristics but which&lt;br/&gt;&amp;gt; is also less expensive. The best money will win, and if Bitcoin doesn&amp;#39;t&lt;br/&gt;&amp;gt; increase capacity then it won&amp;#39;t remain the best.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;If it is less expensive, it is harder to be reliable (because it&amp;#39;s easier&lt;br/&gt;for a sudden new use case to outbid the available space), which is less&lt;br/&gt;useful for a payment mechanism.&lt;br/&gt;&lt;br/&gt;If it has better scale (with the same technology), it will have higher&lt;br/&gt;centralization pressure. The higher price you potentially pay (in fees) to&lt;br/&gt;get your transactions on a smaller block chain is the price of higher&lt;br/&gt;security and independence. Perhaps the compromise is not at the optimal&lt;br/&gt;place, but please stop saying &amp;#34;below what the technology can do&amp;#34;. The&lt;br/&gt;technology can &amp;#34;do&amp;#34; gigabyte blocks I&amp;#39;m sure, If you accept that you need a&lt;br/&gt;small cluster to keep up with validation, and all blocks are produced by a&lt;br/&gt;single miner cartel.&lt;br/&gt;&lt;br/&gt;IMHO, Bitcoin (or any cryptocurrency) on-chain as a payment system is:&lt;br/&gt;* Expensive: there is a (known in advance and agreed upon) inflation that&lt;br/&gt;we&amp;#39;re using to pay miners. But by holding Bitcoin you&amp;#39;re paying for the&lt;br/&gt;security of the system, even if it is not in fees.&lt;br/&gt;* Unreliable: you never know when suddenly there will be more higher-fee&lt;br/&gt;transactions that outbid you.&lt;br/&gt;* Slow, unless you already trust the sender to not double spend (in which&lt;br/&gt;case you don&amp;#39;t actually need the security of the blockchain).&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know the future, and I don&amp;#39;t know what use cases will develop and&lt;br/&gt;what they&amp;#39;ll want to pay or what reliability they need. But let&amp;#39;s please&lt;br/&gt;not throw out the one quality that Bitcoin is still good at: lack of&lt;br/&gt;centralized parties to trust.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/a9e6e3a9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/a9e6e3a9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:51Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvtz45ly5cach6743kdldgp0c0574pleckaeajyjkv8y72sxtnh0qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv2d24gr</id>
    
      <title type="html">📅 Original date posted:2015-08-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvtz45ly5cach6743kdldgp0c0574pleckaeajyjkv8y72sxtnh0qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv2d24gr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0h5pusm9ulaqdkn7avv8tgmf5pzzd844cndkgftd3qwrr9lqmxhscsxmhf&#39;&gt;nevent1q…xmhf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-11&lt;br/&gt;📝 Original message:On Tue, Aug 11, 2015 at 11:30 PM, Angel Leon 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; tell that to people in poor countries, or even in first world countries.&lt;br/&gt;&amp;gt; The competitive thing here is a deal breaker for a lot of people who have&lt;br/&gt;&amp;gt; no clue/don&amp;#39;t care for decentralization,&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Then they also don&amp;#39;t need their transactions to be on the blockchain, right?&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/f3e65461/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/f3e65461/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsw4wyvyex2fprvm2ztuhsvpx8vsahn0esssrda3assdul4ntgc3qqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5p465h</id>
    
      <title type="html">📅 Original date posted:2015-08-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsw4wyvyex2fprvm2ztuhsvpx8vsahn0esssrda3assdul4ntgc3qqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5p465h" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswfrmfzzaaddgttv9u6vna5uyf6668n8hxhahcgg8e6q7wuxfdnusanzrkm&#39;&gt;nevent1q…zrkm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-11&lt;br/&gt;📝 Original message:On Tue, Aug 11, 2015 at 9:37 PM, Michael Naber 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; Hitting the limit in and of itself is not necessarily a bad thing. The&lt;br/&gt;&amp;gt; question at hand is whether we should constrain that limit below what&lt;br/&gt;&amp;gt; technology is capable of delivering. I&amp;#39;m arguing that not only we should&lt;br/&gt;&amp;gt; not, but that we could not even if we wanted to, since competition will&lt;br/&gt;&amp;gt; deliver capacity for global consensus whether it&amp;#39;s in Bitcoin or in some&lt;br/&gt;&amp;gt; other product / fork.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The question is not what the technology can deliver. The question is what&lt;br/&gt;price we&amp;#39;re willing to pay for that. It is not a boolean &amp;#34;at this size,&lt;br/&gt;things break, and below it, they work&amp;#34;. A small constant factor increase&lt;br/&gt;will unlikely break anything in the short term, but it will come with&lt;br/&gt;higher centralization pressure of various forms. There is discussion about&lt;br/&gt;whether these centralization pressures are significant, but citing that&lt;br/&gt;it&amp;#39;s artificially constrained under the limit is IMHO a misrepresentation.&lt;br/&gt;It is constrained to aim for a certain balance between utility and risk,&lt;br/&gt;and neither extreme is interesting, while possibly still &amp;#34;working&amp;#34;.&lt;br/&gt;&lt;br/&gt;Consensus rules are what keeps the system together. You can&amp;#39;t simply switch&lt;br/&gt;to new rules on your own, because the rest of the system will end up&lt;br/&gt;ignoring you. These rules are there for a reason. You and I may agree about&lt;br/&gt;whether the 21M limit is necessary, and disagree about whether we need a&lt;br/&gt;block size limit, but we should be extremely careful with change. My&lt;br/&gt;position as Bitcoin Core developer is that we should merge consensus&lt;br/&gt;changes only when they are uncontroversial. Even when you believe a more&lt;br/&gt;invasive change is worth it, others may disagree, and the risk from&lt;br/&gt;disagreement is likely larger than the effect of a small block size&lt;br/&gt;increase by itself: the risk that suddenly every transaction can be spent&lt;br/&gt;twice (once on each side of the fork), the very thing that the block chain&lt;br/&gt;was designed to prevent.&lt;br/&gt;&lt;br/&gt;My personal opinion is that we should aim to do a block size increase for&lt;br/&gt;the right reasons. I don&amp;#39;t think fear of rising fees or unreliability&lt;br/&gt;should be an issue: if fees are being paid, it means someone is willing to&lt;br/&gt;pay them. If people are doing transactions despite being unreliable, there&lt;br/&gt;must be a use for them. That may mean that some use cases don&amp;#39;t fit&lt;br/&gt;anymore, but that is already the case.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/851e0acb/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/851e0acb/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:45Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs976ualmn3f8m559fcjp3g0rnd6vcgnz79zmnznnaycmyr2k52z5gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv236nkl</id>
    
      <title type="html">📅 Original date posted:2015-08-07 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs976ualmn3f8m559fcjp3g0rnd6vcgnz79zmnznnaycmyr2k52z5gzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv236nkl" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqrq30850nsueys7najps0v8f4yv5rn7rv6hn3w6tn2v0jz4dnk5c7k6lr4&#39;&gt;nevent1q…6lr4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-07&lt;br/&gt;📝 Original message:On Fri, Aug 7, 2015 at 4:57 PM, Gavin Andresen 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; Every once in a while the network will get lucky and we&amp;#39;ll find six blocks&lt;br/&gt;&amp;gt; in ten minutes. If you are deciding what transaction fee to put on your&lt;br/&gt;&amp;gt; transaction, and you&amp;#39;re willing to wait until that&lt;br/&gt;&amp;gt; six-blocks-in-ten-minutes once-a-week event, submit your transaction with a&lt;br/&gt;&amp;gt; low fee.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All the higher-fee transactions waiting to be confirmed will get confirmed&lt;br/&gt;&amp;gt; in the first five blocks and, if miners don&amp;#39;t have any floor on the fee&lt;br/&gt;&amp;gt; they&amp;#39;ll accept (they will, but lets pretend they won&amp;#39;t) then your&lt;br/&gt;&amp;gt; very-low-fee transaction will get confirmed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the limit, that logic becomes &amp;#34;wait an infinite amount of time, pay&lt;br/&gt;&amp;gt; zero fee.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That&amp;#39;s only the case when the actual rate of transactions with a non-zero&lt;br/&gt;fee is below what fits in blocks. If the total production rate is higher,&lt;br/&gt;even without configured floor by miners, a free transaction won&amp;#39;t ever be&lt;br/&gt;mined, as there will always be some backlog of non-free transaction. Not&lt;br/&gt;saying that this is a likely outcome - it would inevitably mean that people&lt;br/&gt;are creating transactions without any guarantee that they&amp;#39;ll be mined,&lt;br/&gt;which may not be what anyone is interested in. But perhaps there is some&lt;br/&gt;&amp;#34;use&amp;#34; for ultra-low-priority unreliable transactions (... despite DoS&lt;br/&gt;attacks).&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So... I have no idea what the &amp;#39;market minimum fee&amp;#39; will be, because I have&lt;br/&gt;&amp;gt; no idea how long people will be willing to wait, how many times they&amp;#39;ll be&lt;br/&gt;&amp;gt; willing to retransmit a low-fee transaction that gets evicted from&lt;br/&gt;&amp;gt; memory-limited memory pools, or how much memory miners will be willing to&lt;br/&gt;&amp;gt; dedicate to storing transactions that won&amp;#39;t confirm for a long time because&lt;br/&gt;&amp;gt; they&amp;#39;re waiting for a flurry of blocks to be found.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Fair enough, I don&amp;#39;t think anyone knows.&lt;br/&gt;&lt;br/&gt;I guess my question (and perhaps that&amp;#39;s what Jorge is after): do you feel&lt;br/&gt;that blocks should be increased in response to (or for fear of) such a&lt;br/&gt;scenario. And if so, if that is a reason for increase now, won&amp;#39;t it be a&lt;br/&gt;reason for an increase later as well? It is my impression that your answer&lt;br/&gt;is yes, that this is why you want to increase the block size quickly and&lt;br/&gt;significantly, but correct me if I&amp;#39;m wrong.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150807/a3e40340/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150807/a3e40340/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:31Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp768xk949jxehkvv64nempaj5lxpsextur60prkeyclgyju2t2fqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvjx2zkg</id>
    
      <title type="html">📅 Original date posted:2015-08-07 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp768xk949jxehkvv64nempaj5lxpsextur60prkeyclgyju2t2fqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvjx2zkg" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyx6sf6zp5k7h0rt9pd97xdp8ydgxyva9mar393khd6quaw8xluvg4fk6rt&#39;&gt;nevent1q…k6rt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-07&lt;br/&gt;📝 Original message:On Aug 7, 2015 7:50 PM, &amp;#34;Gavin Andresen&amp;#34; &amp;lt;gavinandresen at gmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Fri, Aug 7, 2015 at 12:30 PM, Pieter Wuille via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If the incentives for running a node don&amp;#39;t weight up against the&lt;br/&gt;cost/difficulty using a full node yourself for a majority of people in the&lt;br/&gt;ecosystem, I would argue that there is a problem. As Bitcoin&amp;#39;s fundamental&lt;br/&gt;improvement over other systems is the lack of need for trust, I believe&lt;br/&gt;that with increased adoption should also come an increased (in absolute&lt;br/&gt;terms) incentive for people to use a full node. I&amp;#39;m seeing the opposite&lt;br/&gt;trend, and that is worrying IMHO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Are you saying that unless the majority of people in the ecosystem decide&lt;br/&gt;to trust nothing but the genesis block hash (decide to run a full node)&lt;br/&gt;there is a problem?&lt;br/&gt;&lt;br/&gt;I shouldn&amp;#39;t have said majority, sorry. But I do believe that as the odds at&lt;br/&gt;stake in the system go up, so should those who take an interest in&lt;br/&gt;verifying. That doesn&amp;#39;t seem to be the case, and is a problem, where that&lt;br/&gt;is a result of the block chain size or not.&lt;br/&gt;&lt;br/&gt;&amp;gt; If so, then we do have a fundamental difference of opinion, but I&amp;#39;ve&lt;br/&gt;misunderstood how you think about trust/centralization/convenience&lt;br/&gt;tradeoffs in the past.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe people in the Bitcoin ecosystem will choose different&lt;br/&gt;tradeoffs, and I believe that is OK-- people should be free to make those&lt;br/&gt;tradeoffs.&lt;br/&gt;&lt;br/&gt;I agree. Though I believe that the blockchain itself cannot offer many&lt;br/&gt;tradeoffs, and by trying to make it scale we hurt the whole system. The&lt;br/&gt;place to introduce tradeoffs is in layers on top - there you can build&lt;br/&gt;systems with various levels of trust without hurting others.&lt;br/&gt;&lt;br/&gt;&amp;gt; And given that the majority of people in the ecosystem were deciding that&lt;br/&gt;using a centralized service or an SPV-level-security wallet was better even&lt;br/&gt;two or three years ago when blocks were tiny (I&amp;#39;d have to go back and dig&lt;br/&gt;up number-of-full-nodes and number-of-active-wallets at the big web-wallet&lt;br/&gt;providers, but I bet there were an order of magnitude more people using&lt;br/&gt;centralized services than running full nodes even back then).&lt;br/&gt;&lt;br/&gt;That&amp;#39;s inevitable, I&amp;#39;m sure.&lt;br/&gt;&lt;br/&gt;&amp;gt; I firmly believe that block size has very little to do with the decision&lt;br/&gt;to run a full node or not.&lt;br/&gt;&lt;br/&gt;Within certain limits, maybe not. Within certain limits, maybe it also does&lt;br/&gt;not incentivize trusted miner setups like SPV mining (which hurt the&lt;br/&gt;security of SPV nodes tremendously).&lt;br/&gt;&lt;br/&gt;But if the reason for increasing is because you fear a change of economics,&lt;br/&gt;then it means you prefer not dealing with that change. I believe you prefer&lt;br/&gt;not dealing with it ever, and would rather have a system where as much as&lt;br/&gt;possible happens on-chain, even when we unknowingly go beyond those limits.&lt;br/&gt;I think we don&amp;#39;t do the ecosystem a service by promising that such a future&lt;br/&gt;is possible without compromises.&lt;br/&gt;&lt;br/&gt;So, I think the block size should follow technological evolution, and not&lt;br/&gt;reenforce the belief that the block size should follow demand. There will&lt;br/&gt;always be demand, and we should learn to deal with it.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150807/e442538b/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150807/e442538b/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:33:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsg432veczddaz8tsrz9299u46jhl0e2xjmemtz08mgp0up4sny5aszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvkma5qz</id>
    
      <title type="html">📅 Original date posted:2015-08-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsg432veczddaz8tsrz9299u46jhl0e2xjmemtz08mgp0up4sny5aszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvkma5qz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8p5rk6ka0gmfnwkc4alkwgl3jepcheh3rggsn34rl7zxen4zgvds2t7zqw&#39;&gt;nevent1q…7zqw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-06&lt;br/&gt;📝 Original message:On Fri, Aug 7, 2015 at 1:26 AM, Dave Scotese via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;#34;Miners can do this unilaterally&amp;#34; maybe, if they are a closed group, based&lt;br/&gt;&amp;gt; on the 51% rule. But aren&amp;#39;t they using full nodes for propagation?  In this&lt;br/&gt;&amp;gt; sense, anyone can vote by coding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;They don&amp;#39;t need to use full nodes for propagation. Miners don&amp;#39;t care when&lt;br/&gt;other full nodes hear about their blocks, only whether they (eventually)&lt;br/&gt;accept them.&lt;br/&gt;&lt;br/&gt;And yes, full nodes can change what blocks they accept. That&amp;#39;s called a&lt;br/&gt;hard fork :)&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150807/2899162c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150807/2899162c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:59Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrfj056gchhx3kpgdk585e68wew7mz82zlhkjqjapxtpf472da03qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvazc30l</id>
    
      <title type="html">📅 Original date posted:2015-08-04 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrfj056gchhx3kpgdk585e68wew7mz82zlhkjqjapxtpf472da03qzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvazc30l" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsztxvgnw7thjtx74ju5ajr85ucqdlx94cskt92q4km9kfel9xktmqs3h6ek&#39;&gt;nevent1q…h6ek&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-04&lt;br/&gt;📝 Original message:I would like to withdraw my proposal from your self-appointed vote.&lt;br/&gt;&lt;br/&gt;If you want to let a majority decide about economic policy of a currency, I&lt;br/&gt;suggest fiat currencies. They have been using this approach for quite a&lt;br/&gt;while, I hear.&lt;br/&gt;&lt;br/&gt;Bitcoin&amp;#39;s consensus rules are a consensus system, not a democracy. Find a&lt;br/&gt;solution that everyone agrees on, or don&amp;#39;t.&lt;br/&gt;On Aug 4, 2015 9:51 AM, &amp;#34;jl2012 via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; As now we have some concrete proposals (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-July/009808.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-July/009808.html&lt;/a&gt;),&lt;br/&gt;&amp;gt; I think we should wrap up the endless debate with voting by different&lt;br/&gt;&amp;gt; stakeholder groups.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ---------------------------------&lt;br/&gt;&amp;gt; Candidate proposals&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Candidate proposals must be complete BIPs with reference implementation&lt;br/&gt;&amp;gt; which are ready to merge immediately. They must first go through the usual&lt;br/&gt;&amp;gt; peer review process and get approved by the developers in a technical&lt;br/&gt;&amp;gt; standpoint, without political or philosophical considerations. Any fine&lt;br/&gt;&amp;gt; tune of a candidate proposal may not become an independent candidate,&lt;br/&gt;&amp;gt; unless it introduces some “real” difference. “No change” is also one of the&lt;br/&gt;&amp;gt; voting options.&lt;br/&gt;&amp;gt; ---------------------------------&lt;br/&gt;&amp;gt; Voter groups&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There will be several voter groups and their votes will be counted&lt;br/&gt;&amp;gt; independently. (The time frames mentioned below are just for example.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Miners: miners of blocks with timestamp between 1 to 30 Sept 2015 are&lt;br/&gt;&amp;gt; eligible to vote. One block one vote. Miners will cast their votes by&lt;br/&gt;&amp;gt; signing with the bitcoin address in coinbase. If there are multiple&lt;br/&gt;&amp;gt; coinbase outputs, the vote is discounted by output value / total coinbase&lt;br/&gt;&amp;gt; output value.&lt;br/&gt;&amp;gt; Many well-known pools are reusing addresses and they may not need to&lt;br/&gt;&amp;gt; digitally sign their votes. In case there is any dispute, the digitally&lt;br/&gt;&amp;gt; signed vote will be counted.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bitcoin holders: People with bitcoin in the UTXO at block 372500 (around&lt;br/&gt;&amp;gt; early September) are eligible to vote. The total “balance” of each&lt;br/&gt;&amp;gt; scriptPubKey is calculated and this is the weight of the vote. People will&lt;br/&gt;&amp;gt; cast their votes by digital signature.&lt;br/&gt;&amp;gt; Special output types:&lt;br/&gt;&amp;gt; Multi-sig: vote must be signed according to the setting of the multi-sig.&lt;br/&gt;&amp;gt; P2SH: the serialized script must be provided&lt;br/&gt;&amp;gt; Publicly known private key: not eligible to vote&lt;br/&gt;&amp;gt; Non-standard script according to latest Bitcoin Core rules: not eligible&lt;br/&gt;&amp;gt; to vote in general. May be judged case-by-case&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Developers: People with certain amount of contribution in the past year in&lt;br/&gt;&amp;gt; Bitcoin Core or other open sources wallet / alternative implementations.&lt;br/&gt;&amp;gt; One person one vote.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Exchanges: Centralized exchanges listed on Coindesk Bitcoin Index,&lt;br/&gt;&amp;gt; Winkdex, or NYSE Bitcoin index, with 30 days volume &amp;gt;100,000BTC are&lt;br/&gt;&amp;gt; invited. This includes Bitfinex, BTC China, BitStamp, BTC-E, itBit, OKCoin,&lt;br/&gt;&amp;gt; Huobi, Coinbase. Exchanges operated for at least 1 year with 100,000BTC&lt;br/&gt;&amp;gt; 30-day volume may also apply to be a voter in this category. One exchange&lt;br/&gt;&amp;gt; one vote.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Merchants and service providers: This category includes all bitcoin&lt;br/&gt;&amp;gt; accepting business that is not centralized fiat-currency exchange, e.g.&lt;br/&gt;&amp;gt; virtual or physical stores, gambling sites, online wallet service, payment&lt;br/&gt;&amp;gt; processors like Bitpay, decentralized exchange like Localbitcoin, ETF&lt;br/&gt;&amp;gt; operators like Secondmarket Bitcoin Investment Trust. They must directly&lt;br/&gt;&amp;gt; process bitcoin without relying on third party. They should process at&lt;br/&gt;&amp;gt; least 100BTC in the last 30-days. One merchant one vote.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Full nodes operators: People operating full nodes for at least 168 hours&lt;br/&gt;&amp;gt; (1 week) in July 2015 are eligible to vote, determined by the log of&lt;br/&gt;&amp;gt; Bitnodes. Time is set in the past to avoid manipulation. One IP address one&lt;br/&gt;&amp;gt; vote. Vote must be sent from the node’s IP address.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --------------------&lt;br/&gt;&amp;gt; Voting system&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Single transferable vote is applied. (&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://en.wikipedia.org/wiki/Single_transferable_vote&#34;&gt;https://en.wikipedia.org/wiki/Single_transferable_vote&lt;/a&gt;). Voters are&lt;br/&gt;&amp;gt; required to rank their preference with “1”, “2”, “3”, etc, or use “N” to&lt;br/&gt;&amp;gt; indicate rejection of a candidate.&lt;br/&gt;&amp;gt; Vote counting starts with every voter’s first choice. The candidate with&lt;br/&gt;&amp;gt; fewest votes is eliminated and those votes are transferred according to&lt;br/&gt;&amp;gt; their second choice. This process repeats until only one candidate is left,&lt;br/&gt;&amp;gt; which is the most popular candidate. The result is presented as the&lt;br/&gt;&amp;gt; approval rate: final votes for the most popular candidate / all valid votes&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After the most popular candidate is determined, the whole counting process&lt;br/&gt;&amp;gt; is repeated by eliminating this candidate, which will find the approval&lt;br/&gt;&amp;gt; rate for the second most popular candidate. The process repeats until all&lt;br/&gt;&amp;gt; proposals are ranked with the approval rate calculated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --------------------&lt;br/&gt;&amp;gt; Interpretation of results:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is possible that a candidate with lower ranking to have higher approval&lt;br/&gt;&amp;gt; rate. However, ranking is more important than the approval rate, unless the&lt;br/&gt;&amp;gt; difference in approval rate is really huge. 90% support would be excellent;&lt;br/&gt;&amp;gt; 70% is good; 50% is marginal; &amp;lt;50% is failed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --------------------&lt;br/&gt;&amp;gt; Technical issues:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Voting by the miners, developers, exchanges, and merchants are probably&lt;br/&gt;&amp;gt; the easiest. We need a trusted person to verify the voters’ identity by&lt;br/&gt;&amp;gt; email, website, or digital signature. The trusted person will collect votes&lt;br/&gt;&amp;gt; and publish the named votes so anyone could verify the results.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For full nodes, we need a trusted person to setup a website as an&lt;br/&gt;&amp;gt; interface to vote. The votes with IP address will be published.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For bitcoin holders, the workload could be very high and we may need some&lt;br/&gt;&amp;gt; automatic system to collect and count the votes. If people are worrying&lt;br/&gt;&amp;gt; about reduced security due to exposed raw public key, they should move&lt;br/&gt;&amp;gt; their bitcoin to a new address before voting.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Double voting: people are generally not allowed to change their mind after&lt;br/&gt;&amp;gt; voting, especially for anonymous voters like bitcoin holders and solo&lt;br/&gt;&amp;gt; miners. A double voting attempt from these classes will invalidate all&lt;br/&gt;&amp;gt; related votes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Multiple identity: People may have multiple roles in the Bitcoin ecology.&lt;br/&gt;&amp;gt; I believe they should be allowed to vote in all applicable categories since&lt;br/&gt;&amp;gt; they are contributing more than other people.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150804/db57dc3a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150804/db57dc3a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:55Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgwycl3x4w2nf0kygf2xuhw6gfkzauu27arxxfeugjwdn2ne4jyngzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvl0ke5v</id>
    
      <title type="html">📅 Original date posted:2015-08-06 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgwycl3x4w2nf0kygf2xuhw6gfkzauu27arxxfeugjwdn2ne4jyngzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvl0ke5v" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqwrmm90n9a8g4kxxqwtusp5dmv43stpjs46aj7xwxv37ff9mhafq839a7r&#39;&gt;nevent1q…9a7r&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-06&lt;br/&gt;📝 Original message:On Aug 6, 2015 9:42 PM, &amp;#34;Gavin Andresen via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;2. The &amp;#34;market minimum fee&amp;#34; should be determined by the market. It should&lt;br/&gt;not be up to us to decide &amp;#34;when is a good time.&amp;#34;&lt;br/&gt;&lt;br/&gt;I partially agree. The community should decide what risks it is willing to&lt;br/&gt;take, and set limits accordingly. Let the market decide how that space is&lt;br/&gt;best used.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Would you agree that blocksize increase proposals should have such a&lt;br/&gt;&amp;gt;&amp;gt; criterion/test?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Although I&amp;#39;ve been very clear with my criterion, no, I don&amp;#39;t think all&lt;br/&gt;blocksize increase proposals should have to justify &amp;#34;why this size&amp;#34; or &amp;#34;why&lt;br/&gt;this rate of increase.&amp;#34; Part of my frustration with this whole debate is&lt;br/&gt;we&amp;#39;re talking about a sanity-check upper-limit; as long as it doesn&amp;#39;t open&lt;br/&gt;up some terrible new DoS possibility I don&amp;#39;t think it really matters much&lt;br/&gt;what the exact number is.&lt;br/&gt;&lt;br/&gt;It is only a DoS protection limit if you want to rely on trusting miners. I&lt;br/&gt;prefer a system where I don&amp;#39;t have to do that.&lt;br/&gt;&lt;br/&gt;But I agree the numbers don&amp;#39;t matter much, for a different reason: the&lt;br/&gt;market will fill up whatever space is available, and we&amp;#39;ll have the same&lt;br/&gt;discussion when the new limit doesn&amp;#39;t seem enough anymore.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150806/7e4c45e8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150806/7e4c45e8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs26shth8yp9n4ney5nesxzu7we9fwf95pp5zx2mjfeyzlh7cz25uszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5vn89m</id>
    
      <title type="html">📅 Original date posted:2015-08-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs26shth8yp9n4ney5nesxzu7we9fwf95pp5zx2mjfeyzlh7cz25uszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv5vn89m" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxspm245xpzv24tufr5504l3jpdkva362j0yer87c4kv2c44c893g7khqca&#39;&gt;nevent1q…hqca&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-06&lt;br/&gt;📝 Original message:On Thu, Aug 6, 2015 at 3:40 PM, Gavin Andresen 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; On Wed, Aug 5, 2015 at 9:26 PM, Jorge Timón &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is a much more reasonable position. I wish this had been starting&lt;br/&gt;&amp;gt;&amp;gt; point of this discussion instead of &amp;#34;the block size limit must be&lt;br/&gt;&amp;gt;&amp;gt; increased as soon as possible or bitcoin will fail&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It REALLY doesn&amp;#39;t help the debate when you say patently false statements&lt;br/&gt;&amp;gt; like that.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My first blog post on this issue is here:&lt;br/&gt;&amp;gt;   &lt;a href=&#34;http://gavinandresen.ninja/why-increasing-the-max-block-size-is-urgent&#34;&gt;http://gavinandresen.ninja/why-increasing-the-max-block-size-is-urgent&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ... and I NEVER say &amp;#34;Bitcoin will fail&amp;#34;.  I say:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;If the number of transactions waiting gets large enough, the end result&lt;br/&gt;&amp;gt; will be an over-saturated network, busy doing nothing productive. I don’t&lt;br/&gt;&amp;gt; think that is likely– it is more likely people just stop using Bitcoin&lt;br/&gt;&amp;gt; because transaction confirmation becomes increasingly unreliable.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;But you seem to consider that a bad thing. Maybe saying that you&amp;#39;re&lt;br/&gt;claiming that this equals Bitcoin failing is an exaggeration, but you do&lt;br/&gt;believe that evolving towards an ecosystem where there is competition for&lt;br/&gt;block space is a bad thing, right?&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t agree that &amp;#34;Not everyone is able to use the block chain for every&lt;br/&gt;use case&amp;#34; is the same thing as &amp;#34;People stop using Bitcoin&amp;#34;. People are&lt;br/&gt;already not using it for every use case.&lt;br/&gt;&lt;br/&gt;Here is what my proposed BIP says: &amp;#34;No hard forking change that relaxes the&lt;br/&gt;block size limit can be guaranteed to provide enough space for every&lt;br/&gt;possible demand - or even any particular demand - unless strong&lt;br/&gt;centralization of the mining ecosystem is expected. Because of that, the&lt;br/&gt;development of a fee market and the evolution towards an ecosystem that is&lt;br/&gt;able to cope with block space competition should be considered healthy.&amp;#34;&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150806/aff56c38/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150806/aff56c38/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgl0wm5sjuked68ys6e8ylyr3kuq06hy0a5sv9g78jdduct5ynkcszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv3v5vk4</id>
    
      <title type="html">📅 Original date posted:2015-08-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgl0wm5sjuked68ys6e8ylyr3kuq06hy0a5sv9g78jdduct5ynkcszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv3v5vk4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvvxs3hwdfgf7un7wq7fjyyhxy6qu8w6rp2xr3n570cq2yd3lp2acqdnna2&#39;&gt;nevent1q…nna2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-06&lt;br/&gt;📝 Original message:On Thu, Aug 6, 2015 at 4:21 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Thu, Aug 6, 2015 at 10:06 AM, Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; But you seem to consider that a bad thing. Maybe saying that you&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt; claiming that this equals Bitcoin failing is an exaggeration, but you do&lt;br/&gt;&amp;gt;&amp;gt; believe that evolving towards an ecosystem where there is competition for&lt;br/&gt;&amp;gt;&amp;gt; block space is a bad thing, right?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, competition for block space is good.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;So if we would have 8 MB blocks, and there is a sudden influx of users (or&lt;br/&gt;settlement systems, who serve much more users) who want to pay high fees&lt;br/&gt;(let&amp;#39;s say 20 transactions per second) making the block chain inaccessible&lt;br/&gt;for low fee transactions, and unreliable for medium fee transactions (for&lt;br/&gt;any value of low, medium, and high), would you be ok with that? If so, why&lt;br/&gt;is 8 MB good but 1 MB not? To me, they&amp;#39;re a small constant factor that does&lt;br/&gt;not fundamentally improve the scale of the system. I dislike the outlook of&lt;br/&gt;&amp;#34;being forever locked at the same scale&amp;#34; while technology evolves, so my&lt;br/&gt;proposal tries to address that part. It intentionally does not try to&lt;br/&gt;improve a small factor, because I don&amp;#39;t think it is valuable.&lt;br/&gt;&lt;br/&gt;What is bad is artificially limiting or centrally controlling the supply of&lt;br/&gt;&amp;gt; that space.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It&amp;#39;s exactly as centrally limited as the finite supply of BTC - by&lt;br/&gt;consensus. You and I may agree that a finite supply is a good thing, and&lt;br/&gt;may disagree about whether a consensus rule about the block size is a good&lt;br/&gt;idea (and if so, at what level), but it&amp;#39;s a choice we make as a community&lt;br/&gt;about the rules of the system we want to use.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150806/d69b8f33/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150806/d69b8f33/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrrj0rhpqnm5d5d0kgegctsgvc7ak0gjp6xhvfhh00u2lqnm2m7sszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvucqd07</id>
    
      <title type="html">📅 Original date posted:2015-08-04 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrrj0rhpqnm5d5d0kgegctsgvc7ak0gjp6xhvfhh00u2lqnm2m7sszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvucqd07" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrnuje04hgwcj04k94wg2er2xzl2ateq6m5l0escykuauayrw6gxcnv0e4l&#39;&gt;nevent1q…0e4l&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-04&lt;br/&gt;📝 Original message:On Tue, Aug 4, 2015 at 3:12 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Tue, Aug 4, 2015 at 7:27 AM, Pieter Wuille via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I would say that things already demonstrately got terrible. The mining&lt;br/&gt;&amp;gt;&amp;gt; landscape is very centralized, with apparently a majority depending on&lt;br/&gt;&amp;gt;&amp;gt; agreements to trust each other&amp;#39;s announced blocks without validation.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; And that is a problem... why?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;If miners need to form alliances of trusting each other&amp;#39;s blocks without&lt;br/&gt;validation to overcome the inefficiencies of slow block propagation, I&lt;br/&gt;think we have a system that is in direct conflict with the word&lt;br/&gt;&amp;#34;permissionless&amp;#34; that you use later.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; As Bitcoin grows, pieces of the ecosystem will specialize. Satoshi&amp;#39;s&lt;br/&gt;&amp;gt; original code did everything: hashing, block assembly, wallet, consensus,&lt;br/&gt;&amp;gt; network. That is changing, and that is OK.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Specialization is perfectly fine.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe that if the above would have happened overnight, people would&lt;br/&gt;&amp;gt; have cried wolf. But somehow it happened slow enough, and &amp;#34;things kept&lt;br/&gt;&amp;gt; working&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think that this is a good criterion. Bitcoin can &amp;#34;work&amp;#34; with&lt;br/&gt;&amp;gt; gigabyte blocks today, if everyone uses the same few blockchain validation&lt;br/&gt;&amp;gt; services, the same few online wallets, and mining is done by a cartel that&lt;br/&gt;&amp;gt; only allows joining after signing a contract so they can sue you if you&lt;br/&gt;&amp;gt; create an invalid block. Do you think people will then agree that &amp;#34;things&lt;br/&gt;&amp;gt; got demonstratebly worse&amp;#34;?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Don&amp;#39;t turn Bitcoin into something uninteresting, please.&lt;br/&gt;&amp;gt;&lt;br/&gt;Why is what you, personally, find interesting relevant?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I find it interesting to build a system that has potential to bring about&lt;br/&gt;innovation.&lt;br/&gt;&lt;br/&gt;I understand you want to build an extremely decentralized system, where&lt;br/&gt;&amp;gt; everybody participating trusts nothing except the genesis block hash.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That is not true, I&amp;#39;m sorry if that is the impression I gave.&lt;br/&gt;&lt;br/&gt;I see centralization and scalability as a trade-off, and for better or for&lt;br/&gt;worse, the block chain only offers one trade-off. I want to see technology&lt;br/&gt;built on top that introduces lower levels of trust than typical fully&lt;br/&gt;centralized systems, while offering increased convenience, speed,&lt;br/&gt;reliability, and scale. I just don&amp;#39;t think that all of that can happen on&lt;br/&gt;the lowest layer without hurting everything built on top. We need different&lt;br/&gt;trade-offs, and the blockchain is just one, but a very fundamental one.&lt;br/&gt;&lt;br/&gt;I think it is more interesting to build a system that works for hundreds of&lt;br/&gt;&amp;gt; millions of people, with no central point of control and the opportunity&lt;br/&gt;&amp;gt; for ANYBODY to participate at any level. Permission-less innovation is what&lt;br/&gt;&amp;gt; I find interesting.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That sounds amazing, but do you think that Bitcoin, as it exists today, can&lt;br/&gt;scale to hundreds of millions of users, while retaining any glimpse of&lt;br/&gt;permission-lessness and decentralization? I think we need low-trust&lt;br/&gt;off-chain systems and other innovations to make that happen.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; And I think the current &amp;#34;demonstrably terrible&amp;#34; Bitcoin system is still&lt;br/&gt;&amp;gt; INCREDIBLY interesting.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m happy for you, then.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150804/1128ad92/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150804/1128ad92/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2rzjnv4m8qk50gs5ylggwyvsu8yqmlmv5zzjae6wzupg58fg7zcszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvqjrf4e</id>
    
      <title type="html">📅 Original date posted:2015-08-04 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2rzjnv4m8qk50gs5ylggwyvsu8yqmlmv5zzjae6wzupg58fg7zcszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvqjrf4e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs95aklyez0pet27vmcqxj7v2v8pe2pfapwd5mftreunhcpfu7hl4c8f5lvz&#39;&gt;nevent1q…5lvz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-04&lt;br/&gt;📝 Original message:I would say that things already demonstrately got terrible. The mining&lt;br/&gt;landscape is very centralized, with apparently a majority depending on&lt;br/&gt;agreements to trust each other&amp;#39;s announced blocks without validation. Full&lt;br/&gt;node count is at its historically lowest value in years, and outsourcing of&lt;br/&gt;full validation keeps growing.&lt;br/&gt;&lt;br/&gt;I believe that if the above would have happened overnight, people would&lt;br/&gt;have cried wolf. But somehow it happened slow enough, and &amp;#34;things kept&lt;br/&gt;working&amp;#34;.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think that this is a good criterion. Bitcoin can &amp;#34;work&amp;#34; with&lt;br/&gt;gigabyte blocks today, if everyone uses the same few blockchain validation&lt;br/&gt;services, the same few online wallets, and mining is done by a cartel that&lt;br/&gt;only allows joining after signing a contract so they can sue you if you&lt;br/&gt;create an invalid block. Do you think people will then agree that &amp;#34;things&lt;br/&gt;got demonstratebly worse&amp;#34;?&lt;br/&gt;&lt;br/&gt;Don&amp;#39;t turn Bitcoin into something uninteresting, please.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&lt;br/&gt;On Aug 4, 2015 1:04 PM, &amp;#34;Hector Chu via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Mike&amp;#39;s position is that he wants the block size limit&lt;br/&gt;&amp;gt; to eventually be removed. That is of course an extreme view. Meanwhile,&lt;br/&gt;&amp;gt; your view that the block size should be artificially constrained below the&lt;br/&gt;&amp;gt; organic growth curve (in a way that will penalize a majority of existing&lt;br/&gt;&amp;gt; and future users) lies at the other extreme. The majority position lies&lt;br/&gt;&amp;gt; somewhere in between (i.e. a one-time increase to 8MB). This is the&lt;br/&gt;&amp;gt; position that ultimately matters.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the block size is increased to 8MB and things get demonstrably a whole&lt;br/&gt;&amp;gt; lot worse, then you will have a solid leg to stand on. In that case we can&lt;br/&gt;&amp;gt; always do another hard fork later to reduce the block size back to&lt;br/&gt;&amp;gt; something smaller, and henceforth the block size will never be touched&lt;br/&gt;&amp;gt; again.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On 4 August 2015 at 11:35, Jorge Timón &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Fri, Jul 31, 2015 at 4:58 PM, Mike Hearn &amp;lt;hearn at vinumeris.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; How more users or more nodes can bring more miners, or more&lt;br/&gt;&amp;gt;&amp;gt; importantly,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; improve mining decentralization?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Because the bigger the ecosystem is the more interest there is in taking&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; part?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As explained by Venzen, this is a non-sequitur.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I mean, I guess I don&amp;#39;t know how to answer your question.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t know the answer either, that&amp;#39;s fine. It&amp;#39;s the opposite&lt;br/&gt;&amp;gt;&amp;gt; question that I&amp;#39;ve been insistently repeating and you&amp;#39;ve been&lt;br/&gt;&amp;gt;&amp;gt; (consciously or not) consistently evading.&lt;br/&gt;&amp;gt;&amp;gt; But that&amp;#39;s also fine because I believe you finally answer it a few lines&lt;br/&gt;&amp;gt;&amp;gt; below.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; When Bitcoin was&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; new it had almost no users and almost no miners. Now there are millions&lt;br/&gt;&amp;gt;&amp;gt; of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; users and factories producing ASICs just for Bitcoin.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The emergence of a btc price enabled the emergence of professional&lt;br/&gt;&amp;gt;&amp;gt; miners, which in turn enabled the emergence of sha256d-specialized&lt;br/&gt;&amp;gt;&amp;gt; hardware production companies.&lt;br/&gt;&amp;gt;&amp;gt; Nothing surprising there.&lt;br/&gt;&amp;gt;&amp;gt; By no means it consitutes an example of how a bigger consensus sizes&lt;br/&gt;&amp;gt;&amp;gt; can cause less mining centralization.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Surely the correlation is obvious?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Correlation does not imply causation. I will better leave it at that...&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I&amp;#39;m sorry, but until there&amp;#39;s a simulation that I can run with different&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; sizes&amp;#39; testchains (for example using #6382) to somehow compare them, I&lt;br/&gt;&amp;gt;&amp;gt; will&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; consider any value arbitrary.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Gavin did run simulations. 20mb isn&amp;#39;t arbitrary, the process behind it&lt;br/&gt;&amp;gt;&amp;gt; was&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; well documented here:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;http://gavinandresen.ninja/does-more-transactions-necessarily-mean-more-centralized&#34;&gt;http://gavinandresen.ninja/does-more-transactions-necessarily-mean-more-centralized&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I chose 20MB as a reasonable block size to target because 170 gigabytes&lt;br/&gt;&amp;gt;&amp;gt; per&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; month comfortably fits into the typical 250-300 gigabytes per month data&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; cap– so you can run a full node from home on a “pretty good” broadband&lt;br/&gt;&amp;gt;&amp;gt; plan.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Did you think 20mb was picked randomly?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; No, I think 20 MB was chosen very optimistically, considering 3rd&lt;br/&gt;&amp;gt;&amp;gt; party services rates (not the same service as self-hosting) in the&lt;br/&gt;&amp;gt;&amp;gt; so-called &amp;#34;first world&amp;#34;. And then 20 MB goes to 20 GB, again with&lt;br/&gt;&amp;gt;&amp;gt; optimistic and by no means scientific expectations.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; But where the number comes from it&amp;#39;s not really what I&amp;#39;m demaning,&lt;br/&gt;&amp;gt;&amp;gt; what I want is some criterion that can tell you that a given size&lt;br/&gt;&amp;gt;&amp;gt; would be &amp;#34;too centralized&amp;#34; but another one isn&amp;#39;t.&lt;br/&gt;&amp;gt;&amp;gt; I haven&amp;#39;t read any analysis on why 8GB is a better option than 7GB and&lt;br/&gt;&amp;gt;&amp;gt; 9GB for a given criterion (nor one declaring 20 GB a winner over 19 GB&lt;br/&gt;&amp;gt;&amp;gt; or 21 GB).&lt;br/&gt;&amp;gt;&amp;gt; A simulation test passing 20 GB but not 21 GB would make it far less&lt;br/&gt;&amp;gt;&amp;gt; arbitrary.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Agreed on the first sentence, I&amp;#39;m just saying that the influence of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the blocksize in that function is monotonic: with bigger sizes, equal&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; or worse mining centralization.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I have a hard time agreeing with this because I&amp;#39;ve seen Bitcoin go from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; blocks that were often empty to blocks that are often full, and in this&lt;br/&gt;&amp;gt;&amp;gt; time&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the number of miners and hash power on the network has gone up a huge&lt;br/&gt;&amp;gt;&amp;gt; amount&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; too.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m of course talking about consensus maximum blocksize, not about&lt;br/&gt;&amp;gt;&amp;gt; actual blocksize.&lt;br/&gt;&amp;gt;&amp;gt; Yes, again, when mining becomes profitable, economic actors tend to&lt;br/&gt;&amp;gt;&amp;gt; appear and get those profits.&lt;br/&gt;&amp;gt;&amp;gt; But don&amp;#39;t confuse total hashrate improvements with an &amp;#34;increase in the&lt;br/&gt;&amp;gt;&amp;gt; number of miners&amp;#34; or with mining decentralization.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; You can argue that a miner doesn&amp;#39;t count if they pool mine. But if a&lt;br/&gt;&amp;gt;&amp;gt; miner&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; mines on a pool that uses exactly the same software and settings as the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; miner would have done anyway, then it makes no difference. Miners can&lt;br/&gt;&amp;gt;&amp;gt; switch&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; between pools to find one that works the way they like, so whilst less&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; pooling or more decentralised pools would be nice (e.g.&lt;br/&gt;&amp;gt;&amp;gt; getblocktemplate),&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; and I&amp;#39;ve written about how to push it forward before, I still say there&lt;br/&gt;&amp;gt;&amp;gt; are&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; many more miners than in the past.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; If I had to pick between two changes to improve mining decentralisation:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; 1) Lower block size&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Finally, I think you finally answered my repetitive question here.&lt;br/&gt;&amp;gt;&amp;gt; If I say &amp;#34;Mike Hearn understands that the consensus block size maximum&lt;br/&gt;&amp;gt;&amp;gt; rule is a tool for limitting mining centralization&amp;#34; I&amp;#39;m not putting&lt;br/&gt;&amp;gt;&amp;gt; words in your mouth, right?&lt;br/&gt;&amp;gt;&amp;gt; I think many users advocating for an increase in the consensus limit&lt;br/&gt;&amp;gt;&amp;gt; don&amp;#39;t understand this, which is extremely unfortunate for the debate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; 2) Finishing, documenting, and making the UX really slick for a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; getblocktemplate based decentralised mining pool&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; then I&amp;#39;d pick (2) in a heartbeat. I think it&amp;#39;d be a lot more effective.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Great! Maybe after 2 mining centralization improves so much that we&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt; confortable not only not lowering it but rather increasing it.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; you should be consequently advocating for full removal of the limit&lt;br/&gt;&amp;gt;&amp;gt; rather&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; than changes towards bigger arbitrary values.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I did toy with that idea a while ago. Of course there can not really be&lt;br/&gt;&amp;gt;&amp;gt; no&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; limit at all because the code assumes blocks fit into RAM/swap, and&lt;br/&gt;&amp;gt;&amp;gt; nodes&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; would just end up ignoring blocks they couldn&amp;#39;t download in time anyway.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; There is obviously a physical limit somewhere.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Did the fact that you &amp;#34;understand that the consensus block size&lt;br/&gt;&amp;gt;&amp;gt; maximum rule is a tool for limitting mining centralization&amp;#34; influenced&lt;br/&gt;&amp;gt;&amp;gt; your rejection of that idea at all?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; But it is easier to find common ground with others by compromising. Is&lt;br/&gt;&amp;gt;&amp;gt; 8mb&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; better than no limit? I don&amp;#39;t know and I don&amp;#39;t care much:  I think&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; adoption is a slow, hard process and we&amp;#39;ll be lucky to increase average&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; usage 8x over the next couple of years. So if 8mb&#43; is better for others,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; that&amp;#39;s OK by me.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The only way that &amp;#34;not caring much whther we have a consensus limit or&lt;br/&gt;&amp;gt;&amp;gt; not&amp;#34; and &amp;#34;understand that the consensus block size maximum rule is a&lt;br/&gt;&amp;gt;&amp;gt; tool for limitting mining centralization&amp;#34; at the same time is by not&lt;br/&gt;&amp;gt;&amp;gt; caring about mining centralization at all.&lt;br/&gt;&amp;gt;&amp;gt; Is that your position?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you don&amp;#39;t care about having a limit but you don&amp;#39;t want to limit&lt;br/&gt;&amp;gt;&amp;gt; transaction volume, then &#43;&#43;current_size will ALWAYs be your&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;compromise position&amp;#34; and no blocksize increase will ever be enough&lt;br/&gt;&amp;gt;&amp;gt; until the limit is completely removed.&lt;br/&gt;&amp;gt;&amp;gt; Is that your position?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Re: exchange profit. You can pick some other useful service provider if&lt;br/&gt;&amp;gt;&amp;gt; you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; like. Payment processors or cold storage providers or the TREZOR&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; manufacturers or whoever.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Yes, and I believe the same points stand.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; My point is you can&amp;#39;t have a tiny high-value-transactions only currency&lt;br/&gt;&amp;gt;&amp;gt; AND&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; all the useful infrastructure that the Bitcoin community is making.&lt;br/&gt;&amp;gt;&amp;gt; It&amp;#39;s a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; contradiction. And without the infrastructure bitcoin ceases to be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; interesting even to people who are willing to pay huge sums to use it.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; You keep talking about &amp;#34;high-value-transactions-only&amp;#34; like if&lt;br/&gt;&amp;gt;&amp;gt; non-urgent transaction fees rising from zero to, say, 1 satoshi, would&lt;br/&gt;&amp;gt;&amp;gt; automatically result in that &amp;#34;high-value-transactions-only&amp;#34; Bitcoin.&lt;br/&gt;&amp;gt;&amp;gt; Please, stop talking as if someone was proposing a&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;high-value-transactions-only&amp;#34; Bitcoin. That may happen but nobody&lt;br/&gt;&amp;gt;&amp;gt; really knows. If it happens it may not be bad thing necessarily (ie&lt;br/&gt;&amp;gt;&amp;gt; bitcoin microtransactions can still happen using trustless payment&lt;br/&gt;&amp;gt;&amp;gt; channels and x is still cheaper than x% for any transacted value&lt;br/&gt;&amp;gt;&amp;gt; higher than 100) but that&amp;#39;s really not what we&amp;#39;re talking about here&lt;br/&gt;&amp;gt;&amp;gt; so it seems distraction that can only help further polirizing this&lt;br/&gt;&amp;gt;&amp;gt; discussion.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; What we&amp;#39;re talking about here is that hitting the limit would&lt;br/&gt;&amp;gt;&amp;gt; (hopefully) make miners start caring about fees. Enough that they stop&lt;br/&gt;&amp;gt;&amp;gt; being irrational about free transactions. If both things happen,&lt;br/&gt;&amp;gt;&amp;gt; non-urgent transaction fees will likely rise (as said, above zero).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; You think that would be a catastrophe for adoption and I disagree.&lt;br/&gt;&amp;gt;&amp;gt; But (as Pieter has repeatedly explained) for any size there will be&lt;br/&gt;&amp;gt;&amp;gt; use cases that will be eventually priced out.&lt;br/&gt;&amp;gt;&amp;gt; So when rising this consensus limit, not increasing centralization&lt;br/&gt;&amp;gt;&amp;gt; should be the priority and the potential impact in market fees a much&lt;br/&gt;&amp;gt;&amp;gt; more secondary concern.&lt;br/&gt;&amp;gt;&amp;gt; Do you agree with this?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m sure there are many intermediate positions between &amp;#34;caring more&lt;br/&gt;&amp;gt;&amp;gt; about mining centralization than market fees when deciding about a&lt;br/&gt;&amp;gt;&amp;gt; consensus rule that limits mining centralization&amp;#34; and &amp;#34;not caring&lt;br/&gt;&amp;gt;&amp;gt; about mining centralization at all&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt; I really don&amp;#39;t want to put words in your mouth, but I honestly don&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; know what your position is.&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t really know how else can I ask the same question: you don&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; care the consensus maximum blocksize rule being here at all or not&lt;br/&gt;&amp;gt;&amp;gt; (you just said that).&lt;br/&gt;&amp;gt;&amp;gt; Is it because you don&amp;#39;t think it limits mining centralization or&lt;br/&gt;&amp;gt;&amp;gt; because you don&amp;#39;t care about limiting mining centralization with&lt;br/&gt;&amp;gt;&amp;gt; consensus rules at all?&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150804/2b6fdfa3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150804/2b6fdfa3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:32:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsthz9zclvr7kvfpu079g722quy4rq9t8hgrdxv989vgwz4n3g6gaczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv6zuew6</id>
    
      <title type="html">📅 Original date posted:2016-01-07 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsthz9zclvr7kvfpu079g722quy4rq9t8hgrdxv989vgwz4n3g6gaczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv6zuew6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswdrgcnt034p6tuuryf352c5zlq57e0thhurj23m6y9xn4j2kpg9q8rssee&#39;&gt;nevent1q…ssee&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-01-07&lt;br/&gt;📝 Original message:&amp;gt; &amp;#34;The problem case is where someone in a contract setup shows you a&lt;br/&gt;script, which you accept as being a payment to yourself. An attacker could&lt;br/&gt;use a collision attack to construct scripts with identical hashes, only one&lt;br/&gt;of which does have the property you want, and steal coins.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So you really want collision security, and I don&amp;#39;t think 80 bits is&lt;br/&gt;something we should encourage for that. Normal pubkey hashes don&amp;#39;t have&lt;br/&gt;that problem, as they can&amp;#39;t be constructed to pay to you.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ... but I&amp;#39;m unconvinced:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;But it is trivial for contract wallets to protect against collision&lt;br/&gt;attacks-- if you give me a script that is &amp;#34;gavin_pubkey CHECKSIG&lt;br/&gt;arbitrary_data OP_DROP&amp;#34; with &amp;#34;I promise I&amp;#39;m not trying to rip you off, just&lt;br/&gt;ignore that arbitrary data&amp;#34; a wallet can just refuse. Even more likely, a&lt;br/&gt;contract wallet won&amp;#39;t even recognize that as a pay-to-gavin transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suppose it could be looking for some form of &amp;#34;gavin_pubkey&lt;br/&gt;somebody_else_pubkey CHECKMULTISIG ... with the attacker using&lt;br/&gt;somebody_else_pubkey to force the collision, but, again, trivial contract&lt;br/&gt;protocol tweaks (&amp;#34;send along a proof you have the private key corresponding&lt;br/&gt;to the public key&amp;#34; or &amp;#34;everybody pre-commits pubkeys they&amp;#39;ll use at&lt;br/&gt;protocol start&amp;#34;) would protect against that.&lt;br/&gt;&lt;br/&gt;Yes, this is what I worry about. We&amp;#39;re constructing a 2-of-2 multisig&lt;br/&gt;escrow in a contract. I reveal my public key A, you do a 80-bit search for&lt;br/&gt;B and C such that H(A and B) = H(B and C). You tell me your keys B, and I&lt;br/&gt;happily send to H(A and B), which you steal with H(B and C).&lt;br/&gt;&lt;br/&gt;Sending along a proof does not help, you can&amp;#39;t prove that you do not know&lt;br/&gt;of a collision. Pre-committing does help, but is a very non-obvious&lt;br/&gt;security requirement, something I strongly believe is far riskier in&lt;br/&gt;practice.&lt;br/&gt;&lt;br/&gt;Bitcoin does have parts that rely on economic arguments for security or&lt;br/&gt;privacy, but can we please stick to using cryptography that is up to par&lt;br/&gt;for parts where we can? It&amp;#39;s a small constant factor of data, and it&lt;br/&gt;categorically removes the worry about security levels.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160108/e2e921fb/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160108/e2e921fb/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:31:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswvs00m4vgj4re5z8q6hsga2hkqv7c0zcykvt45smavumtqaghkpgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvzusrec</id>
    
      <title type="html">📅 Original date posted:2016-01-08 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswvs00m4vgj4re5z8q6hsga2hkqv7c0zcykvt45smavumtqaghkpgzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvzusrec" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyz4uxs3qnl9w6edjrwvx0py60vl4h6dl033f0crnktp7anh40s0c8leyn9&#39;&gt;nevent1q…eyn9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-01-08&lt;br/&gt;📝 Original message:On Fri, Jan 8, 2016 at 2:54 AM, Gavin Andresen via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; I&amp;#39;m saying we can eliminate one somewhat unlikely attack (that there is a&lt;br/&gt;&amp;gt; bug in the code or test cases, today or some future version, that has to&lt;br/&gt;&amp;gt; decide what to do with &amp;#34;version 0&amp;#34; versus &amp;#34;version 1&amp;#34; witness programs) by&lt;br/&gt;&amp;gt; accepting the risk of another insanely, extremely unlikely attack.&lt;br/&gt;&lt;br/&gt;Ok, just having one witness program version now is a somewhat different&lt;br/&gt;proposal. It would be simpler for sure. The reasoning was that you&amp;#39;d need&lt;br/&gt;this to not add significant overhead to small scripts, but that may not be&lt;br/&gt;the case anymore. I wouldn&amp;#39;t mind seeing numbers.&lt;br/&gt;&lt;br/&gt;&amp;gt; My proposal would be to just do a version 0 witness program now, that is&lt;br/&gt;&amp;gt; RIPEMD160(SHA256(script)).&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think that is wise. Bitcoin has a 128-bit security target for&lt;br/&gt;everything else. We did not know that P2SH and similar constructs were&lt;br/&gt;vulnerable to a collision attack at the time, but now we do, so the obvious&lt;br/&gt;choice is to pick a size that is sufficiently large to maintain the 128-bit&lt;br/&gt;security target. This is a no brainer to me; we&amp;#39;re not proposing switching&lt;br/&gt;to a 160-bit EC curve either, right?&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;m really disappointed with the &amp;#34;Here&amp;#39;s the spec, take it or leave it&amp;#34;&lt;br/&gt;&amp;gt; attitude. What&amp;#39;s the point of having a BIP process if the discussion just&lt;br/&gt;&amp;gt; comes down to &amp;#34;We think more is better. We don&amp;#39;t care what you think.&amp;#34;&lt;br/&gt;&lt;br/&gt;It is a proposal and we are discussing it. You first brought up some&lt;br/&gt;criticisms in private, and I agreed with several things you said.&lt;br/&gt;&lt;br/&gt;But it remains the proposal of a few people including me, and I do not&lt;br/&gt;agree with the specific suggestion of reducing the security target for&lt;br/&gt;witness scripts to 80 bits.&lt;br/&gt;&lt;br/&gt;We are not deciding what the system will be. We&amp;#39;re making a proposal, and&lt;br/&gt;hope that due to its technical merit, the ecosystem will adopt it. You&amp;#39;re&lt;br/&gt;free to participate in that discussion.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20160108/2420393c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160108/2420393c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:31:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswvysqxl0wv7edq073d8pjq7yjgellkj7lgrz0s7fm6e4p844hylszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv8dd4g4</id>
    
      <title type="html">📅 Original date posted:2015-08-10 📝 Original message:On Aug ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswvysqxl0wv7edq073d8pjq7yjgellkj7lgrz0s7fm6e4p844hylszypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dv8dd4g4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszx3uanlktpz86ma7vlkxnexf0equpl2njj94pwl8xv7cquslfavclj3fv5&#39;&gt;nevent1q…3fv5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-10&lt;br/&gt;📝 Original message:On Aug 7, 2015 11:19 PM, &amp;#34;Sergio Demian Lerner via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; b. Reduce the block rate to a half (average 5 minute blocks)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Suppose this is a one time hard fork. There no drastic technical problems&lt;br/&gt;with any of them: &amp;#34;SPV&amp;#34; mining and the relay network has shown that block&lt;br/&gt;propagation is not an issue for such as small change. Mining centralization&lt;br/&gt;won&amp;#39;t radically change for a 2x adjustment.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t understand this. All problems that result from propagation delay&lt;br/&gt;are literally doubled by doing so. Centralization pressure results from the&lt;br/&gt;ratio between propagation time and interblock time. Efficient propagation&lt;br/&gt;algorithms like the relay network make this presumably grow sublinear with&lt;br/&gt;larger blocks, but changing the interblock time affects it exactly&lt;br/&gt;proportionally.&lt;br/&gt;&lt;br/&gt;All problems that result from propagation delay are literally doubled by&lt;br/&gt;doing this. Doubling the block size has a smaller effect. You may argue&lt;br/&gt;that these centralization effects are small, but reducing the interblock&lt;br/&gt;time has a stronger effect on them than the block size.&lt;br/&gt;&lt;br/&gt;Also, you seem to consider SPV mining a good thing? It requires trust&lt;br/&gt;between miners that know eachother, and fundamentally breaks the security&lt;br/&gt;assumption of SPV clients... and if the propagation/interblock ratio was&lt;br/&gt;lower, SPV mining would have less effect. I&amp;#39;d say it is exactly a result of&lt;br/&gt;the centralization pressure we&amp;#39;re trying to avoid.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150810/f50a4a75/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150810/f50a4a75/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:46:18Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqpg6uqcxpnlhwcrcjau58q00va99x8cwxuppl3zw53xv32xh22sqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvwc8ulm</id>
    
      <title type="html">📅 Original date posted:2015-08-10 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqpg6uqcxpnlhwcrcjau58q00va99x8cwxuppl3zw53xv32xh22sqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvwc8ulm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsggfms8lwaxtadakuxdlyadw8jhpju74mml0trgklc5cjlyr9xsucwvn64q&#39;&gt;nevent1q…n64q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-10&lt;br/&gt;📝 Original message:On Mon, Aug 10, 2015 at 4:12 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Executive summary: when networks get over-saturated, they become&lt;br/&gt;&amp;gt; unreliable.  Unreliable is bad.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unreliable and expensive is extra bad, and that&amp;#39;s where we&amp;#39;re headed&lt;br/&gt;&amp;gt; without an increase to the max block size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think I see your point of view. You see demand for on-chain transactions&lt;br/&gt;as a single number that grows with adoption. Once the transaction creation&lt;br/&gt;rate grows close to the capacity, transactions will become unreliable, and&lt;br/&gt;you consider this a bad thing.&lt;br/&gt;&lt;br/&gt;And if you see Bitcoin as a payment system where guaranteed time to&lt;br/&gt;confirmation is a feature, I fully agree. But I think that is an&lt;br/&gt;unrealistic dream. It only seems reliable because of lack of use. It costs&lt;br/&gt;1.5 BTC per day to create enough transactions to fill the block chain at&lt;br/&gt;the minimum relay fee, and a small multiple of that at actual fee levels.&lt;br/&gt;Assuming that rate remains similar with an increased block size, that&lt;br/&gt;remains cheap.&lt;br/&gt;&lt;br/&gt;If you want transactions to be cheap, it will also be cheap to make them&lt;br/&gt;unreliable.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150810/0fff338b/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150810/0fff338b/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:46:01Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgkqytaagcjmd04sa5zza9djkjv573ekgdypzxqpzzx2f9alduqhqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvpptt9n</id>
    
      <title type="html">📅 Original date posted:2015-08-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgkqytaagcjmd04sa5zza9djkjv573ekgdypzxqpzzx2f9alduqhqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvpptt9n" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq9c9upqt9dw3sremrj5htsf8h7525zdhw6cqsa0r3t3glm2839qs9p9e8z&#39;&gt;nevent1q…9e8z&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-11&lt;br/&gt;📝 Original message:On Tue, Aug 11, 2015 at 11:35 PM, Michael Naber &amp;lt;mickeybob at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Bitcoin would be better money than current money even if it were a bit&lt;br/&gt;&amp;gt; more expensive to transact, simply because of its other great&lt;br/&gt;&amp;gt; characteristics (trustlessness, limited supply, etc). However... it is not&lt;br/&gt;&amp;gt; better than something else sharing all those same characteristics but which&lt;br/&gt;&amp;gt; is also less expensive. The best money will win, and if Bitcoin doesn&amp;#39;t&lt;br/&gt;&amp;gt; increase capacity then it won&amp;#39;t remain the best.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;If it is less expensive, it is harder to be reliable (because it&amp;#39;s easier&lt;br/&gt;for a sudden new use case to outbid the available space), which is less&lt;br/&gt;useful for a payment mechanism.&lt;br/&gt;&lt;br/&gt;If it has better scale (with the same technology), it will have higher&lt;br/&gt;centralization pressure. The higher price you potentially pay (in fees) to&lt;br/&gt;get your transactions on a smaller block chain is the price of higher&lt;br/&gt;security and independence. Perhaps the compromise is not at the optimal&lt;br/&gt;place, but please stop saying &amp;#34;below what the technology can do&amp;#34;. The&lt;br/&gt;technology can &amp;#34;do&amp;#34; gigabyte blocks I&amp;#39;m sure, If you accept that you need a&lt;br/&gt;small cluster to keep up with validation, and all blocks are produced by a&lt;br/&gt;single miner cartel.&lt;br/&gt;&lt;br/&gt;IMHO, Bitcoin (or any cryptocurrency) on-chain as a payment system is:&lt;br/&gt;* Expensive: there is a (known in advance and agreed upon) inflation that&lt;br/&gt;we&amp;#39;re using to pay miners. But by holding Bitcoin you&amp;#39;re paying for the&lt;br/&gt;security of the system, even if it is not in fees.&lt;br/&gt;* Unreliable: you never know when suddenly there will be more higher-fee&lt;br/&gt;transactions that outbid you.&lt;br/&gt;* Slow, unless you already trust the sender to not double spend (in which&lt;br/&gt;case you don&amp;#39;t actually need the security of the blockchain).&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know the future, and I don&amp;#39;t know what use cases will develop and&lt;br/&gt;what they&amp;#39;ll want to pay or what reliability they need. But let&amp;#39;s please&lt;br/&gt;not throw out the one quality that Bitcoin is still good at: lack of&lt;br/&gt;centralized parties to trust.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/a9e6e3a9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/a9e6e3a9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:45:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0qh30485j0jpnvwzytfvpjfl5t6ncusnw6ur53f8t3eyms5xassqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvme6d6h</id>
    
      <title type="html">📅 Original date posted:2015-08-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0qh30485j0jpnvwzytfvpjfl5t6ncusnw6ur53f8t3eyms5xassqzypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvme6d6h" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9vkaya5ka5hrzzk56c72tla9rkxeaf53ytljnfjkv92h6h3dpn3ccpnp42&#39;&gt;nevent1q…np42&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-11&lt;br/&gt;📝 Original message:On Tue, Aug 11, 2015 at 11:30 PM, Angel Leon 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; tell that to people in poor countries, or even in first world countries.&lt;br/&gt;&amp;gt; The competitive thing here is a deal breaker for a lot of people who have&lt;br/&gt;&amp;gt; no clue/don&amp;#39;t care for decentralization,&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Then they also don&amp;#39;t need their transactions to be on the blockchain, right?&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150811/f3e65461/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150811/f3e65461/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:45:53Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqqqra7gamyjp5weakuas63eghpdmuxxcuu8g744xpcesllrm38fczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvckrn7j</id>
    
      <title type="html">📅 Original date posted:2015-08-07 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqqqra7gamyjp5weakuas63eghpdmuxxcuu8g744xpcesllrm38fczypwtyxl46le9482xs7t38j7nysemhsgwgrhczw3u9rl8x405np2dvckrn7j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsds0twtt2xtean5muaa88dphjlnxvlfmg5askk0f5ynyt2wnv8l2qsqh06c&#39;&gt;nevent1q…h06c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-08-07&lt;br/&gt;📝 Original message:On Fri, Aug 7, 2015 at 5:55 PM, Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Fri, Aug 7, 2015 at 11:16 AM, Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I guess my question (and perhaps that&amp;#39;s what Jorge is after): do you feel&lt;br/&gt;&amp;gt;&amp;gt; that blocks should be increased in response to (or for fear of) such a&lt;br/&gt;&amp;gt;&amp;gt; scenario.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think there are multiple reasons to raise the maximum block size, and&lt;br/&gt;&amp;gt; yes, fear of Bad Things Happening as we run up against the 1MB limit is one&lt;br/&gt;&amp;gt; of the reasons.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I take the opinion of smart engineers who actually do resource planning&lt;br/&gt;&amp;gt; and have seen what happens when networks run out of capacity very seriously.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This is a fundamental disagreement then. I believe that the demand is&lt;br/&gt;infinite if you don&amp;#39;t set a fee minimum (and I don&amp;#39;t think we should), and&lt;br/&gt;it just takes time for the market to find a way to fill whatever is&lt;br/&gt;available - the rest goes into off-chain systems anyway. You will run out&lt;br/&gt;of capacity at any size, and acting out of fear of that reality does not&lt;br/&gt;improve the system. Whatever size blocks are actually produced, I believe&lt;br/&gt;the result will either be something people consider too small to be&lt;br/&gt;competitive (&amp;#34;you mean Bitcoin can only do 24 transactions per second?&amp;#34;&lt;br/&gt;sounds almost the same as &amp;#34;you mean Bitcoin can only do 3 transactions per&lt;br/&gt;second?&amp;#34;), or something that is very centralized in practice, and likely&lt;br/&gt;both.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; And if so, if that is a reason for increase now, won&amp;#39;t it be a reason for&lt;br/&gt;&amp;gt;&amp;gt; an increase later as well? It is my impression that your answer is yes,&lt;br/&gt;&amp;gt;&amp;gt; that this is why you want to increase the block size quickly and&lt;br/&gt;&amp;gt;&amp;gt; significantly, but correct me if I&amp;#39;m wrong.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sure, it might be a reason for an increase later. Here&amp;#39;s my message to&lt;br/&gt;&amp;gt; in-the-future Bitcoin engineers:  you should consider raising the maximum&lt;br/&gt;&amp;gt; block size if needed and you think the benefits of doing so (like increased&lt;br/&gt;&amp;gt; adoption or lower transaction fees or increased reliability) outweigh the&lt;br/&gt;&amp;gt; costs (like higher operating costs for full-nodes or the disruption caused&lt;br/&gt;&amp;gt; by ANY consensus rule change).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;In general that sounds reasonable, but it&amp;#39;s a dangerous precedent to make&lt;br/&gt;technical decisions based on a fear of change of economics...&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Pieter&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/20150807/8322a671/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150807/8322a671/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:45:40Z</updated>
  </entry>

</feed>