<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2023-06-07T01:45:24Z</updated>
  <generator>https://njump.me</generator>

  <title>Nostr notes by Russell O&#39;Connor [ARCHIVE]</title>
  <author>
    <name>Russell O&#39;Connor [ARCHIVE]</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://njump.me/npub1dw88wd5gqsqn6ufxhf9h03uk8087l7gfzdtez5csjlt6pupu4pwsj8plrw.rss" />
  <link href="https://njump.me/npub1dw88wd5gqsqn6ufxhf9h03uk8087l7gfzdtez5csjlt6pupu4pwsj8plrw" />
  <id>https://njump.me/npub1dw88wd5gqsqn6ufxhf9h03uk8087l7gfzdtez5csjlt6pupu4pwsj8plrw</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://njump.me/nevent1qqsrefdpw722wxkh83vf4gg755n2xg37z0nngc4cr9q2w0syhlklezczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968y6krr</id>
    
      <title type="html">📅 Original date posted:2023-08-21 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrefdpw722wxkh83vf4gg755n2xg37z0nngc4cr9q2w0syhlklezczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968y6krr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdtxcg5n72nk6z20f9fd0cav34jd3jajxhl8eeeu9089nl3xwcfegmn8jzx&#39;&gt;nevent1q…8jzx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-08-21&lt;br/&gt;🗒️ Summary of this message: Banning arbitrary data will lead to actors encoding their data within public keys, making it indistinguishable from random data. Users will find ways to tunnel their data through innocent-looking public key data. Counterparty has previously encoded their data within public key data.&lt;br/&gt;📝 Original message:&lt;br/&gt;It&amp;#39;s been said before, but I&amp;#39;ll say it again:&lt;br/&gt;&lt;br/&gt;If we ban &amp;#34;arbitrary data&amp;#34;, however you want to define it, then actors will&lt;br/&gt;simply respond by encoding their data within sets of public keys.  Public&lt;br/&gt;key data is indistinguishable from random data, and, unless we are willing&lt;br/&gt;to pad the blockchain with proof of knowledge of secret keys, there will be&lt;br/&gt;no way to tell a priori whether a given public key is really a public key&lt;br/&gt;or whether it is encoding an inscription or some other data.&lt;br/&gt;&lt;br/&gt;When certain governments try to censor certain internet protocols, users&lt;br/&gt;respond by tunnelling their protocol through something that appears to be&lt;br/&gt;innocent HTTPS (see Tor bridge nodes).  This works because, after a&lt;br/&gt;handshake, the remaining HTTPS stream, like public keys, is&lt;br/&gt;indistinguishable from random data, and can be used as a communications&lt;br/&gt;channel for arbitrary data.  If we attempt to ban &amp;#34;arbitrary data&amp;#34;, those&lt;br/&gt;users will simply respond by &amp;#34;tunneling&amp;#34; their data over innocent-looking&lt;br/&gt;public key data instead.&lt;br/&gt;&lt;br/&gt;Please correct me if I&amp;#39;m wrong, but I believe Counterparty has, in the&lt;br/&gt;past, encoded their data within public key data, so this concern is not&lt;br/&gt;hypothetical.&lt;br/&gt;&lt;br/&gt;On Sat, Aug 19, 2023 at 10:29 AM Chris Martl 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; It is already more than a half year since the probably mayor Bitcoin&lt;br/&gt;&amp;gt; script exploit started.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; These exploits are nothing new in the Bitcoin history and mostly are due&lt;br/&gt;&amp;gt; to the loose flexibility of the system in regards of processing&lt;br/&gt;&amp;gt; predicatives (Bitcoin script). The very first mayor bug; if you wish,&lt;br/&gt;&amp;gt; vulnerability, was the CVE-2010-5141, which still engages us without end&lt;br/&gt;&amp;gt; even after 14 years.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Subsequent Bitcoin historical events let to build more “improvements” upon&lt;br/&gt;&amp;gt; this wobbly basis exposing even more ground for exploits.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As long as this loose flexibility is not modified in a way its exposure&lt;br/&gt;&amp;gt; for exploits is eliminated remains nothing else than to pursue other&lt;br/&gt;&amp;gt; strategies; and ones which are compatible with the current status quo and&lt;br/&gt;&amp;gt; furthermore, with a permission-less system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here a strategy proposal:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let’s name it: #Ordisrespector and #Ordislow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Why #Ordisrespector and #Ordislow are compatible with a permission-less&lt;br/&gt;&amp;gt; system.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #Ordisrespector gives the option to a regular Bitcoin node operator to&lt;br/&gt;&amp;gt; opt-in or not to a self-defense of his/her storage property (and thus of&lt;br/&gt;&amp;gt; his/her integrity); by giving a signal of dissatisfaction with the current&lt;br/&gt;&amp;gt; affairs of aggression via insertion of arbitrary data into the witness&lt;br/&gt;&amp;gt; structure. This dissatisfaction signal is manifested by not taking into the&lt;br/&gt;&amp;gt; mempool and relaying transactions with inserted arbitrary data in the&lt;br/&gt;&amp;gt; witness structure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; #Ordislow gives the option to a regular Bitcoin node operator to opt-in or&lt;br/&gt;&amp;gt; not to a self-defense of his/her storage property (and thus of his/her&lt;br/&gt;&amp;gt; integrity); by increasing the coercion cost of mining-entities relative to&lt;br/&gt;&amp;gt; the cooperation cost of mining-entities due to the current affairs of&lt;br/&gt;&amp;gt; aggression via insertion of arbitrary data into the witness structure. This&lt;br/&gt;&amp;gt; coercion cost increment is manifested by not propagating a found block,&lt;br/&gt;&amp;gt; unless a configurable or maximum delay has elapsed, which contains at least&lt;br/&gt;&amp;gt; a transaction with inserted arbitrary data in the witness structure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Chris_______________________________________________&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/20230821/9f2cda38/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230821/9f2cda38/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-08-22T14:20:55Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2mkuexcd8txfklp3uhdpqu6chc82zujhz62ypj77xmapv2hz69nczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967n0s5p</id>
    
      <title type="html">📅 Original date posted:2023-02-22 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2mkuexcd8txfklp3uhdpqu6chc82zujhz62ypj77xmapv2hz69nczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967n0s5p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq8ur8ultgqmwmcgy0lpcfgj9tjsdkx55ettwtwnnwkcd6lhcz9ncxr40c0&#39;&gt;nevent1q…40c0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-22&lt;br/&gt;🗒️ Summary of this message: Codex32 allows for error correction aided by a computer, but it is more difficult to do by hand. It does not natively support nested SSSS like SLIP39.&lt;br/&gt;📝 Original message:On Sun, Feb 19, 2023 at 3:13 PM David A. Harding 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;    Codex32 allows the individual to periodically perform their&lt;br/&gt;&amp;gt;    recollection on paper in a private room without electronics and use&lt;br/&gt;&amp;gt;    nothing but a pen and some loookup tables (or a paper device) to&lt;br/&gt;&amp;gt;    verify that they recalled the string correctly (and its checksum can&lt;br/&gt;&amp;gt;    help with correcting up to several errors, although you might need a&lt;br/&gt;&amp;gt;    computer for error location and correction assistance).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;While perhaps not entirely impossible, doing error correction by hand is&lt;br/&gt;far more difficult than just the error detection process.&lt;br/&gt;Fortunately, error correction can be aided by a computer needing very&lt;br/&gt;little trust.&lt;br/&gt;&lt;br/&gt;When doing hand computation of the checksum, there is an error if the final&lt;br/&gt;&amp;#34;residue&amp;#34; is different from the value given in the codex32 spec.&lt;br/&gt;After double checking your hand computation by redoing it, if you still get&lt;br/&gt;the same incorrect residue, there is an error in your share data somewhere.&lt;br/&gt;&lt;br/&gt;What you can do is plug in the residue that you did compute into a&lt;br/&gt;computer, and have it produce an error correction string.&lt;br/&gt;You can then, by hand, add this error correction string to your share to&lt;br/&gt;get a corrected share.&lt;br/&gt;&lt;br/&gt;If it were the case that all types of character errors were equally likely&lt;br/&gt;(as in during an error any character is equally likely to be transformed&lt;br/&gt;into any other character), then the computer would gain zero information&lt;br/&gt;about your actual share data.  Of course, it is not in fact the case that&lt;br/&gt;all transcription errors are equally likely, and so the computer can learn&lt;br/&gt;a little bit about your share. The fewer errors that are made, the less&lt;br/&gt;data it can recover. If you only have one character in error, then 5 bits&lt;br/&gt;is the most data it can recover, and that is assuming that it can somehow&lt;br/&gt;infer your error perfectly from the delta of the error correction, which&lt;br/&gt;isn&amp;#39;t actually going to be the case.&lt;br/&gt;&lt;br/&gt;Of course, a single share from a split secret has no information about your&lt;br/&gt;master seed (the master seed is hidden in the correlation between different&lt;br/&gt;shares).  So learning partial information about one share isn&amp;#39;t going to be&lt;br/&gt;enough by itself to even begin compromising your master key.&lt;br/&gt;&lt;br/&gt;This all still needs to be written up in more detail, but I figured I would&lt;br/&gt;give a preview here.&lt;br/&gt;&lt;br/&gt;- Hierarchy: Codex32 does not natively provide support for nested SSSS&lt;br/&gt;&amp;gt;    whereas SLIP39 does.  E.g., in SLIP39, you can require 2-of-3 for&lt;br/&gt;&amp;gt;    {me, family, friends} where me is 2-of-3 {fire_safe, bank_safe,&lt;br/&gt;&amp;gt;    buried_in_woods}, family is 1-of-3 {alice, bob, carol}, and friends&lt;br/&gt;&amp;gt;    are 2-of-5 {d, e, f, g, h}.  I assume you can do the same with Codex32&lt;br/&gt;&amp;gt;    by using the share for one level as the secret for the next level,&lt;br/&gt;&amp;gt;    although this is not described in the protocol.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;There was a design for a second level share scheme floating around&lt;br/&gt;somewhere. I&amp;#39;ll have to dig it up. As I recall this is made slightly more&lt;br/&gt;complicated by needing to incorporate share metadata (i.e. the share index)&lt;br/&gt;when doing a second split, but it seemed doable at the time.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; - Versioning: Codex32&amp;#39;s metadata can store version information for&lt;br/&gt;&amp;gt;    wallets that use implicit BIP32 paths (e.g. BIP44/49/84/86), although&lt;br/&gt;&amp;gt;    this would cut into the space available for users to set their own&lt;br/&gt;&amp;gt;    metadata and it is not specified in the draft BIP.  SLIP39 also&lt;br/&gt;&amp;gt;    doesn&amp;#39;t specify anything about implicit path versioning and, AFAICT,&lt;br/&gt;&amp;gt;    doesn&amp;#39;t have any room to store such metadata without reducing seed&lt;br/&gt;&amp;gt;    entropy.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Personally, I don&amp;#39;t consider the derivation path / descriptor data as that&lt;br/&gt;sensitive, and I would recommend making wide backups of that data.&lt;br/&gt;It certainly would make sense to store descriptor data alongside wherever&lt;br/&gt;you keep your shares, and more places beyond that.&lt;br/&gt;On the other hand, if you are trying to keep your shares innocuous somehow,&lt;br/&gt;perhaps you won&amp;#39;t be able to keep the descriptor data alongside your shares.&lt;br/&gt;&lt;br/&gt;When I first saw the post about this, it was unclear to me that it was a&lt;br/&gt;&amp;gt; serious project, but I&amp;#39;ve become increasingly interested as I researched&lt;br/&gt;&amp;gt; it.  I&amp;#39;m not personally that interested in generating entropy from dice&lt;br/&gt;&amp;gt; or encoding shares by hand---it&amp;#39;s already imperative that I acquire a&lt;br/&gt;&amp;gt; trustworthy computer and load it with trustworthy software in order to&lt;br/&gt;&amp;gt; use my seed securely, so I might as well have it generate my seeds and&lt;br/&gt;&amp;gt; my&lt;br/&gt;&amp;gt; recovery codes for me.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I do think hardware wallets are great, and overall provide a lot of&lt;br/&gt;practical protection.  What is notable is that once the secrets are loaded&lt;br/&gt;onto a hardware wallet, as long as that wallet remains isolated, it cannot&lt;br/&gt;leak any secrets.&lt;br/&gt;&lt;br/&gt;Of course, a wallet needs to interact with the Bitcoin protocol and P2P&lt;br/&gt;network, at least indirectly, in order to  function, so we must break that&lt;br/&gt;isolation.  However, if we can limit the communication capabilities of a&lt;br/&gt;hardware wallet, even a malicious wallet shouldn&amp;#39;t be able to leak the&lt;br/&gt;secret data.&lt;br/&gt;&lt;br/&gt;There are three main vectors a hardware wallet can try to communicate that&lt;br/&gt;I am aware of:&lt;br/&gt;&lt;br/&gt;1. Compromise at seed/master secret (or in this case shares of the master&lt;br/&gt;secret) during generation time.&lt;br/&gt;2. Lie about public keys at public key generation time.&lt;br/&gt;3. Exfiltrate data though signature data or otherwise during signature&lt;br/&gt;generation time.&lt;br/&gt;&lt;br/&gt;#3 is largely mitigated through using anti-exfil signing and air gapping&lt;br/&gt;the hardware wallet (e.g. using QR codes, or using RS-232&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://en.wikipedia.org/wiki/RS-232&amp;gt&#34;&gt;https://en.wikipedia.org/wiki/RS-232&amp;gt&lt;/a&gt;; if you consider that air gaping).&lt;br/&gt;Using multiple wallets from different vendors doing deterministic signing&lt;br/&gt;is another possibility, but I consider the method deprecated in favour of&lt;br/&gt;anti-exfil.&lt;br/&gt;&lt;br/&gt;Addressing #1 is where codex32 lies, by taking master secret handling&lt;br/&gt;functions out of the hardware wallet.&lt;br/&gt;&lt;br/&gt;My understanding is that it is difficult for digital hardware, which tries&lt;br/&gt;very hard to be deterministic, to generate randomness, especially for&lt;br/&gt;isolated hardware devices like hardware wallets.&lt;br/&gt;Also it is hard for hardware to tell if their hardware random number&lt;br/&gt;generator is broken.  Generally I don&amp;#39;t trust small pieces of isolated&lt;br/&gt;digital hardware to generate master seeds, even when they are not&lt;br/&gt;malicious. This may just be due to my ignorance of how they operate.&lt;br/&gt;&lt;br/&gt;#2 seems to be the hardest issue to address.  My current thinking is to&lt;br/&gt;generate addresses on a diverse set of hardware and/or using public&lt;br/&gt;derivations.&lt;br/&gt;Perhaps an alternative to BIP-32 could be designed to make it easy to&lt;br/&gt;generate zero-knowledge proofs of pubkey derivations.&lt;br/&gt;&lt;br/&gt;Of course there are other ways for a hardware wallets to exfiltrate data:&lt;br/&gt;The wallet can blink lights, make noise, or it can try to use radio&lt;br/&gt;broadcasts, etc.  These other attack vectors seem to require physically&lt;br/&gt;local support, which is a fairly big hurdle to overcome.  I suppose even&lt;br/&gt;these vectors could be mitigated through various levels of tinfoil.&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/20230222/041a5132/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230222/041a5132/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:47Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxgzky97tkxh3svf8vl9m0scfujc2k4h0arnrlgr4aql70g3x5jeczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596jaqxdh</id>
    
      <title type="html">📅 Original date posted:2023-02-23 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxgzky97tkxh3svf8vl9m0scfujc2k4h0arnrlgr4aql70g3x5jeczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596jaqxdh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvrjhssk7myv2fhtgch3xy46xywxsahhnnungny8u042rw8keugrs8c3xmk&#39;&gt;nevent1q…3xmk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-23&lt;br/&gt;🗒️ Summary of this message: A simplified procedure for the 1 character &amp;#34;quick check&amp;#34; of Bech32 is proposed, but it has a 3% failure rate and compromises ease of hand computation.&lt;br/&gt;📝 Original message:Sorry for the repeated replies, but I would like to make one more remark&lt;br/&gt;regarding the 1 character &amp;#34;quick check&amp;#34;.&lt;br/&gt;&lt;br/&gt;Because the 1 character &amp;#34;quick check&amp;#34; state is so small, the procedure&lt;br/&gt;becomes simplified to just using a single table.  You start with the&lt;br/&gt;specified initial state, which would be the bech32 character &amp;#39;9&amp;#39;, and then&lt;br/&gt;you have a lookup mapping (&amp;lt;current state&amp;gt;, &amp;lt;next input character&amp;gt;) -&amp;gt;&lt;br/&gt;&amp;lt;next state&amp;gt;.  You go through the table for each character after the&lt;br/&gt;prefix, updating the state as you go along. (&amp;#39;9&amp;#39;,&amp;#39;2&amp;#39;) -&amp;gt; &amp;#39;0&amp;#39;, then&lt;br/&gt;(&amp;#39;0&amp;#39;,&amp;#39;N&amp;#39;) -&amp;gt; &amp;#39;4&amp;#39;, and so on until you reach the final state which should be&lt;br/&gt;&amp;#39;5&amp;#39;.  If you like volvelles, one could be designed to implement this lookup&lt;br/&gt;table.&lt;br/&gt;&lt;br/&gt;However, I do want to note that an adjustment could be made to the codex32&lt;br/&gt;generator so that this 1 character &amp;#34;quick check&amp;#34; table would become&lt;br/&gt;identical to the Bech32 addition table.  In other words the 1 character&lt;br/&gt;quick check would become the same as adding up all the characters and&lt;br/&gt;checking that you get the required final constant.&lt;br/&gt;&lt;br/&gt;If this change were free to make, I would probably make it.  However such&lt;br/&gt;an adjustment would come at a cost.  The current generator was chosen to&lt;br/&gt;have three identical coefficients in a row (you can find the generator in&lt;br/&gt;the appendix of the draft BIP).  This special property slightly eases the&lt;br/&gt;computation needed when creating checksums by hand (no compromise to the&lt;br/&gt;quality of the checksum itself).  If we made the above adjustment to the&lt;br/&gt;codex32 generator, we would lose this property of having three identical&lt;br/&gt;coefficients in a row.&lt;br/&gt;&lt;br/&gt;Therefore, I am pretty hesitant to make this adjustment.  Firstly the 1&lt;br/&gt;character quick check is simply too small to be safely used.  While it does&lt;br/&gt;guarantee to detect single character errors, it has a 1 in 32 chance of&lt;br/&gt;failing to detect more errors.  I think a 3% failure rate is pretty bad,&lt;br/&gt;and would definitely recommend people performing quick checks use a minimum&lt;br/&gt;size of 2 (which has a 0.1% failure rate).  Secondly the difference between&lt;br/&gt;using the addition table/volvelle versus a specific table/volvelle for the&lt;br/&gt;purpose of performing 1 character quick checks (which you ought not to be&lt;br/&gt;doing anyways) is pretty minimal.  The addition table is possibly slightly&lt;br/&gt;less error prone to use because it is symmetric, but other than that the&lt;br/&gt;amount of work to do is pretty much the same either way.&lt;br/&gt;&lt;br/&gt;My conclusion is that it isn&amp;#39;t worth compromising the ease of hand&lt;br/&gt;computation for the sake of possibly making a&lt;br/&gt;too-low-quality-checksum-that-no-one-should-be-using slightly more&lt;br/&gt;convenient, but I thought I should mention it at least.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Wed, Feb 22, 2023 at 10:30 PM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; After some consultation, I now see that generators for all degree 2 BCH&lt;br/&gt;&amp;gt; codes, such as ours, are smooth and factor into quadratic and linear&lt;br/&gt;&amp;gt; components.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Anyhow the upshot of all this is that you can perform a &amp;#34;quickcheck&amp;#34;&lt;br/&gt;&amp;gt; verification of the codex32 strings for whatever size of verification you&lt;br/&gt;&amp;gt; want to do, 1 character, 2 characters, 3 characters, upto the full 13&lt;br/&gt;&amp;gt; characters.  Each of these partial verifications will have BCH properties.&lt;br/&gt;&amp;gt; A 1 character quickchecksum will guarantee to detect any 1 character&lt;br/&gt;&amp;gt; error.  A 3 character quickchecksum will guarantee to detect any 2&lt;br/&gt;&amp;gt; character error, etc.  There remains a 1 in 32^n chance of failing to&lt;br/&gt;&amp;gt; detect larger numbers of errors where n is the size of your quickcheck.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To illustrate, let&amp;#39;s consider a quickcheck of size 2.  This can detect any&lt;br/&gt;&amp;gt; 1 character error and will only have a 1/1024 chance of failing to detect&lt;br/&gt;&amp;gt; other random errors.  Let&amp;#39;s take the second test vector as our example: &amp;#34;&lt;br/&gt;&amp;gt; MS12NAMEA320ZYXWVUTSRQPNMLKJHGFEDCAXRPP870HKKQRM&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You start in a specified initial state with a pair of bech32 characters.&lt;br/&gt;&amp;gt; For MS1 strings and a size 2 quickcheck it would be the pair of Bech32&lt;br/&gt;&amp;gt; characters &amp;#39;AS&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Next we &amp;#34;add&amp;#34; the first character after the prefix, which is &amp;#39;2&amp;#39; by using&lt;br/&gt;&amp;gt; the addition volvelle or lookup table.  &amp;#34;Adding&amp;#34; &amp;#39;2&amp;#39; to &amp;#39;S&amp;#39; yields &amp;#39;6&amp;#39; and&lt;br/&gt;&amp;gt; our state becomes &amp;#39;A6&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Next we have to look up &amp;#39;A6&amp;#39; in a lookup table.  This table is too big to&lt;br/&gt;&amp;gt; fit in the margin of this email, so I will have to omit it.  But it would&lt;br/&gt;&amp;gt; have an entry mapping &amp;#39;A6&amp;#39; -&amp;gt; &amp;#39;QM&amp;#39;.  Our state becomes &amp;#39;QM&amp;#39;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; From this point we have an even number of remaining characters in the&lt;br/&gt;&amp;gt; input string and we can work 2 characters at a time. We &amp;#34;add&amp;#34; the next two&lt;br/&gt;&amp;gt; data characters from our string, which are &amp;#39;NA&amp;#39;.  Again, using the volvelle&lt;br/&gt;&amp;gt; or lookup table we get that adding &amp;#39;N&amp;#39; to &amp;#39;Q&amp;#39; yields &amp;#39;N&amp;#39;, and adding &amp;#39;A&amp;#39; to&lt;br/&gt;&amp;gt; &amp;#39;M&amp;#39; yields &amp;#39;X&amp;#39;.  So our state is now &amp;#39;NX&amp;#39;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Next we look up &amp;#39;NX&amp;#39; in this table I haven&amp;#39;t given you and we will find an&lt;br/&gt;&amp;gt; entry mapping &amp;#39;NX&amp;#39; -&amp;gt; &amp;#39;DX&amp;#39;, making &amp;#39;DX&amp;#39; our new state.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We keep repeating this process alternating between adding pairs of&lt;br/&gt;&amp;gt; characters and using this unstated lookup table all the way until the end&lt;br/&gt;&amp;gt; where we will reach a final state which will be &amp;#39;H9&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you follow this procedure with any string (upto 400 bit master seeds)&lt;br/&gt;&amp;gt; you will always end up in the state &amp;#39;H9&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A specialized worksheet would help guide the process making the process&lt;br/&gt;&amp;gt; easier to follow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This process is somewhat close to Peter Todd&amp;#39;s suggestion of using a&lt;br/&gt;&amp;gt; lookup table on &amp;#34;words&amp;#34;, which in this case would be pairs of bech32&lt;br/&gt;&amp;gt; characters, and adding values together.  The catch is that the addition is&lt;br/&gt;&amp;gt; done with Bech32 addition rather than calculator addition, which I accept&lt;br/&gt;&amp;gt; is a moderately large catch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Anyhow, the point is that you can do this sort of partial verification by&lt;br/&gt;&amp;gt; hand to whatever degree you like, if you are in a rush and are willing to&lt;br/&gt;&amp;gt; accept larger chances of failing to catch random errors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Feb 22, 2023 at 2:01 PM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; After some poking around at the math, I do see that the 13 character&lt;br/&gt;&amp;gt;&amp;gt; generator (for regular sized shares) is reasonably &amp;#34;smooth&amp;#34;, having roots&lt;br/&gt;&amp;gt;&amp;gt; at T{11}, S{16}, and C{24}.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This means we could build a &amp;#34;quick check&amp;#34; worksheet to evaluate the&lt;br/&gt;&amp;gt;&amp;gt; string modulo (x - T) to verify a 5 bit checksum, whose operation would be&lt;br/&gt;&amp;gt;&amp;gt; similar to the existing checksum worksheet in structure but significantly&lt;br/&gt;&amp;gt;&amp;gt; less work.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Perhaps 5 bits is too short, and it is more reasonable working modulo (x&lt;br/&gt;&amp;gt;&amp;gt; - T)*(x - S) to get a 10 bit checksum.  A worksheet for a 15 bit checksum&lt;br/&gt;&amp;gt;&amp;gt; is also an option, and possibly others well depending on the size of the&lt;br/&gt;&amp;gt;&amp;gt; other factors.  I think this process is would be about as simple as any&lt;br/&gt;&amp;gt;&amp;gt; other comparable hand operated checksum over the bech32 alphabet would be.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I haven&amp;#39;t looked into the smoothness of the long generator for seeds that&lt;br/&gt;&amp;gt;&amp;gt; are greater than 400 bits.  If it isn&amp;#39;t smooth and smoother options are&lt;br/&gt;&amp;gt;&amp;gt; available, perhaps it should be changed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Wed, Feb 22, 2023 at 11:29 AM Peter Todd via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Feb 19, 2023 at 10:12:51PM &#43;0000, Andrew Poelstra via&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; What really did catch my attention, but which was kind of buried in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; project documentation, is the ability to verify the integrity of each&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; share independently without using a computer.  For example, if I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; store a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; share with some relative who lives thousands of kilometers away,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;ll be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; able to take that share out of its tamper-evident bag on my annual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; holiday visit, verify that I can still read it accurately by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; validating&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; its checksum, and put it into a new bag for another year.  For this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; procedure, I don&amp;#39;t need to bring copies of any of my other shares,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; allowing them (and my seed) to stay safe.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; This is good feedback. I strongly agree that this is the big selling&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; point for this -- that you can vet shares/seeds which *aren&amp;#39;t* being&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; actively used, without exposing them to the sorts of threats associated&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with active use.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; We should make this more prominent in the BIP motivation.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I don&amp;#39;t think that use-case is a good selling point. The checksum that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Codex32&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; uses is much more complex than necessary if you are simply verifying a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; share by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; itself.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A *much* simpler approach would be to use a simple mod N = 0 checksum,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; either&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; by creating the seed such that each share passes, or by just storing an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; additional word/symbol with the seed in such a way that sum(words) mod N&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; = 0&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; passes. This approach is not only possible to compute by hand with a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; word/symbol-&amp;gt;number lookup table, and pen and paper or a calculator.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; It&amp;#39;s so&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; simple they could probably *remember* how to do it themselves.&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; Secondly, if all shares have mod N checksums, it may be sufficient for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; everyone&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to write down the checksums of the *other* shares, to verify they are the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; correct ones and a different (otherwise correct) share hasn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; accidentally been&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; substituted.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Indeed, with some brute forcing and small checksums, I&amp;#39;d expect it to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mathematically possible to generate Shamir&amp;#39;s secret sharing shards such&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; every shard can share the *same* checksum. In which case the share&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; verification&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; procedure would be to simply ask every share holder to verify the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; checksum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; manually using the mod N procedure, and then verify that each share&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; holder has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the same checksum. This would be less error prone in terms of leaking&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; information accidentally if the checksum was obviously *not* part of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; share:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; eg by encoding the share with words, and the checksum with a number.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Obviously, small checksums aren&amp;#39;t fool proof. But we&amp;#39;re probably better&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; off&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; creating a relatively easy procedure with a 1-in-1000 chance of an error&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; going&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; undetected than a complex procedure that people don&amp;#39;t actually do at all.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://petertodd.org&#34;&gt;https://petertodd.org&lt;/a&gt; &amp;#39;peter&amp;#39;[:-1]@petertodd.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- 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/20230223/0526acda/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230223/0526acda/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsq8ur8ultgqmwmcgy0lpcfgj9tjsdkx55ettwtwnnwkcd6lhcz9nczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596cn7q7j</id>
    
      <title type="html">📅 Original date posted:2023-02-23 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsq8ur8ultgqmwmcgy0lpcfgj9tjsdkx55ettwtwnnwkcd6lhcz9nczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596cn7q7j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxgzky97tkxh3svf8vl9m0scfujc2k4h0arnrlgr4aql70g3x5jecayg9g2&#39;&gt;nevent1q…g9g2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-23&lt;br/&gt;🗒️ Summary of this message: Performing 2 character quick checks in 7 different ways is equivalent to a full checksum verification, with prescribed order for accumulating BCH guarantees.&lt;br/&gt;📝 Original message:One more thing (Again apologies. This idea of doing partial verification is&lt;br/&gt;novel to me, and I see now that I should have just waited to give a&lt;br/&gt;consolidated reply).&lt;br/&gt;&lt;br/&gt;Focusing in on the example of performing 2 character quick checks.  There&lt;br/&gt;are 7 different ways of building the table used in this quick check&lt;br/&gt;verification process (actually there are 8, but we only need 7 of them for&lt;br/&gt;our purposes here).  Fun fact: If you perform the 2 character quick check&lt;br/&gt;in all 7 different ways, this is equivalent to doing a full checksum&lt;br/&gt;verification.&lt;br/&gt;&lt;br/&gt;This suggests a strategy of visiting your shares on a regular basis and&lt;br/&gt;performing a different 2 character quick check each time, rotating through&lt;br/&gt;the 7 different ways of performing it.&lt;br/&gt;&lt;br/&gt;Moreover, these 7 different 2 character quick checks come with a prescribed&lt;br/&gt;order that will accumulate BCH guarantees as you go along.  Assuming the&lt;br/&gt;string isn&amp;#39;t changing between visits then&lt;br/&gt;&lt;br/&gt;* After the 1st table you are guaranteed to detect any 1 character error.&lt;br/&gt;* After the 2nd table you are guaranteed to detect any 2 character error.&lt;br/&gt;* After the 3rd table you are guaranteed to detect any 4 character error.&lt;br/&gt;* After the 4th table you are guaranteed to detect any 5 character error.&lt;br/&gt;* After the 5th table you are guaranteed to detect any 6 character error.&lt;br/&gt;* After the 6th table you are guaranteed to detect any 7 character error.&lt;br/&gt;* After the 7th table you are guaranteed to detect any 8 character error,&lt;br/&gt;which is the guarantee of the full 13 character checksum.  You are also&lt;br/&gt;guaranteed that the full 13 character checksum is now correct.&lt;br/&gt;&lt;br/&gt;You could perform the checks out of order, and that is okay.  You will&lt;br/&gt;eventually reach these BCH levels of guarantees, just not as quickly as if&lt;br/&gt;you follow the prescribed order.&lt;br/&gt;&lt;br/&gt;Of course, doing a series of 7 different 2 character quick checks is&lt;br/&gt;overall more work than doing the full 13 character checksum validation.&lt;br/&gt;But there is certainly an advantage in spreading the work out over time.&lt;br/&gt;Each time you visit you still have the guarantee of catching any new 1&lt;br/&gt;character error introduced since the last time you visited and a 99.9%&lt;br/&gt;chance of catching any other random errors introduced since your last&lt;br/&gt;visit.  Personally I am likely to follow such a validation strategy myself,&lt;br/&gt;now that I am aware of it.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Wed, Feb 22, 2023 at 10:30 PM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; After some consultation, I now see that generators for all degree 2 BCH&lt;br/&gt;&amp;gt; codes, such as ours, are smooth and factor into quadratic and linear&lt;br/&gt;&amp;gt; components.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Anyhow the upshot of all this is that you can perform a &amp;#34;quickcheck&amp;#34;&lt;br/&gt;&amp;gt; verification of the codex32 strings for whatever size of verification you&lt;br/&gt;&amp;gt; want to do, 1 character, 2 characters, 3 characters, upto the full 13&lt;br/&gt;&amp;gt; characters.  Each of these partial verifications will have BCH properties.&lt;br/&gt;&amp;gt; A 1 character quickchecksum will guarantee to detect any 1 character&lt;br/&gt;&amp;gt; error.  A 3 character quickchecksum will guarantee to detect any 2&lt;br/&gt;&amp;gt; character error, etc.  There remains a 1 in 32^n chance of failing to&lt;br/&gt;&amp;gt; detect larger numbers of errors where n is the size of your quickcheck.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To illustrate, let&amp;#39;s consider a quickcheck of size 2.  This can detect any&lt;br/&gt;&amp;gt; 1 character error and will only have a 1/1024 chance of failing to detect&lt;br/&gt;&amp;gt; other random errors.  Let&amp;#39;s take the second test vector as our example: &amp;#34;&lt;br/&gt;&amp;gt; MS12NAMEA320ZYXWVUTSRQPNMLKJHGFEDCAXRPP870HKKQRM&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You start in a specified initial state with a pair of bech32 characters.&lt;br/&gt;&amp;gt; For MS1 strings and a size 2 quickcheck it would be the pair of Bech32&lt;br/&gt;&amp;gt; characters &amp;#39;AS&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Next we &amp;#34;add&amp;#34; the first character after the prefix, which is &amp;#39;2&amp;#39; by using&lt;br/&gt;&amp;gt; the addition volvelle or lookup table.  &amp;#34;Adding&amp;#34; &amp;#39;2&amp;#39; to &amp;#39;S&amp;#39; yields &amp;#39;6&amp;#39; and&lt;br/&gt;&amp;gt; our state becomes &amp;#39;A6&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Next we have to look up &amp;#39;A6&amp;#39; in a lookup table.  This table is too big to&lt;br/&gt;&amp;gt; fit in the margin of this email, so I will have to omit it.  But it would&lt;br/&gt;&amp;gt; have an entry mapping &amp;#39;A6&amp;#39; -&amp;gt; &amp;#39;QM&amp;#39;.  Our state becomes &amp;#39;QM&amp;#39;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; From this point we have an even number of remaining characters in the&lt;br/&gt;&amp;gt; input string and we can work 2 characters at a time. We &amp;#34;add&amp;#34; the next two&lt;br/&gt;&amp;gt; data characters from our string, which are &amp;#39;NA&amp;#39;.  Again, using the volvelle&lt;br/&gt;&amp;gt; or lookup table we get that adding &amp;#39;N&amp;#39; to &amp;#39;Q&amp;#39; yields &amp;#39;N&amp;#39;, and adding &amp;#39;A&amp;#39; to&lt;br/&gt;&amp;gt; &amp;#39;M&amp;#39; yields &amp;#39;X&amp;#39;.  So our state is now &amp;#39;NX&amp;#39;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Next we look up &amp;#39;NX&amp;#39; in this table I haven&amp;#39;t given you and we will find an&lt;br/&gt;&amp;gt; entry mapping &amp;#39;NX&amp;#39; -&amp;gt; &amp;#39;DX&amp;#39;, making &amp;#39;DX&amp;#39; our new state.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We keep repeating this process alternating between adding pairs of&lt;br/&gt;&amp;gt; characters and using this unstated lookup table all the way until the end&lt;br/&gt;&amp;gt; where we will reach a final state which will be &amp;#39;H9&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you follow this procedure with any string (upto 400 bit master seeds)&lt;br/&gt;&amp;gt; you will always end up in the state &amp;#39;H9&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A specialized worksheet would help guide the process making the process&lt;br/&gt;&amp;gt; easier to follow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This process is somewhat close to Peter Todd&amp;#39;s suggestion of using a&lt;br/&gt;&amp;gt; lookup table on &amp;#34;words&amp;#34;, which in this case would be pairs of bech32&lt;br/&gt;&amp;gt; characters, and adding values together.  The catch is that the addition is&lt;br/&gt;&amp;gt; done with Bech32 addition rather than calculator addition, which I accept&lt;br/&gt;&amp;gt; is a moderately large catch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Anyhow, the point is that you can do this sort of partial verification by&lt;br/&gt;&amp;gt; hand to whatever degree you like, if you are in a rush and are willing to&lt;br/&gt;&amp;gt; accept larger chances of failing to catch random errors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Feb 22, 2023 at 2:01 PM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; After some poking around at the math, I do see that the 13 character&lt;br/&gt;&amp;gt;&amp;gt; generator (for regular sized shares) is reasonably &amp;#34;smooth&amp;#34;, having roots&lt;br/&gt;&amp;gt;&amp;gt; at T{11}, S{16}, and C{24}.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This means we could build a &amp;#34;quick check&amp;#34; worksheet to evaluate the&lt;br/&gt;&amp;gt;&amp;gt; string modulo (x - T) to verify a 5 bit checksum, whose operation would be&lt;br/&gt;&amp;gt;&amp;gt; similar to the existing checksum worksheet in structure but significantly&lt;br/&gt;&amp;gt;&amp;gt; less work.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Perhaps 5 bits is too short, and it is more reasonable working modulo (x&lt;br/&gt;&amp;gt;&amp;gt; - T)*(x - S) to get a 10 bit checksum.  A worksheet for a 15 bit checksum&lt;br/&gt;&amp;gt;&amp;gt; is also an option, and possibly others well depending on the size of the&lt;br/&gt;&amp;gt;&amp;gt; other factors.  I think this process is would be about as simple as any&lt;br/&gt;&amp;gt;&amp;gt; other comparable hand operated checksum over the bech32 alphabet would be.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I haven&amp;#39;t looked into the smoothness of the long generator for seeds that&lt;br/&gt;&amp;gt;&amp;gt; are greater than 400 bits.  If it isn&amp;#39;t smooth and smoother options are&lt;br/&gt;&amp;gt;&amp;gt; available, perhaps it should be changed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Wed, Feb 22, 2023 at 11:29 AM Peter Todd via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Sun, Feb 19, 2023 at 10:12:51PM &#43;0000, Andrew Poelstra via&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; What really did catch my attention, but which was kind of buried in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; project documentation, is the ability to verify the integrity of each&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; share independently without using a computer.  For example, if I&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; store a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; share with some relative who lives thousands of kilometers away,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;ll be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; able to take that share out of its tamper-evident bag on my annual&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; holiday visit, verify that I can still read it accurately by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; validating&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; its checksum, and put it into a new bag for another year.  For this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; procedure, I don&amp;#39;t need to bring copies of any of my other shares,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; allowing them (and my seed) to stay safe.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; This is good feedback. I strongly agree that this is the big selling&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; point for this -- that you can vet shares/seeds which *aren&amp;#39;t* being&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; actively used, without exposing them to the sorts of threats associated&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with active use.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; We should make this more prominent in the BIP motivation.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I don&amp;#39;t think that use-case is a good selling point. The checksum that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Codex32&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; uses is much more complex than necessary if you are simply verifying a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; share by&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; itself.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; A *much* simpler approach would be to use a simple mod N = 0 checksum,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; either&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; by creating the seed such that each share passes, or by just storing an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; additional word/symbol with the seed in such a way that sum(words) mod N&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; = 0&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; passes. This approach is not only possible to compute by hand with a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; word/symbol-&amp;gt;number lookup table, and pen and paper or a calculator.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; It&amp;#39;s so&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; simple they could probably *remember* how to do it themselves.&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; Secondly, if all shares have mod N checksums, it may be sufficient for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; everyone&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to write down the checksums of the *other* shares, to verify they are the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; correct ones and a different (otherwise correct) share hasn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; accidentally been&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; substituted.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Indeed, with some brute forcing and small checksums, I&amp;#39;d expect it to be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; mathematically possible to generate Shamir&amp;#39;s secret sharing shards such&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; every shard can share the *same* checksum. In which case the share&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; verification&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; procedure would be to simply ask every share holder to verify the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; checksum&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; manually using the mod N procedure, and then verify that each share&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; holder has&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the same checksum. This would be less error prone in terms of leaking&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; information accidentally if the checksum was obviously *not* part of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; share:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; eg by encoding the share with words, and the checksum with a number.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Obviously, small checksums aren&amp;#39;t fool proof. But we&amp;#39;re probably better&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; off&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; creating a relatively easy procedure with a 1-in-1000 chance of an error&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; going&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; undetected than a complex procedure that people don&amp;#39;t actually do at all.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://petertodd.org&#34;&gt;https://petertodd.org&lt;/a&gt; &amp;#39;peter&amp;#39;[:-1]@petertodd.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- 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/20230223/4b73d4e8/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230223/4b73d4e8/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvrjhssk7myv2fhtgch3xy46xywxsahhnnungny8u042rw8keugrszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596kp4n3h</id>
    
      <title type="html">📅 Original date posted:2023-02-23 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvrjhssk7myv2fhtgch3xy46xywxsahhnnungny8u042rw8keugrszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596kp4n3h" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsz8k5vn5m7m34t0hqn6ehjakdd3zcq6z0lppnq4wcwkmd75h9eetgrak8uy&#39;&gt;nevent1q…k8uy&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-23&lt;br/&gt;🗒️ Summary of this message: Generators for degree 2 BCH codes are smooth and factor into quadratic and linear components, allowing for partial verification of codex32 strings.&lt;br/&gt;📝 Original message:After some consultation, I now see that generators for all degree 2 BCH&lt;br/&gt;codes, such as ours, are smooth and factor into quadratic and linear&lt;br/&gt;components.&lt;br/&gt;&lt;br/&gt;Anyhow the upshot of all this is that you can perform a &amp;#34;quickcheck&amp;#34;&lt;br/&gt;verification of the codex32 strings for whatever size of verification you&lt;br/&gt;want to do, 1 character, 2 characters, 3 characters, upto the full 13&lt;br/&gt;characters.  Each of these partial verifications will have BCH properties.&lt;br/&gt;A 1 character quickchecksum will guarantee to detect any 1 character&lt;br/&gt;error.  A 3 character quickchecksum will guarantee to detect any 2&lt;br/&gt;character error, etc.  There remains a 1 in 32^n chance of failing to&lt;br/&gt;detect larger numbers of errors where n is the size of your quickcheck.&lt;br/&gt;&lt;br/&gt;To illustrate, let&amp;#39;s consider a quickcheck of size 2.  This can detect any&lt;br/&gt;1 character error and will only have a 1/1024 chance of failing to detect&lt;br/&gt;other random errors.  Let&amp;#39;s take the second test vector as our example: &amp;#34;&lt;br/&gt;MS12NAMEA320ZYXWVUTSRQPNMLKJHGFEDCAXRPP870HKKQRM&amp;#34;&lt;br/&gt;&lt;br/&gt;You start in a specified initial state with a pair of bech32 characters.&lt;br/&gt;For MS1 strings and a size 2 quickcheck it would be the pair of Bech32&lt;br/&gt;characters &amp;#39;AS&amp;#39;.&lt;br/&gt;&lt;br/&gt;Next we &amp;#34;add&amp;#34; the first character after the prefix, which is &amp;#39;2&amp;#39; by using&lt;br/&gt;the addition volvelle or lookup table.  &amp;#34;Adding&amp;#34; &amp;#39;2&amp;#39; to &amp;#39;S&amp;#39; yields &amp;#39;6&amp;#39; and&lt;br/&gt;our state becomes &amp;#39;A6&amp;#39;.&lt;br/&gt;&lt;br/&gt;Next we have to look up &amp;#39;A6&amp;#39; in a lookup table.  This table is too big to&lt;br/&gt;fit in the margin of this email, so I will have to omit it.  But it would&lt;br/&gt;have an entry mapping &amp;#39;A6&amp;#39; -&amp;gt; &amp;#39;QM&amp;#39;.  Our state becomes &amp;#39;QM&amp;#39;&lt;br/&gt;&lt;br/&gt;&amp;gt;From this point we have an even number of remaining characters in the input&lt;br/&gt;string and we can work 2 characters at a time. We &amp;#34;add&amp;#34; the next two data&lt;br/&gt;characters from our string, which are &amp;#39;NA&amp;#39;.  Again, using the volvelle or&lt;br/&gt;lookup table we get that adding &amp;#39;N&amp;#39; to &amp;#39;Q&amp;#39; yields &amp;#39;N&amp;#39;, and adding &amp;#39;A&amp;#39; to&lt;br/&gt;&amp;#39;M&amp;#39; yields &amp;#39;X&amp;#39;.  So our state is now &amp;#39;NX&amp;#39;&lt;br/&gt;&lt;br/&gt;Next we look up &amp;#39;NX&amp;#39; in this table I haven&amp;#39;t given you and we will find an&lt;br/&gt;entry mapping &amp;#39;NX&amp;#39; -&amp;gt; &amp;#39;DX&amp;#39;, making &amp;#39;DX&amp;#39; our new state.&lt;br/&gt;&lt;br/&gt;We keep repeating this process alternating between adding pairs of&lt;br/&gt;characters and using this unstated lookup table all the way until the end&lt;br/&gt;where we will reach a final state which will be &amp;#39;H9&amp;#39;.&lt;br/&gt;&lt;br/&gt;If you follow this procedure with any string (upto 400 bit master seeds)&lt;br/&gt;you will always end up in the state &amp;#39;H9&amp;#39;.&lt;br/&gt;&lt;br/&gt;A specialized worksheet would help guide the process making the process&lt;br/&gt;easier to follow.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;This process is somewhat close to Peter Todd&amp;#39;s suggestion of using a lookup&lt;br/&gt;table on &amp;#34;words&amp;#34;, which in this case would be pairs of bech32 characters,&lt;br/&gt;and adding values together.  The catch is that the addition is done with&lt;br/&gt;Bech32 addition rather than calculator addition, which I accept is a&lt;br/&gt;moderately large catch.&lt;br/&gt;&lt;br/&gt;Anyhow, the point is that you can do this sort of partial verification by&lt;br/&gt;hand to whatever degree you like, if you are in a rush and are willing to&lt;br/&gt;accept larger chances of failing to catch random errors.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Wed, Feb 22, 2023 at 2:01 PM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; After some poking around at the math, I do see that the 13 character&lt;br/&gt;&amp;gt; generator (for regular sized shares) is reasonably &amp;#34;smooth&amp;#34;, having roots&lt;br/&gt;&amp;gt; at T{11}, S{16}, and C{24}.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This means we could build a &amp;#34;quick check&amp;#34; worksheet to evaluate the string&lt;br/&gt;&amp;gt; modulo (x - T) to verify a 5 bit checksum, whose operation would be similar&lt;br/&gt;&amp;gt; to the existing checksum worksheet in structure but significantly less work.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Perhaps 5 bits is too short, and it is more reasonable working modulo (x -&lt;br/&gt;&amp;gt; T)*(x - S) to get a 10 bit checksum.  A worksheet for a 15 bit checksum is&lt;br/&gt;&amp;gt; also an option, and possibly others well depending on the size of the other&lt;br/&gt;&amp;gt; factors.  I think this process is would be about as simple as any other&lt;br/&gt;&amp;gt; comparable hand operated checksum over the bech32 alphabet would be.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I haven&amp;#39;t looked into the smoothness of the long generator for seeds that&lt;br/&gt;&amp;gt; are greater than 400 bits.  If it isn&amp;#39;t smooth and smoother options are&lt;br/&gt;&amp;gt; available, perhaps it should be changed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Feb 22, 2023 at 11:29 AM Peter Todd 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; On Sun, Feb 19, 2023 at 10:12:51PM &#43;0000, Andrew Poelstra via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; What really did catch my attention, but which was kind of buried in&lt;br/&gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; project documentation, is the ability to verify the integrity of each&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; share independently without using a computer.  For example, if I&lt;br/&gt;&amp;gt;&amp;gt; store a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; share with some relative who lives thousands of kilometers away, I&amp;#39;ll&lt;br/&gt;&amp;gt;&amp;gt; be&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; able to take that share out of its tamper-evident bag on my annual&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; holiday visit, verify that I can still read it accurately by&lt;br/&gt;&amp;gt;&amp;gt; validating&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; its checksum, and put it into a new bag for another year.  For this&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; procedure, I don&amp;#39;t need to bring copies of any of my other shares,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; allowing them (and my seed) to stay safe.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; This is good feedback. I strongly agree that this is the big selling&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; point for this -- that you can vet shares/seeds which *aren&amp;#39;t* being&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; actively used, without exposing them to the sorts of threats associated&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; with active use.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; We should make this more prominent in the BIP motivation.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I don&amp;#39;t think that use-case is a good selling point. The checksum that&lt;br/&gt;&amp;gt;&amp;gt; Codex32&lt;br/&gt;&amp;gt;&amp;gt; uses is much more complex than necessary if you are simply verifying a&lt;br/&gt;&amp;gt;&amp;gt; share by&lt;br/&gt;&amp;gt;&amp;gt; itself.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A *much* simpler approach would be to use a simple mod N = 0 checksum,&lt;br/&gt;&amp;gt;&amp;gt; either&lt;br/&gt;&amp;gt;&amp;gt; by creating the seed such that each share passes, or by just storing an&lt;br/&gt;&amp;gt;&amp;gt; additional word/symbol with the seed in such a way that sum(words) mod N&lt;br/&gt;&amp;gt;&amp;gt; = 0&lt;br/&gt;&amp;gt;&amp;gt; passes. This approach is not only possible to compute by hand with a&lt;br/&gt;&amp;gt;&amp;gt; word/symbol-&amp;gt;number lookup table, and pen and paper or a calculator. It&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; so&lt;br/&gt;&amp;gt;&amp;gt; simple they could probably *remember* how to do it themselves.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Secondly, if all shares have mod N checksums, it may be sufficient for&lt;br/&gt;&amp;gt;&amp;gt; everyone&lt;br/&gt;&amp;gt;&amp;gt; to write down the checksums of the *other* shares, to verify they are the&lt;br/&gt;&amp;gt;&amp;gt; correct ones and a different (otherwise correct) share hasn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; accidentally been&lt;br/&gt;&amp;gt;&amp;gt; substituted.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Indeed, with some brute forcing and small checksums, I&amp;#39;d expect it to be&lt;br/&gt;&amp;gt;&amp;gt; mathematically possible to generate Shamir&amp;#39;s secret sharing shards such&lt;br/&gt;&amp;gt;&amp;gt; that&lt;br/&gt;&amp;gt;&amp;gt; every shard can share the *same* checksum. In which case the share&lt;br/&gt;&amp;gt;&amp;gt; verification&lt;br/&gt;&amp;gt;&amp;gt; procedure would be to simply ask every share holder to verify the checksum&lt;br/&gt;&amp;gt;&amp;gt; manually using the mod N procedure, and then verify that each share&lt;br/&gt;&amp;gt;&amp;gt; holder has&lt;br/&gt;&amp;gt;&amp;gt; the same checksum. This would be less error prone in terms of leaking&lt;br/&gt;&amp;gt;&amp;gt; information accidentally if the checksum was obviously *not* part of the&lt;br/&gt;&amp;gt;&amp;gt; share:&lt;br/&gt;&amp;gt;&amp;gt; eg by encoding the share with words, and the checksum with a number.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Obviously, small checksums aren&amp;#39;t fool proof. But we&amp;#39;re probably better&lt;br/&gt;&amp;gt;&amp;gt; off&lt;br/&gt;&amp;gt;&amp;gt; creating a relatively easy procedure with a 1-in-1000 chance of an error&lt;br/&gt;&amp;gt;&amp;gt; going&lt;br/&gt;&amp;gt;&amp;gt; undetected than a complex procedure that people don&amp;#39;t actually do at all.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://petertodd.org&#34;&gt;https://petertodd.org&lt;/a&gt; &amp;#39;peter&amp;#39;[:-1]@petertodd.org&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230222/8bca8605/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230222/8bca8605/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:45Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvlaxf7xdy42rs4ksqju8m0uqvnqr8kpk766v8hw8j5m83690xchczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596flggmn</id>
    
      <title type="html">📅 Original date posted:2023-02-19 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvlaxf7xdy42rs4ksqju8m0uqvnqr8kpk766v8hw8j5m83690xchczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596flggmn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxt79gr6fr4p48ej6zg66qslcqxc2rc7f0x3mxa2ujsrwjjydhq9gmku0tc&#39;&gt;nevent1q…u0tc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-19&lt;br/&gt;🗒️ Summary of this message: A potential attack on seed recovery for Bitcoin wallets was discussed, with no current solution available. A MAC-based checksum may be a possible solution.&lt;br/&gt;📝 Original message:On Sun, Feb 19, 2023 at 5:13 PM Andrew Poelstra 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 Sun, Feb 19, 2023 at 10:13:33AM -1000, David A. Harding wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m curious about whether there&amp;#39;s a way to prevent this attack without&lt;br/&gt;&amp;gt; &amp;gt; otherwise compromising the properties of the code?  For example, some&lt;br/&gt;&amp;gt; &amp;gt; extra data that Bob can carry around (or memorize) for verifying the&lt;br/&gt;&amp;gt; &amp;gt; shares haven&amp;#39;t changed, but which is not otherwise needed for recovery&lt;br/&gt;&amp;gt; &amp;gt; (so there&amp;#39;s no problem if it&amp;#39;s lost).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unfortunately not, as near as I can tell ... one way to think of this is&lt;br/&gt;&amp;gt; that Alice can flip a lot of random tiles then &amp;#34;error correct&amp;#34; it to get&lt;br/&gt;&amp;gt; a new valid, but incorrect, seed. So as long as we support error&lt;br/&gt;&amp;gt; correction it&amp;#39;ll be possible to wreck seeds in this way.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s actually even worse than this ... as long as there&amp;#39;s a clearly&lt;br/&gt;&amp;gt; defined &amp;#34;checksum&amp;#34; at the end of a share, Alice will be able to mangele&lt;br/&gt;&amp;gt; tiles and then just re-compute the checksum at the end.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So what we really need to prevent this is something like a MAC: where&lt;br/&gt;&amp;gt; Bob has a secret value which gets input into the checksum somehow, which&lt;br/&gt;&amp;gt; Alice can&amp;#39;t create valid checksums without knowing. Unfortunately I&lt;br/&gt;&amp;gt; don&amp;#39;t see any way to do this with linear codes. With a hash-based&lt;br/&gt;&amp;gt; &amp;#34;checksum&amp;#34; a la BIP39 it would definitely be possible, but of course,&lt;br/&gt;&amp;gt; not hand-computable.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Speaking off the cuff and as a non-cryptographer (i.e do NOT rush off and&lt;br/&gt;do this without any vetting) but Christopher Allen once referred me to an&lt;br/&gt;cypher tile set called LS47 &amp;lt;&lt;a href=&#34;https://gitea.blesmrt.net/exa/ls47&amp;gt&#34;&gt;https://gitea.blesmrt.net/exa/ls47&amp;gt&lt;/a&gt;;.  If we&lt;br/&gt;set aside the cypertext, I suspect we can form a MAC by recording some&lt;br/&gt;random initial tile configuration, running the LS47 algorithm, and&lt;br/&gt;recording the final tile configuration.  These records are not sensitive as&lt;br/&gt;(presumably!) the share data is not recoverable from just knowing these two&lt;br/&gt;configurations.  So one can keep these records with you, digitally sign&lt;br/&gt;them or whatever, and then take them to your share on a regular basis to&lt;br/&gt;rerun the LS47 algorithm to see if you still get the same final state from&lt;br/&gt;the initial state.&lt;br/&gt;&lt;br/&gt;Perhaps something more specific to Bech32 could be designed, but otherwise&lt;br/&gt;this (alleged) MAC process isn&amp;#39;t Codex32 specific.&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/20230219/7fa702ff/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230219/7fa702ff/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsz8k5vn5m7m34t0hqn6ehjakdd3zcq6z0lppnq4wcwkmd75h9eetgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hfp82v</id>
    
      <title type="html">📅 Original date posted:2023-02-22 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsz8k5vn5m7m34t0hqn6ehjakdd3zcq6z0lppnq4wcwkmd75h9eetgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hfp82v" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg0gf0r4p2qt08aawejh6dcyaqcct8gf9qr5h686cmge3ln6wc3sq7uu4qn&#39;&gt;nevent1q…u4qn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-22&lt;br/&gt;🗒️ Summary of this message: A simpler approach to verify shares without a computer is suggested for Codex32. A mod N=0 checksum can be used for individual shares or all shares.&lt;br/&gt;📝 Original message:After some poking around at the math, I do see that the 13 character&lt;br/&gt;generator (for regular sized shares) is reasonably &amp;#34;smooth&amp;#34;, having roots&lt;br/&gt;at T{11}, S{16}, and C{24}.&lt;br/&gt;&lt;br/&gt;This means we could build a &amp;#34;quick check&amp;#34; worksheet to evaluate the string&lt;br/&gt;modulo (x - T) to verify a 5 bit checksum, whose operation would be similar&lt;br/&gt;to the existing checksum worksheet in structure but significantly less work.&lt;br/&gt;&lt;br/&gt;Perhaps 5 bits is too short, and it is more reasonable working modulo (x -&lt;br/&gt;T)*(x - S) to get a 10 bit checksum.  A worksheet for a 15 bit checksum is&lt;br/&gt;also an option, and possibly others well depending on the size of the other&lt;br/&gt;factors.  I think this process is would be about as simple as any other&lt;br/&gt;comparable hand operated checksum over the bech32 alphabet would be.&lt;br/&gt;&lt;br/&gt;I haven&amp;#39;t looked into the smoothness of the long generator for seeds that&lt;br/&gt;are greater than 400 bits.  If it isn&amp;#39;t smooth and smoother options are&lt;br/&gt;available, perhaps it should be changed.&lt;br/&gt;&lt;br/&gt;On Wed, Feb 22, 2023 at 11:29 AM Peter Todd 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 Sun, Feb 19, 2023 at 10:12:51PM &#43;0000, Andrew Poelstra via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; What really did catch my attention, but which was kind of buried in the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; project documentation, is the ability to verify the integrity of each&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; share independently without using a computer.  For example, if I store&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; share with some relative who lives thousands of kilometers away, I&amp;#39;ll&lt;br/&gt;&amp;gt; be&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; able to take that share out of its tamper-evident bag on my annual&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; holiday visit, verify that I can still read it accurately by validating&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; its checksum, and put it into a new bag for another year.  For this&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; procedure, I don&amp;#39;t need to bring copies of any of my other shares,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; allowing them (and my seed) to stay safe.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This is good feedback. I strongly agree that this is the big selling&lt;br/&gt;&amp;gt; &amp;gt; point for this -- that you can vet shares/seeds which *aren&amp;#39;t* being&lt;br/&gt;&amp;gt; &amp;gt; actively used, without exposing them to the sorts of threats associated&lt;br/&gt;&amp;gt; &amp;gt; with active use.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We should make this more prominent in the BIP motivation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think that use-case is a good selling point. The checksum that&lt;br/&gt;&amp;gt; Codex32&lt;br/&gt;&amp;gt; uses is much more complex than necessary if you are simply verifying a&lt;br/&gt;&amp;gt; share by&lt;br/&gt;&amp;gt; itself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A *much* simpler approach would be to use a simple mod N = 0 checksum,&lt;br/&gt;&amp;gt; either&lt;br/&gt;&amp;gt; by creating the seed such that each share passes, or by just storing an&lt;br/&gt;&amp;gt; additional word/symbol with the seed in such a way that sum(words) mod N =&lt;br/&gt;&amp;gt; 0&lt;br/&gt;&amp;gt; passes. This approach is not only possible to compute by hand with a&lt;br/&gt;&amp;gt; word/symbol-&amp;gt;number lookup table, and pen and paper or a calculator. It&amp;#39;s&lt;br/&gt;&amp;gt; so&lt;br/&gt;&amp;gt; simple they could probably *remember* how to do it themselves.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Secondly, if all shares have mod N checksums, it may be sufficient for&lt;br/&gt;&amp;gt; everyone&lt;br/&gt;&amp;gt; to write down the checksums of the *other* shares, to verify they are the&lt;br/&gt;&amp;gt; correct ones and a different (otherwise correct) share hasn&amp;#39;t accidentally&lt;br/&gt;&amp;gt; been&lt;br/&gt;&amp;gt; substituted.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Indeed, with some brute forcing and small checksums, I&amp;#39;d expect it to be&lt;br/&gt;&amp;gt; mathematically possible to generate Shamir&amp;#39;s secret sharing shards such&lt;br/&gt;&amp;gt; that&lt;br/&gt;&amp;gt; every shard can share the *same* checksum. In which case the share&lt;br/&gt;&amp;gt; verification&lt;br/&gt;&amp;gt; procedure would be to simply ask every share holder to verify the checksum&lt;br/&gt;&amp;gt; manually using the mod N procedure, and then verify that each share holder&lt;br/&gt;&amp;gt; has&lt;br/&gt;&amp;gt; the same checksum. This would be less error prone in terms of leaking&lt;br/&gt;&amp;gt; information accidentally if the checksum was obviously *not* part of the&lt;br/&gt;&amp;gt; share:&lt;br/&gt;&amp;gt; eg by encoding the share with words, and the checksum with a number.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Obviously, small checksums aren&amp;#39;t fool proof. But we&amp;#39;re probably better off&lt;br/&gt;&amp;gt; creating a relatively easy procedure with a 1-in-1000 chance of an error&lt;br/&gt;&amp;gt; going&lt;br/&gt;&amp;gt; undetected than a complex procedure that people don&amp;#39;t actually do at all.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://petertodd.org&#34;&gt;https://petertodd.org&lt;/a&gt; &amp;#39;peter&amp;#39;[:-1]@petertodd.org&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/20230222/8b9500fc/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230222/8b9500fc/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8xev8t88vf9u0am57llhhuzd0r29masl96h8d23hfdpvsdrhgegqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596lux9wk</id>
    
      <title type="html">📅 Original date posted:2023-02-16 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8xev8t88vf9u0am57llhhuzd0r29masl96h8d23hfdpvsdrhgegqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596lux9wk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs28gl5hday7a4ym48lhxadwd7yeu4wlvzfd7jtxykk6kl3lkxdugsg49urd&#39;&gt;nevent1q…9urd&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-16&lt;br/&gt;🗒️ Summary of this message: Ancient scrolls discovered in Pennsylvania reveal the existence of a secret society devoted to computation in 200 BC, using a system of cryptographic computations.&lt;br/&gt;📝 Original message:I&amp;#39;ve been asked by Dr. Curr and Professor Snead to forward this message to&lt;br/&gt;this mailing list, as it may be of general interest to Bitcoin users.&lt;br/&gt;&lt;br/&gt;Dear Colleague:&lt;br/&gt;&lt;br/&gt;In 1967, during excavation for the construction of a new shopping center in&lt;br/&gt;Monroeville, Pennsylvania, workers uncovered a vault containing a cache of&lt;br/&gt;ancient scrolls[1].  Most were severely damaged, but those that could be&lt;br/&gt;recovered confirmed the existence of a secret society long suspected to&lt;br/&gt;have&lt;br/&gt;been active in the region around the year 200 BC.&lt;br/&gt;&lt;br/&gt;Based on a translation of these documents, we now know that the society,&lt;br/&gt;the&lt;br/&gt;Cult of the Bound Variable, was devoted to the careful study of&lt;br/&gt;computation,&lt;br/&gt;over two millennia before the invention of the digital computer.&lt;br/&gt;&lt;br/&gt;While the Monroeville scrolls make reference to computing machines made of&lt;br/&gt;sandstone, most researchers believed this to be a poetic metaphor and that&lt;br/&gt;the&lt;br/&gt;&amp;#34;computers&amp;#34; were in fact the initiates themselves, carrying out the&lt;br/&gt;unimaginably tedious steps of their computations with reed pens on&lt;br/&gt;parchment.&lt;br/&gt;&lt;br/&gt;Within the vault, a collection of sandstone wheels marked in a language&lt;br/&gt;consisting of 32 glyphs was found. After 15 years of study, we have&lt;br/&gt;successfully&lt;br/&gt;completed the translation of what is known as &amp;#34;Codex32,&amp;#34; a document that&lt;br/&gt;describes the functions of the wheels. It was discovered that the wheels&lt;br/&gt;operate&lt;br/&gt;a system of cryptographic computations that was used by cult members to&lt;br/&gt;safeguard their most valuable secrets.&lt;br/&gt;&lt;br/&gt;The Codex32 system allows secrets to be carved into multiple tablets and&lt;br/&gt;scattered to the far corners of the earth. When a sufficient number of&lt;br/&gt;tablets are&lt;br/&gt;brought together the stone wheels are manipulated in a manner to recover the&lt;br/&gt;secrets. This finding may be of particular interest to the Bitcoin&lt;br/&gt;community.&lt;br/&gt;&lt;br/&gt;Below we provide a summary of the cult&amp;#39;s secret sharing system, which is&lt;br/&gt;graciously hosted at&lt;br/&gt;&amp;lt;&lt;br/&gt;&lt;a href=&#34;https://github.com/apoelstra/bips/blob/2023-02--volvelles/bip-0000.mediawiki&#34;&gt;https://github.com/apoelstra/bips/blob/2023-02--volvelles/bip-0000.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;.&lt;br/&gt;We are requesting a record assignment in the Bibliography of Immemorial&lt;br/&gt;Philosophy (BIP) repository.&lt;br/&gt;&lt;br/&gt;Thank you for your consideration.&lt;br/&gt;&lt;br/&gt;Dr. Leon O. Curr and Professor Pearlwort Snead&lt;br/&gt;Department of Archaeocryptography&lt;br/&gt;Harry Q. Bovik Institute for the Advancement&lt;br/&gt;&lt;br/&gt;[1] &lt;a href=&#34;http://www.boundvariable.org/task.shtml&#34;&gt;http://www.boundvariable.org/task.shtml&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;-----BEGIN BIP-----&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: ????&lt;br/&gt;  Layer: Applications&lt;br/&gt;  Title: codex32&lt;br/&gt;  Author: Leon Olsson Curr and Pearlwort Sneed &amp;lt;pearlwort at wpsoftware.net&amp;gt;&lt;br/&gt;  Comments-URI: &lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-&lt;/a&gt;????&lt;br/&gt;  Status: Draft&lt;br/&gt;  Type: ????&lt;br/&gt;  Created: 2023-02-13&lt;br/&gt;  License: BSD-3-Clause&lt;br/&gt;  Post-History: FIXME&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Introduction==&lt;br/&gt;&lt;br/&gt;===Abstract===&lt;br/&gt;&lt;br/&gt;This document describes a standard for backing up and restoring the master&lt;br/&gt;seed of a&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&lt;/a&gt; BIP-0032]&lt;br/&gt;hierarchical deterministic wallet, using Shamir&amp;#39;s secret sharing.&lt;br/&gt;It includes an encoding format, a BCH error-correcting checksum, and&lt;br/&gt;algorithms for share generation and secret recovery.&lt;br/&gt;Secret data can be split into up to 31 shares.&lt;br/&gt;A minimum threshold of shares, which can be between 1 and 9, is needed to&lt;br/&gt;recover the secret, whereas without sufficient shares, no information about&lt;br/&gt;the secret is recoverable.&lt;br/&gt;&lt;br/&gt;===Copyright===&lt;br/&gt;&lt;br/&gt;This document is licensed under the 3-clause BSD license.&lt;br/&gt;&lt;br/&gt;===Motivation===&lt;br/&gt;&lt;br/&gt;BIP-0032 master seed data is the source entropy used to derive all private&lt;br/&gt;keys in an HD wallet.&lt;br/&gt;Safely storing this secret data is the hardest and most important part of&lt;br/&gt;self-custody.&lt;br/&gt;However, there is a tension between security, which demands limiting the&lt;br/&gt;number of backups, and resilience, which demands widely replicated backups.&lt;br/&gt;Encrypting the seed does not change this fundamental tradeoff, since it&lt;br/&gt;leaves essentially the same problem of how to back up the encryption key(s).&lt;br/&gt;&lt;br/&gt;To allow users freedom to make this tradeoff, we use Shamir&amp;#39;s secret&lt;br/&gt;sharing, which guarantees that any number of shares less than the threshold&lt;br/&gt;leaks no information about the secret.&lt;br/&gt;This approach allows increasing safety by widely distributing the generated&lt;br/&gt;shares, while also providing security against the compromise of one or more&lt;br/&gt;shares (as long as fewer than the threshold have been compromised).&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/satoshilabs/slips/blob/master/slip-0039.md&#34;&gt;https://github.com/satoshilabs/slips/blob/master/slip-0039.md&lt;/a&gt; SLIP-0039]&lt;br/&gt;has essentially the same motivations as this standard.&lt;br/&gt;However, unlike SLIP-0039, this standard also aims to be simple enough for&lt;br/&gt;hand computation.&lt;br/&gt;Users who demand a higher level of security for particular secrets, or have&lt;br/&gt;a general distrust in digital electronic devices, have the option of using&lt;br/&gt;hand computation to backup and restore secret data in an interoperable&lt;br/&gt;manner.&lt;br/&gt;Note that hand computation is optional, the particular details of hand&lt;br/&gt;computation are outside the scope of this standard, and implementers do not&lt;br/&gt;need to be concerned with this possibility.&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&lt;/a&gt; BIP-0039]&lt;br/&gt;serves the same purpose as this standard: encoding master seeds for storage&lt;br/&gt;by users.&lt;br/&gt;However, BIP-0039 has no error-correcting ability, cannot sensibly be&lt;br/&gt;extended to support secret sharing, has no support for versioning or other&lt;br/&gt;metadata, and has many technical design decisions that make implementation&lt;br/&gt;and interoperability difficult (for example, the use of SHA-512 to derive&lt;br/&gt;seeds, or the use of 11-bit words).&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;===codex32===&lt;br/&gt;&lt;br/&gt;A codex32 string is similar to a Bech32 string defined in [&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki&lt;/a&gt; BIP-0173].&lt;br/&gt;It reuses the base32 character set from BIP-0173, and consists of:&lt;br/&gt;&lt;br/&gt;* A human-readable part, which is the string &amp;#34;ms&amp;#34; (or &amp;#34;MS&amp;#34;).&lt;br/&gt;* A separator, which is always &amp;#34;1&amp;#34;.&lt;br/&gt;* A data part which is in turn subdivided into:&lt;br/&gt;** A threshold parameter, which MUST be a single digit between &amp;#34;2&amp;#34; and &amp;#34;9&amp;#34;,&lt;br/&gt;or the digit &amp;#34;0&amp;#34;.&lt;br/&gt;*** If the threshold parameter is &amp;#34;0&amp;#34; then the share index, defined below,&lt;br/&gt;MUST have a value of &amp;#34;s&amp;#34; (or &amp;#34;S&amp;#34;).&lt;br/&gt;** An identifier consisting of 4 Bech32 characters.&lt;br/&gt;** A share index, which is any Bech32 character. Note that a share index&lt;br/&gt;value of &amp;#34;s&amp;#34; (or &amp;#34;S&amp;#34;) is special and denotes the unshared secret (see&lt;br/&gt;section &amp;#34;Unshared Secret&amp;#34;).&lt;br/&gt;** A payload which is a sequence of up to 74 Bech32 characters. (However,&lt;br/&gt;see &amp;#39;&amp;#39;&amp;#39;Long codex32 Strings&amp;#39;&amp;#39;&amp;#39; below for an exception to this limit.)&lt;br/&gt;** A checksum which consists of 13 Bech32 characters as described below.&lt;br/&gt;&lt;br/&gt;As with Bech32 strings, a codex32 string MUST be entirely uppercase or&lt;br/&gt;entirely lowercase.&lt;br/&gt;The lowercase form is used when determining a character&amp;#39;s value for&lt;br/&gt;checksum purposes.&lt;br/&gt;For presentation, lowercase is usually preferable, but uppercase SHOULD be&lt;br/&gt;used for handwritten codex32 strings.&lt;br/&gt;&lt;br/&gt;===Checksum===&lt;br/&gt;&lt;br/&gt;The last thirteen characters of the data part form a checksum and contain&lt;br/&gt;no information.&lt;br/&gt;Valid strings MUST pass the criteria for validity specified by the Python3&lt;br/&gt;code snippet below.&lt;br/&gt;The function &amp;lt;code&amp;gt;ms32_verify_checksum&amp;lt;/code&amp;gt; must return true when its&lt;br/&gt;argument is the data part as a list of integers representing the characters&lt;br/&gt;converted using the bech32 character table from BIP-0173.&lt;br/&gt;&lt;br/&gt;To construct a valid checksum given the data-part characters (excluding the&lt;br/&gt;checksum), the &amp;lt;code&amp;gt;ms32_create_checksum&amp;lt;/code&amp;gt; function can be used.&lt;br/&gt;&lt;br/&gt;&amp;lt;source lang=&amp;#34;python&amp;#34;&amp;gt;&lt;br/&gt;MS32_CONST = 0x10ce0795c2fd1e62a&lt;br/&gt;&lt;br/&gt;def ms32_polymod(values):&lt;br/&gt;    GEN = [&lt;br/&gt;        0x19dc500ce73fde210,&lt;br/&gt;        0x1bfae00def77fe529,&lt;br/&gt;        0x1fbd920fffe7bee52,&lt;br/&gt;        0x1739640bdeee3fdad,&lt;br/&gt;        0x07729a039cfc75f5a,&lt;br/&gt;    ]&lt;br/&gt;    residue = 0x23181b3&lt;br/&gt;    for v in values:&lt;br/&gt;        b = (residue &amp;gt;&amp;gt; 60)&lt;br/&gt;        residue = (residue &amp;amp; 0x0fffffffffffffff) &amp;lt;&amp;lt; 5 ^ v&lt;br/&gt;        for i in range(5):&lt;br/&gt;            residue ^= GEN[i] if ((b &amp;gt;&amp;gt; i) &amp;amp; 1) else 0&lt;br/&gt;    return residue&lt;br/&gt;&lt;br/&gt;def ms32_verify_checksum(data):&lt;br/&gt;    if len(data) &amp;gt;= 96:                      # See Long codex32 Strings&lt;br/&gt;        return ms32_verify_long_checksum(data)&lt;br/&gt;    if len(data) &amp;lt;= 93:&lt;br/&gt;        return ms32_polymod(data) == MS32_CONST&lt;br/&gt;    return False&lt;br/&gt;&lt;br/&gt;def ms32_create_checksum(data):&lt;br/&gt;    if len(data) &amp;gt; 80:                       # See Long codex32 Strings&lt;br/&gt;        return ms32_create_long_checksum(data)&lt;br/&gt;    values = data&lt;br/&gt;    polymod = ms32_polymod(values &#43; [0] * 13) ^ MS32_CONST&lt;br/&gt;    return [(polymod &amp;gt;&amp;gt; 5 * (12 - i)) &amp;amp; 31 for i in range(13)]&lt;br/&gt;&amp;lt;/source&amp;gt;&lt;br/&gt;&lt;br/&gt;===Error Correction===&lt;br/&gt;&lt;br/&gt;A codex32 string without a valid checksum MUST NOT be used.&lt;br/&gt;The checksum is designed to be an error correcting code that can correct up&lt;br/&gt;to 4 character substitutions, up to 8 unreadable characters (called&lt;br/&gt;erasures), or up to 13 consecutive erasures.&lt;br/&gt;Implementations SHOULD provide the user with a corrected valid codex32&lt;br/&gt;string if possible.&lt;br/&gt;However, implementations SHOULD NOT automatically proceed with a corrected&lt;br/&gt;codex32 string without user confirmation of the corrected string, either by&lt;br/&gt;prompting the user, or returning a corrected string in an error message and&lt;br/&gt;allowing the user to repeat their action.&lt;br/&gt;We do not specify how an implementation should implement error correction.&lt;br/&gt;However, we recommend that:&lt;br/&gt;&lt;br/&gt;* Implementations make suggestions to substitute non-bech32 characters with&lt;br/&gt;bech32 characters in some situations, such as replacing &amp;#34;B&amp;#34; with &amp;#34;8&amp;#34;, &amp;#34;O&amp;#34;&lt;br/&gt;with &amp;#34;0&amp;#34;, &amp;#34;I&amp;#34; with &amp;#34;l&amp;#34;, etc.&lt;br/&gt;* Implementations interpret &amp;#34;?&amp;#34; as an erasure.&lt;br/&gt;* Implementations optionally interpret other non-bech32 characters, or&lt;br/&gt;characters with incorrect case, as erasures.&lt;br/&gt;* If a string with 8 or fewer erasures can have those erasures filled in to&lt;br/&gt;make a valid codex32 string, then the implementation suggests such a string&lt;br/&gt;as a correction.&lt;br/&gt;* If a string consisting of valid Bech32 characters in the proper case can&lt;br/&gt;be made valid by substituting 4 or fewer characters, then the&lt;br/&gt;implementation suggests such a string as a correction.&lt;br/&gt;&lt;br/&gt;===Unshared Secret===&lt;br/&gt;&lt;br/&gt;When the share index of a valid codex32 string (converted to lowercase) is&lt;br/&gt;the letter &amp;#34;s&amp;#34;, we call the string a codex32 secret.&lt;br/&gt;The subsequent data characters in a codex32 secret, excluding the final&lt;br/&gt;checksum of 13 characters, is a direct encoding of a BIP-0032 HD master&lt;br/&gt;seed.&lt;br/&gt;&lt;br/&gt;The master seed is decoded by converting the data to bytes:&lt;br/&gt;&lt;br/&gt;* Translate the characters to 5 bits values using the bech32 character&lt;br/&gt;table from BIP-0173, most significant bit first.&lt;br/&gt;* Re-arrange those bits into groups of 8 bits. Any incomplete group at the&lt;br/&gt;end MUST be 4 bits or less, and is discarded.&lt;br/&gt;&lt;br/&gt;Note that unlike the decoding process in BIP-0173, we do NOT require that&lt;br/&gt;the incomplete group be all zeros.&lt;br/&gt;&lt;br/&gt;For an unshared secret, the threshold parameter (the first character of the&lt;br/&gt;data part) is ignored (beyond the fact it must be a digit for the codex32&lt;br/&gt;string to be valid).&lt;br/&gt;We recommend using the digit &amp;#34;0&amp;#34; for the threshold parameter in this case.&lt;br/&gt;The 4 character identifier also has no effect beyond aiding users in&lt;br/&gt;distinguishing between multiple different master seeds in cases where they&lt;br/&gt;have more than one.&lt;br/&gt;&lt;br/&gt;===Recovering Master Seed===&lt;br/&gt;&lt;br/&gt;When the share index of a valid codex32 string (converted to lowercase) is&lt;br/&gt;not the letter &amp;#34;s&amp;#34;, we call the string an codex32 share.&lt;br/&gt;The first character of the data part indicates the threshold of the share,&lt;br/&gt;and it is required to be a non-&amp;#34;0&amp;#34; digit.&lt;br/&gt;&lt;br/&gt;In order to recover a master seed, one needs a set of valid codex32 shares&lt;br/&gt;such that:&lt;br/&gt;&lt;br/&gt;* All shares have the same threshold value, the same identifier, and the&lt;br/&gt;same length.&lt;br/&gt;* All of the share index values are distinct.&lt;br/&gt;* The number of codex32 shares is exactly equal to the (common) threshold&lt;br/&gt;value.&lt;br/&gt;&lt;br/&gt;If all the above conditions are satisfied, the &amp;lt;code&amp;gt;ms32_recover&amp;lt;/code&amp;gt;&lt;br/&gt;function will return a codex32 secret when its argument is the list of&lt;br/&gt;codex32 shares with each share represented as a list of integers&lt;br/&gt;representing the characters converted using the bech32 character table from&lt;br/&gt;BIP-0173.&lt;br/&gt;&lt;br/&gt;&amp;lt;source lang=&amp;#34;python&amp;#34;&amp;gt;&lt;br/&gt;bech32_inv = [&lt;br/&gt;    0, 1, 20, 24, 10, 8, 12, 29, 5, 11, 4, 9, 6, 28, 26, 31,&lt;br/&gt;    22, 18, 17, 23, 2, 25, 16, 19, 3, 21, 14, 30, 13, 7, 27, 15,&lt;br/&gt;]&lt;br/&gt;&lt;br/&gt;def bech32_mul(a, b):&lt;br/&gt;    res = 0&lt;br/&gt;    for i in range(5):&lt;br/&gt;        res ^= a if ((b &amp;gt;&amp;gt; i) &amp;amp; 1) else 0&lt;br/&gt;        a *= 2&lt;br/&gt;        a ^= 41 if (32 &amp;lt;= a) else 0&lt;br/&gt;    return res&lt;br/&gt;&lt;br/&gt;def bech32_lagrange(l, x):&lt;br/&gt;    n = 1&lt;br/&gt;    c = []&lt;br/&gt;    for i in l:&lt;br/&gt;        n = bech32_mul(n, i ^ x)&lt;br/&gt;        m = 1&lt;br/&gt;        for j in l:&lt;br/&gt;            m = bech32_mul(m, (x if i == j else i) ^ j)&lt;br/&gt;        c.append(m)&lt;br/&gt;    return [bech32_mul(n, bech32_inv[i]) for i in c]&lt;br/&gt;&lt;br/&gt;def ms32_interpolate(l, x):&lt;br/&gt;    w = bech32_lagrange([s[5] for s in l], x)&lt;br/&gt;    res = []&lt;br/&gt;    for i in range(len(l[0])):&lt;br/&gt;        n = 0&lt;br/&gt;        for j in range(len(l)):&lt;br/&gt;            n ^= bech32_mul(w[j], l[j][i])&lt;br/&gt;        res.append(n)&lt;br/&gt;    return res&lt;br/&gt;&lt;br/&gt;def ms32_recover(l):&lt;br/&gt;    return ms32_interpolate(l, 16)&lt;br/&gt;&amp;lt;/source&amp;gt;&lt;br/&gt;&lt;br/&gt;===Generating Shares===&lt;br/&gt;&lt;br/&gt;If we already have &amp;#39;&amp;#39;t&amp;#39;&amp;#39; valid codex32 strings such that:&lt;br/&gt;&lt;br/&gt;* All strings have the same threshold value &amp;#39;&amp;#39;t&amp;#39;&amp;#39;, the same identifier, and&lt;br/&gt;the same length&lt;br/&gt;* All of the share index values are distinct&lt;br/&gt;&lt;br/&gt;Then we can derive additional shares with the &amp;lt;code&amp;gt;ms32_interpolate&amp;lt;/code&amp;gt;&lt;br/&gt;function by passing it a list of exactly &amp;#39;&amp;#39;t&amp;#39;&amp;#39; of these codex32 strings,&lt;br/&gt;together with a fresh share index distinct from all of the existing share&lt;br/&gt;indexes.&lt;br/&gt;The newly derived share will have the provided share index.&lt;br/&gt;&lt;br/&gt;Once a user has generated &amp;#39;&amp;#39;n&amp;#39;&amp;#39; codex32 shares, they may discard the&lt;br/&gt;codex32 secret (if it exists).&lt;br/&gt;The &amp;#39;&amp;#39;n&amp;#39;&amp;#39; shares form a &amp;#39;&amp;#39;t&amp;#39;&amp;#39; of &amp;#39;&amp;#39;n&amp;#39;&amp;#39; Shamir&amp;#39;s secret sharing scheme of a&lt;br/&gt;codex32 secret.&lt;br/&gt;&lt;br/&gt;There are two ways to create an initial set of &amp;#39;&amp;#39;t&amp;#39;&amp;#39; valid codex32 strings,&lt;br/&gt;depending on whether the user already has an existing master seed to split.&lt;br/&gt;&lt;br/&gt;====For an existing master seed====&lt;br/&gt;&lt;br/&gt;Before generating shares for an existing master seed, it first must be&lt;br/&gt;converted into a codex32 secret, as described above.&lt;br/&gt;The conversion process consists of:&lt;br/&gt;&lt;br/&gt;* Choosing a threshold value &amp;#39;&amp;#39;t&amp;#39;&amp;#39; between 2 and 9, inclusive&lt;br/&gt;* Choosing a 4 bech32 character identifier&lt;br/&gt;** We do not define how to choose the identifier, beyond noting that it&lt;br/&gt;SHOULD be distinct for every master seed the user may need to disambiguate.&lt;br/&gt;* Setting the share index to &amp;#34;s&amp;#34;&lt;br/&gt;* Setting the payload to a Bech32 encoding of the master seed, padded with&lt;br/&gt;arbitrary bits&lt;br/&gt;* Generating a valid checksum in accordance with the Checksum section&lt;br/&gt;&lt;br/&gt;Along with the codex32 secret, the user must generate &amp;#39;&amp;#39;t&amp;#39;&amp;#39;-1 other codex32&lt;br/&gt;shares, each with the same threshold value, the same identifier, and a&lt;br/&gt;distinct share index.&lt;br/&gt;The set of share indexes may be chosen arbitrarily.&lt;br/&gt;The payload of each of these codex32 shares is chosen uniformly at random&lt;br/&gt;such that it has the same length as the payload of the codex32 secret.&lt;br/&gt;For each share, a valid checksum must be generated in accordance with the&lt;br/&gt;Checksum section.&lt;br/&gt;&lt;br/&gt;The codex32 secret and the &amp;#39;&amp;#39;t&amp;#39;&amp;#39;-1 codex32 shares form a set of &amp;#39;&amp;#39;t&amp;#39;&amp;#39; valid&lt;br/&gt;codex32 strings from which additional shares can be derived as described&lt;br/&gt;above.&lt;br/&gt;&lt;br/&gt;====For a fresh master seed====&lt;br/&gt;&lt;br/&gt;In the case that the user wishes to generate a fresh master seed, the user&lt;br/&gt;chooses a threshold value &amp;#39;&amp;#39;t&amp;#39;&amp;#39; and an identifier, then generates &amp;#39;&amp;#39;t&amp;#39;&amp;#39;&lt;br/&gt;random codex32 shares, using the generation procedure from the previous&lt;br/&gt;section.&lt;br/&gt;As before, each share must have the same threshold value &amp;#39;&amp;#39;t&amp;#39;&amp;#39;, the same&lt;br/&gt;identifier, and a distinct share index.&lt;br/&gt;&lt;br/&gt;With this set of &amp;#39;&amp;#39;t&amp;#39;&amp;#39; codex32 shares, new shares can be derived as&lt;br/&gt;discussed above. This process generates a fresh master seed, whose value&lt;br/&gt;can be retrieved by running the recovery process on any &amp;#39;&amp;#39;t&amp;#39;&amp;#39; of these&lt;br/&gt;shares.&lt;br/&gt;&lt;br/&gt;===Long codex32 Strings===&lt;br/&gt;&lt;br/&gt;The 13 character checksum design only supports up to 80 data characters.&lt;br/&gt;Excluding the threshold, identifier and index characters, this limits the&lt;br/&gt;payload to 74 characters or 46 bytes.&lt;br/&gt;While this is enough to support the 32-byte advised size of BIP-0032 master&lt;br/&gt;seeds, BIP-0032 allows seeds to be up to 64 bytes in size.&lt;br/&gt;We define a long codex32 string format to support these longer seeds by&lt;br/&gt;defining an alternative checksum.&lt;br/&gt;&lt;br/&gt;&amp;lt;source lang=&amp;#34;python&amp;#34;&amp;gt;&lt;br/&gt;MS32_LONG_CONST = 0x43381e570bf4798ab26&lt;br/&gt;&lt;br/&gt;def ms32_long_polymod(values):&lt;br/&gt;    GEN = [&lt;br/&gt;        0x3d59d273535ea62d897,&lt;br/&gt;        0x7a9becb6361c6c51507,&lt;br/&gt;        0x543f9b7e6c38d8a2a0e,&lt;br/&gt;        0x0c577eaeccf1990d13c,&lt;br/&gt;        0x1887f74f8dc71b10651,&lt;br/&gt;    ]&lt;br/&gt;    residue = 0x23181b3&lt;br/&gt;    for v in values:&lt;br/&gt;        b = (residue &amp;gt;&amp;gt; 70)&lt;br/&gt;        residue = (residue &amp;amp; 0x3fffffffffffffffff) &amp;lt;&amp;lt; 5 ^ v&lt;br/&gt;        for i in range(5):&lt;br/&gt;            residue ^= GEN[i] if ((b &amp;gt;&amp;gt; i) &amp;amp; 1) else 0&lt;br/&gt;    return residue&lt;br/&gt;&lt;br/&gt;def ms32_verify_long_checksum(data):&lt;br/&gt;    return ms32_long_polymod(data) == MS32_LONG_CONST&lt;br/&gt;&lt;br/&gt;def ms32_create_long_checksum(data):&lt;br/&gt;    values = data&lt;br/&gt;    polymod = ms32_long_polymod(values &#43; [0] * 15) ^ MS32_LONG_CONST&lt;br/&gt;    return [(polymod &amp;gt;&amp;gt; 5 * (14 - i)) &amp;amp; 31 for i in range(15)]&lt;br/&gt;&amp;lt;/source&amp;gt;&lt;br/&gt;&lt;br/&gt;A long codex32 string follows the same specification as a regular codex32&lt;br/&gt;string with the following changes.&lt;br/&gt;&lt;br/&gt;* The payload is a sequence of between 75 and 103 Bech32 characters.&lt;br/&gt;* The checksum consists of 15 Bech32 characters as defined above.&lt;br/&gt;&lt;br/&gt;A codex32 string with a data part of 94 or 95 characters is never legal as&lt;br/&gt;a regular codex32 string is limited to 93 data characters and a long&lt;br/&gt;codex32 string is at least 96 characters.&lt;br/&gt;&lt;br/&gt;Generation of long shares and recovery of the master seed from long shares&lt;br/&gt;proceeds in exactly the same way as for regular shares with the&lt;br/&gt;&amp;lt;code&amp;gt;ms32_interpolate&amp;lt;/code&amp;gt; function.&lt;br/&gt;&lt;br/&gt;The long checksum is designed to be an error correcting code that can&lt;br/&gt;correct up to 4 character substitutions, up to 8 unreadable characters&lt;br/&gt;(called erasures), or up to 15 consecutive erasures.&lt;br/&gt;As with regular checksums we do not specify how an implementation should&lt;br/&gt;implement error correction, and all our recommendations for error&lt;br/&gt;correction of regular codex32 strings also apply to long codex32 strings.&lt;br/&gt;&lt;br/&gt;==Rationale==&lt;br/&gt;&lt;br/&gt;This scheme is based on the observation that the Lagrange interpolation of&lt;br/&gt;valid codewords in a BCH code will always be a valid codeword.&lt;br/&gt;This means that derived shares will always have valid checksum, and a&lt;br/&gt;sufficient threshold of shares with valid checksums will derive a secret&lt;br/&gt;with a valid checksum.&lt;br/&gt;&lt;br/&gt;The header system is also compatible with Lagrange interpolation, meaning&lt;br/&gt;all derived shares will have the same identifier and will have the&lt;br/&gt;appropriate share index.&lt;br/&gt;This fact allows the header data to be covered by the checksum.&lt;br/&gt;&lt;br/&gt;The checksum size and identifier size have been chosen so that the encoding&lt;br/&gt;of 128-bit seeds and shares fit within 48 characters.&lt;br/&gt;This is a standard size for many common seed storage formats, which has&lt;br/&gt;been popularized by the 12 four-letter word format of the BIP-0039 mnemonic.&lt;br/&gt;&lt;br/&gt;The 13 character checksum is adequate to correct 4 errors in up to 93&lt;br/&gt;characters (80 characters of data and 13 characters of the checksum). This&lt;br/&gt;is somewhat better quality than the checksum used in SLIP-0039.&lt;br/&gt;&lt;br/&gt;For 256-bit seeds and shares our strings are 74 characters, which fits into&lt;br/&gt;the 96 character format of the 24 four-letter word format of the BIP-0039&lt;br/&gt;mnemonic, with plenty of room to spare.&lt;br/&gt;&lt;br/&gt;A longer checksum is needed to support up to 512-bit seeds, the longest&lt;br/&gt;seed length specified in BIP-0032, as the 13 character checksum isn&amp;#39;t&lt;br/&gt;adequate for more than 80 data characters.&lt;br/&gt;While we could use the 15 character checksum for both cases, we prefer to&lt;br/&gt;keep the strings as short as possible for the more common cases of 128-bit&lt;br/&gt;and 256-bit master seeds.&lt;br/&gt;We only guarantee to correct 4 characters no matter how long the string is.&lt;br/&gt;Longer strings mean more chances for transcription errors, so shorter&lt;br/&gt;strings are better.&lt;br/&gt;&lt;br/&gt;The longest data part using the regular 13 character checksum is 93&lt;br/&gt;characters and corresponds to a 400-bit secret.&lt;br/&gt;At this length, the prefix &amp;lt;code&amp;gt;MS1&amp;lt;/code&amp;gt; is not covered by the checksum.&lt;br/&gt;This is acceptable because the checksum scheme itself requires you to know&lt;br/&gt;that the &amp;lt;code&amp;gt;MS1&amp;lt;/code&amp;gt; prefix is being used in the first place.&lt;br/&gt;If the prefix is damaged and a user is guessing that the data might be&lt;br/&gt;using this scheme, then the user can enter the available data explicitly&lt;br/&gt;using the suspected &amp;lt;code&amp;gt;MS1&amp;lt;/code&amp;gt; prefix.&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;codex32 is an alternative to BIP-0039 and SLIP-0039.&lt;br/&gt;It is technically possible to derive the BIP32 master seed from seed words&lt;br/&gt;encoded in one of these schemes, and then to encode this seed in codex32.&lt;br/&gt;For BIP-0039 this process is irreversible, since it involves hashing the&lt;br/&gt;original words.&lt;br/&gt;Furthermore, the resulting seed will be 512 bits long, which may be too&lt;br/&gt;large to be safely and conveniently handled.&lt;br/&gt;&lt;br/&gt;SLIP-0039 seed words can be reversibly converted to master seeds, so it is&lt;br/&gt;possible to interconvert between SLIP-0039 and codex32.&lt;br/&gt;However, SLIP-0039 &amp;#39;&amp;#39;&amp;#39;shares&amp;#39;&amp;#39;&amp;#39; cannot be converted to codex32 shares&lt;br/&gt;because the two schemes use a different underlying field.&lt;br/&gt;&lt;br/&gt;The authors of this BIP do not recommend interconversion.&lt;br/&gt;Instead, users who wish to switch to codex32 should generate a fresh seed&lt;br/&gt;and sweep their coins.&lt;br/&gt;&lt;br/&gt;==Reference Implementation==&lt;br/&gt;&lt;br/&gt;* [&lt;a href=&#34;https://secretcodex32.com/docs/2023-02-14--bw.ps&#34;&gt;https://secretcodex32.com/docs/2023-02-14--bw.ps&lt;/a&gt; Reference PostScript&lt;br/&gt;Implementation]&lt;br/&gt;* FIXME add Python implementation&lt;br/&gt;* FIXME add Rust implementation&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;===Test vector 1===&lt;br/&gt;&lt;br/&gt;This example shows the codex32 format, when used without splitting the&lt;br/&gt;secret into any shares.&lt;br/&gt;The data part contains 26 Bech32 characters, which corresponds to 130 bits.&lt;br/&gt;We truncate the last two bits in order to obtain a 128-bit master seed.&lt;br/&gt;&lt;br/&gt;codex32 secret (Bech32):&lt;br/&gt;&amp;lt;code&amp;gt;ms10testsxxxxxxxxxxxxxxxxxxxxxxxxxx4nzvca9cmczlw&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Master secret (hex): &amp;lt;code&amp;gt;318c6318c6318c6318c6318c6318c631&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;* human-readable part: &amp;lt;code&amp;gt;ms&amp;lt;/code&amp;gt;&lt;br/&gt;* separator: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br/&gt;* k value: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (no secret splitting)&lt;br/&gt;* identifier: &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;&lt;br/&gt;* share index: &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt; (the secret)&lt;br/&gt;* data: &amp;lt;code&amp;gt;xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;lt;/code&amp;gt;&lt;br/&gt;* checksum: &amp;lt;code&amp;gt;4nzvca9cmczlw&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;===Test vector 2===&lt;br/&gt;&lt;br/&gt;This example shows generating a new master seed using &amp;#34;random&amp;#34; codex32&lt;br/&gt;shares, as well as deriving an additional codex32 share, using &amp;#39;&amp;#39;k&amp;#39;&amp;#39;=2 and&lt;br/&gt;an identifier of &amp;lt;code&amp;gt;NAME&amp;lt;/code&amp;gt;.&lt;br/&gt;Although codex32 strings are canonically all lowercase, it&amp;#39;s also valid to&lt;br/&gt;use all uppercase.&lt;br/&gt;&lt;br/&gt;Share with index &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;MS12NAMEA320ZYXWVUTSRQPNMLKJHGFEDCAXRPP870HKKQRM&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Share with index &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;MS12NAMECACDEFGHJKLMNPQRSTUVWXYZ023FTR2GDZMPY6PN&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;* Derived share with index &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;MS12NAMEDLL4F8JLH4E5VDVULDLFXU2JHDNLSM97XVENRXEG&amp;lt;/code&amp;gt;&lt;br/&gt;* Secret share with index &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;MS12NAMES6XQGUZTTXKEQNJSJZV4JV3NZ5K3KWGSPHUH6EVW&amp;lt;/code&amp;gt;&lt;br/&gt;* Master secret (hex): &amp;lt;code&amp;gt;d1808e096b35b209ca12132b264662a5&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Note that per BIP-0173, the lowercase form is used when determining a&lt;br/&gt;character&amp;#39;s value for checksum purposes.&lt;br/&gt;In particular, given an all uppercase codex32 string, we still use&lt;br/&gt;lowercase &amp;lt;code&amp;gt;ms&amp;lt;/code&amp;gt; as the human-readable part during checksum&lt;br/&gt;construction.&lt;br/&gt;&lt;br/&gt;===Test vector 3===&lt;br/&gt;&lt;br/&gt;This example shows splitting an existing 128-bit master seed into &amp;#34;random&amp;#34;&lt;br/&gt;codex32 shares, using &amp;#39;&amp;#39;k&amp;#39;&amp;#39;=3 and an identifier of &amp;lt;code&amp;gt;cash&amp;lt;/code&amp;gt;.&lt;br/&gt;We appended two zero bits in order to obtain 26 Bech32 characters (130 bits&lt;br/&gt;of data) from the 128-bit master seed.&lt;br/&gt;&lt;br/&gt;Master secret (hex): &amp;lt;code&amp;gt;ffeeddccbbaa99887766554433221100&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Secret share with index &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;ms13cashsllhdmn9m42vcsamx24zrxgs3qqjzqud4m0d6nln&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Share with index &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;ms13casha320zyxwvutsrqpnmlkjhgfedca2a8d0zehn8a0t&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Share with index &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;ms13cashcacdefghjklmnpqrstuvwxyz023949xq35my48dr&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;* Derived share with index &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;ms13cashd0wsedstcdcts64cd7wvy4m90lm28w4ffupqs7rm&amp;lt;/code&amp;gt;&lt;br/&gt;* Derived share with index &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;ms13casheekgpemxzshcrmqhaydlp6yhms3ws7320xyxsar9&amp;lt;/code&amp;gt;&lt;br/&gt;* Derived share with index &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;ms13cashf8jh6sdrkpyrsp5ut94pj8ktehhw2hfvyrj48704&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Any three of the five shares among &amp;lt;code&amp;gt;acdef&amp;lt;/code&amp;gt; can be used to&lt;br/&gt;recover the secret.&lt;br/&gt;&lt;br/&gt;Note that the choice to append two zero bits was arbitrary, and any of the&lt;br/&gt;following four secret shares would have been valid choices.&lt;br/&gt;However, each choice would have resulted in a different set of derived&lt;br/&gt;shares.&lt;br/&gt;&lt;br/&gt;* &amp;lt;code&amp;gt;ms13cashsllhdmn9m42vcsamx24zrxgs3qqjzqud4m0d6nln&amp;lt;/code&amp;gt;&lt;br/&gt;* &amp;lt;code&amp;gt;ms13cashsllhdmn9m42vcsamx24zrxgs3qpte35dvzkjpt0r&amp;lt;/code&amp;gt;&lt;br/&gt;* &amp;lt;code&amp;gt;ms13cashsllhdmn9m42vcsamx24zrxgs3qzfatvdwq5692k6&amp;lt;/code&amp;gt;&lt;br/&gt;* &amp;lt;code&amp;gt;ms13cashsllhdmn9m42vcsamx24zrxgs3qrsx6ydhed97jx2&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;===Test vector 4===&lt;br/&gt;&lt;br/&gt;This example shows converting a 256-bit secret into a codex32 secret,&lt;br/&gt;without splitting the secret into any shares.&lt;br/&gt;We appended four zero bits in order to obtain 52 Bech32 characters (260&lt;br/&gt;bits of data) from the 256-bit secret.&lt;br/&gt;&lt;br/&gt;256-bit secret (hex):&lt;br/&gt;&amp;lt;code&amp;gt;ffeeddccbbaa99887766554433221100ffeeddccbbaa99887766554433221100&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;* codex32 secret:&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqqtum9pgv99ycma&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;Note that the choice to append four zero bits was arbitrary, and any of the&lt;br/&gt;following sixteen codex32 secrets would have been valid:&lt;br/&gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqqtum9pgv99ycma&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqpj82dp34u6lqtd&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqzsrs4pnh7jmpj5&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqrfcpap2w8dqezy&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqy5tdvphn6znrf0&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyq9dsuypw2ragmel&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqx05xupvgp4v6qx&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyq8k0h5p43c2hzsk&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqgum7hplmjtr8ks&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqf9q0lpxzt5clxq&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyq28y48pyqfuu7le&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqt7ly0paesr8x0f&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqvrvg7pqydv5uyz&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqd6hekpea5n0y5j&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyqwcnrwpmlkmt9dt&amp;lt;/code&amp;gt;&lt;br/&gt;*&lt;br/&gt;&amp;lt;code&amp;gt;ms10leetsllhdmn9m42vcsamx24zrxgs3qrl7ahwvhw4fnzrhve25gvezzyq0pgjxpzx0ysaam&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;===Test vector 5===&lt;br/&gt;&lt;br/&gt;This example shows generating a new 512-bit master seed using &amp;#34;random&amp;#34;&lt;br/&gt;codex32 characters and appending a checksum.&lt;br/&gt;The payload contains 103 Bech32 characters, which corresponds to 515 bits.&lt;br/&gt;The last three bits are discarded when converting to a 512-bit master seed.&lt;br/&gt;&lt;br/&gt;This is an example of a &amp;#39;&amp;#39;&amp;#39;Long codex32 String&amp;#39;&amp;#39;&amp;#39;.&lt;br/&gt;&lt;br/&gt;* Secret share with index &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;:&lt;br/&gt;&amp;lt;code&amp;gt;MS100C8VSM32ZXFGUHPCHTLUPZRY9X8GF2TVDW0S3JN54KHCE6MUA7LQPZYGSFJD6AN074RXVCEMLH8WU3TK925ACDEFGHJKLMNPQRSTUVWXY06FHPV80UNDVARHRAK&amp;lt;/code&amp;gt;&lt;br/&gt;* Master secret (hex):&lt;br/&gt;&amp;lt;code&amp;gt;dc5423251cb87175ff8110c8531d0952d8d73e1194e95b5f19d6f9df7c01111104c9baecdfea8cccc677fb9ddc8aec5553b86e528bcadfdcc201c17c638c47e9&amp;lt;/code&amp;gt;&lt;br/&gt;&lt;br/&gt;==Appendix==&lt;br/&gt;&lt;br/&gt;===Mathematical Companion===&lt;br/&gt;&lt;br/&gt;Below we use the Bech32 character set to denote values in GF[32].&lt;br/&gt;In Bech32, the letter &amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt; denotes zero and the letter&lt;br/&gt;&amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; denotes one.&lt;br/&gt;The digits &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; do&lt;br/&gt;&amp;#39;&amp;#39;not&amp;#39;&amp;#39; denote their numeric values.&lt;br/&gt;They are simply elements of GF[32].&lt;br/&gt;&lt;br/&gt;The generating polynomial for our BCH code is as follows.&lt;br/&gt;&lt;br/&gt;We extend GF[32] to GF[1024] by adjoining a primitive cube root of unity,&lt;br/&gt;&amp;lt;code&amp;gt;ζ&amp;lt;/code&amp;gt;, satisfying &amp;lt;code&amp;gt;ζ^2 = ζ &#43; P&amp;lt;/code&amp;gt;.&lt;br/&gt;&lt;br/&gt;We select &amp;lt;code&amp;gt;β := G ζ&amp;lt;/code&amp;gt; which has order 93, and construct the&lt;br/&gt;product &amp;lt;code&amp;gt;(x - β^i)&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;{17, 20, 46, 49,&lt;br/&gt;52, 77, 78, 79, 80, 81, 82, 83, 84}&amp;lt;/code&amp;gt;.&lt;br/&gt;The resulting polynomial is our generating polynomial for our 13 character&lt;br/&gt;checksum:&lt;br/&gt;&lt;br/&gt;    x^13 &#43; E x^12 &#43; M x^11 &#43; 3 x^10 &#43; G x^9 &#43; Q x^8 &#43; E x^7 &#43; E x^6 &#43; E x^5&lt;br/&gt;&#43; L x^4 &#43; M x^3 &#43; C x^2 &#43; S x &#43; S&lt;br/&gt;&lt;br/&gt;For our long checksum, we select &amp;lt;code&amp;gt;γ := E &#43; X ζ&amp;lt;/code&amp;gt;, which has order&lt;br/&gt;1023, and construct the product &amp;lt;code&amp;gt;(x - γ^i)&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;&lt;br/&gt;in &amp;lt;code&amp;gt;{32, 64, 96, 895, 927, 959, 991, 1019, 1020, 1021, 1022, 1023,&lt;br/&gt;1024, 1025, 1026}&amp;lt;/code&amp;gt;.&lt;br/&gt;The resulting polynomial is our generating polynomial for our 15 character&lt;br/&gt;checksum for long strings:&lt;br/&gt;&lt;br/&gt;    x^15 &#43; 0 x^14 &#43; 2 x^13 &#43; E x^12 &#43; 6 x^11 &#43; F x^10 &#43; E x^9 &#43; 4 x^8 &#43; X&lt;br/&gt;x^7 &#43; H x^6 &#43; 4 x^5 &#43; X x^4 &#43; 9 x^3 &#43; K x^2 &#43; Y x^1 &#43; H&lt;br/&gt;&lt;br/&gt;(Reminder: the character &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; does &amp;#39;&amp;#39;not&amp;#39;&amp;#39; denote the zero of the&lt;br/&gt;field.)&lt;br/&gt;&lt;br/&gt;-----END BIP-----&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/20230215/4ef5f4ec/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230215/4ef5f4ec/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:39Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfm8x9njv5969npttr04p8u6tt9cpryfwdm3u5llx2ekfzdf09mhgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59604m62g</id>
    
      <title type="html">📅 Original date posted:2023-02-18 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfm8x9njv5969npttr04p8u6tt9cpryfwdm3u5llx2ekfzdf09mhgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59604m62g" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9xmjt9v3cnsg337vptghcfsxm7gr8nu8d4nwghld77jjas3cz9ks6wfaxs&#39;&gt;nevent1q…faxs&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-18&lt;br/&gt;🗒️ Summary of this message: A developer working on the Simplicity language, which prunes unused case branches, explains that it cannot prevent agents from posting unused data blobs as part of their programs.&lt;br/&gt;📝 Original message:On Sat, Feb 18, 2023 at 5:11 AM vjudeu 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;&lt;br/&gt;&amp;gt; Also, it gives us a hint, that if any Script upgrade will be considered in&lt;br/&gt;&amp;gt; the future, we can think about doing it in a way, where unused parts can be&lt;br/&gt;&amp;gt; pruned, without invalidating signatures.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;FWIW, pruning unused case branches is a core design principle of the&lt;br/&gt;Simplicity language I am developing.&lt;br/&gt;&lt;br/&gt;That being said, even this is not enough to thwart agents that specifically&lt;br/&gt;desire to post unused data blobs as part of their programs.  This is&lt;br/&gt;largely because there are many mathematical expressions for what is&lt;br/&gt;equivalently an identity function.  Think computing (x ^ 257) mod 257 (see&lt;br/&gt;Fermat&amp;#39;s little theorem).&lt;br/&gt;&lt;br/&gt;Even in Simplicity users can write Word *&amp;lt;some data blob&amp;gt;*; unit which is&lt;br/&gt;roughly equivalent PUSH *&amp;lt;data blob&amp;gt;* DROP in Script.  I don&amp;#39;t even bother&lt;br/&gt;trying to prevent it.  Doing so just adds more consensus complexity, and&lt;br/&gt;only raises the bar slightly on how to work around it.&lt;br/&gt;&lt;br/&gt;Simplicity&amp;#39;s pruning is instead meant as a way to (usually) lower costs for&lt;br/&gt;users who aren&amp;#39;t actively trying to spam the network.&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/20230218/2db79aa2/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230218/2db79aa2/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgkc87ddx7vayvzsuxwcevafwwmxfxvensj2zp7th74tn335j4umgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596qw728z</id>
    
      <title type="html">📅 Original date posted:2023-02-11 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgkc87ddx7vayvzsuxwcevafwwmxfxvensj2zp7th74tn335j4umgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596qw728z" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstrpcruam0hpss9wtspctrueqwasr4g5yknuk60km58756wj0kdsqae7gx4&#39;&gt;nevent1q…7gx4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-11&lt;br/&gt;🗒️ Summary of this message: A bug in Taproot allows the same Tapleaf to be repeated, but signing the entire tapbranch instead of the tapleaf can fix it.&lt;br/&gt;📝 Original message:Yes.  If you would otherwise sign the tapleaf, then I would recommend also&lt;br/&gt;signing the entire tapbranch.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Sat, Feb 11, 2023 at 12:15 AM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On 9 February 2023 12:04:16 am AEST, Russell O&amp;#39;Connor via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;The fix for the bug is to sign the entire tapbranch instead of the&lt;br/&gt;&amp;gt; tapleaf.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;On Wed., Feb. 8, 2023, 04:35 Michael Folkson, &amp;lt;&lt;br/&gt;&amp;gt; michaelfolkson at protonmail.com&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Hi Andrew&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; There is a bug in Taproot that allows the same Tapleaf to be repeated&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; multiple times in the same Taproot, potentially at different Taplevels&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; incurring different Tapfee rates.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; The countermeasure is that you should always know the entire Taptree&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; when interacting with someone&amp;#39;s Tapspend.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; I wouldn&amp;#39;t say it is a &amp;#34;bug&amp;#34; unless there is a remedy for the bug that&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; wasn&amp;#39;t (and retrospectively should have been) included in the Taproot&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; design. In retrospect and assuming you could redesign the Taproot&lt;br/&gt;&amp;gt; consensus&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; rules again today would you prevent spending from a valid P2TR address&lt;br/&gt;&amp;gt; if a&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; repeated Tapleaf hash was used to prove that a spending path was&lt;br/&gt;&amp;gt; embedded&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; in a Taproot tree? That&amp;#39;s the only thing I can think of to attempt to&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; remedy this &amp;#34;bug&amp;#34; and it would only be a partial protection as proving a&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; spending path exists within a Taproot tree only requires a subset of the&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Tapleaf hashes.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; I only point this out because there seems to be a push to find &amp;#34;bugs&amp;#34;&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; &amp;#34;accidental blowups&amp;#34; in the Taproot design currently. No problem with&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; if there are any, they should definitely be highlighted and discussed if&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; they do exist. The nearest to a possible inferior design decision thus&lt;br/&gt;&amp;gt; far&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; that I&amp;#39;m aware of is x-only pubkeys in BIP340 [0].&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Thanks&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Michael&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; [0]:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://btctranscripts.com/london-bitcoin-devs/2022-08-11-tim-ruffing-musig2/#a-retrospective-look-at-bip340&#34;&gt;https://btctranscripts.com/london-bitcoin-devs/2022-08-11-tim-ruffing-musig2/#a-retrospective-look-at-bip340&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Michael Folkson&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Email: michaelfolkson at protonmail.com&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; Keybase: michaelfolkson&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; PGP: 43ED C999 9F85 1D40 EAF4 9835 92D6 0159 214C FEE3&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; On Tuesday, February 7th, 2023 at 18:35, Russell O&amp;#39;Connor via&lt;br/&gt;&amp;gt; bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; There is a bug in Taproot that allows the same Tapleaf to be repeated&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; multiple times in the same Taproot, potentially at different Taplevels&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; incurring different Tapfee rates.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; The countermeasure is that you should always know the entire Taptree&lt;br/&gt;&amp;gt; when&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; interacting with someone&amp;#39;s Tapspend.&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; On Tue, Feb 7, 2023 at 1:10 PM Andrew Poelstra via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Some people highlighted some minor problems with my last email:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Tue, Feb 07, 2023 at 01:46:22PM &#43;0000, Andrew Poelstra via&lt;br/&gt;&amp;gt; bitcoin-dev&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;snip&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; [1] &lt;a href=&#34;https://bitcoin.sipa.be/miniscript/&#34;&gt;https://bitcoin.sipa.be/miniscript/&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; [2] In Taproot, if you want to prevent signatures migrating to&lt;br/&gt;&amp;gt; another&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; branch or within a branch, you can use the CODESEPARATOR opcode&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; which was redisegned in Taproot for exactly this purpose... we&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; really did about witness malleation in its design!&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; In Taproot the tapleaf hash is always covered by the signature (though&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; not in some ANYONECANPAY proposals) so you can never migrate signatures&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; between tapbranches.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I had thought this was the case, but then I re-confused myself by&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; reading BIP 341 .... which has much of the sighash specified, but not&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; all of it! The tapleaf hash is added in BIP 342.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; If you want to prevent signatures from moving around *within* a&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt; branch,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; And this sentence I just meant to delete :)&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Andrew Poelstra&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Director of Research, Blockstream&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Email: apoelstra at wpsoftware.net&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Web: &lt;a href=&#34;https://www.wpsoftware.net/andrew&#34;&gt;https://www.wpsoftware.net/andrew&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; The sun is always shining in space&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Justin Lewis-Webster&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is this something that should be fixed in bip118 signatures then?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Sent from my phone.&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/20230211/40833a03/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230211/40833a03/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:29Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyfkhaagcz6jymnntea42yz4nafe3w9maq8k3qsm5xd7apf3s7t8czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596c4jcdq</id>
    
      <title type="html">📅 Original date posted:2023-02-08 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyfkhaagcz6jymnntea42yz4nafe3w9maq8k3qsm5xd7apf3s7t8czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596c4jcdq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdxmr3g42jj6a5xq02nt9yy3vrjk5cjdnkf5ylevr7dyz68w75agql4lcs3&#39;&gt;nevent1q…lcs3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-08&lt;br/&gt;🗒️ Summary of this message: Bug in Taproot allows repeated Tapleaf at different Taplevels, fixed by signing entire Tapbranch instead of Tapleaf.&lt;br/&gt;📝 Original message:The fix for the bug is to sign the entire tapbranch instead of the tapleaf.&lt;br/&gt;&lt;br/&gt;On Wed., Feb. 8, 2023, 04:35 Michael Folkson, &amp;lt;michaelfolkson at protonmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Andrew&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; There is a bug in Taproot that allows the same Tapleaf to be repeated&lt;br/&gt;&amp;gt; multiple times in the same Taproot, potentially at different Taplevels&lt;br/&gt;&amp;gt; incurring different Tapfee rates.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The countermeasure is that you should always know the entire Taptree&lt;br/&gt;&amp;gt; when interacting with someone&amp;#39;s Tapspend.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I wouldn&amp;#39;t say it is a &amp;#34;bug&amp;#34; unless there is a remedy for the bug that&lt;br/&gt;&amp;gt; wasn&amp;#39;t (and retrospectively should have been) included in the Taproot&lt;br/&gt;&amp;gt; design. In retrospect and assuming you could redesign the Taproot consensus&lt;br/&gt;&amp;gt; rules again today would you prevent spending from a valid P2TR address if a&lt;br/&gt;&amp;gt; repeated Tapleaf hash was used to prove that a spending path was embedded&lt;br/&gt;&amp;gt; in a Taproot tree? That&amp;#39;s the only thing I can think of to attempt to&lt;br/&gt;&amp;gt; remedy this &amp;#34;bug&amp;#34; and it would only be a partial protection as proving a&lt;br/&gt;&amp;gt; spending path exists within a Taproot tree only requires a subset of the&lt;br/&gt;&amp;gt; Tapleaf hashes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I only point this out because there seems to be a push to find &amp;#34;bugs&amp;#34; and&lt;br/&gt;&amp;gt; &amp;#34;accidental blowups&amp;#34; in the Taproot design currently. No problem with this&lt;br/&gt;&amp;gt; if there are any, they should definitely be highlighted and discussed if&lt;br/&gt;&amp;gt; they do exist. The nearest to a possible inferior design decision thus far&lt;br/&gt;&amp;gt; that I&amp;#39;m aware of is x-only pubkeys in BIP340 [0].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks&lt;br/&gt;&amp;gt; Michael&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0]:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://btctranscripts.com/london-bitcoin-devs/2022-08-11-tim-ruffing-musig2/#a-retrospective-look-at-bip340&#34;&gt;https://btctranscripts.com/london-bitcoin-devs/2022-08-11-tim-ruffing-musig2/#a-retrospective-look-at-bip340&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Michael Folkson&lt;br/&gt;&amp;gt; Email: michaelfolkson at protonmail.com&lt;br/&gt;&amp;gt; Keybase: michaelfolkson&lt;br/&gt;&amp;gt; PGP: 43ED C999 9F85 1D40 EAF4 9835 92D6 0159 214C FEE3&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ------- Original Message -------&lt;br/&gt;&amp;gt; On Tuesday, February 7th, 2023 at 18:35, Russell O&amp;#39;Connor 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; There is a bug in Taproot that allows the same Tapleaf to be repeated&lt;br/&gt;&amp;gt; multiple times in the same Taproot, potentially at different Taplevels&lt;br/&gt;&amp;gt; incurring different Tapfee rates.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The countermeasure is that you should always know the entire Taptree when&lt;br/&gt;&amp;gt; interacting with someone&amp;#39;s Tapspend.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Feb 7, 2023 at 1:10 PM Andrew Poelstra 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;&lt;br/&gt;&amp;gt;&amp;gt; Some people highlighted some minor problems with my last email:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Tue, Feb 07, 2023 at 01:46:22PM &#43;0000, Andrew Poelstra via bitcoin-dev&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &amp;lt;snip&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; [1] &lt;a href=&#34;https://bitcoin.sipa.be/miniscript/&#34;&gt;https://bitcoin.sipa.be/miniscript/&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; [2] In Taproot, if you want to prevent signatures migrating to another&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; branch or within a branch, you can use the CODESEPARATOR opcode&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; which was redisegned in Taproot for exactly this purpose... we&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; really did about witness malleation in its design!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In Taproot the tapleaf hash is always covered by the signature (though&lt;br/&gt;&amp;gt;&amp;gt; not in some ANYONECANPAY proposals) so you can never migrate signatures&lt;br/&gt;&amp;gt;&amp;gt; between tapbranches.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I had thought this was the case, but then I re-confused myself by&lt;br/&gt;&amp;gt;&amp;gt; reading BIP 341 .... which has much of the sighash specified, but not&lt;br/&gt;&amp;gt;&amp;gt; all of it! The tapleaf hash is added in BIP 342.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; If you want to prevent signatures from moving around *within* a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; branch,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; And this sentence I just meant to delete :)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; Andrew Poelstra&lt;br/&gt;&amp;gt;&amp;gt; Director of Research, Blockstream&lt;br/&gt;&amp;gt;&amp;gt; Email: apoelstra at wpsoftware.net&lt;br/&gt;&amp;gt;&amp;gt; Web: &lt;a href=&#34;https://www.wpsoftware.net/andrew&#34;&gt;https://www.wpsoftware.net/andrew&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The sun is always shining in space&lt;br/&gt;&amp;gt;&amp;gt; -Justin Lewis-Webster&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&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/20230208/d4adc425/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230208/d4adc425/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2kkqsdqy6nkl6380nzug80g7tq6t0s59x4vpfapgdn4hv8twx79czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596duwvmv</id>
    
      <title type="html">📅 Original date posted:2023-02-07 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2kkqsdqy6nkl6380nzug80g7tq6t0s59x4vpfapgdn4hv8twx79czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596duwvmv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9jgkay96cs67y59dpfzlsj77dn89pvzs55uszqk69cfwpgga98wqwvp5ju&#39;&gt;nevent1q…p5ju&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-07&lt;br/&gt;🗒️ Summary of this message: A bug in Taproot allows the same Tapleaf to be repeated multiple times, incurring different Tapfee rates. Always know the entire Taptree when interacting with someone&amp;#39;s Tapspend.&lt;br/&gt;📝 Original message:There is a bug in Taproot that allows the same Tapleaf to be repeated&lt;br/&gt;multiple times in the same Taproot, potentially at different Taplevels&lt;br/&gt;incurring different Tapfee rates.&lt;br/&gt;&lt;br/&gt;The countermeasure is that you should always know the entire Taptree when&lt;br/&gt;interacting with someone&amp;#39;s Tapspend.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Tue, Feb 7, 2023 at 1:10 PM Andrew Poelstra 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;&lt;br/&gt;&amp;gt; Some people highlighted some minor problems with my last email:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Tue, Feb 07, 2023 at 01:46:22PM &#43;0000, Andrew Poelstra via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;lt;snip&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [1] &lt;a href=&#34;https://bitcoin.sipa.be/miniscript/&#34;&gt;https://bitcoin.sipa.be/miniscript/&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; [2] In Taproot, if you want to prevent signatures migrating to another&lt;br/&gt;&amp;gt; &amp;gt;     branch or within a branch, you can use the CODESEPARATOR opcode&lt;br/&gt;&amp;gt; &amp;gt;     which was redisegned in Taproot for exactly this purpose... we&lt;br/&gt;&amp;gt; &amp;gt;     really did about witness malleation in its design!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In Taproot the tapleaf hash is always covered by the signature (though&lt;br/&gt;&amp;gt; not in some ANYONECANPAY proposals) so you can never migrate signatures&lt;br/&gt;&amp;gt; between tapbranches.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I had thought this was the case, but then I re-confused myself by&lt;br/&gt;&amp;gt; reading BIP 341 .... which has much of the sighash specified, but not&lt;br/&gt;&amp;gt; all of it! The tapleaf hash is added in BIP 342.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     If you want to prevent signatures from moving around *within* a&lt;br/&gt;&amp;gt; &amp;gt;     branch,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And this sentence I just meant to delete :)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Andrew Poelstra&lt;br/&gt;&amp;gt; Director of Research, Blockstream&lt;br/&gt;&amp;gt; Email: apoelstra at wpsoftware.net&lt;br/&gt;&amp;gt; Web:   &lt;a href=&#34;https://www.wpsoftware.net/andrew&#34;&gt;https://www.wpsoftware.net/andrew&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The sun is always shining in space&lt;br/&gt;&amp;gt;     -Justin Lewis-Webster&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/20230207/57930553/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230207/57930553/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgazktv9s07qzku3wdlyrze4zjwa85vtmfwuztk9mwatt22mnrtpszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596t26vau</id>
    
      <title type="html">📅 Original date posted:2023-02-05 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgazktv9s07qzku3wdlyrze4zjwa85vtmfwuztk9mwatt22mnrtpszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596t26vau" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvlwy5g20x02krenr983tnzkqlv4p7s8qq7j0a4ns848sdq4g62equgmh5m&#39;&gt;nevent1q…mh5m&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-05&lt;br/&gt;🗒️ Summary of this message: A discussion on the use of witness data versus script pubkey in Bitcoin transactions, with a suggestion to let users decide how to use OpReturn.&lt;br/&gt;📝 Original message:On Sat., Feb. 4, 2023, 21:01 Peter Todd, &amp;lt;pete at petertodd.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On February 5, 2023 1:11:35 AM GMT&#43;01:00, Russell O&amp;#39;Connor via bitcoin-dev&lt;br/&gt;&amp;gt; &amp;lt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;Since bytes in the witness are cheaper than bytes in the script pubkey,&lt;br/&gt;&amp;gt; &amp;gt;there is a crossover point in data size where it will simply be cheaper to&lt;br/&gt;&amp;gt; &amp;gt;use witness data.  Where that crossover point is depends on the finer&lt;br/&gt;&amp;gt; &amp;gt;details of the overhead of the two methods, but you could make some&lt;br/&gt;&amp;gt; &amp;gt;reasonable assumptions.  Such a calculation could form the basis of a&lt;br/&gt;&amp;gt; &amp;gt;reasonable OP_RETURN proposal.  I don&amp;#39;t know if it would be persuasive,&lt;br/&gt;&amp;gt; but&lt;br/&gt;&amp;gt; &amp;gt;it would at least be coherent.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think it&amp;#39;s worth the technical complexity trying to carefully&lt;br/&gt;&amp;gt; argue a specific limit. Let users decide for themselves how they want to&lt;br/&gt;&amp;gt; use OpReturn.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Even better.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230205/bfa453c8/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230205/bfa453c8/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgwfkzuqw60sfps2c78fmchf3nw9k7kde7x6aayt3w57k4ff7um4szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596medkrt</id>
    
      <title type="html">📅 Original date posted:2023-02-04 🗒️ Summary of this ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgwfkzuqw60sfps2c78fmchf3nw9k7kde7x6aayt3w57k4ff7um4szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596medkrt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqc0785zgnue8237ap997alks7algpg8d7kguf9zdn2apaqy6u5ksmwstet&#39;&gt;nevent1q…stet&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2023-02-04&lt;br/&gt;🗒️ Summary of this message: Using witness data can be cheaper than script pubkey for data size beyond a certain point, which could be the basis for a reasonable OP_RETURN proposal.&lt;br/&gt;📝 Original message:Since bytes in the witness are cheaper than bytes in the script pubkey,&lt;br/&gt;there is a crossover point in data size where it will simply be cheaper to&lt;br/&gt;use witness data.  Where that crossover point is depends on the finer&lt;br/&gt;details of the overhead of the two methods, but you could make some&lt;br/&gt;reasonable assumptions.  Such a calculation could form the basis of a&lt;br/&gt;reasonable OP_RETURN proposal.  I don&amp;#39;t know if it would be persuasive, but&lt;br/&gt;it would at least be coherent.&lt;br/&gt;&lt;br/&gt;On Sat., Feb. 4, 2023, 18:17 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 don&amp;#39;t know, what number would you advise? When I made the&lt;br/&gt;&amp;gt; bitcoin-transactions nodejs module some years ago the limit (from the&lt;br/&gt;&amp;gt; specs) was 512B&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s not a fork, super easy to do&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And necessary because bitcoin on ground of I don&amp;#39;t know what rule&lt;br/&gt;&amp;gt; allowing the IF/ENDIF &amp;#34;unlimited&amp;#34; storage just mimics ethereum for the&lt;br/&gt;&amp;gt; worse, and is again quite dubious to use&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Le 04/02/2023 à 23:18, Christopher Allen a écrit :&lt;br/&gt;&amp;gt; &amp;gt; 520 because that is a similar limit in taproot? Some multiple of&lt;br/&gt;&amp;gt; &amp;gt; hash&#43;signature&#43;metadata to satisfy others (that still might not be&lt;br/&gt;&amp;gt; &amp;gt; satisfied by any choice).&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;-------------- 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/20230204/248ec360/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20230204/248ec360/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:19:01Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsz9sdt0kved80etehlxrq9zz2vsrl5sn2lp6kyrjrz0cfr3rnhhvczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596rgyn9w</id>
    
      <title type="html">📅 Original date posted:2022-11-04 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsz9sdt0kved80etehlxrq9zz2vsrl5sn2lp6kyrjrz0cfr3rnhhvczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596rgyn9w" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0wwmw8pwzdncx4tqs8f8p89rnrlnyuh2dqeja84fdc80tvgx2dwq4a2upj&#39;&gt;nevent1q…2upj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-11-04&lt;br/&gt;📝 Original message:On Fri, Nov 4, 2022 at 4:04 PM Trey Del Bonis 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;&lt;br/&gt;&amp;gt; Instead of that approach, I assume we have fairly granular transaction&lt;br/&gt;&amp;gt; introspection opcodes from a list in Elements [2] (which seem like they&lt;br/&gt;&amp;gt; aren&amp;#39;t actually used in mainnet Liquid?)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;These opcodes went live on Liquid along with Taproot &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://blog.liquid.net/taproot-on-liquid-is-now-live/&amp;gt&#34;&gt;https://blog.liquid.net/taproot-on-liquid-is-now-live/&amp;gt&lt;/a&gt;;, so feel free to&lt;br/&gt;try them out on Elements or Liquid.&lt;br/&gt;&lt;br/&gt;One complicated part is the actual proof verification.  I had considered&lt;br/&gt;&amp;gt; looking into what it would take to build a verifying for a modern proof&lt;br/&gt;&amp;gt; system if we used pairings as a primitive, but it turns out even that is&lt;br/&gt;&amp;gt; pretty involved even in a higher level language (at least for PLONK [3])&lt;br/&gt;&amp;gt; and would be error-prone when trying to adapt the code for new circuits&lt;br/&gt;&amp;gt; with differently-shaped public inputs.  The size of the code on-chain&lt;br/&gt;&amp;gt; alone would probably make it prohibitively expensive, so it would be a&lt;br/&gt;&amp;gt; lot more efficient just to assume we can introduce a specific opcode for&lt;br/&gt;&amp;gt; doing a proof verification implemented natively.  The way I assumed it&lt;br/&gt;&amp;gt; would work is taking the serialized proof, a verification key, and the&lt;br/&gt;&amp;gt; public input as separate stack items.  The public input is the&lt;br/&gt;&amp;gt; concatenation of the state and deposit commitments we took from the&lt;br/&gt;&amp;gt; input, the batch post-state commitment (provided as part of the&lt;br/&gt;&amp;gt; witness), data from transaction outputs corresponding to&lt;br/&gt;&amp;gt; internally-initiated withdrawals from the rollup, and the rollup batch&lt;br/&gt;&amp;gt; data itself (also passed as part of the witness).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;d be interested in knowing what sort of Simplicity Jets would facilitate&lt;br/&gt;rollups.  I suppose some pairing-friendly curve operations would do.  It&lt;br/&gt;might not make the first cut of Simplicity, but we will see.&lt;br/&gt;&lt;br/&gt;Simplicity&amp;#39;s design doesn&amp;#39;t have anything like a 520 byte stack limit.&lt;br/&gt;There is just going to be an overall maximum allowed Simplicity evaluation&lt;br/&gt;state size of some value that I have yet to decide.  I would imagine it to&lt;br/&gt;be something like 1MB.&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/20221104/8ff770cd/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221104/8ff770cd/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:16:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszxrpr0rqpz2z27n86u6jltsqffdpekrnuk3hy7lq8d3rh0mw9rxszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tsvelt</id>
    
      <title type="html">📅 Original date posted:2022-10-17 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszxrpr0rqpz2z27n86u6jltsqffdpekrnuk3hy7lq8d3rh0mw9rxszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tsvelt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrnw94xg2gpg08ana3kux0zpj58408903urgxwmaf0vsnujv72ytstn0yll&#39;&gt;nevent1q…0yll&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-17&lt;br/&gt;📝 Original message:&amp;gt;From my limited academic interactions, people generally take the &amp;#34;honest&amp;#34;&lt;br/&gt;to mean following the rules (regardless of how bad it is for you to follow&lt;br/&gt;those rules).  This has in turn led to some blockchain designs based on&lt;br/&gt;their own absurd set of rules, and simply waiving away their issues by&lt;br/&gt;stipulating their own honest majority or supermajority requirement.  For&lt;br/&gt;example, a proof of stake blockchain might require as a rule that users&lt;br/&gt;securely delete their signing keys after a period of time, and prove their&lt;br/&gt;blockchain secure under these rules.  They then argue that so long as the&lt;br/&gt;&amp;#34;honest&amp;#34; majority follows this rule, then there is no risk of&lt;br/&gt;reorganization.  If enough users don&amp;#39;t delete their signing keys, well&lt;br/&gt;their honest majority assumption is violated, so anything goes.&lt;br/&gt;&lt;br/&gt;The thing is that it is most certainly in each user&amp;#39;s interest to *not*&lt;br/&gt;delete their signing keys.   Each user has strictly more power and options&lt;br/&gt;available by keeping their keys and not deleting them.  This rule violation&lt;br/&gt;is undetectable, at least until it is too late and a coalition decides to&lt;br/&gt;try to collaborate for a reorg to their advantage.&lt;br/&gt;&lt;br/&gt;It is not reasonable to build a distributed pseudonymous system built on&lt;br/&gt;arbitrary rules and then simply define your system to be secure by fiat.&lt;br/&gt;Users need an incentive to follow the rules of the system or it just won&amp;#39;t&lt;br/&gt;work.  In particular, the rules ought to form a Nash Equilibrium, and this&lt;br/&gt;is violated by, for example, a requirement that users delete their signing&lt;br/&gt;keys.  If Bitcoin relied on users acting against their own interest to&lt;br/&gt;function, I doubt Bitcoin would be in operation today.  Certainly I would&lt;br/&gt;have no interest in it.&lt;br/&gt;&lt;br/&gt;While it doesn&amp;#39;t really matter, I do believe Satoshi was also aware that&lt;br/&gt;the rules cannot just be arbitrary, with no incentive to follow them.&lt;br/&gt;After all, he did note that it was designed to be in the miner&amp;#39;s self&lt;br/&gt;interest to build upon the longest (most work) chain, even if that point&lt;br/&gt;ended up being rather involved.  That is to say, I don&amp;#39;t think that an&lt;br/&gt;&amp;#34;honest&amp;#34; (i.e rule following) majority is meant to be taken as an&lt;br/&gt;assumption, rather it is something that ought to be a consequence of the&lt;br/&gt;design.&lt;br/&gt;&lt;br/&gt;Anyhow, the above is simply a comment on &amp;#34;honest majority&amp;#34;, and I&amp;#39;m not&lt;br/&gt;trying to make a specific claim about RBF here, though I do have my&lt;br/&gt;opinions and I do see how it is related.&lt;br/&gt;&lt;br/&gt;On Sun, Oct 16, 2022 at 1:36 PM Jeremy Rubin 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; The Bitcoin white paper says:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The proof-of-work also solves the problem of determining representation in&lt;br/&gt;&amp;gt; majority decision&lt;br/&gt;&amp;gt; making. If the majority were based on one-IP-address-one-vote, it could be&lt;br/&gt;&amp;gt; subverted by anyone&lt;br/&gt;&amp;gt; able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote.&lt;br/&gt;&amp;gt; The majority&lt;br/&gt;&amp;gt; decision is represented by the longest chain, which has the greatest&lt;br/&gt;&amp;gt; proof-of-work effort invested&lt;br/&gt;&amp;gt; in it. If a majority of CPU power is controlled by honest nodes, the&lt;br/&gt;&amp;gt; honest chain will grow the&lt;br/&gt;&amp;gt; fastest and outpace any competing chains. To modify a past block, an&lt;br/&gt;&amp;gt; attacker would have to&lt;br/&gt;&amp;gt; redo the proof-of-work of the block and all blocks after it and then catch&lt;br/&gt;&amp;gt; up with and surpass the&lt;br/&gt;&amp;gt; work of the honest nodes. We will show later that the probability of a&lt;br/&gt;&amp;gt; slower attacker catching up&lt;br/&gt;&amp;gt; diminishes exponentially as subsequent blocks are added.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This, Satoshi (who doesn&amp;#39;t really matter anyways I guess?) claimed that&lt;br/&gt;&amp;gt; for Bitcoin to function properly you need a majority honest nodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are multiple behaviors one can describe as honest, and economically&lt;br/&gt;&amp;gt; rational or optimizing is not necessarily rational.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, if I run a shop that takes rain checks, but I sell an item to&lt;br/&gt;&amp;gt; a higher bidder who didn&amp;#39;t have a hold on the item, that is not honest, but&lt;br/&gt;&amp;gt; it may be selfish profit maximizing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Satoshi said an honest majority is required for the chain to be extended.&lt;br/&gt;&amp;gt; Honest is not really defined though. Honesty, in my definition, is that you&lt;br/&gt;&amp;gt; follow a pre specified rule, rational or not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems a lot of the RBF controversy is that Protocol developers have&lt;br/&gt;&amp;gt; aspired to make the honest behavior also be the rational behavior. This is&lt;br/&gt;&amp;gt; maybe a good idea because, in theory, if the honest behavior is rational&lt;br/&gt;&amp;gt; then we can make a weaker assumption of selfishness maximizing a parameter.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, Satoshi did not particularly bound what aspects of honesty are&lt;br/&gt;&amp;gt; important for the network, because there isn&amp;#39;t a spec defining exactly what&lt;br/&gt;&amp;gt; is honest or not. And also as soon as people are honest, you can rely on&lt;br/&gt;&amp;gt; that assumption for good effect.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And sometimes, defining an honest behavior can be creating a higher&lt;br/&gt;&amp;gt; utility system because most people are &amp;#34;law abiding citizens&amp;#34; who might not&lt;br/&gt;&amp;gt; be short term rational. For example, one might expect that miners would be&lt;br/&gt;&amp;gt; interested in making sure lightning closes are &amp;#34;accurate&amp;#34; because&lt;br/&gt;&amp;gt; increasing the utility of lightning is good for Bitcoin, even if it is&lt;br/&gt;&amp;gt; irrational.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems that the NoRBF crowd want to rely on an honest majority&lt;br/&gt;&amp;gt; assumption where the honest behavior is not doing replacement if not&lt;br/&gt;&amp;gt; requested. This is really not much different than trying to close lightning&lt;br/&gt;&amp;gt; channels &amp;#34;the right way&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, where it may be different, is that even in the presence of honest&lt;br/&gt;&amp;gt; majority, the safety of 0conf isn&amp;#39;t assured given the potential of race&lt;br/&gt;&amp;gt; conditions in the mempool. Therefore it&amp;#39;s not clear to me that 0conf&lt;br/&gt;&amp;gt; working well is something you can drive from the Honest Majority Assumption&lt;br/&gt;&amp;gt; (where honest includes first seen).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Overall, it might be nice to more tightly document what bitcoins&lt;br/&gt;&amp;gt; assumptions are in practice and what those assumptions do in terms of&lt;br/&gt;&amp;gt; properties of Bitcoin, as well as pathways to weakening the assumptions&lt;br/&gt;&amp;gt; without compromising the behaviors users expect the network to have.  An&lt;br/&gt;&amp;gt; &amp;#34;extended white paper&amp;#34; if you will.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  It&amp;#39;s somewhat clear to me that we shouldn&amp;#39;t weaken assumptions that only&lt;br/&gt;&amp;gt; seem local to one subsystem of Bitcoin if they end up destabilizing another&lt;br/&gt;&amp;gt; system. In particular, things that decrease &amp;#34;transaction utility&amp;#34; for end&lt;br/&gt;&amp;gt; users decrease the demand for transactions which hurts the fee market&amp;#39;s&lt;br/&gt;&amp;gt; longer term viability, even if we feel good about making an honest policy&lt;br/&gt;&amp;gt; assumption into a self interested policy assumption.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A last reflection is that Bitcoin is specified with an honest majority&lt;br/&gt;&amp;gt; assumption, but also has a rational dishonest minority assumption over both&lt;br/&gt;&amp;gt; endogenous (rewards) and exogenous (electricity) costs. Satoshi did not&lt;br/&gt;&amp;gt; suggest, at least as I read it, that Bitcoin works with an rational&lt;br/&gt;&amp;gt; majority assumption. (If anyone thinks these three are similar properties&lt;br/&gt;&amp;gt; you can make some trivial counterexamples)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jeremy&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/20221017/cf650127/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221017/cf650127/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:15:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrsgqdwhulm6c4m7j2mgczy8jj0d392yy0kt8f04uqszdy4jxlnfczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596gdcsus</id>
    
      <title type="html">📅 Original date posted:2022-10-18 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrsgqdwhulm6c4m7j2mgczy8jj0d392yy0kt8f04uqszdy4jxlnfczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596gdcsus" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrl99wg0vqq0xuqekx6s3nnmqxltfhzfzu2d9kyzu7xs2vuna6g5qkgydeq&#39;&gt;nevent1q…ydeq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-10-18&lt;br/&gt;📝 Original message:On Tue, Oct 18, 2022 at 9:07 AM Jeremy Rubin 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;&lt;br/&gt;&amp;gt; However, what *is* important about what Satoshi wrote is that it is sort&lt;br/&gt;&amp;gt; of the &amp;#34;social contract&amp;#34; of what Bitcoin is that we can all sort of&lt;br/&gt;&amp;gt; minimally agree to. This makes it clear, when we try to describe Bitcoin&lt;br/&gt;&amp;gt; with differing assumptions than in the whitepaper, what the changes are and&lt;br/&gt;&amp;gt; why we think the system might support those claims. But if we can&amp;#39;t prove&lt;br/&gt;&amp;gt; the new description sound, such as showing tip mining to be rational in a&lt;br/&gt;&amp;gt; fully adversarial model, it doesn&amp;#39;t mean Bitcoin doesn&amp;#39;t work as promised,&lt;br/&gt;&amp;gt; since all that was promised originally is functioning under an honest&lt;br/&gt;&amp;gt; majority. Caveat Emptor!&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I still think it is misguided to think that the &amp;#34;honest&amp;#34; (i.e. rule&lt;br/&gt;following) majority is to just be accepted as an axiom and if it is&lt;br/&gt;violated, well, then sorry.  The rules need to be incentive compatible for&lt;br/&gt;the system to be functional.  The honest majority is only considered an&lt;br/&gt;assumption because even if following the rules were clearly the 100%&lt;br/&gt;dominant strategy, this doesn&amp;#39;t prove that the majority is honest, since&lt;br/&gt;mathematics cannot say what is happening in the real world at any given&lt;br/&gt;time.  Still, we must have a reason to think that the majority would be&lt;br/&gt;honest, and that reasoning should come from an argument that the rule set&lt;br/&gt;is incentive compatible.&lt;br/&gt;&lt;br/&gt;The stability of mining, i.e. the incentives to mine on the most work&lt;br/&gt;chain, is actually a huge concern, especially in a future low subsidy&lt;br/&gt;environment.  There is actually much fretting about this issue, and rightly&lt;br/&gt;so.  We don&amp;#39;t actually know that Bitcoin can function in a low subsidy&lt;br/&gt;environment because we have never tested it.  Bitcoin could still end up a&lt;br/&gt;failure if that doesn&amp;#39;t work out.  My current understanding/guess is that&lt;br/&gt;with a &amp;#34;thick mempool&amp;#34; (that is lots of transactions without large gaps in&lt;br/&gt;fee rates between them) and/or miners rationally leaving behind&lt;br/&gt;transactions to encourage mining on their block (after all it is in a&lt;br/&gt;miner&amp;#39;s own interest not to have their block orphaned), that mining will be&lt;br/&gt;stable.  But I don&amp;#39;t know this for sure, and we cannot know with certainty&lt;br/&gt;that we are going to have a &amp;#34;thick mempool&amp;#34; when it is needed.&lt;br/&gt;&lt;br/&gt;It is most certainly the case that one can construct situations where not&lt;br/&gt;mining on the tip is going to be the prefered strategy.  But even if that&lt;br/&gt;happens on occasion, it&amp;#39;s not like the protocol immediately collapses,&lt;br/&gt;because mining off the tip is indistinguishable from being a high latency&lt;br/&gt;miner who simply didn&amp;#39;t receive the most work block in time.  So it is more&lt;br/&gt;of a question of how rare does it need to be, and what can we do to reduce&lt;br/&gt;the chances of such situations arising (e.g. updating our mining policy to&lt;br/&gt;leave some transactions out based on current (and anticipated) mempool&lt;br/&gt;conditions, or (for a sufficiently capitalized miner) leave an explicit,&lt;br/&gt;ANYONECANSPEND transaction output as a tip for the next miner to build upon&lt;br/&gt;mined blocks.)&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/20221018/e2142e1a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221018/e2142e1a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:15:15Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqst4wnv8hg4xknde350w2v9d4yc0n3ghwyg2elvx7mz4ewunddjt3gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596rd4gpy</id>
    
      <title type="html">📅 Original date posted:2022-07-11 📝 Original message:Oops, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqst4wnv8hg4xknde350w2v9d4yc0n3ghwyg2elvx7mz4ewunddjt3gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596rd4gpy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxegyqe8053m7c35ae9wzzgsct8tn9w7mc32psuk3pnz9yay7s5rcz7khvt&#39;&gt;nevent1q…khvt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-11&lt;br/&gt;📝 Original message:Oops, you are right.  We need the bribe to be the output of the coinbase,&lt;br/&gt;but due to the maturity rule, it isn&amp;#39;t really a bribe.&lt;br/&gt;&lt;br/&gt;Too bad coinbases cannot take other coinbase outputs as inputs to bypass&lt;br/&gt;the maturity rule.&lt;br/&gt;&lt;br/&gt;I guess that means the bribe has to be by leaving transactions in the&lt;br/&gt;mempool.&lt;br/&gt;&lt;br/&gt;Also your point about centralization pressure is well taken.&lt;br/&gt;&lt;br/&gt;On Mon, Jul 11, 2022 at 5:56 PM Peter Todd &amp;lt;pete at petertodd.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Mon, Jul 11, 2022 at 05:36:52PM -0400, Peter Todd via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; On Mon, Jul 11, 2022 at 04:35:02PM -0400, Russell O&amp;#39;Connor via&lt;br/&gt;&amp;gt; bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; What happens after that I&amp;#39;m not sure.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; Miners will learn to create anyone-can-spend outputs to bribe other&lt;br/&gt;&amp;gt; miners&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; to build on their block rather than reorg it.  (Due to the coinbase&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; maturity, this will require some amount of floating capital.)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ...and that&amp;#39;s a disaster for mining centralization, because the smaller&lt;br/&gt;&amp;gt; miners&lt;br/&gt;&amp;gt; &amp;gt; need to pay larger bribes than larger miners. Not to mention having to&lt;br/&gt;&amp;gt; keep&lt;br/&gt;&amp;gt; &amp;gt; capital around to do it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, note how from a practical point of view, we&amp;#39;ll need to add a new&lt;br/&gt;&amp;gt; type of&lt;br/&gt;&amp;gt; tx that&amp;#39;s only valid in a specific block, or other miners will just reorg&lt;br/&gt;&amp;gt; those&lt;br/&gt;&amp;gt; anyone-can-spend outputs to steal them. It&amp;#39;s not all that trivial to&lt;br/&gt;&amp;gt; actually&lt;br/&gt;&amp;gt; do that... you&amp;#39;d have to have a signature that commits to the non-segwit&lt;br/&gt;&amp;gt; part&lt;br/&gt;&amp;gt; of the coinbase outputs. Ugh.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://petertodd.org&#34;&gt;https://petertodd.org&lt;/a&gt; &amp;#39;peter&amp;#39;[:-1]@petertodd.org&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/20220711/2b9c824a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220711/2b9c824a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:11:42Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsd0dcst9z9xusy2kt2tlhv3zmmcunyyrf0xap5tf8cdeqh97cammczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596qaltjq</id>
    
      <title type="html">📅 Original date posted:2022-07-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsd0dcst9z9xusy2kt2tlhv3zmmcunyyrf0xap5tf8cdeqh97cammczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596qaltjq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst265y5uc4fs2k2lshxz5f409cw7xqe4f8yrvyq9js3w4k0jmnwwcpmdcga&#39;&gt;nevent1q…dcga&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-07-11&lt;br/&gt;📝 Original message:On Mon, Jul 11, 2022 at 2:19 PM Bram Cohen 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 transaction fees came in at an even rate over time all at the exact&lt;br/&gt;&amp;gt; same level then they work fine for security, acting similarly to fixed&lt;br/&gt;&amp;gt; block rewards. Unfortunately that isn&amp;#39;t how it works in the real world.&lt;br/&gt;&amp;gt; There&amp;#39;s a very well established day/night cycle with fees going to zero&lt;br/&gt;&amp;gt; overnight and even longer gaps on weekends and holidays. If in the future&lt;br/&gt;&amp;gt; Bitcoin is entirely dependent on fees for security (scheduled very&lt;br/&gt;&amp;gt; strongly) and this pattern keeps up (overwhelmingly likely) then this is&lt;br/&gt;&amp;gt; going to become a serious problem.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What&amp;#39;s likely to happen is that at first there will simply be no or very&lt;br/&gt;&amp;gt; few blocks mined overnight. There are likely to be some, as miners at first&lt;br/&gt;&amp;gt; turn off their mining rigs completely overnight then adopt the more&lt;br/&gt;&amp;gt; sophisticated strategy of waiting until there are enough fees in the&lt;br/&gt;&amp;gt; mempool to warrant attempting to make a block and only then doing it.&lt;br/&gt;&amp;gt; Unfortunately the gaming doesn&amp;#39;t end there. Eventually the miners with&lt;br/&gt;&amp;gt; lower costs of operation will figure out that they can collectively reorg&lt;br/&gt;&amp;gt; the last hour (or some time period) of the day overnight and this will be&lt;br/&gt;&amp;gt; profitable. That&amp;#39;s likely to cause the miners with more expensive&lt;br/&gt;&amp;gt; operations to stop attempting mining the last hour of the day preemptively.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What happens after that I&amp;#39;m not sure.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Miners will learn to create anyone-can-spend outputs to bribe other miners&lt;br/&gt;to build on their block rather than reorg it.  (Due to the coinbase&lt;br/&gt;maturity, this will require some amount of floating capital.)&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/20220711/6e8e216d/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220711/6e8e216d/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:11:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0fjld0h5mh78cjh45ecmhvctljxasl8c9jrkzp9jufapplgwjw0gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596dqy4xm</id>
    
      <title type="html">📅 Original date posted:2022-05-11 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0fjld0h5mh78cjh45ecmhvctljxasl8c9jrkzp9jufapplgwjw0gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596dqy4xm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstw966l92ye7r63phjz4mdnun4m99gzyyyvceeajv4nwdu0j2w3zqu8mlz0&#39;&gt;nevent1q…mlz0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-11&lt;br/&gt;📝 Original message:Hi alicexbt,&lt;br/&gt;&lt;br/&gt;As far as I understand things, I believe the whole notion of a MUST_SIGNAL&lt;br/&gt;state is misguided today. Please correct me if I&amp;#39;m misunderstanding&lt;br/&gt;something here.&lt;br/&gt;&lt;br/&gt;Back when BIP8 was first proposed by Shaolin Fry, we were in a situation&lt;br/&gt;where many existing clients waiting for segwit signalling had already been&lt;br/&gt;deployed.  The purpose of mandatory signaling at that point in time was to&lt;br/&gt;ensure all these existing clients would be activated together with any BIP8&lt;br/&gt;clients.&lt;br/&gt;&lt;br/&gt;However, if such other clients do not exist, the MUST_SIGNAL state no&lt;br/&gt;longer accomplishes its purpose.  Going forward, I think there is little&lt;br/&gt;reason to expect such other clients to exist alongside a BIP8 deployment.&lt;br/&gt;If everyone uses a BIP8 deployment, then there are no other clients to&lt;br/&gt;activate.  Alternatively, Speedy Trial was specifically designed to avoid&lt;br/&gt;this parallel deployment for the reason that several people object to&lt;br/&gt;allowing their client&amp;#39;s non-BIP8 activation logic to be hijacked in this&lt;br/&gt;manner.&lt;br/&gt;&lt;br/&gt;Now I understand that some people would like *some* signal on the chain&lt;br/&gt;that indicates a soft-fork activation in order to allow people who object&lt;br/&gt;to the fork to make an &amp;#34;anti-fork&amp;#34; that rejects blocks containing the&lt;br/&gt;soft-fork signal.  And while some sort of mandatory version bit signaling&lt;br/&gt;*could* be used for this purpose, we do not *have* to use version bits.  We&lt;br/&gt;also don&amp;#39;t need such a signal span over multiple blocks.  Indeed, using&lt;br/&gt;version bits and signaling over multiple blocks is quite bad because it&lt;br/&gt;risks losing mining power if miners don&amp;#39;t conform, or are unable to&lt;br/&gt;conform, to the version bits signal.  (Recall at the time taproot&amp;#39;s&lt;br/&gt;signaling period started, the firmware needed for many miners to signal&lt;br/&gt;version bits did not even exist yet!).&lt;br/&gt;&lt;br/&gt;A soft-fork signal to enable an &amp;#34;anti-fork&amp;#34; only needs to be on a single&lt;br/&gt;block and it can be almost anything.  For example we could have a signal&lt;br/&gt;that at the block at lockin or perhaps the block at activation requires&lt;br/&gt;that the coinbase must *not* contain the suffix &amp;#34;taproot sucks!&amp;#34;.  This&lt;br/&gt;suffices to prepare an &amp;#34;anti-fork&amp;#34; which would simply require that the&lt;br/&gt;specified block must contain the suffix &amp;#34;taproot sucks!&amp;#34;.&lt;br/&gt;&lt;br/&gt;Anyway, I&amp;#39;m sure there are lots of design choices available better than a&lt;br/&gt;MUST_SIGNAL state that does not risk potentially taking a large fraction of&lt;br/&gt;mining hardware offline for a protracted period of time.&lt;br/&gt;&lt;br/&gt;On Tue, May 10, 2022 at 10:02 AM alicexbt via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Bitcoin Developers,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There were some disagreements with speedy trial activation method recently&lt;br/&gt;&amp;gt; and BIP 8 became controversial because of LOT earlier. I have tried to&lt;br/&gt;&amp;gt; solve these two problems after reading some arguments for/against different&lt;br/&gt;&amp;gt; activation methods by removing LOT from BIP 8 and calculating MUST_SIGNAL&lt;br/&gt;&amp;gt; state based on threshold reached.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; BIP draft with no code and some changes in BIP 8:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/1440000bytes/5e58cad7ba9d9c1a7000d304920fe6f1&#34;&gt;https://gist.github.com/1440000bytes/5e58cad7ba9d9c1a7000d304920fe6f1&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; State transitions diagram:  &lt;img src=&#34;https://i.imgur.com/dj4bFVK.png&#34;&gt; &lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This proposal removes lockinontimeout flag, activation never fails&lt;br/&gt;&amp;gt; although MUST_SIGNAL can be longer if miners signaling does not reach the&lt;br/&gt;&amp;gt; threshold. Longer period for MUST_SIGNAL state is useful for coordination&lt;br/&gt;&amp;gt; if LOCKED_IN was not reached.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; MUST_SIGNAL = ((100-t)/10)*2016 blocks, where t is threshold reached and&lt;br/&gt;&amp;gt; blocks that fail to signal in MUST_SIGNAL phase are invalid.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Example:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - This activation method is used for a soft fork&lt;br/&gt;&amp;gt; - Only 60% miners signaled readiness and timeout height was reached&lt;br/&gt;&amp;gt; - MUST_SIGNAL phase starts and will last for 4*2016 blocks&lt;br/&gt;&amp;gt; - LOCKED_IN and ACTIVE states remain same as BIP 8&lt;br/&gt;&amp;gt; - Soft fork is activated with a delay of 2 months&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; /dev/fd0&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with ProtonMail &amp;lt;&lt;a href=&#34;https://protonmail.com/&amp;gt&#34;&gt;https://protonmail.com/&amp;gt&lt;/a&gt;; secure email.&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/20220511/2cdd2915/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220511/2cdd2915/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:09:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszqytjueydp54d9y4kjkmykf3d0daak2m88yu6kwrmxtvn9fr2q3czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968rgx7q</id>
    
      <title type="html">📅 Original date posted:2022-05-13 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszqytjueydp54d9y4kjkmykf3d0daak2m88yu6kwrmxtvn9fr2q3czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968rgx7q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrm3320easra2ghjfmwutjsss37z72pr0nhrww455kj8ytz4sz7sqzfande&#39;&gt;nevent1q…ande&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-13&lt;br/&gt;📝 Original message:On Fri, May 13, 2022 at 5:43 PM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; For any specific opcode proposal, I think you still want to consider&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  1) how much you can do with it&lt;br/&gt;&amp;gt;  2) how efficient it is to validate (and thus how cheap it is to use)&lt;br/&gt;&amp;gt;  3) how easy it is to make it do what you want&lt;br/&gt;&amp;gt;  4) how helpful it is at preventing bugs&lt;br/&gt;&amp;gt;  5) how clean and maintainable the validation code is&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I guess to me CTV and APO are weakest at (1); CAT/CSFS falls down on&lt;br/&gt;&amp;gt; (3) and (4); OP_TX is probably weakest at (5) and maybe not as good as&lt;br/&gt;&amp;gt; we&amp;#39;d like at (3) and (4)?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;FWIW, I think the rmain reasons to do CAT&#43;CSFS is to validate oracle&lt;br/&gt;messages and pubkey delegation.  The ability to covenants would be&lt;br/&gt;secondary and would mostly serve to get us some real user data about what&lt;br/&gt;sort of covenants users find especially valuable.&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/20220513/e19a4b5f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220513/e19a4b5f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:09:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsyv4a74p5wt6zs2xraey09jk2uj5stvsrddd5jhjr7jwpuakpwwzczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596mkfnfk</id>
    
      <title type="html">📅 Original date posted:2022-05-12 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsyv4a74p5wt6zs2xraey09jk2uj5stvsrddd5jhjr7jwpuakpwwzczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596mkfnfk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfsn7mkts5dresdtedzdeq4vqr883wgfl2k275ty2qylz20vzkkxgvzzgua&#39;&gt;nevent1q…zgua&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-12&lt;br/&gt;📝 Original message:On Wed, May 11, 2022 at 11:07 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Russell,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Wed, May 11, 2022 at 7:42 AM ZmnSCPxj via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; REMEMBER: `OP_CAT` BY ITSELF DOES NOT ENABLE COVENANTS, WHETHER&lt;br/&gt;&amp;gt; RECURSIVE OR NOT.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think the state of the art has advanced to the point where we can say&lt;br/&gt;&amp;gt; &amp;#34;OP_CAT in tapscript enables non recursive covenants and it is unknown&lt;br/&gt;&amp;gt; whether OP_CAT can enable recursive covenants or not&amp;#34;.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A. Poelstra in&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&#34;&gt;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&lt;/a&gt; show&lt;br/&gt;&amp;gt; how to use CAT to use the schnorr verification opcode to get the sighash&lt;br/&gt;&amp;gt; value &#43; 1 onto the stack, and then through some grinding and some more CAT,&lt;br/&gt;&amp;gt; get the actual sighash value on the stack. From there we can use SHA256 to&lt;br/&gt;&amp;gt; get the signed transaction data onto the stack and apply introspect (using&lt;br/&gt;&amp;gt; CAT) to build functionality similar to OP_CTV.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The missing bits for enabling recursive covenants comes down to needing&lt;br/&gt;&amp;gt; to transform a scriptpubkey into an taproot address, which involves some&lt;br/&gt;&amp;gt; tweaking. Poelstra has suggested that it might be possible to hijack the&lt;br/&gt;&amp;gt; ECDSA checksig operation from a parallel, legacy input, in order to perform&lt;br/&gt;&amp;gt; the calculations for this tweaking. But as far as I know no one has yet&lt;br/&gt;&amp;gt; been able to achieve this feat.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Hmm, I do not suppose it would have worked in ECDSA?&lt;br/&gt;&amp;gt; Seems like this exploits linearity in the Schnorr.&lt;br/&gt;&amp;gt; For the ECDSA case it seems that the trick in that link leads to `s = e &#43;&lt;br/&gt;&amp;gt; G[x]` where `G[x]` is the x-coordinate of `G`.&lt;br/&gt;&amp;gt; (I am not a mathist, so I probably am not making sense; in particular,&lt;br/&gt;&amp;gt; there may be an operation to add two SECP256K1 scalars that I am not aware&lt;br/&gt;&amp;gt; of)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In that case, since Schnorr was added later, I get away by a technicality,&lt;br/&gt;&amp;gt; since it is not *just* `OP_CAT` which enabled this style of covenant, it&lt;br/&gt;&amp;gt; was `OP_CAT` &#43; BIP340 v(^^);;;;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Correct.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Also holy shit math is scary.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Seems this also works with `OP_SUBSTR`, simply by inverting it into&lt;br/&gt;&amp;gt; &amp;#34;validate that the concatenation is correct&amp;#34; rather than &amp;#34;concatenate it&lt;br/&gt;&amp;gt; ourselves&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So really: are recursive covenants good or...?&lt;br/&gt;&amp;gt; Because if recursive covenants are good, what we should really work on is&lt;br/&gt;&amp;gt; making them cheap (in CPU load/bandwidth load terms) and private, to avoid&lt;br/&gt;&amp;gt; centralization and censoring.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;My view is that recursive covenants are inevitable.  It is nearly&lt;br/&gt;impossible to have programmable money without it because it is so difficult&lt;br/&gt;to avoid.&lt;br/&gt;&lt;br/&gt;Given that we cannot have programmable money without recursive covenants&lt;br/&gt;and given all the considerations already discussed regarding them, i.e. no&lt;br/&gt;worse than being compelled to co-sign transactions, and that user generated&lt;br/&gt;addresses won&amp;#39;t be encumbered by a covenant unless they specifically&lt;br/&gt;generate it to be, I do think it makes sense to embrace them.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220512/af1e5596/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220512/af1e5596/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:09:21Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0srxgrzvychs0s9656z92fvdkgzt93d0s2t4sd95wuhznzug5d4szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59689dsa9</id>
    
      <title type="html">📅 Original date posted:2022-05-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0srxgrzvychs0s9656z92fvdkgzt93d0s2t4sd95wuhznzug5d4szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59689dsa9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqkyy307lnc499fr77m0pjuvdghzj326069k98qu5vhr7f39k2ejgxlf2s4&#39;&gt;nevent1q…f2s4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-11&lt;br/&gt;📝 Original message:On Wed, May 11, 2022 at 7:42 AM ZmnSCPxj 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; REMEMBER: `OP_CAT` BY ITSELF DOES NOT ENABLE COVENANTS, WHETHER RECURSIVE&lt;br/&gt;&amp;gt; OR NOT.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think the state of the art has advanced to the point where we can say&lt;br/&gt;&amp;#34;OP_CAT in tapscript enables non recursive covenants and it is unknown&lt;br/&gt;whether OP_CAT can enable recursive covenants or not&amp;#34;.&lt;br/&gt;&lt;br/&gt;A. Poelstra in&lt;br/&gt;&lt;a href=&#34;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&#34;&gt;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&lt;/a&gt; show&lt;br/&gt;how to use CAT to use the schnorr verification opcode to get the sighash&lt;br/&gt;value &#43; 1 onto the stack, and then through some grinding and some more CAT,&lt;br/&gt;get the actual sighash value on the stack.  From there we can use SHA256 to&lt;br/&gt;get the signed transaction data onto the stack and apply introspect (using&lt;br/&gt;CAT) to build functionality similar to OP_CTV.&lt;br/&gt;&lt;br/&gt;The missing bits for enabling recursive covenants comes down to needing to&lt;br/&gt;transform a scriptpubkey into an taproot address, which involves some&lt;br/&gt;tweaking.  Poelstra has suggested that it might be possible to hijack the&lt;br/&gt;ECDSA checksig operation from a parallel, legacy input, in order to perform&lt;br/&gt;the calculations for this tweaking.  But as far as I know no one has yet&lt;br/&gt;been able to achieve this feat.&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/20220511/50e8333f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220511/50e8333f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:09:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsx3j9q2dkw9k5d75lkurhgv54pmgy3sfdg0jm25mprdpnkrdrhymqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tunl6f</id>
    
      <title type="html">📅 Original date posted:2022-05-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsx3j9q2dkw9k5d75lkurhgv54pmgy3sfdg0jm25mprdpnkrdrhymqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tunl6f" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx4a6guu00qd3advfa4nk5rgdcwgkktmcjcc0h4ngph25thetlkzqr93szh&#39;&gt;nevent1q…3szh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-05-06&lt;br/&gt;📝 Original message:On Fri, May 6, 2022 at 2:01 PM Jorge Timón 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;&lt;br/&gt;&amp;gt; Russell O&amp;#39;Connor wrote the definitive explanation for how ST arose in&lt;br/&gt;&amp;gt;&amp;gt; the consensus process and how it was designed to make everyone&lt;br/&gt;&amp;gt;&amp;gt; unhappy.  It&amp;#39;s a great explanation of what we went through last year.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   &lt;a href=&#34;https://r6.ca/blog/20210615T191422Z.html&#34;&gt;https://r6.ca/blog/20210615T191422Z.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     &amp;#34;On Building Consensus and Speedy Trial&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;     on | 2021-06-15T19:14:22Z&lt;br/&gt;&amp;gt;&amp;gt;     by | Russell O&amp;#39;Connor&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That&amp;#39;s a lot of text, are you sure he said in there he designed speedy&lt;br/&gt;&amp;gt; trial to make everyone unhappy?&lt;br/&gt;&amp;gt; Well, if we&amp;#39;re still talking about it, that proves that it failed at its&lt;br/&gt;&amp;gt; own design criterion of failing fast.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Quoting from &lt;a href=&#34;https://r6.ca/blog/20210615T191422Z.html&#34;&gt;https://r6.ca/blog/20210615T191422Z.html&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;&amp;gt; Speedy Trial’s design is not based on any sort of activation philosophy&lt;br/&gt;about failing fast.&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/20220506/7b1fba52/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220506/7b1fba52/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:08:41Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrqp4qdqywxcf3h4kv8rp7la2hx2ymjxf60vprrs4dxv96uymfvaczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596wlj6v3</id>
    
      <title type="html">📅 Original date posted:2022-04-25 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrqp4qdqywxcf3h4kv8rp7la2hx2ymjxf60vprrs4dxv96uymfvaczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596wlj6v3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0c4957ae96aklvs6yvzr2cfks8lpjvmcnnw9nf8gdayaj9c5yvfs6wvrgk&#39;&gt;nevent1q…vrgk&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-25&lt;br/&gt;📝 Original message:On Sun, Apr 24, 2022 at 7:04 PM Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; @Russel&lt;br/&gt;&amp;gt; &amp;gt; the original MES vault .. commits to the destination address during&lt;br/&gt;&amp;gt; unvaulting&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I see. Looking at the MES16 paper, OP_COV isn&amp;#39;t described clearly enough&lt;br/&gt;&amp;gt; for me to understand that it does that. However, I can imagine how it&lt;br/&gt;&amp;gt; *might* do that.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One possibility is that the intended destination is predetermined and&lt;br/&gt;&amp;gt; hardcoded. This wouldn&amp;#39;t be very useful, and also wouldn&amp;#39;t be different&lt;br/&gt;&amp;gt; than how CTV could do it, so I assume that isn&amp;#39;t what you envisioned this&lt;br/&gt;&amp;gt; doing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I can imagine instead that the definition of the pattern could be&lt;br/&gt;&amp;gt; specified as a number indicating the number of stack items in the pattern,&lt;br/&gt;&amp;gt; followed by that number of stack items. If that&amp;#39;s how it is done, I can see&lt;br/&gt;&amp;gt; the user inputting an intended destination script (corresponding to the&lt;br/&gt;&amp;gt; intended destination address) which would then be somehow rotated in to the&lt;br/&gt;&amp;gt; right spot within the pattern, allowing the pattern to specify the coins&lt;br/&gt;&amp;gt; eventually reaching an address with that script. However, this could be&lt;br/&gt;&amp;gt; quite cumbersome, and would require fully specifying the scripts along the&lt;br/&gt;&amp;gt; covenant pathways leading to a fair amount of information duplication&lt;br/&gt;&amp;gt; (since scripts must be specified both in the covenant and in spending the&lt;br/&gt;&amp;gt; subsequent output). Both of these things would seem to make OP_COV in&lt;br/&gt;&amp;gt; practice quite an expensive opcode to spend with. It also means that, since&lt;br/&gt;&amp;gt; the transactor must fully specify the script, its not possible to take&lt;br/&gt;&amp;gt; advantage of taproot&amp;#39;s script hiding capabilities (were it to send to a&lt;br/&gt;&amp;gt; taproot address).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;So my understanding is that the COV proposal in MES lets you check that the&lt;br/&gt;output&amp;#39;s scriptPubKey matches the corresponding script item from the stack,&lt;br/&gt;but the script item&amp;#39;s value additionally allows some wildcard values.  In&lt;br/&gt;particular, it makes use of the otherwise reserved opcodes OP_PUBKEY, and&lt;br/&gt;OP_PUBKEYHASH as wildcards representing any, let&amp;#39;s say, 32-byte or 20-byte&lt;br/&gt;push value.&lt;br/&gt;&lt;br/&gt;If you just used COV by itself, then these wildcards would be third-party&lt;br/&gt;malleable, but you also have to sign the transaction with the hot wallet&lt;br/&gt;key, which removes the malleability.&lt;br/&gt;&lt;br/&gt;No need to rotate anything into place.&lt;br/&gt;&lt;br/&gt;I hope this makes sense.&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/20220425/99e1a76f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220425/99e1a76f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:46Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0lnz5pt744l2430ltp8v78kw4z5z3xzehz70crdnl0vc46mxqpegzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5964cv23e</id>
    
      <title type="html">📅 Original date posted:2022-04-23 📝 Original message:Okay, ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0lnz5pt744l2430ltp8v78kw4z5z3xzehz70crdnl0vc46mxqpegzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5964cv23e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs968u37kadnlrutufranwfyud4xauqc0z590gy4dzyd8zehg8wclc46gjsf&#39;&gt;nevent1q…gjsf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-23&lt;br/&gt;📝 Original message:Okay, Matt explained to me the intended application of CTV vaults off list,&lt;br/&gt;so I have a better understanding now.&lt;br/&gt;&lt;br/&gt;The CTV vault scheme is designed as an improvement over the traditional&lt;br/&gt;management of hot-wallets and cold-wallets.  The CTV vault is logically on&lt;br/&gt;the &amp;#34;cold-side&amp;#34; and lets funds be sent from the &amp;#34;cold&amp;#34; side to *one&amp;#39;s own*&lt;br/&gt;the hot wallet after the unvaulting delay.  In this case, the hot wallet&lt;br/&gt;funds are always at risk, so it isn&amp;#39;t unexpected that those funds could be&lt;br/&gt;stolen.  After all, that is how hot wallets are today.  The advantage is&lt;br/&gt;that funds can be moved from the &amp;#34;cold&amp;#34; side without needing to dig out the&lt;br/&gt;cold keys.&lt;br/&gt;&lt;br/&gt;The MES vault scheme applies to a different scenario.  In the MES case it&lt;br/&gt;is the hot funds are inside the vault, and it is the hot key that unvaults&lt;br/&gt;the funds and sends them to *customer&amp;#39;s addresses* after a delay.  If the&lt;br/&gt;hot-key is used in any unauthorised way, then funds can be sent to the&lt;br/&gt;address of the cold key (the MES vault actually does something fancy in&lt;br/&gt;case of recovery, but it could be adapted to simply send funds to a cold&lt;br/&gt;wallet).&lt;br/&gt;&lt;br/&gt;The MES vault lie somewhere between &amp;#34;better&amp;#34; and &amp;#34;different&amp;#34; when compared&lt;br/&gt;to the CTV vault.  If one is unwilling to use the MES vault on the hot side&lt;br/&gt;and have every withdrawl vetted, then, while you could use the MES design&lt;br/&gt;on the cold side like the CTV vault, it wouldn&amp;#39;t really offer you any&lt;br/&gt;advantages over a CTV vault.  However, if you are interested in managing&lt;br/&gt;all your payments through a vault (as I&amp;#39;ve been imagining) then the CTV&lt;br/&gt;vault comes across as ineffective when compared to an MES style vault.&lt;br/&gt;&lt;br/&gt;On Sat, Apr 23, 2022 at 2:24 PM Matt Corallo &amp;lt;lf-lists at mattcorallo.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Still trying to make sure I understand this concern, let me know if I get&lt;br/&gt;&amp;gt; this all wrong.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On 4/22/22 10:25 AM, Russell O&amp;#39;Connor via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; It&amp;#39;s not the attackers *only choice to succeed*.  If an attacker steals&lt;br/&gt;&amp;gt; the hot key, then they have&lt;br/&gt;&amp;gt; &amp;gt; the option to simply wait for the user to unvault their funds of their&lt;br/&gt;&amp;gt; own accord and then race /&lt;br/&gt;&amp;gt; &amp;gt; outspend the users transaction with their own.  Indeed, this is what we&lt;br/&gt;&amp;gt; expect would happen in the&lt;br/&gt;&amp;gt; &amp;gt; dark forest.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Right, a key security assumption of the CTV-based vaults would be that you&lt;br/&gt;&amp;gt; MUST NOT EVER withdraw&lt;br/&gt;&amp;gt; more in one go than your hot wallet risk tolerance, but given that your&lt;br/&gt;&amp;gt; attack isn&amp;#39;t any worse than&lt;br/&gt;&amp;gt; simply stealing the hot wallet key immediately after a withdraw.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It does have the drawback that if you ever get a hot wallet key stole you&lt;br/&gt;&amp;gt; have to rotate all of your&lt;br/&gt;&amp;gt; CTV outputs and your CTV outputs must never be any larger than your hot&lt;br/&gt;&amp;gt; wallet risk tolerance&lt;br/&gt;&amp;gt; amount, both of which are somewhat frustrating limitations, but not&lt;br/&gt;&amp;gt; security limitations, only&lt;br/&gt;&amp;gt; practical ones.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; And that&amp;#39;s not even mentioning the issues already noted by the document&lt;br/&gt;&amp;gt; regarding fee management,&lt;br/&gt;&amp;gt; &amp;gt; which would likely also benefit from a less constrained design for&lt;br/&gt;&amp;gt; covenants.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Of course I&amp;#39;ve always been in favor of a less constrained covenants design&lt;br/&gt;&amp;gt; from day one for ten&lt;br/&gt;&amp;gt; reasons, but that&amp;#39;s a whole other rabbit hole :)&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/20220423/8077c9f2/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220423/8077c9f2/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrq536ed4yg6c4630a5pl3u43uzf7q68aphm0mvp5xlly06qznkzczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596e7h043</id>
    
      <title type="html">📅 Original date posted:2022-04-23 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrq536ed4yg6c4630a5pl3u43uzf7q68aphm0mvp5xlly06qznkzczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596e7h043" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdk6kh2rs76kp5ks9s7wq7nkadncfjxymdr25uxlqlhk985dlwqqggnwe2h&#39;&gt;nevent1q…we2h&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-23&lt;br/&gt;📝 Original message:On Sat, Apr 23, 2022 at 12:56 AM Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; If an attacker steals the hot key, then they have the option to simply&lt;br/&gt;&amp;gt; wait for the user to unvault their funds&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is definitely true. Its kind of a problem with most vault proposals.&lt;br/&gt;&amp;gt; Its one of the primary reasons I designed an alternative proposal&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults&amp;gt&lt;/a&gt;;. The&lt;br/&gt;&amp;gt; OP_BEFOREBLOCKVERIFY opcode I proposed solves this security hole by&lt;br/&gt;&amp;gt; automatically swapping control of the UTXO over to the intended recipient&lt;br/&gt;&amp;gt; after a timeout. Alternatively, if OP_BBV weren&amp;#39;t available, OP_POS in&lt;br/&gt;&amp;gt; conjunction with OP_CD could encode things such that the transaction&lt;br/&gt;&amp;gt; with the hot key could only spend to the intended recipient.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m curious if there are any other covenant proposals that have a solution&lt;br/&gt;&amp;gt; to that problem. I&amp;#39;m not aware of any that do other than my proposal.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As I noted, the original MES vault&lt;br/&gt;&lt;a href=&#34;https://fc16.ifca.ai/bitcoin/papers/MES16.pdf&#34;&gt;https://fc16.ifca.ai/bitcoin/papers/MES16.pdf&lt;/a&gt;, commits to the destination&lt;br/&gt;address during unvaulting.  Their proposal uses CheckOutputVerify that&lt;br/&gt;checks if a given output has a given amount and a given scriptPubKey.  (The&lt;br/&gt;MES vault then goes on to add a PATTERN parameter to OP_COV&amp;#39;s scriptPubKey&lt;br/&gt;parameter in order to make a recursive vault, but that is used to deter&lt;br/&gt;cold-key theft, not hot-key theft).&lt;br/&gt;&lt;br/&gt;Our paper &lt;a href=&#34;https://fc17.ifca.ai/bitcoin/papers/bitcoin17-final28.pdf&#34;&gt;https://fc17.ifca.ai/bitcoin/papers/bitcoin17-final28.pdf&lt;/a&gt;&lt;br/&gt;impelments the MES vault in Elements (alpha) using CAT and&lt;br/&gt;CHECKSIGFROMSTACK.  While I wouldn&amp;#39;t necessarily call it a covenant&lt;br/&gt;proposal, rather it is an observation that these opcodes happen to be&lt;br/&gt;adequate for the task.&lt;br/&gt;&lt;br/&gt;With such a big security caveat, I really don&amp;#39;t find CTV vaults a&lt;br/&gt;compelling example of using CTV.  Sure, if CTV happens to exist, by all&lt;br/&gt;means do whatever you like.  But if anything, the CTV vault scheme instead&lt;br/&gt;illustrates BlueMatt&amp;#39;s point that we aren&amp;#39;t really finished with covenant&lt;br/&gt;research design yet:&lt;br/&gt;&lt;br/&gt;Q: What ways can we build a secured vault that commits to the destination&lt;br/&gt;address?&lt;br/&gt;Q: Are there elegant ways of building secure vaults by using CTV plus&lt;br/&gt;something else.  Presumably CAT &#43; CTV would be enough, though maybe some&lt;br/&gt;people are concerned that CAT might enable recursive covenants (if people&lt;br/&gt;aren&amp;#39;t willing to have even CAT, I don&amp;#39;t see how we will ever really have&lt;br/&gt;programmable money).&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/20220423/4e7b865d/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220423/4e7b865d/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsye68gj5vamkhzh82v76mj8q8drl7nktnr74a4w7wwp7ue68fwc6czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596quk76w</id>
    
      <title type="html">📅 Original date posted:2022-04-22 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsye68gj5vamkhzh82v76mj8q8drl7nktnr74a4w7wwp7ue68fwc6czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596quk76w" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsga5w9mukccnqhmxrw8jakx9zulwwt26ufqpn7pe8srjgla9xejxcd46trn&#39;&gt;nevent1q…6trn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-22&lt;br/&gt;📝 Original message:On Fri, Apr 22, 2022 at 12:29 PM James O&amp;#39;Beirne 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 vault design (&lt;a href=&#34;https://github.com/jamesob/simple-ctv-vault&#34;&gt;https://github.com/jamesob/simple-ctv-vault&lt;/a&gt;)&lt;br/&gt;&amp;gt; is a good benchmark for evaluating covenant proposals because it&amp;#39;s (i)&lt;br/&gt;&amp;gt; simple and (ii) has high utility for many users of Bitcoin. I would&lt;br/&gt;&amp;gt; love to see it implemented in one or all of these alternatives, but I&lt;br/&gt;&amp;gt; am almost certain no one will do it in the next few months because the&lt;br/&gt;&amp;gt; implementations, tooling, and in some cases even complete&lt;br/&gt;&amp;gt; specifications do not exist.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Quoting from the link above:&lt;br/&gt;Detecting theft&lt;br/&gt;&lt;br/&gt;This unvault step is critical because it allows us to detect unexpected&lt;br/&gt;behavior. If an attacker had stolen our hot wallet keys, their only choice&lt;br/&gt;to succeed in the theft is to trigger an unvault.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;It&amp;#39;s not the attackers *only choice to succeed*.  If an attacker steals the&lt;br/&gt;hot key, then they have the option to simply wait for the user to unvault&lt;br/&gt;their funds of their own accord and then race / outspend the users&lt;br/&gt;transaction with their own.  Indeed, this is what we expect would happen in&lt;br/&gt;the dark forest.&lt;br/&gt;&lt;br/&gt;A key feature of the MES vault design is that the destination address is&lt;br/&gt;included, and committed to, by the unvaulting step.  However, this can only&lt;br/&gt;be achieved with a less constrained design for covenants.&lt;br/&gt;&lt;br/&gt;I suppose I can see that the damage from a hot key theft could be more&lt;br/&gt;contained under some circumstances using a CTV vault, but let us not&lt;br/&gt;overstate the value of the CTV vault.&lt;br/&gt;&lt;br/&gt;And that&amp;#39;s not even mentioning the issues already noted by the document&lt;br/&gt;regarding fee management, which would likely also benefit from a less&lt;br/&gt;constrained design for covenants.&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/20220422/a55ab1e9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220422/a55ab1e9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:43Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs99pk4shd667mpzcz49n2lht3w3nczqp6e8tlazrzu8f2k63mkjsczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596yjh3ye</id>
    
      <title type="html">📅 Original date posted:2022-04-21 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs99pk4shd667mpzcz49n2lht3w3nczqp6e8tlazrzu8f2k63mkjsczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596yjh3ye" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsva7xls89ykzedja4s60lz3anepg8n4tm0rz5tpep4mxhwszvhqacx4vd34&#39;&gt;nevent1q…vd34&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-04-21&lt;br/&gt;📝 Original message:On Thu, Apr 21, 2022 at 1:04 AM Anthony Towns 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;&lt;br/&gt;&amp;gt;  - is there really any benefit to doing it as a NOP vs a taproot-only&lt;br/&gt;&amp;gt;    opcode like TXHASH? Theoretically, sure, that saves some bytes; but as&lt;br/&gt;&amp;gt;    was pointed out on #bitcoin-wizards the other day, you can&amp;#39;t express&lt;br/&gt;&amp;gt;    those outputs as an address, which makes them not very interoperable,&lt;br/&gt;&amp;gt;    and if they&amp;#39;re not interoperable between, say, an exchange and its&lt;br/&gt;&amp;gt;    users trying to do a withdraw, how useful is that really ever going&lt;br/&gt;&amp;gt;    to be?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;FWIW, this is also approximately where my sticking point lies with BIP-119.&lt;br/&gt;&lt;br/&gt;Overall I&amp;#39;ve come around to the idea of something like CTV.  The ability to&lt;br/&gt;construct &amp;#34;smart contracts&amp;#34; that commit to *multiple* possible payout&lt;br/&gt;schemes based on some conditions seems like a very useful construct, and&lt;br/&gt;there have been several examples of  schemes proposed that use this feature.&lt;br/&gt;&lt;br/&gt;However, I&amp;#39;m still skeptical of the bare-CTV part of BIP-119 (and I&amp;#39;m told&lt;br/&gt;that bare-CTV hasn&amp;#39;t even appeared on the CTV signet).  Unlike the general&lt;br/&gt;smart-contracting case, bare-CTV does not have any branches.  All it can do&lt;br/&gt;is commit to a subsequent transaction&amp;#39;s outputs.  At first glance this&lt;br/&gt;appears to be a waste because, for less bandwidth, that transaction could&lt;br/&gt;just realize those outputs immediately, so why would anyone want to delay&lt;br/&gt;the inevitable?&lt;br/&gt;&lt;br/&gt;One reason might be that you want to commit to the output early during a&lt;br/&gt;high-fee time, and then complete the transaction later during a low-fee&lt;br/&gt;time.  While there are fee-rate situations where this could result in lower&lt;br/&gt;fees than committing to the outputs all at once, it would be even cheaper&lt;br/&gt;still to just wait to do the payout at the low-fee time.  I&amp;#39;m struggling to&lt;br/&gt;understand the advantages of the advanced commitment, along with all the&lt;br/&gt;overhead that entails.  Doesn&amp;#39;t it just cause more blockspace to be used&lt;br/&gt;overall?&lt;br/&gt;&lt;br/&gt;There are some other proposed use cases for bare-CTV.  A bare-CTV can be&lt;br/&gt;used to delay a &amp;#34;trigger&amp;#34;-transaction.  Some contracts, such as vaults, use&lt;br/&gt;a relative-locktime as part of their construction and it could make sense&lt;br/&gt;to make an output commitment but not realize those outputs yet until you&lt;br/&gt;are ready to start your relative-time lock clock.  But bare-CTV doesn&amp;#39;t&lt;br/&gt;support any co-signing ability here, so you are relying entirely on keeping&lt;br/&gt;the transaction data secret to prevent a third-party from triggering your&lt;br/&gt;relative-lock clock.  More specifically for a vault scheme, since&lt;br/&gt;bare-CTV&amp;#39;s are currently unaddressable, and AFAIK, there is no address&lt;br/&gt;format proposal yet, it is impossible to receive funds directly into a&lt;br/&gt;vault.  You must shuffle received funds into your vault yourself, which&lt;br/&gt;seems very likely to negate the cost savings of using bare-CTV in the first&lt;br/&gt;place (please correct me if I&amp;#39;m wrong).  Better to receive funds directly&lt;br/&gt;into a taproot-CTV vault, which has an address, and while you are at it,&lt;br/&gt;you could place the cold-key as the taproot key to save even more when&lt;br/&gt;using the cold-key to move vault funds.&lt;br/&gt;&lt;br/&gt;There might be even more exotic use cases of bare-CTV.  For example you&lt;br/&gt;could commit to a transaction that has a second input that doesn&amp;#39;t yet&lt;br/&gt;exist in the UTXO set in an attempt to coax it into existence. I don&amp;#39;t know&lt;br/&gt;if there have been any proposals to take advantage of this.&lt;br/&gt;&lt;br/&gt;With that said, everything that bare-CTV can do, can also be done by&lt;br/&gt;tapscript-CTV; so it is just a matter of cost.  I&amp;#39;m struggling to&lt;br/&gt;understand where this cost savings is and how much those savings are going&lt;br/&gt;to be given that bare-CTV is unaddressable and seems to ultimately occupy&lt;br/&gt;more-blockspace than if the outputs were directly committed to.&lt;br/&gt;&lt;br/&gt;I also believe the bare-CTV question is material, because if bare-CTV were&lt;br/&gt;not part of the spec, then I&amp;#39;d be advocating for using an OP_SUCCESS code&lt;br/&gt;from tapscript instead, and either use push-style semantics for CTV, which&lt;br/&gt;would be composed with EQUAL_VERIFY to mimic the currently proposed&lt;br/&gt;verification style-semantics, or a hybrid push-or-verify semantics that&lt;br/&gt;would either push or verify depending on the size of the input.  (And I&lt;br/&gt;still think a more general TXHASH would be even better, though if I cannot&lt;br/&gt;convince aj then perhaps I&amp;#39;m wrong.)&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not saying bare-CTV is necessarily a bad idea.  I&amp;#39;m just struggling&lt;br/&gt;with its justification.&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/20220421/7dabd75a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220421/7dabd75a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:07:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgevazjw237tpmwrg4sxmt0jspfmus2kg7xfl8p9xtq3hky3arqlczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966f5fqe</id>
    
      <title type="html">📅 Original date posted:2022-03-22 📝 Original message:Thanks ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgevazjw237tpmwrg4sxmt0jspfmus2kg7xfl8p9xtq3hky3arqlczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966f5fqe" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs20xfauvsrp2wd74ej0jfhmrl8h54hrjq8386dye8cwmfc2dkc4kc67lzvw&#39;&gt;nevent1q…lzvw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-22&lt;br/&gt;📝 Original message:Thanks for the clarification.&lt;br/&gt;&lt;br/&gt;You don&amp;#39;t think referring to the microcode via its hash, effectively using&lt;br/&gt;32-byte encoding of opcodes, is still rather long winded?&lt;br/&gt;&lt;br/&gt;On Tue, Mar 22, 2022 at 12:23 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Russell,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Setting aside my thoughts that something like Simplicity would make a&lt;br/&gt;&amp;gt; better platform than Bitcoin Script (due to expression operating on a more&lt;br/&gt;&amp;gt; narrow interface than the entire stack (I&amp;#39;m looking at you OP_DEPTH)) there&lt;br/&gt;&amp;gt; is an issue with namespace management.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If I understand correctly, your implication was that once opcodes are&lt;br/&gt;&amp;gt; redefined by an OP_RETURN transaction, subsequent transactions of that&lt;br/&gt;&amp;gt; opcode refer to the new microtransaction.  But then we have a race&lt;br/&gt;&amp;gt; condition between people submitting transactions expecting the outputs to&lt;br/&gt;&amp;gt; refer to the old code and having their code redefined by the time they do&lt;br/&gt;&amp;gt; get confirmed  (or worse having them reorged).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; No, use of specific microcodes is opt-in: you have to use a specific&lt;br/&gt;&amp;gt; `0xce` Tapscript version, ***and*** refer to the microcode you want to use&lt;br/&gt;&amp;gt; via the hash of the microcode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The only race condition is reorging out a newly-defined microcode.&lt;br/&gt;&amp;gt; This can be avoided by waiting for deep confirmation of a newly-defined&lt;br/&gt;&amp;gt; microcode before actually using it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But once the microcode introduction outpoint of a particular microcode has&lt;br/&gt;&amp;gt; been deeply confirmed, then your Tapscript can refer to the microcode, and&lt;br/&gt;&amp;gt; its meaning does not change.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Fullnodes may need to maintain multiple microcodes, which is why creating&lt;br/&gt;&amp;gt; new microcodes is expensive; they not only require JIT compilation, they&lt;br/&gt;&amp;gt; also require that fullnodes keep an index that cannot have items deleted.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The advantage of the microcode scheme is that the size of the SCRIPT can&lt;br/&gt;&amp;gt; be used as a proxy for CPU load ---- just as it is done for current Bitcoin&lt;br/&gt;&amp;gt; SCRIPT.&lt;br/&gt;&amp;gt; As long as the number of `UOP_` micro-opcodes that an `OP_` code can&lt;br/&gt;&amp;gt; expand to is bounded, and we avoid looping constructs, then the CPU load is&lt;br/&gt;&amp;gt; also bounded and the size of the SCRIPT approximates the amount of&lt;br/&gt;&amp;gt; processing needed, thus microcode does not require a softfork to modify&lt;br/&gt;&amp;gt; weight calculations in the future.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220322/4fd9e0be/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220322/4fd9e0be/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:06:34Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqst07z9ugfutcqydzuj9t4n4jf92vqd4akp7z23uyv5vts200nx9jgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596muqnfz</id>
    
      <title type="html">📅 Original date posted:2022-03-22 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqst07z9ugfutcqydzuj9t4n4jf92vqd4akp7z23uyv5vts200nx9jgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596muqnfz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvtfega2sy7k4tklnr9s9k3r9akvgk9w3269umn4avyynalmu30xqzjvaua&#39;&gt;nevent1q…vaua&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-22&lt;br/&gt;📝 Original message:Setting aside my thoughts that something like Simplicity would make a&lt;br/&gt;better platform than Bitcoin Script (due to expression operating on a more&lt;br/&gt;narrow interface than the entire stack (I&amp;#39;m looking at you OP_DEPTH)) there&lt;br/&gt;is an issue with namespace management.&lt;br/&gt;&lt;br/&gt;If I understand correctly, your implication was that once opcodes are&lt;br/&gt;redefined by an OP_RETURN transaction, subsequent transactions of that&lt;br/&gt;opcode refer to the new microtransaction.  But then we have a race&lt;br/&gt;condition between people submitting transactions expecting the outputs to&lt;br/&gt;refer to the old code and having their code redefined by the time they do&lt;br/&gt;get confirmed  (or worse having them reorged).&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve partially addressed this issue in my Simplicity design where the&lt;br/&gt;commitment of a Simplicity program in a scriptpubkey covers the hash of the&lt;br/&gt;specification of the jets used, which makes commits unambiguously to the&lt;br/&gt;semantics (rightly or wrongly).  But the issue resurfaces at redemption&lt;br/&gt;time where I (currently) have a consensus critical map of codes to jets&lt;br/&gt;that is used to decode the witness data into a Simplicity program.  If one&lt;br/&gt;were to allow this map of codes to jets to be replaced (rather than just&lt;br/&gt;extended) then it would cause redemption to fail, because the hash of the&lt;br/&gt;new jets would no longer match the hash of the jets appearing the the&lt;br/&gt;input&amp;#39;s scriptpubkey commitment.  While this is still not good and I don&amp;#39;t&lt;br/&gt;recommend it, it is probably better than letting the semantics of your&lt;br/&gt;programs be changed out from under you.&lt;br/&gt;&lt;br/&gt;This comment is not meant as an endorsement of ths idea, which is a little&lt;br/&gt;bit out there, at least as far as Bitcoin is concerned. :)&lt;br/&gt;&lt;br/&gt;My long term plans are to move this consensus critical map of codes out of&lt;br/&gt;the consensus layer and into the p2p layer where peers can negotiate their&lt;br/&gt;own encodings between each other.  But that plan is also a little bit out&lt;br/&gt;there, and it still doesn&amp;#39;t solve the issue of how to weight reused jets,&lt;br/&gt;where weight is still consensus critical.&lt;br/&gt;&lt;br/&gt;On Tue, Mar 22, 2022 at 1:37 AM ZmnSCPxj 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; Good morning list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It is entirely possible that I have gotten into the deep end and am now&lt;br/&gt;&amp;gt; drowning in insanity, but here goes....&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Subject: Beyond Jets: Microcode: Consensus-Critical Jets Without Softforks&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Introduction&lt;br/&gt;&amp;gt; ============&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Recent (Early 2022) discussions on the bitcoin-dev mailing&lt;br/&gt;&amp;gt; list have largely focused on new constructs that enable new&lt;br/&gt;&amp;gt; functionality.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One general idea can be summarized this way:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * We should provide a very general language.&lt;br/&gt;&amp;gt;   * Then later, once we have learned how to use this language,&lt;br/&gt;&amp;gt;     we can softfork in new opcodes that compress sections of&lt;br/&gt;&amp;gt;     programs written in this general language.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are two arguments against this style:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1.  One of the most powerful arguments the &amp;#34;general&amp;#34; side of&lt;br/&gt;&amp;gt;     the &amp;#34;general v specific&amp;#34; debate is that softforks are&lt;br/&gt;&amp;gt;     painful because people are going to keep reiterating the&lt;br/&gt;&amp;gt;     activation parameters debate in a memoryless process, so&lt;br/&gt;&amp;gt;     we want to keep the number of softforks low.&lt;br/&gt;&amp;gt;     * So, we should just provide a very general language and&lt;br/&gt;&amp;gt;       never softfork in any other change ever again.&lt;br/&gt;&amp;gt; 2.  One of the most powerful arguments the &amp;#34;general&amp;#34; side of&lt;br/&gt;&amp;gt;     the &amp;#34;general v specific&amp;#34; debate is that softforks are&lt;br/&gt;&amp;gt;     painful because people are going to keep reiterating the&lt;br/&gt;&amp;gt;     activation parameters debate in a memoryless process, so&lt;br/&gt;&amp;gt;     we want to keep the number of softforks low.&lt;br/&gt;&amp;gt;     * So, we should just skip over the initial very general&lt;br/&gt;&amp;gt;       language and individually activate small, specific&lt;br/&gt;&amp;gt;       constructs, reducing the needed softforks by one.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; By taking a page from microprocessor design, it seems to me&lt;br/&gt;&amp;gt; that we can use the same above general idea (a general base&lt;br/&gt;&amp;gt; language where we later &amp;#34;bless&amp;#34; some sequence of operations)&lt;br/&gt;&amp;gt; while avoiding some of the arguments against it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Digression: Microcodes In CISC Microprocessors&lt;br/&gt;&amp;gt; ----------------------------------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the 1980s and 1990s, two competing microprocessor design&lt;br/&gt;&amp;gt; paradigms arose:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Complex Instruction Set Computing (CISC)&lt;br/&gt;&amp;gt;   - Few registers, many addressing/indexing modes, variable&lt;br/&gt;&amp;gt;     instruction length, many obscure instructions.&lt;br/&gt;&amp;gt; * Reduced Instruction Set Computing (RISC)&lt;br/&gt;&amp;gt;   - Many registers, usually only immediate and indexed&lt;br/&gt;&amp;gt;     addressing modes, fixed instruction length, few&lt;br/&gt;&amp;gt;     instructions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In CISC, the microprocessor provides very application-specific&lt;br/&gt;&amp;gt; instructions, often with a small number of registers with&lt;br/&gt;&amp;gt; specific uses.&lt;br/&gt;&amp;gt; The instruction set was complicated, and often required&lt;br/&gt;&amp;gt; multiple specific circuits for each application-specific&lt;br/&gt;&amp;gt; instruction.&lt;br/&gt;&amp;gt; Instructions had varying sizes and varying number of cycles.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In RISC, the micrprocessor provides fewer instructions, and&lt;br/&gt;&amp;gt; programmers (or compilers) are supposed to generate the code&lt;br/&gt;&amp;gt; for all application-specific needs.&lt;br/&gt;&amp;gt; The processor provided large register banks which could be&lt;br/&gt;&amp;gt; used very generically and interchangeably.&lt;br/&gt;&amp;gt; Instructions had the same size and every instruction took a&lt;br/&gt;&amp;gt; fixed number of cycles.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In CISC you usually had shorter code which could be written&lt;br/&gt;&amp;gt; by human programmers in assembly language or machine language.&lt;br/&gt;&amp;gt; In RISC, you generally had longer code, often difficult for&lt;br/&gt;&amp;gt; human programmers to write, and you *needed* a compiler to&lt;br/&gt;&amp;gt; generate it (unless you were very careful, or insane enough&lt;br/&gt;&amp;gt; you could scroll over multiple pages of instructions without&lt;br/&gt;&amp;gt; becoming more insane), or else you might forget about stuff&lt;br/&gt;&amp;gt; like jump slots.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the most part, RISC lost, since most modern processors&lt;br/&gt;&amp;gt; today are x86 or x86-64, an instruction set with varying&lt;br/&gt;&amp;gt; instruction sizes, varying number of cycles per instruction,&lt;br/&gt;&amp;gt; and complex instructions with application-specific uses.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Or at least, it *looks like* RISC lost.&lt;br/&gt;&amp;gt; In the 90s, Intel was struggling since their big beefy CISC&lt;br/&gt;&amp;gt; designs were becoming too complicated.&lt;br/&gt;&amp;gt; Bugs got past testing and into mass-produced silicon.&lt;br/&gt;&amp;gt; RISC processors were beating the pants off 386s in terms of&lt;br/&gt;&amp;gt; raw number of computations per second.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; RISC processors had the major advantage that they were&lt;br/&gt;&amp;gt; inherently simpler, due to having fewer specific circuits&lt;br/&gt;&amp;gt; and filling up their silicon with general-purpose registers&lt;br/&gt;&amp;gt; (which are large but very simple circuits) to compensate.&lt;br/&gt;&amp;gt; This meant that processor designers could fit more of the&lt;br/&gt;&amp;gt; design in their merely human meat brains, and were less&lt;br/&gt;&amp;gt; likely to make mistakes.&lt;br/&gt;&amp;gt; The fixed number of cycles per instruction made it trivial&lt;br/&gt;&amp;gt; to create a fixed-length pipeline for instruction processing,&lt;br/&gt;&amp;gt; and practical RISC processors could deliver one instruction&lt;br/&gt;&amp;gt; per clock cycle.&lt;br/&gt;&amp;gt; Worse, the simplicity of RISC meant that smaller and less&lt;br/&gt;&amp;gt; experienced teams could produce viable competitors to the&lt;br/&gt;&amp;gt; Intel x86s.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So what Intel did was to use a RISC processor, and add a&lt;br/&gt;&amp;gt; special Instruction Decoder unit.&lt;br/&gt;&amp;gt; The Instruction Decoder would take the CISC instruction&lt;br/&gt;&amp;gt; stream accepted by classic Intel x86 processors, and emit&lt;br/&gt;&amp;gt; RISC instructions for the internal RISC processor.&lt;br/&gt;&amp;gt; CISC instructions might be variable length and have variable&lt;br/&gt;&amp;gt; number of cycles, but the emitted RISC instructions were&lt;br/&gt;&amp;gt; individually fixed length and fixed number of cycles.&lt;br/&gt;&amp;gt; A CISC instruction might be equivalent to a single RISC&lt;br/&gt;&amp;gt; instruction, or several.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With this technique, Intel could deliver performance&lt;br/&gt;&amp;gt; approaching their RISC-only competition, while retaining&lt;br/&gt;&amp;gt; back-compatibility with existing software written for their&lt;br/&gt;&amp;gt; classic CISC processors.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; At its core, the Instruction Decoder was a table-driven&lt;br/&gt;&amp;gt; parser.&lt;br/&gt;&amp;gt; This lookup table could be stored into on-chip flash memory.&lt;br/&gt;&amp;gt; This had the advantage that the on-chip flash memory could be&lt;br/&gt;&amp;gt; updated in case of bugs in the implementation of CISC&lt;br/&gt;&amp;gt; instructions.&lt;br/&gt;&amp;gt; This on-chip flash memory was then termed &amp;#34;microcode&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Important advantages of this &amp;#34;microcode&amp;#34; technique were:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Back-compatibility with existing instruction sets.&lt;br/&gt;&amp;gt; * Easier and more scalable underlying design due to ability&lt;br/&gt;&amp;gt;   to use RISC techniques while still supporting CISC instruction&lt;br/&gt;&amp;gt;   sets.&lt;br/&gt;&amp;gt; * Possible to fix bugs in implementations of complex CISC&lt;br/&gt;&amp;gt;   instructions by uploading new microcode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (Obviously I have elided a bunch of stuff, but the above&lt;br/&gt;&amp;gt; rough sketch should be sufficient as introduction.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bitcoin Consensus Layer As Hardware&lt;br/&gt;&amp;gt; -----------------------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While Bitcoin fullnode implementations are software, because&lt;br/&gt;&amp;gt; of the need for consensus, this software is not actually very&lt;br/&gt;&amp;gt; &amp;#34;soft&amp;#34;.&lt;br/&gt;&amp;gt; One can consider that, just as it would take a long time for&lt;br/&gt;&amp;gt; new hardware to be designed with a changed instruction set,&lt;br/&gt;&amp;gt; it is similarly taking a long time to change Bitcoin to&lt;br/&gt;&amp;gt; support changed feature sets.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, we should really consider the Bitcoin consensus layer,&lt;br/&gt;&amp;gt; and its SCRIPT, as hardware that other Bitcoin software and&lt;br/&gt;&amp;gt; layers run on top of.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This thus opens up the thought of using techniques that were&lt;br/&gt;&amp;gt; useful in hardware design.&lt;br/&gt;&amp;gt; Such as microcode: a translation layer from &amp;#34;old&amp;#34; instruction&lt;br/&gt;&amp;gt; sets to &amp;#34;new&amp;#34; instruction sets, with the ability to modify this&lt;br/&gt;&amp;gt; mapping.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Microcode For Bitcoin SCRIPT&lt;br/&gt;&amp;gt; ============================&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I propose:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Define a generic, low-level language (the &amp;#34;RISC language&amp;#34;).&lt;br/&gt;&amp;gt; * Define a mapping from a specific, high-level language to&lt;br/&gt;&amp;gt;   the above language (the microcode).&lt;br/&gt;&amp;gt; * Allow users to sacrifice Bitcoins to define a new microcode.&lt;br/&gt;&amp;gt; * Have users indicate the microcode they wish to use to&lt;br/&gt;&amp;gt;   interpret their Tapscripts.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As a concrete example, let us consider the current Bitcoin&lt;br/&gt;&amp;gt; SCRIPT as the &amp;#34;CISC&amp;#34; language.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We can then support a &amp;#34;RISC&amp;#34; language that is composed of&lt;br/&gt;&amp;gt; general instructions, such as arithmetic, SECP256K1 scalar&lt;br/&gt;&amp;gt; and point math, bytevector concatenation, sha256 midstates,&lt;br/&gt;&amp;gt; bytevector bit manipulation, transaction introspection, and&lt;br/&gt;&amp;gt; so on.&lt;br/&gt;&amp;gt; This &amp;#34;RISC&amp;#34; language would also be stack-based.&lt;br/&gt;&amp;gt; As the &amp;#34;RISC&amp;#34; language would have more possible opcodes,&lt;br/&gt;&amp;gt; we may need to use 2-byte opcodes for the &amp;#34;RISC&amp;#34; language&lt;br/&gt;&amp;gt; instead of 1-byte opcodes.&lt;br/&gt;&amp;gt; Let us call this &amp;#34;RISC&amp;#34; language the micro-opcode language.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then, the &amp;#34;microcode&amp;#34; simply maps the existing Bitcoin&lt;br/&gt;&amp;gt; SCRIPT `OP_` codes to one or more `UOP_` micro-opcodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An interesting fact is that stack-based languages have&lt;br/&gt;&amp;gt; automatic referential transparency; that is, if I define&lt;br/&gt;&amp;gt; some new word in a stack-based language and use that word,&lt;br/&gt;&amp;gt; I can replace verbatim the text of the new word in that&lt;br/&gt;&amp;gt; place without issue.&lt;br/&gt;&amp;gt; Compare this to a language like C, where macro authors&lt;br/&gt;&amp;gt; have to be very careful about inadvertent variable&lt;br/&gt;&amp;gt; capture, wrapping `do { ... } while(0)` to avoid problems&lt;br/&gt;&amp;gt; with `if` and multiple statements, multiple execution, and&lt;br/&gt;&amp;gt; so on.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, a sequence of `OP_` opcodes can be mapped to a&lt;br/&gt;&amp;gt; sequence of equivalent `UOP_` micro-opcodes without&lt;br/&gt;&amp;gt; changing the interpretation of the source language, an&lt;br/&gt;&amp;gt; important property when considering such a &amp;#34;compiled&amp;#34;&lt;br/&gt;&amp;gt; language.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We start with a default microcode which is equivalent&lt;br/&gt;&amp;gt; to the current Bitcoin language.&lt;br/&gt;&amp;gt; When users want to define a new microcode to implement&lt;br/&gt;&amp;gt; new `OP_` codes or change existing `OP_` codes, they&lt;br/&gt;&amp;gt; can refer to a &amp;#34;base&amp;#34; microcode, and only have to&lt;br/&gt;&amp;gt; provide the new mappings.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A microcode is fundamentally just a mapping from an&lt;br/&gt;&amp;gt; `OP_` code to a variable-length sequence of `UOP_`&lt;br/&gt;&amp;gt; micro-opcodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ```Haskell&lt;br/&gt;&amp;gt; import Data.Map&lt;br/&gt;&amp;gt; -- type Opcode&lt;br/&gt;&amp;gt; -- type UOpcode&lt;br/&gt;&amp;gt; newtype Microcode = Microcode (Map.Map Opcode [UOpcode])&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Semantically, the SCRIPT interpreter processes `UOP_`&lt;br/&gt;&amp;gt; micro-opcodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ```Haskell&lt;br/&gt;&amp;gt; -- instance Monad Interpreter -- can `fail`.&lt;br/&gt;&amp;gt; interpreter :: Transaction -&amp;gt; TxInput -&amp;gt; [UOpcode] -&amp;gt; Interpreter ()&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Example&lt;br/&gt;&amp;gt; -------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Suppose a user wants to re-enable `OP_CAT`, and nothing&lt;br/&gt;&amp;gt; else.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That user creates a microcode, referring to the current&lt;br/&gt;&amp;gt; default Bitcoin SCRIPT microcode as the &amp;#34;base&amp;#34;.&lt;br/&gt;&amp;gt; The base microcode defines `OP_CAT` as equal to the&lt;br/&gt;&amp;gt; sequence `UOP_FAIL` i.e. a micro-opcode that always fails.&lt;br/&gt;&amp;gt; However, the new microcode will instead redefine the&lt;br/&gt;&amp;gt; `OP_CAT` as the micro-opcode sequence `UOP_CAT`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Microcodes then have a standard way of being represented&lt;br/&gt;&amp;gt; as a byte sequence.&lt;br/&gt;&amp;gt; The user serializes their new microcode as a byte&lt;br/&gt;&amp;gt; sequence.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then, the user creates a new transaction where one of&lt;br/&gt;&amp;gt; the outputs contains, say, 1.0 Bitcoins (exact required&lt;br/&gt;&amp;gt; value TBD), and has the `scriptPubKey` of&lt;br/&gt;&amp;gt; `OP_TRUE OP_RETURN &amp;lt;serialized_microcode&amp;gt;`.&lt;br/&gt;&amp;gt; This output is a &amp;#34;microcode introduction output&amp;#34;, which&lt;br/&gt;&amp;gt; is provably unspendable, thus burning the Bitcoins.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (It need not be a single user, multiple users can&lt;br/&gt;&amp;gt; coordinate by signing a single transaction that commits&lt;br/&gt;&amp;gt; their funds to the microcode introduction.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Once the above transaction has been deeply confirmed,&lt;br/&gt;&amp;gt; the user can then take the hash of the microcode&lt;br/&gt;&amp;gt; serialization.&lt;br/&gt;&amp;gt; Then the user can use a SCRIPT with `OP_CAT` enabled,&lt;br/&gt;&amp;gt; by using a Tapscript with, say, version `0xce`, and&lt;br/&gt;&amp;gt; with the SCRIPT having the microcode hash as its first&lt;br/&gt;&amp;gt; bytes, followed by the `OP_` codes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Fullnodes will then process recognized microcode&lt;br/&gt;&amp;gt; introduction outputs and store mappings from their&lt;br/&gt;&amp;gt; hashes to the microcodes in a new microcodes index.&lt;br/&gt;&amp;gt; Fullnodes can then process version-`0xce` Tapscripts&lt;br/&gt;&amp;gt; by checking if the microcodes index has the indicated&lt;br/&gt;&amp;gt; microcode hash.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Semantically, fullnodes take the SCRIPT, and for each&lt;br/&gt;&amp;gt; `OP_` code in it, expands it to a sequence of `UOP_`&lt;br/&gt;&amp;gt; micro-opcodes, then concatenates each such sequence.&lt;br/&gt;&amp;gt; Then, the SCRIPT interpreter operates over a sequence&lt;br/&gt;&amp;gt; of `UOP_` micro-opcodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Optimizing Microcodes&lt;br/&gt;&amp;gt; ---------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Suppose there is some new microcode that users have&lt;br/&gt;&amp;gt; published onchain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We want to be able to execute the defined microcode&lt;br/&gt;&amp;gt; faster than expanding an `OP_`-code SCRIPT to a&lt;br/&gt;&amp;gt; `UOP_`-code SCRIPT and having an interpreter loop&lt;br/&gt;&amp;gt; over the `UOP_`-code SCRIPT.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We can use LLVM.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; WARNING: LLVM might not be appropriate for&lt;br/&gt;&amp;gt; network-facing security-sensitive applications.&lt;br/&gt;&amp;gt; In particular, LLVM bugs. especially nondeterminism&lt;br/&gt;&amp;gt; bugs, can lead to consensus divergence and disastrous&lt;br/&gt;&amp;gt; chainsplits!&lt;br/&gt;&amp;gt; On the other hand, LLVM bugs are compiler bugs and&lt;br/&gt;&amp;gt; the same bugs can hit the static compiler `cc`, too,&lt;br/&gt;&amp;gt; since the same LLVM code runs in both JIT and static&lt;br/&gt;&amp;gt; compilation, so this risk already exists for Bitcoin.&lt;br/&gt;&amp;gt; (i.e. we already rely on LLVM not being buggy enough&lt;br/&gt;&amp;gt; to trigger Bitcoin consensus divergence, else we would&lt;br/&gt;&amp;gt; have written Bitcoin Core SCRIPT interpreter in&lt;br/&gt;&amp;gt; assembly.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Each `UOP_`-code has an equivalent tree of LLVM code.&lt;br/&gt;&amp;gt; For each `Opcode` in the microcode, we take its&lt;br/&gt;&amp;gt; sequence of `UOpcode`s and expand them to this tree,&lt;br/&gt;&amp;gt; concatenating the equivalent trees for each `UOpcode`&lt;br/&gt;&amp;gt; in the sequence.&lt;br/&gt;&amp;gt; Then we ask LLVM to JIT-compile this code to a new&lt;br/&gt;&amp;gt; function, running LLVM-provided optimizers.&lt;br/&gt;&amp;gt; Then we put a pointer to this compiled function to a&lt;br/&gt;&amp;gt; 256-long array of functions, where the array index is&lt;br/&gt;&amp;gt; the `OP_` code.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The SCRIPT interpreter then simply iterates over the&lt;br/&gt;&amp;gt; `OP_` code SCRIPT and calls each of the JIT-compiled&lt;br/&gt;&amp;gt; functions.&lt;br/&gt;&amp;gt; This reduces much of the overhead of the `UOP_` layer&lt;br/&gt;&amp;gt; and makes it approach the current performance of the&lt;br/&gt;&amp;gt; existing `OP_` interpreter.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the default Bitcoin SCRIPT, the opcodes array&lt;br/&gt;&amp;gt; contains pointers to statically-compiled functions.&lt;br/&gt;&amp;gt; A microcode that is based on the default Bitcoin&lt;br/&gt;&amp;gt; SCRIPT copies this opcodes array, then overwrites&lt;br/&gt;&amp;gt; the entries.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Future versions of Bitcoin Core can &amp;#34;bless&amp;#34;&lt;br/&gt;&amp;gt; particular microcodes by providing statically-compiled&lt;br/&gt;&amp;gt; functions for those microcodes.&lt;br/&gt;&amp;gt; This leads to even better performance (there is&lt;br/&gt;&amp;gt; no need to recompile ancient onchain microcodes each&lt;br/&gt;&amp;gt; time Bitcoin Core starts) without any consensus&lt;br/&gt;&amp;gt; divergence.&lt;br/&gt;&amp;gt; It is a pure optimization and does not imply a&lt;br/&gt;&amp;gt; tightening of rules, and is thus not a softfork.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (To reduce the chance of network faults being used&lt;br/&gt;&amp;gt; to poke into `W|X` memory (since `W|X` memory is&lt;br/&gt;&amp;gt; needed in order to actually JIT compile) we can&lt;br/&gt;&amp;gt; isolate the SCRIPT interpreter into its own process&lt;br/&gt;&amp;gt; separate from the network-facing code.&lt;br/&gt;&amp;gt; This does imply additional overhead in serializing&lt;br/&gt;&amp;gt; transactions we want to ask the SCRIPT interpreter&lt;br/&gt;&amp;gt; to validate.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Comparison To Jets&lt;br/&gt;&amp;gt; ------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This technique allows users to define &amp;#34;jets&amp;#34;, i.e.&lt;br/&gt;&amp;gt; sequences of low-level general operations that users&lt;br/&gt;&amp;gt; have determined are common enough they should just&lt;br/&gt;&amp;gt; be implemented as faster code that is executed&lt;br/&gt;&amp;gt; directly by the underlying hardware processor rather&lt;br/&gt;&amp;gt; than via a software interpreter.&lt;br/&gt;&amp;gt; Basically, each redefined `OP_` code is a jet of a&lt;br/&gt;&amp;gt; sequence of `UOP_` micro-opcodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We implement this by dynamically JIT-compiling the&lt;br/&gt;&amp;gt; proposed jets, as described above.&lt;br/&gt;&amp;gt; SCRIPTs using jetted code remain smaller, as the&lt;br/&gt;&amp;gt; jet definition is done in a previous transaction and&lt;br/&gt;&amp;gt; does not require copy-pasta (Do Not Repeat Yourself!).&lt;br/&gt;&amp;gt; At the same time, jettification is not tied to&lt;br/&gt;&amp;gt; developers, thus removing the need to keep softforking&lt;br/&gt;&amp;gt; new features --- we only need define a sufficiently&lt;br/&gt;&amp;gt; general language and then we can implement pretty much&lt;br/&gt;&amp;gt; anything worth implementing (and a bunch of other things&lt;br/&gt;&amp;gt; that should not be implemented, but hey, users gonna&lt;br/&gt;&amp;gt; use...).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bugs in existing microcodes can be fixed by basing a&lt;br/&gt;&amp;gt; new microcode from the existing microcode, and&lt;br/&gt;&amp;gt; redefining the buggy implementation.&lt;br/&gt;&amp;gt; Existing Tapscripts need to be re-spent to point to&lt;br/&gt;&amp;gt; the new bugfixed microcode, but if you used the&lt;br/&gt;&amp;gt; point-spend branch as an N-of-N of all participants&lt;br/&gt;&amp;gt; you have an upgrade mechanism for free.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In order to ensure that the JIT-compilation of new&lt;br/&gt;&amp;gt; microcodes is not triggered trivially, we require&lt;br/&gt;&amp;gt; that users petitioning for the jettification of some&lt;br/&gt;&amp;gt; operations (i.e. introducing a new microcode) must&lt;br/&gt;&amp;gt; sacrifice Bitcoins.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Burning Bitcoins is better than increasing the weight&lt;br/&gt;&amp;gt; of microcode introduction outputs; all fullnodes are&lt;br/&gt;&amp;gt; affected by the need to JIT-compile the new microcode,&lt;br/&gt;&amp;gt; so they benefit from the reduction in supply, thus&lt;br/&gt;&amp;gt; getting compensated for the work of JIT-compiling the&lt;br/&gt;&amp;gt; new microcode.&lt;br/&gt;&amp;gt; Ohter mechanisms for making microcode introduction&lt;br/&gt;&amp;gt; outputs expensive are also possible.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Nothing really requires that we use a stack-based&lt;br/&gt;&amp;gt; language for this; any sufficiently FP language&lt;br/&gt;&amp;gt; should allow referential transparency.&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/20220322/402ad6eb/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220322/402ad6eb/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:06:32Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2u7zjyqqk3cydtyzjp5mzgk5p5cvrgjg440ufjg3jpswwfysamsszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59608zllr</id>
    
      <title type="html">📅 Original date posted:2022-03-12 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2u7zjyqqk3cydtyzjp5mzgk5p5cvrgjg440ufjg3jpswwfysamsszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59608zllr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxe5x65206kfs5uv33jhp8j49lhjck300y0qn32xquzslrj2u8gqgaz2v4p&#39;&gt;nevent1q…2v4p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-12&lt;br/&gt;📝 Original message:On Fri, Mar 11, 2022 at 9:03 AM Jorge Timón &amp;lt;jtimon at jtimon.cc&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A major contender to the Speedy Trial design at the time was to mandate&lt;br/&gt;&amp;gt;&amp;gt; eventual forced signalling, championed by luke-jr.  It turns out that, at&lt;br/&gt;&amp;gt;&amp;gt; the time of that proposal, a large amount of hash power simply did not have&lt;br/&gt;&amp;gt;&amp;gt; the firmware required to support signalling.  That activation proposal&lt;br/&gt;&amp;gt;&amp;gt; never got broad consensus, and rightly so, because in retrospect we see&lt;br/&gt;&amp;gt;&amp;gt; that the design might have risked knocking a significant fraction of mining&lt;br/&gt;&amp;gt;&amp;gt; power offline if it had been deployed.  Imagine if the firmware couldn&amp;#39;t be&lt;br/&gt;&amp;gt;&amp;gt; quickly updated or imagine if the problem had been hardware related.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Yes, I like this solution too, with a little caveat: an easy mechanism&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for users to actively oppose a proposal.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Luke alao talked about this.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If users oppose, they should use activation as a trigger to fork out of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the network by invalidating the block that produces activation.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The bad scenario here is that miners want to deploy something but users&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; don&amp;#39;t want to.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;#34;But that may lead to a fork&amp;#34;. Yeah, I know.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I hope imagining a scenario in which developers propose something that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; most miners accept but some users reject is not taboo.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This topic is not taboo.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are a couple of ways of opting out of taproot.  Firstly, users can&lt;br/&gt;&amp;gt;&amp;gt; just not use taproot.  Secondly, users can choose to not enforce taproot&lt;br/&gt;&amp;gt;&amp;gt; either by running an older version of Bitcoin Core or otherwise forking the&lt;br/&gt;&amp;gt;&amp;gt; source code.  Thirdly, if some users insist on a chain where taproot is&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;not activated&amp;#34;, they can always softk-fork in their own rule that&lt;br/&gt;&amp;gt;&amp;gt; disallows the version bits that complete the Speedy Trial activation&lt;br/&gt;&amp;gt;&amp;gt; sequence, or alternatively soft-fork in a rule to make spending from (or&lt;br/&gt;&amp;gt;&amp;gt; to) taproot addresses illegal.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Since it&amp;#39;s about activation in general and not about taproot specifically,&lt;br/&gt;&amp;gt; your third point is the one that applies.&lt;br/&gt;&amp;gt; Users could have coordinated to have &amp;#34;activation x&amp;#34; never activated in&lt;br/&gt;&amp;gt; their chains if they simply make a rule that activating a given proposal&lt;br/&gt;&amp;gt; (with bip8) is forbidden in their chain.&lt;br/&gt;&amp;gt; But coordination requires time.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;A mechanism of soft-forking against activation exists.  What more do you&lt;br/&gt;want? Are we supposed to write the code on behalf of this hypothetical&lt;br/&gt;group of users who may or may not exist for them just so that they can have&lt;br/&gt;a node that remains stalled on Speedy Trial lockin?  That simply isn&amp;#39;t&lt;br/&gt;reasonable, but if you think it is, I invite you to create such a fork.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Please, try to imagine an example for an activation that you wouldn&amp;#39;t like&lt;br/&gt;&amp;gt; yourself. Imagine it gets proposed and you, as a user, want to resist it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;If I believe I&amp;#39;m in the economic majority then I&amp;#39;ll just refuse to upgrade&lt;br/&gt;my node, which was option 2. I don&amp;#39;t know why you dismissed it.&lt;br/&gt;&lt;br/&gt;Not much can prevent a miner cartel from enforcing rules that users don&amp;#39;t&lt;br/&gt;want other than hard forking a replacement POW.  There is no effective&lt;br/&gt;difference between some developers releasing a malicious soft-fork of&lt;br/&gt;Bitcoin and the miners releasing a malicious version themselves.  And when&lt;br/&gt;the miner cartel forms, they aren&amp;#39;t necessarily going to be polite enough&lt;br/&gt;to give a transparent signal of their new rules.  However, without the&lt;br/&gt;economic majority enforcing their set of rules, the cartel continuously&lt;br/&gt;risks falling apart from the temptation of transaction fees of the censored&lt;br/&gt;transactions.&lt;br/&gt;&lt;br/&gt;On the other hand, If I find out I&amp;#39;m in the economic minority then I have&lt;br/&gt;little choice but to either accept the existence of the new rules or sell&lt;br/&gt;my Bitcoin.  Look, you cannot have the perfect system of money all by your&lt;br/&gt;lonesome self.  Money doesn&amp;#39;t have economic value if no one else wants to&lt;br/&gt;trade you for it.  Just ask that poor user who YOLO&amp;#39;d his own taproot&lt;br/&gt;activation in advance all by themselves.  I&amp;#39;m sure they think they&amp;#39;ve got&lt;br/&gt;just the perfect money system, with taproot early and everything.  But now&lt;br/&gt;their node is stuck at block 692261&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://b10c.me/blog/007-spending-p2tr-pre-activation/&amp;gt&#34;&gt;https://b10c.me/blog/007-spending-p2tr-pre-activation/&amp;gt&lt;/a&gt;; and hasn&amp;#39;t made&lt;br/&gt;progress since.  No doubt they are hunkered down for the long term,&lt;br/&gt;absolutely committed to their fork and just waiting for the rest of the&lt;br/&gt;world to come around to how much better their version of Bitcoin is than&lt;br/&gt;the rest of us.&lt;br/&gt;&lt;br/&gt;Even though you&amp;#39;ve dismissed it, one of the considerations of taproot was&lt;br/&gt;that it is opt-in for users to use the functionality.  Future soft-forks&lt;br/&gt;ought to have the same considerations to the extent possible.&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/20220312/11e3c7a0/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220312/11e3c7a0/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:06:03Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsd8qg9tdsf5ks4fhkar392me8ksc2uk4gls2rhlghszqvtskuuwrgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tnjvrf</id>
    
      <title type="html">📅 Original date posted:2022-03-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsd8qg9tdsf5ks4fhkar392me8ksc2uk4gls2rhlghszqvtskuuwrgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tnjvrf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw9jxusz7qq4ej8jn5ptflt0wxpkx5qd6rzaz4hp5r97026d8yaag6e2ufj&#39;&gt;nevent1q…2ufj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-11&lt;br/&gt;📝 Original message:On Fri, Mar 11, 2022 at 7:18 AM Jorge Timón &amp;lt;jtimon at jtimon.cc&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I talked about this. But the &amp;#34;no-divergent-rules&amp;#34; faction doesn&amp;#39;t like it,&lt;br/&gt;&amp;gt; so we can pretend we have listened to this &amp;#34;faction&amp;#34; and addressed all its&lt;br/&gt;&amp;gt; concerns, I guess.&lt;br/&gt;&amp;gt; Or perhaps it&amp;#39;s just &amp;#34;prosectution complex&amp;#34;, but, hey, what do I know&lt;br/&gt;&amp;gt; about psychology?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Your accusations of bad faith on the part of myself and pretty much&lt;br/&gt;everyone else makes me disinclined to continue this discussion with you.&lt;br/&gt;I&amp;#39;ll reply, but if you want me to continue beyond this, then you need to&lt;br/&gt;knock it off with the accusations.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; A major contender to the Speedy Trial design at the time was to mandate&lt;br/&gt;&amp;gt;&amp;gt; eventual forced signalling, championed by luke-jr.  It turns out that, at&lt;br/&gt;&amp;gt;&amp;gt; the time of that proposal, a large amount of hash power simply did not have&lt;br/&gt;&amp;gt;&amp;gt; the firmware required to support signalling.  That activation proposal&lt;br/&gt;&amp;gt;&amp;gt; never got broad consensus, and rightly so, because in retrospect we see&lt;br/&gt;&amp;gt;&amp;gt; that the design might have risked knocking a significant fraction of mining&lt;br/&gt;&amp;gt;&amp;gt; power offline if it had been deployed.  Imagine if the firmware couldn&amp;#39;t be&lt;br/&gt;&amp;gt;&amp;gt; quickly updated or imagine if the problem had been hardware related.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, I like this solution too, with a little caveat: an easy mechanism for&lt;br/&gt;&amp;gt; users to actively oppose a proposal.&lt;br/&gt;&amp;gt; Luke alao talked about this.&lt;br/&gt;&amp;gt; If users oppose, they should use activation as a trigger to fork out of&lt;br/&gt;&amp;gt; the network by invalidating the block that produces activation.&lt;br/&gt;&amp;gt; The bad scenario here is that miners want to deploy something but users&lt;br/&gt;&amp;gt; don&amp;#39;t want to.&lt;br/&gt;&amp;gt; &amp;#34;But that may lead to a fork&amp;#34;. Yeah, I know.&lt;br/&gt;&amp;gt; I hope imagining a scenario in which developers propose something that&lt;br/&gt;&amp;gt; most miners accept but some users reject is not taboo.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;This topic is not taboo.&lt;br/&gt;&lt;br/&gt;There are a couple of ways of opting out of taproot.  Firstly, users can&lt;br/&gt;just not use taproot.  Secondly, users can choose to not enforce taproot&lt;br/&gt;either by running an older version of Bitcoin Core or otherwise forking the&lt;br/&gt;source code.  Thirdly, if some users insist on a chain where taproot is&lt;br/&gt;&amp;#34;not activated&amp;#34;, they can always softk-fork in their own rule that&lt;br/&gt;disallows the version bits that complete the Speedy Trial activation&lt;br/&gt;sequence, or alternatively soft-fork in a rule to make spending from (or&lt;br/&gt;to) taproot addresses illegal.&lt;br/&gt;&lt;br/&gt;As for mark, he wasn&amp;#39;t talking about activation, but quantum computing&lt;br/&gt;&amp;gt; concerns. Perhaps those have been &amp;#34;addressed&amp;#34;?&lt;br/&gt;&amp;gt; I just don&amp;#39;t know where.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Quantum concerns were discussed.  Working from memory, the arguments were&lt;br/&gt;(1) If you are worried about your funds not being secured by taproot, then&lt;br/&gt;don&amp;#39;t use taproot addresses, and (2) If you are worried about everyone&lt;br/&gt;else&amp;#39;s funds not being quantum secure by other people choosing to use&lt;br/&gt;taproot, well it is already too late because over 5M BTC is currently&lt;br/&gt;quantum insecure due to pubkey reuse &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://nitter.net/pwuille/status/1108091924404027392&amp;gt&#34;&gt;https://nitter.net/pwuille/status/1108091924404027392&amp;gt&lt;/a&gt;;.  I think it is&lt;br/&gt;unlikely that a quantum breakthrough will sneak up on us without time to&lt;br/&gt;address the issue and, at the very least, warn people to move their funds&lt;br/&gt;off of taproot and other reused addresses, if not forking in some quantum&lt;br/&gt;secure alternative.  A recent paper &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://www.sussex.ac.uk/physics/iqt/wp-content/uploads/2022/01/Webber-2022.pdf&amp;gt&#34;&gt;https://www.sussex.ac.uk/physics/iqt/wp-content/uploads/2022/01/Webber-2022.pdf&amp;gt&lt;/a&gt;;&lt;br/&gt;suggest that millions physical qubits will be needed to break EC in a day&lt;br/&gt;with current error correction technology.  But even if taproot were to be&lt;br/&gt;very suddenly banned, there is still a small possibility for recovery&lt;br/&gt;because one can prove ownership of HD pubkeys by providing a zero-knowledge&lt;br/&gt;proof of the chaincode used to derive them.&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/20220311/40b6c9ad/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220311/40b6c9ad/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:06:02Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqspz6683qhfrtjaesqa4dzdf4vyrxagyty6tynj0uawlu4m7cdggsszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596cg8hna</id>
    
      <title type="html">📅 Original date posted:2022-03-10 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqspz6683qhfrtjaesqa4dzdf4vyrxagyty6tynj0uawlu4m7cdggsszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596cg8hna" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2tt678yz8cgczaukgz09znvkpw9fdf9zy62ptanltxcgx4n67u3cvc3t4f&#39;&gt;nevent1q…3t4f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-10&lt;br/&gt;📝 Original message:On Thu., Mar. 10, 2022, 08:04 Jorge Timón 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;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You&amp;#39;re right, we shouldn&amp;#39;t get personal. We shouldn&amp;#39;t ignore feedback from&lt;br/&gt;&amp;gt; me, mark friedenbach or luke just because of who it comes from.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;For goodness sake Jorge, enough with the persecution complex.&lt;br/&gt;&lt;br/&gt;As the person who initially proposed the Speedy Trial deployment design, I&lt;br/&gt;can say it was designed to take in account those concerns raised by luke-jr&lt;br/&gt;and the &amp;#34;no-miner-veto&amp;#34; faction.  I also listened to the&lt;br/&gt;&amp;#34;devs-do-not-decide&amp;#34; faction and the &amp;#34;no-divegent-consensus-rules&amp;#34; faction&lt;br/&gt;and their concerns.&lt;br/&gt;&lt;br/&gt;The &amp;#34;no-miner-veto&amp;#34; concerns are, to an extent, addressed by the short&lt;br/&gt;timeline of Speedy Trial.  No more waiting 2 years on the miners dragging&lt;br/&gt;their feet.  If ST fails to active then we are back where we started with&lt;br/&gt;at most a few weeks lost.  And those weeks aren&amp;#39;t really lost if they would&lt;br/&gt;have been wasted away anyways trying to find broad consensus on another&lt;br/&gt;deployment mechanism.&lt;br/&gt;&lt;br/&gt;I get that you don&amp;#39;t like the design of Speedy Trial.  You may even object&lt;br/&gt;that it fails to really address your concerns by leaving open how to follow&lt;br/&gt;up a failed Speedy Trial deployment.  But regardless of how you feel, I&lt;br/&gt;believe I did meaningfully address the those miner-veto concerns and other&lt;br/&gt;people agree with me.&lt;br/&gt;&lt;br/&gt;If you are so concerned about listening to legitimate criticism, maybe you&lt;br/&gt;can design a new deployment mechanism that addresses the concerns of the&lt;br/&gt;&amp;#34;devs-do-not-decide&amp;#34; faction and the &amp;#34;no-divegent-consensus-rules&amp;#34;&lt;br/&gt;faction.  Or do you feel that their concerns are illegitimate?  Maybe, by&lt;br/&gt;sheer coincidence, all people you disagree with have illegitimate concerns&lt;br/&gt;while only your concerns are legitimate.&lt;br/&gt;&lt;br/&gt;A major contender to the Speedy Trial design at the time was to mandate&lt;br/&gt;eventual forced signalling, championed by luke-jr.  It turns out that, at&lt;br/&gt;the time of that proposal, a large amount of hash power simply did not have&lt;br/&gt;the firmware required to support signalling.  That activation proposal&lt;br/&gt;never got broad consensus, and rightly so, because in retrospect we see&lt;br/&gt;that the design might have risked knocking a significant fraction of mining&lt;br/&gt;power offline if it had been deployed.  Imagine if the firmware couldn&amp;#39;t be&lt;br/&gt;quickly updated or imagine if the problem had been hardware related.&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/20220310/3b9bd8b8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220310/3b9bd8b8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:06:00Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstug7yzngv74apcvulh7lxd5rlndf85xvv25jetgmyt7g95sgl60gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59658z7ma</id>
    
      <title type="html">📅 Original date posted:2022-03-05 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstug7yzngv74apcvulh7lxd5rlndf85xvv25jetgmyt7g95sgl60gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59658z7ma" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsve5eyuvge7xywsslc8kprl9t6ypkn9jn6g23jrs40p09kxg7d7eq8lx0yn&#39;&gt;nevent1q…x0yn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-05&lt;br/&gt;📝 Original message:On Sat, Mar 5, 2022 at 8:41 AM Jeremy Rubin 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; It seems like a decent concept for exploration.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; AJ, I&amp;#39;d be interested to know what you&amp;#39;ve been able to build with Chia&lt;br/&gt;&amp;gt; Lisp and what your experience has been... e.g. what does the Lightning&lt;br/&gt;&amp;gt; Network look like on Chia?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One question that I have had is that it seems like to me that neither&lt;br/&gt;&amp;gt; simplicity nor chia lisp would be particularly suited to a ZK prover...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Not that I necessarily disagree with this statement, but I can say that I&lt;br/&gt;have experimented with compiling Simplicity to Boolean circuits.  It was a&lt;br/&gt;while ago, but I think the result of compiling my SHA256 program was within&lt;br/&gt;an order of magnitude of the hand made SHA256 circuit for bulletproofs.&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/20220305/d223d490/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220305/d223d490/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:05:14Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2g5t44592sp35enqkczrm40y8tvnq3p7crwxpn0zvq3zln9yneuszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968eh57x</id>
    
      <title type="html">📅 Original date posted:2022-03-06 📝 Original message:The ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2g5t44592sp35enqkczrm40y8tvnq3p7crwxpn0zvq3zln9yneuszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968eh57x" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs93c3nyukzhtn6pk6584976z6nkz5de6jrw9dlaa7gvas4w0srlngfvg6ea&#39;&gt;nevent1q…g6ea&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-03-06&lt;br/&gt;📝 Original message:The circuit generated from Simplicity was larger than the hand made one.&lt;br/&gt;&lt;br/&gt;On Sat, Mar 5, 2022 at 6:20 PM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Russell,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Sat, Mar 5, 2022 at 8:41 AM Jeremy Rubin via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; It seems like a decent concept for exploration.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; AJ, I&amp;#39;d be interested to know what you&amp;#39;ve been able to build with Chia&lt;br/&gt;&amp;gt; Lisp and what your experience has been... e.g. what does the Lightning&lt;br/&gt;&amp;gt; Network look like on Chia?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; One question that I have had is that it seems like to me that neither&lt;br/&gt;&amp;gt; simplicity nor chia lisp would be particularly suited to a ZK prover...&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Not that I necessarily disagree with this statement, but I can say that&lt;br/&gt;&amp;gt; I have experimented with compiling Simplicity to Boolean circuits.  It was&lt;br/&gt;&amp;gt; a while ago, but I think the result of compiling my SHA256 program was&lt;br/&gt;&amp;gt; within an order of magnitude of the hand made SHA256 circuit for&lt;br/&gt;&amp;gt; bulletproofs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;Within&amp;#34; can mean &amp;#34;larger&amp;#34; or &amp;#34;smaller&amp;#34; in this context, which was it?&lt;br/&gt;&amp;gt; From what I understand, compilers for ZK-provable circuits are still not&lt;br/&gt;&amp;gt; as effective as humans, so I would assume &amp;#34;larger&amp;#34;, but I would be much&lt;br/&gt;&amp;gt; interested if it is &amp;#34;smaller&amp;#34;!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220305/b803a6b5/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220305/b803a6b5/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:05:14Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9pjrnyufcct5n7szx8wcstq7urk6awu26gy67mzqja4xl4d4gq2qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59634a8rf</id>
    
      <title type="html">📅 Original date posted:2022-02-15 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9pjrnyufcct5n7szx8wcstq7urk6awu26gy67mzqja4xl4d4gq2qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j59634a8rf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswqw5hggze4c5danycyazeqhvmthfx0vul20m9eg8684n4hhxu2hqvp460v&#39;&gt;nevent1q…460v&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-15&lt;br/&gt;📝 Original message:&amp;gt; &amp;gt;&amp;gt; 2. (from Suhas) &amp;#34;once a valid transaction is created, it should not&lt;br/&gt;&amp;gt; become invalid later on unless the inputs are double-spent.&amp;#34;&lt;br/&gt;&amp;gt; &amp;gt; This doesn&amp;#39;t seem like a huge concern to me&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I agree that this shouldn&amp;#39;t be a concern. In fact, I&amp;#39;ve asked numerous&lt;br/&gt;&amp;gt; people in numerous places what practical downside there is to transactions&lt;br/&gt;&amp;gt; that become invalid, and I&amp;#39;ve heard basically radio silence other than one&lt;br/&gt;&amp;gt; off hand remark by satoshi at the dawn of time which didn&amp;#39;t seem to me to&lt;br/&gt;&amp;gt; have good reasoning. I haven&amp;#39;t seen any downside whatsoever of transactions&lt;br/&gt;&amp;gt; that can become invalid for anyone waiting the standard 6 confirmations -&lt;br/&gt;&amp;gt; the reorg risks only exists for people not waiting for standard&lt;br/&gt;&amp;gt; finalization. So I don&amp;#39;t think we should consider that aspect of a&lt;br/&gt;&amp;gt; sponsorship transaction that can only be mined with the transaction it&lt;br/&gt;&amp;gt; sponsors to be a problem unless a specific practical problem case can be&lt;br/&gt;&amp;gt; identified. Even if a significant such case was identified, an easy&lt;br/&gt;&amp;gt; solution would be to simply allow sponsorship transactions to be mined on&lt;br/&gt;&amp;gt; or after the sponsored transaction is mined.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The downside is that in a 6 block reorg any transaction that is moved past&lt;br/&gt;its expiration date becomes invalid and all its descendants become invalid&lt;br/&gt;too.&lt;br/&gt;&lt;br/&gt;The current consensus threshold for transactions to become invalid is a 100&lt;br/&gt;block reorg, and I see no reason to change this threshold.  I promise to&lt;br/&gt;personally build a wallet that always creates transactions on the verge of&lt;br/&gt;becoming invalid should anyone ever implement a feature that violates this&lt;br/&gt;tx validity principle.&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/20220215/12596d01/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220215/12596d01/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:04:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszckh64dv7rygt7ehthd02f0r8unrk3nxrc7wfuzkzaddn8wvld2qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ct7ha5</id>
    
      <title type="html">📅 Original date posted:2022-02-16 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszckh64dv7rygt7ehthd02f0r8unrk3nxrc7wfuzkzaddn8wvld2qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ct7ha5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2pgpxe2cav8sdcdjsgjx9lxvfnjwmaz6k8c6sxnzvampauz5wh0qxxhc0k&#39;&gt;nevent1q…hc0k&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-16&lt;br/&gt;📝 Original message:On Tue, Feb 15, 2022 at 10:45 PM Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Jeremy Rubin &amp;lt;jeremy.l.rubin at gmail.com&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; Hi Rusty,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Please see my post in the other email thread&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019886.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019886.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The differences in this regard are several, and worth understanding&lt;br/&gt;&amp;gt; beyond&lt;br/&gt;&amp;gt; &amp;gt; &amp;#34;you can iterate CTV&amp;#34;. I&amp;#39;d note a few clear examples for showing that&lt;br/&gt;&amp;gt; &amp;#34;CTV&lt;br/&gt;&amp;gt; &amp;gt; is just as powerful&amp;#34; is not a valid claim:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1) CTV requires the contract to be fully enumerated and is non-recursive.&lt;br/&gt;&amp;gt; &amp;gt; For example, a simple contract that allows n participants to take an&lt;br/&gt;&amp;gt; action&lt;br/&gt;&amp;gt; &amp;gt; in any order requires factorially many pre-computations, not just linear&lt;br/&gt;&amp;gt; or&lt;br/&gt;&amp;gt; &amp;gt; constant. For reference, 24! is about 2**80. Whereas for a more&lt;br/&gt;&amp;gt; &amp;gt; interpretive covenant -- which is often introduced with the features for&lt;br/&gt;&amp;gt; &amp;gt; recursion -- you can compute the programs for these addresses in constant&lt;br/&gt;&amp;gt; &amp;gt; time.&lt;br/&gt;&amp;gt; &amp;gt; 2) CTV requires the contract to be fully enumerated: For example, a&lt;br/&gt;&amp;gt; simple&lt;br/&gt;&amp;gt; &amp;gt; contract one could write is &amp;#34;Output 0 script matches Output 1&amp;#34;, and the&lt;br/&gt;&amp;gt; set&lt;br/&gt;&amp;gt; &amp;gt; of outcomes is again unbounded a-priori. With CTV you need to know the&lt;br/&gt;&amp;gt; set&lt;br/&gt;&amp;gt; &amp;gt; of pairs you&amp;#39;d like to be able to expand to a-priori&lt;br/&gt;&amp;gt; &amp;gt; 3) Combining 1 and 2, you could imagine recursing on an open-ended thing&lt;br/&gt;&amp;gt; &amp;gt; like creating many identical outputs over time but not constraining what&lt;br/&gt;&amp;gt; &amp;gt; those outputs are. E.g., Output 0 matches Input 0, Output 1 matches&lt;br/&gt;&amp;gt; Output&lt;br/&gt;&amp;gt; &amp;gt; 2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Oh agreed.  It was distinction of &amp;#34;recursive&amp;#34; vs &amp;#34;not recursive&amp;#34; which&lt;br/&gt;&amp;gt; was less useful in this context.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;limited to complete enumeration&amp;#34; is the more useful distinction: it&amp;#39;s a&lt;br/&gt;&amp;gt; bright line between CTV and TXHASH IMHO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;If TXHASH is limited to requiring the flags be included in the hash (as is&lt;br/&gt;done with sighash) I believe TXHASH has the same &amp;#34;up front&amp;#34; nature that CTV&lt;br/&gt;has.&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/20220215/cf036cf5/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220215/cf036cf5/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:03:26Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsx8p5s3fvx0rqqzqp3dp5c68jx072gfx3ut48hst5d5z8g464wa4qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596wd6d7e</id>
    
      <title type="html">📅 Original date posted:2022-02-15 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsx8p5s3fvx0rqqzqp3dp5c68jx072gfx3ut48hst5d5z8g464wa4qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596wd6d7e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8qyn5f050eq4el9mtjhvsn5m80ntucg0efcny36cff6rncrrn7rcpe5v6r&#39;&gt;nevent1q…5v6r&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-15&lt;br/&gt;📝 Original message:On Tue, Feb 15, 2022 at 1:57 PM Jeremy Rubin &amp;lt;jeremy.l.rubin at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Rusty,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please see my post in the other email thread&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019886.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-February/019886.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The differences in this regard are several, and worth understanding beyond&lt;br/&gt;&amp;gt; &amp;#34;you can iterate CTV&amp;#34;. I&amp;#39;d note a few clear examples for showing that &amp;#34;CTV&lt;br/&gt;&amp;gt; is just as powerful&amp;#34; is not a valid claim:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) CTV requires the contract to be fully enumerated and is non-recursive.&lt;br/&gt;&amp;gt; For example, a simple contract that allows n participants to take an action&lt;br/&gt;&amp;gt; in any order requires factorially many pre-computations, not just linear or&lt;br/&gt;&amp;gt; constant. For reference, 24! is about 2**80. Whereas for a more&lt;br/&gt;&amp;gt; interpretive covenant -- which is often introduced with the features for&lt;br/&gt;&amp;gt; recursion -- you can compute the programs for these addresses in constant&lt;br/&gt;&amp;gt; time.&lt;br/&gt;&amp;gt; 2) CTV requires the contract to be fully enumerated: For example, a simple&lt;br/&gt;&amp;gt; contract one could write is &amp;#34;Output 0 script matches Output 1&amp;#34;, and the set&lt;br/&gt;&amp;gt; of outcomes is again unbounded a-priori. With CTV you need to know the set&lt;br/&gt;&amp;gt; of pairs you&amp;#39;d like to be able to expand to a-priori&lt;br/&gt;&amp;gt; 3) Combining 1 and 2, you could imagine recursing on an open-ended thing&lt;br/&gt;&amp;gt; like creating many identical outputs over time but not constraining what&lt;br/&gt;&amp;gt; those outputs are. E.g., Output 0 matches Input 0, Output 1 matches Output&lt;br/&gt;&amp;gt; 2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think for your point the inverse seems to hold: for the limited&lt;br/&gt;&amp;gt; situations we might want to set up, CTV often ends up being sufficient&lt;br/&gt;&amp;gt; because usually we can enumerate all the possible outcomes we&amp;#39;d like (or at&lt;br/&gt;&amp;gt; least find a mapping onto such a construction). CTV is indeed very&lt;br/&gt;&amp;gt; powerful, but as I demonstrated above, not powerful in the same way&lt;br/&gt;&amp;gt; (&amp;#34;Complexity Class&amp;#34;) that OP_TX or TXHASH might be.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Just to be clear, if OP_TXHASH is restricted to including the flags for the&lt;br/&gt;values to be hashed (at least for OP_TXHASH0), we don&amp;#39;t appear to enter&lt;br/&gt;recursive covenant territory, as long as we remain without OP_CAT.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; At the very least we should clearly understand *what* and *why* we are&lt;br/&gt;&amp;gt; advocating for more sophisticated designs and have a thorough understanding&lt;br/&gt;&amp;gt; of the protocol complexity we are motivated to introduce the expanded&lt;br/&gt;&amp;gt; functionality. Further, if one advocates for TX/TXHASH on a featureful&lt;br/&gt;&amp;gt; basis, it&amp;#39;s at least a technical ACK on the functionality CTV is&lt;br/&gt;&amp;gt; introducing (as it is a subset) and perhaps a disagreement on project&lt;br/&gt;&amp;gt; management, which I think is worth noting. There is a very wide gap between&lt;br/&gt;&amp;gt; &amp;#34;X is unsafe&amp;#34; and &amp;#34;I prefer Y which X is a subset of &amp;#39;&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m certainly of the opinion we should have some feature to enable the&lt;br/&gt;commitment of outputs.  It seems quite useful in various protocols.&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/20220215/13792914/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220215/13792914/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:03:25Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdwk77hvhwqgk4fhw5yhg6lgmgl9ftra4wsg5z37nkjrxefck85cszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tmderq</id>
    
      <title type="html">📅 Original date posted:2022-02-17 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdwk77hvhwqgk4fhw5yhg6lgmgl9ftra4wsg5z37nkjrxefck85cszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tmderq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs02g828fzcyc3njcx6xyp3y8d9jjack54u066my6adzc4g99qdfqq6q74xz&#39;&gt;nevent1q…74xz&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-17&lt;br/&gt;📝 Original message:On Thu, Feb 17, 2022 at 9:27 AM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I guess that&amp;#39;s all partly dependent on thinking that, TXHASH isn&amp;#39;t&lt;br/&gt;&amp;gt; great for tx introspection (especially without CAT) and, (without tx&lt;br/&gt;&amp;gt; introspection and decent math opcodes), DLCs already provide all the&lt;br/&gt;&amp;gt; interesting oracle behaviour you&amp;#39;re really going to get...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;You left out CSFSV&amp;#39;s ability to do pubkey delegation.&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/20220217/6b08b8c5/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220217/6b08b8c5/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:03:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxc9sl7s6cda07w9vsy5man3e6fwd49gc6358f4nrssjk3z40xp8gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596s5vlq8</id>
    
      <title type="html">📅 Original date posted:2022-02-08 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxc9sl7s6cda07w9vsy5man3e6fwd49gc6358f4nrssjk3z40xp8gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596s5vlq8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx62my66jquxgpsnu46x9l2n8jndfpphkmj66rj8h03mt222nhxvsc8agu0&#39;&gt;nevent1q…agu0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-02-08&lt;br/&gt;📝 Original message:On Mon, Jan 31, 2022 at 8:16 PM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Fri, Jan 28, 2022 at 08:56:25AM -0500, Russell O&amp;#39;Connor via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; For more complex interactions, I was imagining combining this TXHASH&lt;br/&gt;&amp;gt; &amp;gt; proposal with CAT and/or rolling SHA256 opcodes.  If TXHASH ended up&lt;br/&gt;&amp;gt; &amp;gt; supporting relative or absolute input/output indexes then users could&lt;br/&gt;&amp;gt; &amp;gt; assemble the hashes of the particular inputs and outputs they care about&lt;br/&gt;&amp;gt; &amp;gt; into a single signed message.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That&amp;#39;s certainly possible, but it sure seems overly complicated and&lt;br/&gt;&amp;gt; error prone...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Indeed, and we really want something that can be programmed at redemption&lt;br/&gt;time.&lt;br/&gt;That probably involves something like how the historic MULTISIG worked by&lt;br/&gt;having list of input / output indexes be passed in along with length&lt;br/&gt;arguments.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think there will be problems with quadratic hashing here because as&lt;br/&gt;more inputs are list, the witness in turns grows larger itself.  The amount&lt;br/&gt;of stack elements that can be copied is limited by a constant (3DUP).&lt;br/&gt;Certainly care is needed here, but also keep in mind that an OP_HASH256&lt;br/&gt;does a double hash and costs one weight unit.&lt;br/&gt;&lt;br/&gt;That said, your SIGHASH_GROUP proposal suggests that some sort of&lt;br/&gt;intra-input communication is really needed, and that is something I would&lt;br/&gt;need to think about.&lt;br/&gt;&lt;br/&gt;While normally I&amp;#39;d be hesitant about this sort of feature creep, when we&lt;br/&gt;are talking about doing soft-forks, I really think it makes sense to think&lt;br/&gt;through these sorts of issues (as we are doing here).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; I don&amp;#39;t think there is much in the way of lessons to be drawn from how we&lt;br/&gt;&amp;gt; &amp;gt; see Bitcoin Script used today with regards to programs built out of&lt;br/&gt;&amp;gt; &amp;gt; reusable components.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I guess I think one conclusion we should draw is some modesty in how&lt;br/&gt;&amp;gt; good we are at creating general reusable components. That is, bitcoin&lt;br/&gt;&amp;gt; script looks a lot like a relatively general expression language,&lt;br/&gt;&amp;gt; that should allow you to write interesting things; but in practice a&lt;br/&gt;&amp;gt; lot of it was buggy (OP_VER hardforks and resource exhaustion issues),&lt;br/&gt;&amp;gt; or not powerful enough to actually be interesting, or too complicated&lt;br/&gt;&amp;gt; to actually get enough use out of [0].&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; TXHASH &#43; CSFSV won&amp;#39;t be enough by itself to allow for very interesting&lt;br/&gt;&amp;gt; &amp;gt; programs Bitcoin Script yet, we still need CAT and friends for that,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;CAT&amp;#34; and &amp;#34;CHECKSIGFROMSTACK&amp;#34; are both things that have been available in&lt;br/&gt;&amp;gt; elements for a while; has anyone managed to build anything interesting&lt;br/&gt;&amp;gt; with them in practice, or are they only useful for thought experiments&lt;br/&gt;&amp;gt; and blog posts? To me, that suggests that while they&amp;#39;re useful for&lt;br/&gt;&amp;gt; theoretical discussion, they don&amp;#39;t turn out to be a good design in&lt;br/&gt;&amp;gt; practice.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Perhaps the lesson to be drawn is that languages should support multiplying&lt;br/&gt;two numbers together.&lt;br/&gt;&lt;br/&gt;Having 2/3rd of the language you need to write interesting programs doesn&amp;#39;t&lt;br/&gt;mean that you get 2/3rd of the interesting programs written.&lt;br/&gt;&lt;br/&gt;But beyond that, there is a lot more to a smart contract than just the&lt;br/&gt;Script.  Dmitry Petukhov has a fleshed out design for Asset based lending&lt;br/&gt;on liquid at &lt;a href=&#34;https://ruggedbytes.com/articles/ll/&#34;&gt;https://ruggedbytes.com/articles/ll/&lt;/a&gt;, despite the limitations&lt;br/&gt;of (pre-taproot) Elements Script.  But to make it a real thing you need&lt;br/&gt;infrastructure for working with partial transactions, key management, etc.&lt;br/&gt;&lt;br/&gt;&amp;gt; but&lt;br/&gt;&amp;gt; &amp;gt; CSFSV is at least a step in that direction.  CSFSV can take arbitrary&lt;br/&gt;&amp;gt; &amp;gt; messages and these messages can be fixed strings, or they can be hashes&lt;br/&gt;&amp;gt; of&lt;br/&gt;&amp;gt; &amp;gt; strings (that need to be revealed), or they can be hashes returned from&lt;br/&gt;&amp;gt; &amp;gt; TXHASH, or they can be locktime values, or they can be values that are&lt;br/&gt;&amp;gt; &amp;gt; added or subtracted from locktime values, or they can be values used for&lt;br/&gt;&amp;gt; &amp;gt; thresholds, or they can be other pubkeys for delegation purposes, or they&lt;br/&gt;&amp;gt; &amp;gt; can be other signatures ... for who knows what purpose.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I mean, if you can&amp;#39;t even think of a couple of uses, that doesn&amp;#39;t seem&lt;br/&gt;&amp;gt; very interesting to pursue in the near term? CTV has something like half&lt;br/&gt;&amp;gt; a dozen fairly near-term use cases, but obviously those can all be done&lt;br/&gt;&amp;gt; just with TXHASH without a need for CSFS, and likewise all the ANYPREVOUT&lt;br/&gt;&amp;gt; things can obviously be done via CHECKSIG without either TXHASH or CSFS...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To me, the point of having CSFS (as opposed to CHECKSIG) seems to be&lt;br/&gt;&amp;gt; verifying that an oracle asserted something; but for really simply boolean&lt;br/&gt;&amp;gt; decisions, doing that via a DLC seems better in general since that moves&lt;br/&gt;&amp;gt; more of the work off-chain; and for the case where the signature is being&lt;br/&gt;&amp;gt; used to authenticate input into the script rather than just gating a path,&lt;br/&gt;&amp;gt; that feels a bit like a weaker version of graftroot?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I didn&amp;#39;t really mean this as a list of applications; it was a list of&lt;br/&gt;values that CSFSV composes with. Applications include delegation of pubkeys&lt;br/&gt;and oracles, and, in the presence of CAT and transaction reflection&lt;br/&gt;primitives, presumably many more things.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I guess I&amp;#39;d still be interested in the answer to:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; If we had CTV, POP_SIGDATA, and SIGHASH_NO_TX_DATA_AT_ALL but no&lt;br/&gt;&amp;gt; OP_CAT,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; are there any practical use cases that wouldn&amp;#39;t be covered that having&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; TXHASH/CAT/CHECKSIGFROMSTACK instead would allow? Or where those would&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; be significantly more convenient/efficient?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; (Assume &amp;#34;y x POP_SIGDATA POP_SIGDATA p CHECKSIGVERIFY q CHECKSIG&amp;#34;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; commits to a vector [x,y] via p but does not commit to either via q so&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; that there&amp;#39;s some &amp;#34;CAT&amp;#34;-like behaviour available)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t know if this is the answer you are looking for, but technically&lt;br/&gt;TXHASH &#43; CAT &#43; SHA256 awkwardly gives you limited transaction reflection.&lt;br/&gt;In fact, you might not even need TXHASH, though it certainly helps.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; TXHASH seems to me to be clearly the more flexible opcode compared to&lt;br/&gt;&amp;gt; CTV; but maybe all that flexibility is wasted, and all the real use&lt;br/&gt;&amp;gt; cases actually just want CHECKSIG or CTV? I&amp;#39;d feel much better having&lt;br/&gt;&amp;gt; some idea of what the advantage of being flexible there is...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The flexibility of TXHASH is intended to head off the need for future soft&lt;br/&gt;forks.  If we had specific applications in mind, we could simply set up the&lt;br/&gt;transaction hash flags to cover all the applications we know about.  But it&lt;br/&gt;is the applications that we don&amp;#39;t know about that worry me.  If we don&amp;#39;t&lt;br/&gt;put options in place with this soft-fork proposal, then they will need&lt;br/&gt;their own soft-fork down the line; and the next application after that, and&lt;br/&gt;so on.&lt;br/&gt;&lt;br/&gt;If our attitude is to craft our soft-forks as narrowly as possible to limit&lt;br/&gt;them to what only allows for given tasks, then we are going to end up&lt;br/&gt;needing a lot more soft-forks, and that is not a good outcome.&lt;br/&gt;&lt;br/&gt;But all that aside, probably the real question is can we simplify CTV&amp;#39;s&lt;br/&gt;&amp;gt; transaction message algorithm, if we assume APO is enabled simultaneously?&lt;br/&gt;&amp;gt; If it doesn&amp;#39;t get simplified and needs its own hashing algorithm anyway,&lt;br/&gt;&amp;gt; that would be probably be a good reason to keep the separate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; First, since ANYPREVOUT commits to the scriptPubKey, you&amp;#39;d need to use&lt;br/&gt;&amp;gt; ANYPREVOUTANYSCRIPT for CTV-like behaviour.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ANYPRVOUTANYSCRIPT is specced as commiting to:&lt;br/&gt;&amp;gt;   nVersion&lt;br/&gt;&amp;gt;   nLockTime&lt;br/&gt;&amp;gt;   nSequence&lt;br/&gt;&amp;gt;   spend_type and annex present&lt;br/&gt;&amp;gt;   sha_annex (if present)&lt;br/&gt;&amp;gt;   sha_outputs (ALL) or sha_single_output (SINGLE)&lt;br/&gt;&amp;gt;   key_version&lt;br/&gt;&amp;gt;   codesep_pos&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; CTV commits to:&lt;br/&gt;&amp;gt;   nVersion&lt;br/&gt;&amp;gt;   nLockTime&lt;br/&gt;&amp;gt;   scriptSig hash &amp;#34;(maybe!)&amp;#34;&lt;br/&gt;&amp;gt;   input count&lt;br/&gt;&amp;gt;   sequences hash&lt;br/&gt;&amp;gt;   output count&lt;br/&gt;&amp;gt;   outputs hash&lt;br/&gt;&amp;gt;   input index&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (CTV thus allows annex malleability, since it neither commits to the&lt;br/&gt;&amp;gt; annex nor forbids inclusion of an annex)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;output count&amp;#34; and &amp;#34;outputs index&amp;#34; would both be covered by sha_outputs&lt;br/&gt;&amp;gt; with ANYPREVOUTANYSCRIPT|ALL.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think &amp;#34;scriptSig hash&amp;#34; is only covered to avoid txid malleability; but&lt;br/&gt;&amp;gt; just adjusting your protocol to use APO signatures instead of relying on&lt;br/&gt;&amp;gt; the txid of future transactions also solves that problem.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe &amp;#34;sequences hash&amp;#34;, &amp;#34;input count&amp;#34; and &amp;#34;input index&amp;#34; are all an&lt;br/&gt;&amp;gt; important part of ensuring that if you have two UTXOs distributing 0.42&lt;br/&gt;&amp;gt; BTC to the same set of addresses via CTV, that you can&amp;#39;t combine them in a&lt;br/&gt;&amp;gt; single transaction and end up sending losing one of the UTXOs to fees. I&lt;br/&gt;&amp;gt; don&amp;#39;t believe there&amp;#39;s a way to resolve that with bip 118 alone, however&lt;br/&gt;&amp;gt; that does seem to be a similar problem to the one that SIGHASH_GROUP&lt;br/&gt;&amp;gt; tries to solve.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It was my understanding that it is only &amp;#34;input count = 1&amp;#34; that prevents&lt;br/&gt;this issue.&lt;br/&gt;&lt;br/&gt;SIGHASH_GROUP [1] would be an alternative to ALL/SINGLE/NONE, with the exact&lt;br/&gt;&amp;gt; group of outputs being committed to determined via the annex.&lt;br/&gt;&amp;gt; ANYPREVOUTANYSCRIPT|GROUP would commit to:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   nVersion&lt;br/&gt;&amp;gt;   nLockTime&lt;br/&gt;&amp;gt;   nSequence&lt;br/&gt;&amp;gt;   spend_type and annex present&lt;br/&gt;&amp;gt;   sha_annex (if present)&lt;br/&gt;&amp;gt;   sha_group_outputs (GROUP)&lt;br/&gt;&amp;gt;   key_version&lt;br/&gt;&amp;gt;   codesep_pos&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So in that case if you have your two inputs:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   0.42 [pays 0.21 to A, 0.10 to B, 0.10 to C]&lt;br/&gt;&amp;gt;   0.42 [pays 0.21 to A, 0.10 to B, 0.10 to C]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; then, either:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   a) if they&amp;#39;re both committed with GROUP and sig_group_count = 3, then&lt;br/&gt;&amp;gt;      the outputs must be [0.21 A, 0.10 B, 0.10 C, 0.21 A, 0.10 B, 0.10&lt;br/&gt;&amp;gt;      C], and you don&amp;#39;t lose funds&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   b) if they&amp;#39;re both committed with GROUP and the first is&lt;br/&gt;&amp;gt;      sig_group_count=3 and the second is sig_group_count=0, then the&lt;br/&gt;&amp;gt;      outputs can be [0.21 A, 0.10 B, 0.10 C, *anything] -- but in that&lt;br/&gt;&amp;gt;      case the second input is already signalling that it&amp;#39;s meant to be&lt;br/&gt;&amp;gt;      paired with another input to fund the same three outputs, so any&lt;br/&gt;&amp;gt;      funds loss is at least intentional&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that this means txids are very unstable: if a tx is only protected&lt;br/&gt;&amp;gt; by SIGHASH_GROUP commitments then miners/relayers can add outputs, or&lt;br/&gt;&amp;gt; reorganise the groups without making the tx invalid. Beyond requiring&lt;br/&gt;&amp;gt; the signatures to be APO/APOAS-based to deal with that, we&amp;#39;d also need&lt;br/&gt;&amp;gt; to avoid txs getting rbf-pinned by some malicious third party who pulls&lt;br/&gt;&amp;gt; apart the groups and assembles a new tx that&amp;#39;s hard to rbf but also&lt;br/&gt;&amp;gt; unlikely to confirm due to having a low feerate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note also that not reusing addresses solves this case -- it&amp;#39;s only a&lt;br/&gt;&amp;gt; problem when you&amp;#39;re paying the same amounts to the same addresses.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Being able to combine additional inputs and outputs at a later date&lt;br/&gt;&amp;gt; (which necessarily changes the txid) is an advantage though: it lets&lt;br/&gt;&amp;gt; you add additional funds and claim change, which allows you to adjust&lt;br/&gt;&amp;gt; to different fee rates.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think the SIGHASH_GROUP approach would work very well without&lt;br/&gt;&amp;gt; access to the annex, ie if you&amp;#39;re trying to do CTV encoded either in a&lt;br/&gt;&amp;gt; plain scriptPubKey or via segwit/p2sh.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that would give 16 different sighashes, choosing one of four&lt;br/&gt;&amp;gt; options for outputs,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  ALL/NONE/SINGLE/GROUP&lt;br/&gt;&amp;gt;    -- which outputs are committed to&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; and one of four options for inputs,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  -/ANYONECANPAY/ANYPREVOUT/ANYPREVOUTANYSCRIPT&lt;br/&gt;&amp;gt;    -- all inputs committed to, specific input committed to,&lt;br/&gt;&amp;gt;       scriptpubkey/tapscript committed to, or just the&lt;br/&gt;&amp;gt;       nseq/annex/codesep_pos&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; vs the ~155,000 sighashes in the TXHASH proposal.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think there&amp;#39;s an efficient way of doing SIGHASH_GROUP via tx&lt;br/&gt;&amp;gt; introspection opcodes that doesn&amp;#39;t also introduce a quadratic hashing&lt;br/&gt;&amp;gt; risk -- you need to prevent different inputs from re-hashing distinct but&lt;br/&gt;&amp;gt; overlapping sets of outputs, and if your opcodes only allow grabbing one&lt;br/&gt;&amp;gt; output at a time to add to the message being signed you have to do a lot&lt;br/&gt;&amp;gt; of coding if you want to let the signer choose how many outputs to commit&lt;br/&gt;&amp;gt; to; if you provide an opcode that grabs man outputs to hash, it seems&lt;br/&gt;&amp;gt; hard to do that generically in a way that avoids quadratic behaviour.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So I think that suggests two alternative approaches, beyond the&lt;br/&gt;&amp;gt; VERIFY-vs-PUSH semantic:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - have a dedicated sighash type for CTV (either an explicit one for it,&lt;br/&gt;&amp;gt;    per bip119, or support thousands of options like the proposal in this&lt;br/&gt;&amp;gt;    thread, one of which happens to be about the same as the bip119 idea)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - use ANYPREVOUTANYSCRIPT|GROUP for CTV, which means also implementing&lt;br/&gt;&amp;gt;    annex parsing and better RBF behaviour to avoid those txs being&lt;br/&gt;&amp;gt;    excessively vulnerable to pinning; with the advantage being that&lt;br/&gt;&amp;gt;    txs using &amp;#34;GROUP&amp;#34; sigs can be combined either for batching purposes&lt;br/&gt;&amp;gt;    or for adapting to the fee market after the signature has been made,&lt;br/&gt;&amp;gt;    and the disadvantage that you can&amp;#39;t rely on stable txids when looking&lt;br/&gt;&amp;gt;    for CTV spends and have to continue using APO/APOAS when chaining&lt;br/&gt;&amp;gt;    signatures on top of unconfirmed CTV outputs&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0] Here&amp;#39;s bitmatrix trying to multiply two numbers together:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/bit-matrix/technical-how-does-bitmatrix-v1-multiply-two-integers-in-the-absence-of-op-mul-a58b7a3794a3&#34;&gt;https://medium.com/bit-matrix/technical-how-does-bitmatrix-v1-multiply-two-integers-in-the-absence-of-op-mul-a58b7a3794a3&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     Likewise, doing a point preimage reveal via clever scripting&lt;br/&gt;&amp;gt;     pre-taproot never saw an implementation, despite seeming&lt;br/&gt;&amp;gt;     theoretically plausible.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/lightning-dev/2015-November/000344.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/lightning-dev/2015-November/000344.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&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/20220207/848ec59e/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220207/848ec59e/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:03:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsr4cuzgxekj3ufcjycxlmt8a78mpqy4mr57g6hc65xdt6y4e3mvmqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596xe7cyt</id>
    
      <title type="html">📅 Original date posted:2022-01-28 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsr4cuzgxekj3ufcjycxlmt8a78mpqy4mr57g6hc65xdt6y4e3mvmqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596xe7cyt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsth2uw05n05a3laaghd9nehf68eg8s6xu49ez52lvdtvntve2dvncruk757&#39;&gt;nevent1q…k757&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-01-28&lt;br/&gt;📝 Original message:On Thu, Jan 27, 2022 at 8:34 PM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; An Alternative Proposal::&lt;br/&gt;&amp;gt; &amp;gt;  ...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; For similar reasons, TXHASH is not amenable to extending the set of&lt;br/&gt;&amp;gt; txflags&lt;br/&gt;&amp;gt; &amp;gt; at a later date.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I believe the difficulties with upgrading TXHASH can be mitigated by&lt;br/&gt;&amp;gt; &amp;gt; designing a robust set of TXHASH flags from the start.  For example&lt;br/&gt;&amp;gt; having&lt;br/&gt;&amp;gt; &amp;gt; bits to control whether [...]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think that&amp;#39;s really feasible -- eg, what you propose don&amp;#39;t cover&lt;br/&gt;&amp;gt; SIGHASH_GROUP:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-July/019243.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;For more complex interactions, I was imagining combining this TXHASH&lt;br/&gt;proposal with CAT and/or rolling SHA256 opcodes.  If TXHASH ended up&lt;br/&gt;supporting relative or absolute input/output indexes then users could&lt;br/&gt;assemble the hashes of the particular inputs and outputs they care about&lt;br/&gt;into a single signed message.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; That all said, even if other txhash flag modes are needed in the future,&lt;br/&gt;&amp;gt; &amp;gt; adding TXHASH2 always remains an option.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think baking this in from day 0 might be better: make TXHASH be&lt;br/&gt;&amp;gt; a multibyte opcode, so that when you decode &amp;#34;0xBB&amp;#34; on the stack,&lt;br/&gt;&amp;gt; you also decode a serialize.h:VarInt as the version number.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I wouldn&amp;#39;t be opposed to this.&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;#39;&amp;lt;anyprevout-pubkey&amp;gt; CHECKSIGVERIFY can be simulated by &amp;#39;&amp;lt;apo_style_flag&amp;gt;&lt;br/&gt;&amp;gt; TXHASH &amp;lt;pubkey&amp;gt; CHECKSIGFROMSTACKVERIFY&amp;#39;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t think that&amp;#39;s quite right. BIP 118 anyprevout is done by taking&lt;br/&gt;&amp;gt; the pubkey &amp;#34;P&amp;#34;, marking it as &amp;#34;APO-capable&amp;#34; (by prefixing it with 0x01),&lt;br/&gt;&amp;gt; and then getting a sighash and sig from the witness. Doing the same&lt;br/&gt;&amp;gt; with TXHASH/CSFSV would just be replacing &amp;#34;&amp;lt;APO:P&amp;gt; CHECKSIGVERIFY&amp;#34; with&lt;br/&gt;&amp;gt; &amp;#34;TXHASH &amp;lt;P&amp;gt; CSFSV&amp;#34; with the witness providing both the signature and&lt;br/&gt;&amp;gt; txhash flag, just as separate elements rather than concatenated. (The&lt;br/&gt;&amp;gt; &amp;#34;APO-capable&amp;#34; part is implicit in the &amp;#34;TXHASH&amp;#34; opcode)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Indeed. The TXHASH variant does require splitting the signature and txhash&lt;br/&gt;flag across two stack items.  So it wouldn&amp;#39;t be an operationally identical&lt;br/&gt;drop in replacement.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; In addition to the CTV and ANYPREVOUT applications, with&lt;br/&gt;&amp;gt; &amp;gt; CHECKSIGFROMSTACKVERIFY we can verify signatures on arbitrary messages&lt;br/&gt;&amp;gt; &amp;gt; signed by oracles for oracle applications.  This is where we see the&lt;br/&gt;&amp;gt; &amp;gt; benefit of decomposing operations into primitive pieces.  By giving users&lt;br/&gt;&amp;gt; &amp;gt; the ability to program their own use cases from components, we get more&lt;br/&gt;&amp;gt; &amp;gt; applications out of fewer op codes!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While I see the appeal of this from a language design perspective;&lt;br/&gt;&amp;gt; I&amp;#39;m not sure it&amp;#39;s really the goal we want. When I look at bitcoin&amp;#39;s&lt;br/&gt;&amp;gt; existing script, I see a lot of basic opcodes to do simple arithmetic and&lt;br/&gt;&amp;gt; manipulate the stack in various ways, but the opcodes that are actually&lt;br/&gt;&amp;gt; useful are more &amp;#34;do everything at once&amp;#34; things like check(multi)sig or&lt;br/&gt;&amp;gt; sha256. It seems like what&amp;#39;s most useful on the blockchain is a higher&lt;br/&gt;&amp;gt; level language, rather than more of blockchain assembly language made&lt;br/&gt;&amp;gt; up of small generic pieces. I guess &amp;#34;program their own use cases from&lt;br/&gt;&amp;gt; components&amp;#34; seems to be coming pretty close to &amp;#34;write your own crypto&lt;br/&gt;&amp;gt; algorithms&amp;#34; here...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Which operations in Script are actually composable today?&lt;br/&gt;&lt;br/&gt;CHECKSIG composes with nothing else (other than possibly other CHECKSIGs)&lt;br/&gt;as there are no other operations that manipulate pubkey keys or signature&lt;br/&gt;data.&lt;br/&gt;&lt;br/&gt;CLTV and CSV in principle can be composed with addition and subtraction and&lt;br/&gt;comparison operations.  But where are you going to get other values to add&lt;br/&gt;and subtract from?  I suppose you could compare the relative and absolute&lt;br/&gt;locktimes to each other.&lt;br/&gt;&lt;br/&gt;What do the HASH functions compose with?  Without CAT you cannot construct&lt;br/&gt;messages to hash.  You can hash the result of the arithmetic operations,&lt;br/&gt;but you are limited to hashing 32-bit (or 33-bit if you are generous)&lt;br/&gt;strings, which is too little entropy to have any security properties.  You&lt;br/&gt;can hash a public key or a signature I suppose.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think there is much in the way of lessons to be drawn from how we&lt;br/&gt;see Bitcoin Script used today with regards to programs built out of&lt;br/&gt;reusable components.  User&amp;#39;s haven&amp;#39;t been composing programs, not because&lt;br/&gt;they don&amp;#39;t find composition useful, but rather because the existing&lt;br/&gt;primitives do not lend themselves to being composed at all.&lt;br/&gt;&lt;br/&gt;There is one aspect of Bitcoin Script that is composable, which is&lt;br/&gt;(monotone) boolean combinations of the few primitive transaction conditions&lt;br/&gt;that do exist.  The miniscript language captures nearly the entirety of&lt;br/&gt;what is composable in Bitcoin Script today: which amounts to conjunctions,&lt;br/&gt;disjunctions (and thresholds) of signatures, locktimes, and revealing hash&lt;br/&gt;preimages.&lt;br/&gt;&lt;br/&gt;TXHASH &#43; CSFSV won&amp;#39;t be enough by itself to allow for very interesting&lt;br/&gt;programs Bitcoin Script yet, we still need CAT and friends for that, but&lt;br/&gt;CSFSV is at least a step in that direction.  CSFSV can take arbitrary&lt;br/&gt;messages and these messages can be fixed strings, or they can be hashes of&lt;br/&gt;strings (that need to be revealed), or they can be hashes returned from&lt;br/&gt;TXHASH, or they can be locktime values, or they can be values that are&lt;br/&gt;added or subtracted from locktime values, or they can be values used for&lt;br/&gt;thresholds, or they can be other pubkeys for delegation purposes, or they&lt;br/&gt;can be other signatures ... for who knows what purpose.&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/20220128/beac8333/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220128/beac8333/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:02:59Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsvs6j26skndgg5me265pkgrzr6lqv2s0llvkxme4ayf8sw22nfnmszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ueg04u</id>
    
      <title type="html">📅 Original date posted:2022-01-29 📝 Original message:The ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsvs6j26skndgg5me265pkgrzr6lqv2s0llvkxme4ayf8sw22nfnmszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ueg04u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxf24xuejw3nx72gn3wmfwdz0kupk7m6h60ema8qw3efrtn6eryxskvmtqu&#39;&gt;nevent1q…mtqu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-01-29&lt;br/&gt;📝 Original message:The hash would normally also cover the hash flags in use, and would be&lt;br/&gt;different in those two cases.&lt;br/&gt;&lt;br/&gt;But yes, it seems at the last minute I did include a suggestion to disable&lt;br/&gt;covering the flag themselves in the hash and appear to have accidentally&lt;br/&gt;allowed for recursive covenants (a common occurrence when designing&lt;br/&gt;opcodes).&lt;br/&gt;&lt;br/&gt;On Sat, Jan 29, 2022 at 12:01 PM Jeremy Rubin &amp;lt;j at rubin.io&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Perhaps there is some misunderstanding.  TXHASH &#43; CSFSV doesn&amp;#39;t allow for&lt;br/&gt;&amp;gt;&amp;gt; complex or recursive covenants.  Typically CAT is needed, at minimum, to&lt;br/&gt;&amp;gt;&amp;gt; create those sorts of things.  TXHASH still amounts to deploying a&lt;br/&gt;&amp;gt;&amp;gt; non-recursive covenant construction.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; This seems false to me.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;lt;Only hash a single input scriptpubkey&amp;gt; txhash &amp;lt;only hash a single output&lt;br/&gt;&amp;gt; scriptpubkey&amp;gt; txhash equalverify&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Is that not a recursive covenant? With a little extra work you can also&lt;br/&gt;&amp;gt; control for amounts and stuff.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;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/20220129/a5d662ba/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220129/a5d662ba/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:02:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9wqv6py7r09aw2msug35h0qsjsvsfgxyqy452st3r3a02uwj3arszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966drqcw</id>
    
      <title type="html">📅 Original date posted:2022-01-29 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9wqv6py7r09aw2msug35h0qsjsvsfgxyqy452st3r3a02uwj3arszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966drqcw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0hnt30vethzpa9hgdpw3e9449l7u66c8ryeta3z7zpy5muyq6a7gduh8k9&#39;&gt;nevent1q…h8k9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-01-29&lt;br/&gt;📝 Original message:On Fri, Jan 28, 2022 at 10:14 AM James O&amp;#39;Beirne &amp;lt;james.obeirne at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; Technical debt isn&amp;#39;t a measure of weight of transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sorry, my original sentence was a little unclear. I meant to say that the&lt;br/&gt;&amp;gt; notion that CTV is just a subpar waypoint en route to a more general&lt;br/&gt;&amp;gt; covenant system may not be accurate if it is a more efficient way (in terms&lt;br/&gt;&amp;gt; of chainstate/weight) to express highly useful patterns like vaults. In&lt;br/&gt;&amp;gt; that case, characterizing CTV as technical debt wouldn&amp;#39;t be right.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It only costs a few more weight units, on the order of 2 or 3, to use&lt;br/&gt;TXHASH in place of CTV.  Notably, the reverse, using CTV in place of&lt;br/&gt;TXHASH, is much more expensive, requiring more than 32 weight units.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; Our only option here is to be mindful of the long term implications of&lt;br/&gt;&amp;gt; the design choices we are making today.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Your points are well taken - I don&amp;#39;t think anyone is arguing against&lt;br/&gt;&amp;gt; thinking hard about consensus changes. But I have yet to see a proposal for&lt;br/&gt;&amp;gt; covenants that is as efficient on-chain and easy to reason about as CTV is.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I also think there&amp;#39;s some value in &amp;#34;legging into&amp;#34; covenants by deploying a&lt;br/&gt;&amp;gt; simple, non-recursive construction like CTV that services some very&lt;br/&gt;&amp;gt; important uses, and then taking as much time as necessary to think about&lt;br/&gt;&amp;gt; how to solve more existential problems, like UTXO scalability, that likely&lt;br/&gt;&amp;gt; require a recursive covenant construction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There doesn&amp;#39;t have to be mutual exclusion in the approaches, especially&lt;br/&gt;&amp;gt; when the maintenance burden of CTV seems to be so low. If we end up&lt;br/&gt;&amp;gt; deploying something that requires a wider variety of in-script hashing, it&lt;br/&gt;&amp;gt; seems likely that CTV&amp;#39;s hash will be able to &amp;#34;free ride&amp;#34; on whatever more&lt;br/&gt;&amp;gt; general sighash cache structure we come up with.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Perhaps there is some misunderstanding.  TXHASH &#43; CSFSV doesn&amp;#39;t allow for&lt;br/&gt;complex or recursive covenants.  Typically CAT is needed, at minimum, to&lt;br/&gt;create those sorts of things.  TXHASH still amounts to deploying a&lt;br/&gt;non-recursive covenant construction.&lt;br/&gt;&lt;br/&gt;With regards to CTV, in short my primary criticisms are (1) Push semantics&lt;br/&gt;is preferable to verify semantics, because simulating verify semantics from&lt;br/&gt;push is cheap, while simulating push semantics from verify is not&lt;br/&gt;particularly cheap.&lt;br/&gt;And (2) given Push semantics we ought to have parameters to support both&lt;br/&gt;CTV-style hashes and APO-style hashes (which in the presence of CSFSV gives&lt;br/&gt;us APO applications), and, while we are at it, as many other style hashes&lt;br/&gt;as we can reasonably devise so we don&amp;#39;t have to go through yet another&lt;br/&gt;soft-fork process every time someone comes up with a new subset of&lt;br/&gt;transaction data they would like to be hashed for their application.&lt;br/&gt;&lt;br/&gt;I understand why CTV was designed with verify semantics: it would like to&lt;br/&gt;be NOP compatible.  That certainly made sense pre-tapscript.  I just&lt;br/&gt;haven&amp;#39;t (yet) found the use cases for that compatibility to be compelling&lt;br/&gt;in a post-tapscript world.&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/20220129/cefdbd34/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220129/cefdbd34/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:02:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstpd2f34uxc27w86qrqhrhgpyx96yjnjp3u9vq9fje26ardkq258czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596keujwt</id>
    
      <title type="html">📅 Original date posted:2022-01-28 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstpd2f34uxc27w86qrqhrhgpyx96yjnjp3u9vq9fje26ardkq258czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596keujwt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsradccqzvq4ekaefp3zxlulkecvrjx4w4k7vh73fu0rayfzrl5aucwmr8ym&#39;&gt;nevent1q…r8ym&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-01-28&lt;br/&gt;📝 Original message:On Thu, Jan 27, 2022 at 7:19 PM James O&amp;#39;Beirne &amp;lt;james.obeirne at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; I don&amp;#39;t think implementing a CTV opcode that we expect to largely be&lt;br/&gt;&amp;gt; obsoleted by a TXHASH at a later date is yielding good value from a soft&lt;br/&gt;&amp;gt; fork process.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This presumes the eventual adoption of TXHASH (or something like it).&lt;br/&gt;&amp;gt; You&amp;#39;re presenting a novel idea that, as far as I know, hasn&amp;#39;t had much time&lt;br/&gt;&amp;gt; to bake in public. Like Jeremy, I&amp;#39;m concerned by the combinatorial growth&lt;br/&gt;&amp;gt; of flags and the implications that has for testing. Caching for something&lt;br/&gt;&amp;gt; like TXHASH looks to me like a whole different ballgame relative to CTV,&lt;br/&gt;&amp;gt; which has a single kind of hash.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Let&amp;#39;s not overstate the concern around the combinatorics of TXHASH.   It&amp;#39;s&lt;br/&gt;not like there is a vast amount of cross-flag interaction we are talking&lt;br/&gt;about here.  There are also a combinatorial number of ways of assembling&lt;br/&gt;opcodes in Bitcoin script, but we aren&amp;#39;t required to exhaustively test&lt;br/&gt;every single possible Script program.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Even if we were to adopt something like TXHASH, how long is it going to&lt;br/&gt;&amp;gt; take to develop, test, and release? My guess is &amp;#34;a while&amp;#34; - in the&lt;br/&gt;&amp;gt; meantime, users of Bitcoin are without a vault strategy that doesn&amp;#39;t&lt;br/&gt;&amp;gt; require either presigning transactions with ephemeral keys (operationally&lt;br/&gt;&amp;gt; difficult) or multisig configurations that would make Rube Goldberg blush&lt;br/&gt;&amp;gt; (operationally difficult and precarious). The utility of vaulting seems&lt;br/&gt;&amp;gt; underappreciated among consensus devs and it&amp;#39;s something I&amp;#39;d like to write&lt;br/&gt;&amp;gt; about soon in a separate post.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The strongest argument I can make in favour of CTV would be something&lt;br/&gt;&amp;gt; like: &amp;#34;We definitely want bare CTV and if we are going to add CTV to legacy&lt;br/&gt;&amp;gt; script (since we cannot use TXHASH in legacy script), then it is actually&lt;br/&gt;&amp;gt; easier not to exclude it from tapscript, even if we plan to add TXHASH to&lt;br/&gt;&amp;gt; tapscript as well.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Another argument for CTV (which I find especially persuasive) is its&lt;br/&gt;&amp;gt; simplicity - it&amp;#39;s relatively easy to reason about and, at this point,&lt;br/&gt;&amp;gt; pretty well understood. It seems like a low-risk change relative to some of&lt;br/&gt;&amp;gt; the other covenant proposals, nearly all of which elicit a good deal of&lt;br/&gt;&amp;gt; headscratching (at least from me) and seem to require not only larger&lt;br/&gt;&amp;gt; on-chain footprints but sizable code changes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; I am sensitive to technical debt and soft fork processes&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; If OP_CTV ends up being the most practical approach for vaulting - among&lt;br/&gt;&amp;gt; other things - in terms of weight (which it seems to be at the moment) I&lt;br/&gt;&amp;gt; don&amp;#39;t think &amp;#34;technical debt&amp;#34; is an applicable term.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Technical debt isn&amp;#39;t a measure of weight of transactions.  It&amp;#39;s a measure&lt;br/&gt;of the code complexity needed to implement, in this case, a Bitcoin Script&lt;br/&gt;interpreter.&lt;br/&gt;&lt;br/&gt;By itself, adding a single new hash format for CTV isn&amp;#39;t that complex, and&lt;br/&gt;it is certainly simpler than this TXHASH proposal.  But then we need to add&lt;br/&gt;another two slightly different hash formats for APO support.  And tomorrow&lt;br/&gt;we will need yet another set of transaction hash formats for the next&lt;br/&gt;thing, and so on, with each instance requiring going through its own&lt;br/&gt;soft-fork process.  It is at that point we end up with something more&lt;br/&gt;complicated and with more deployment risk than if we had just done&lt;br/&gt;something like TXHASH at the very beginning.  But unlike other programming&lt;br/&gt;environments, we cannot refactor our way out of such a situation.  We&lt;br/&gt;cannot make a new script version while deprecating the old one.  Our only&lt;br/&gt;option here is to be mindful of the long term implications of the design&lt;br/&gt;choices we are making today.&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/20220128/a793638a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220128/a793638a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:02:56Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdndevsran4mlzezv0nnvpa8n34ujt4nk9w79t07600vzmphg8ucszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596g3snaf</id>
    
      <title type="html">📅 Original date posted:2022-01-27 📝 Original message:I am ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdndevsran4mlzezv0nnvpa8n34ujt4nk9w79t07600vzmphg8ucszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596g3snaf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsryjx84m2qwk68e47afsextsa8hlehdn4haulvwntqlzx8g7ehp6gyax40j&#39;&gt;nevent1q…x40j&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-01-27&lt;br/&gt;📝 Original message:I am sensitive to technical debt and soft fork processes, and I don&amp;#39;t&lt;br/&gt;believe I&amp;#39;m unordinary particular about these issues.  Once implemented,&lt;br/&gt;opcodes must be supported and maintained indefinitely.  Some opcodes are&lt;br/&gt;easier to maintain than others.  These particular opcodes involve caching&lt;br/&gt;of hash computations and, for that reason, I would judge them to be of&lt;br/&gt;moderate complexity.&lt;br/&gt;&lt;br/&gt;But more importantly, soft-forks are inherently a risky process, so we&lt;br/&gt;should be getting as much value out of them as we reasonably can. I don&amp;#39;t&lt;br/&gt;think implementing a CTV opcode that we expect to largely be obsoleted by a&lt;br/&gt;TXHASH at a later date is yielding good value from a soft fork process.&lt;br/&gt;&lt;br/&gt;The strongest argument I can make in favour of CTV would be something like:&lt;br/&gt;&amp;#34;We definitely want bare CTV and if we are going to add CTV to legacy&lt;br/&gt;script (since we cannot use TXHASH in legacy script), then it is actually&lt;br/&gt;easier not to exclude it from tapscript, even if we plan to add TXHASH to&lt;br/&gt;tapscript as well.&amp;#34;&lt;br/&gt;&lt;br/&gt;But that argument basically rests the entire value of CTV on the shoulders&lt;br/&gt;of bare CTV.  As I understand, the argument for why we want bare CTV,&lt;br/&gt;instead of just letting people use tapscript, involves the finer details of&lt;br/&gt;weight calculations, and I haven&amp;#39;t really reviewed that aspect yet.  I&lt;br/&gt;think it would need to be pretty compelling to make it worthwhile to add&lt;br/&gt;CTV for that one use case.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Regarding &amp;#34;OP_TXHASH&#43;CSFSV doesn&amp;#39;t seem to be the &amp;#39;full&amp;#39; set of things&lt;br/&gt;needed&amp;#34;, I totally agree we will want more things such as CAT, rolling&lt;br/&gt;SHA256 opcodes, wider arithmetic, pushing amounts onto the stack, some kind&lt;br/&gt;of tapleaf manipulation and/or TWEAKVERIFY.  For now, I only want to argue&lt;br/&gt;TXHASH&#43;CSFSV is better than CTV&#43;APO because it gives us more value, namely&lt;br/&gt;oracle signature verification.  In particular, I want to argue that&lt;br/&gt;TXHASH&amp;#39;s push semantics is better that CTV&amp;#39;s verify semantics because it&lt;br/&gt;composes better by not needing to carry an extra 32-bytes (per instance) in&lt;br/&gt;the witness data.  I expect that in a world of full recursive covenants,&lt;br/&gt;TXHASH would still be useful as a fast and cheap way to verify the&lt;br/&gt;&amp;#34;payload&amp;#34; of these covenants, i.e. that a transaction is paying a certain,&lt;br/&gt;possibly large, set of addresses certain specific amounts of money.  And&lt;br/&gt;even if not, TXHASH&#43;CSFSV would still be the way that eltoo would be&lt;br/&gt;implemented under this proposal.&lt;br/&gt;&lt;br/&gt;On Wed, Jan 26, 2022 at 5:16 PM Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Russell,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for this email, it&amp;#39;s great to see this approach described.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A few preliminary notes of feedback:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) a Verify approach can be made to work for OP_TXHASH (even with CTV&lt;br/&gt;&amp;gt; as-is) E.g., suppose a semantic added for a single byte stack[-1] sighash&lt;br/&gt;&amp;gt; flag to read the hash at stack[-2], then the hash can be passed in instead&lt;br/&gt;&amp;gt; of put on the stack. This has the disadvantage of larger witnesses, but the&lt;br/&gt;&amp;gt; advantage of allowing undefined sighash flags to pass for any hash type.&lt;br/&gt;&amp;gt; 2) using the internal key for APO covenants is not an option because it&lt;br/&gt;&amp;gt; makes transaction construction interactive and precludes contracts with a&lt;br/&gt;&amp;gt; NUMS point taproot key. Instead, if you want similar savings, you should&lt;br/&gt;&amp;gt; advocate an OP_GENERATOR which puts G on the stack. Further, an untagged&lt;br/&gt;&amp;gt; APO variant which has split R and S values would permit something like&lt;br/&gt;&amp;gt; &amp;lt;sig&amp;gt; OP_GENERATOR OP_GENERATOR CHECKSIGAPO, which would be only 2 more&lt;br/&gt;&amp;gt; bytes than CTV.&lt;br/&gt;&amp;gt; 3) I count something like 20 different flags in your proposal. As long as&lt;br/&gt;&amp;gt; flags are under 40 bytes (and 32 assuming we want it to be easy) without&lt;br/&gt;&amp;gt; upgrading math this should be feasible to manipulate on the stack&lt;br/&gt;&amp;gt; programmatically. This is ignoring some of the more flexible additions you&lt;br/&gt;&amp;gt; mention about picking which outputs/inputs are included. However, 20 flags&lt;br/&gt;&amp;gt; means that for testing we would want comprehensive tests and understanding&lt;br/&gt;&amp;gt; for ~1 million different flag combos and the behaviors they expose. I think&lt;br/&gt;&amp;gt; this necessitates a formal model of scripting and transaction validity&lt;br/&gt;&amp;gt; properties. Are there any combinations that might be undesirable?&lt;br/&gt;&amp;gt; 4) Just hashing or not hashing isn&amp;#39;t actually that flexible, because it&lt;br/&gt;&amp;gt; doesn&amp;#39;t natively let you do things like (for example) TLUV. You really do&lt;br/&gt;&amp;gt; need tx operations for directly manipulating the data on the stack to&lt;br/&gt;&amp;gt; construct the hash if you want more flexible covenants. This happens to be&lt;br/&gt;&amp;gt; compatible with either a Verify or Push approach, since you either&lt;br/&gt;&amp;gt; destructure a pushed hash or build up a hash for a verify.&lt;br/&gt;&amp;gt; 5) Flexible hashing has the potential for quadratic hashing bugs. The&lt;br/&gt;&amp;gt; fields you propose seem to be within similar range to work you could cause&lt;br/&gt;&amp;gt; with a regular OP_HASH256, although you&amp;#39;d want to be careful with some of&lt;br/&gt;&amp;gt; the proposed extensions that you don&amp;#39;t create risk of quadratic hashing,&lt;br/&gt;&amp;gt; which seems possible with an output selecting opcode unless you cache&lt;br/&gt;&amp;gt; properly (which might be tricky to do). Overall for the fields explicitly&lt;br/&gt;&amp;gt; mentioned, seems safe, the &amp;#34;possibles&amp;#34; seem to have some more complex&lt;br/&gt;&amp;gt; interactions. E.g., CTV with the ability to pick a subset of outputs would&lt;br/&gt;&amp;gt; be exposed to quadratic hashing.&lt;br/&gt;&amp;gt; 6) Missing field: covering the annex or some sub-range of the annex&lt;br/&gt;&amp;gt; (quadratic hashing issues on the latter)&lt;br/&gt;&amp;gt; 7) It seems simpler to, for many of these fields, push values directly (as&lt;br/&gt;&amp;gt; in OP_PUSHTXDATA from Johnson Lau) because the combo of flags to push the&lt;br/&gt;&amp;gt; hash of a single output&amp;#39;s amount to emulate OP_AMOUNT looks &amp;#39;general but&lt;br/&gt;&amp;gt; annoying&amp;#39;. It may make more sense to do the OP_PUSHTXDATA style opcode&lt;br/&gt;&amp;gt; instead. This also makes it simpler to think about the combinations of&lt;br/&gt;&amp;gt; flags, since it&amp;#39;s really N independent multi-byte opcodes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ultimately if we had OP_TXHASH available &amp;#34;tomorrow&amp;#34;, I would be able to&lt;br/&gt;&amp;gt; build out the use cases I care about for CTV (and more). So I don&amp;#39;t have an&lt;br/&gt;&amp;gt; opposition on it with regards to lack of function.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, if one finds the TXHASH approach acceptable, then you should also&lt;br/&gt;&amp;gt; be relatively fine doing APO, CTV, CSFS, TXHASH acceptable in any order&lt;br/&gt;&amp;gt; (whenever &amp;#34;ready&amp;#34;), unless you are particularly sensitive to &amp;#34;technical&lt;br/&gt;&amp;gt; debt&amp;#34; and &amp;#34;soft fork processes&amp;#34;. The only costs of doing something for CTV&lt;br/&gt;&amp;gt; or APO given an eventual TXHASH is perhaps a wasted key version or the 32&lt;br/&gt;&amp;gt; byte argument of a NOP opcode and some code to maintain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Are there other costs I am missing?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, as it pertains to actual rollout:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - OP_TXHASH&#43;CSFSV doesn&amp;#39;t seem to be the &amp;#34;full&amp;#34; set of things needed (we&lt;br/&gt;&amp;gt; still need e.g. OP_CAT, Upgraded &amp;gt;=64 bit Math, TLUV or OP_TWEAK&lt;br/&gt;&amp;gt; OP_TAPBRANCH OP_MANIPULATETAPTREE, and more) to full realize covenanting&lt;br/&gt;&amp;gt; power it intends to introduce.&lt;br/&gt;&amp;gt; - What sort of timeline would it take to ready something like TXHASH (and&lt;br/&gt;&amp;gt; desired friends) given greater scope of testing and analysis (standalone &#43;&lt;br/&gt;&amp;gt; compared to CTV)?&lt;br/&gt;&amp;gt; - Is there opposition from the community to this degree of&lt;br/&gt;&amp;gt; general/recursive covenants?&lt;br/&gt;&amp;gt; - Does it make &amp;#34;more sense&amp;#34; to invest the research and development effort&lt;br/&gt;&amp;gt; that would go into proving TXHASH safe, for example, into Simplicity&lt;br/&gt;&amp;gt; instead?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Overall, *my opinion *is that:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - TXHASH is an acceptable theoretical approach, and I am happy to put more&lt;br/&gt;&amp;gt; thought into it and maybe draft a prototype of it.&lt;br/&gt;&amp;gt; - I prefer CTV as a first step for pragmatic engineering and availability&lt;br/&gt;&amp;gt; timeline reasons.&lt;br/&gt;&amp;gt; - If TXHASH were to take, optimistically, 2 years to develop and review,&lt;br/&gt;&amp;gt; and then 1 year to activate, the &amp;#34;path dependence of software&amp;#34; would put&lt;br/&gt;&amp;gt; Bitcoin in a much better place were we to have CTV within 1 year and&lt;br/&gt;&amp;gt; applications (that are to be a subset of TXHASH later) being built over the&lt;br/&gt;&amp;gt; next few years enhanced in the future by TXHASH&amp;#39;s availability.&lt;br/&gt;&amp;gt; - There is an element of expediency meritted for something like CTV&lt;br/&gt;&amp;gt; insofar as it provides primitives to tackle time sensitive issues around&lt;br/&gt;&amp;gt; privacy, scalability, self custody, and decentralization. The&lt;br/&gt;&amp;gt; aforementioned properties may be difficult to reclaim once given away (with&lt;br/&gt;&amp;gt; the exception of perhaps scalability).&lt;br/&gt;&amp;gt; - Bringing CTV to an implemented state of near-unanimous &amp;#34;we could do&lt;br/&gt;&amp;gt; this, technically&amp;#34; is good for concretely driving the process of review for&lt;br/&gt;&amp;gt; any covenant proposals forward, irrespective of if we ultimately activate.&lt;br/&gt;&amp;gt; (I.e., if there were a reason we could not do CTV safely, it would likely&lt;br/&gt;&amp;gt; have implications for any other future covenant)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Concretely, I&amp;#39;m not going to stop advocating for CTV based on the above,&lt;br/&gt;&amp;gt; but I&amp;#39;m very happy to have something new in the mix to consider!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jeremy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Jan 26, 2022 at 9:23 AM Russell O&amp;#39;Connor 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; Recapping the relationship between CTV and ANYPREVOUT::&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It is known that there is a significant amount of overlap in the&lt;br/&gt;&amp;gt;&amp;gt; applications that are enabled by the CTV and ANYPREVOUT proposals despite&lt;br/&gt;&amp;gt;&amp;gt; the fact that their primary applications (congestion control for CTV and&lt;br/&gt;&amp;gt;&amp;gt; eltoo lightning channels for ANYPREVOUT) are quite distinct.&lt;br/&gt;&amp;gt;&amp;gt; In particular, ANYPREVOUT can enable most of the applications of CTV,&lt;br/&gt;&amp;gt;&amp;gt; albeit with a higher cost.  The primary functionality of CTV is to allow a&lt;br/&gt;&amp;gt;&amp;gt; scriptPubKey to make a commitment to its spending transaction&amp;#39;s hash with&lt;br/&gt;&amp;gt;&amp;gt; the input&amp;#39;s TXID excluded from the hash.  This exclusion is necessary&lt;br/&gt;&amp;gt;&amp;gt; because the scriptPubKey is hashed into the input&amp;#39;s TXID, and including the&lt;br/&gt;&amp;gt;&amp;gt; TXID would cause a cycle of hash commitments, which is impossible to&lt;br/&gt;&amp;gt;&amp;gt; construct.  On the other hand, ANYPREVOUT defines a signature hash mode&lt;br/&gt;&amp;gt;&amp;gt; that similarly excludes the inputs TXID for its purpose of rebindable&lt;br/&gt;&amp;gt;&amp;gt; signatures.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This means that ANYPREVOUT can mimic most of the properties of CTV by&lt;br/&gt;&amp;gt;&amp;gt; committing both a public key along with an ANYPREVOUT signature inside&lt;br/&gt;&amp;gt;&amp;gt; scriptPubKey.  In fact, the only reason Bitcoin doesn&amp;#39;t have covenants&lt;br/&gt;&amp;gt;&amp;gt; today is due to this cycle between scriptPubKeys and the TXIDs that occur&lt;br/&gt;&amp;gt;&amp;gt; in all the sighash modes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The major differences between simulating CTV via ANYPREVOUT and the&lt;br/&gt;&amp;gt;&amp;gt; actual CTV proposal is: (1) The cost of simulating CTV.  With CTV the&lt;br/&gt;&amp;gt;&amp;gt; spending transaction is committed using a hash of 32 bytes, while&lt;br/&gt;&amp;gt;&amp;gt; simulating it with ANYPREVOUT requires 64 bytes for a signature, and 32&lt;br/&gt;&amp;gt;&amp;gt; bytes for some public key, plus a few more bytes for various flags.  Some&lt;br/&gt;&amp;gt;&amp;gt; of that cost could be reduced by using the inner public key (1 byte&lt;br/&gt;&amp;gt;&amp;gt; representation) and, if we had CAT, maybe by assembling the signature from&lt;br/&gt;&amp;gt;&amp;gt; reusable pieces (i.e. setting the nonce of the commited signature equal to&lt;br/&gt;&amp;gt;&amp;gt; the public key).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The other major difference is: (2) CTV&amp;#39;s transaction hash covers values&lt;br/&gt;&amp;gt;&amp;gt; such as the number of inputs in the transaction and their sequence numbers,&lt;br/&gt;&amp;gt;&amp;gt; which ANYPREVOUT does not cover.  CTV&amp;#39;s hash contains enough information so&lt;br/&gt;&amp;gt;&amp;gt; that when combined with the missing TXIDs, you can compute the TXID of the&lt;br/&gt;&amp;gt;&amp;gt; spending transaction.  In particular if the number of inputs is committed&lt;br/&gt;&amp;gt;&amp;gt; to being 1, once the scriptpubkey&amp;#39;s transaction id is known and committed&lt;br/&gt;&amp;gt;&amp;gt; to the blockchain, the TXID of its spending transaction is deducible.  And&lt;br/&gt;&amp;gt;&amp;gt; if that transaction has outputs that have CTV commitments in them, you can&lt;br/&gt;&amp;gt;&amp;gt; deduce their spending TXIDs in turn.  While this is a pretty neat feature,&lt;br/&gt;&amp;gt;&amp;gt; something that ANYPREVOUT cannot mimic, the main application for it is&lt;br/&gt;&amp;gt;&amp;gt; listed as using congestion control to fund lightning channels, fixing their&lt;br/&gt;&amp;gt;&amp;gt; TXIDs in advance of them being placed on chain.  However, if ANYPREVOUT&lt;br/&gt;&amp;gt;&amp;gt; were used to mimic CTV, then likely it would be eltoo channels that would&lt;br/&gt;&amp;gt;&amp;gt; be funded, and it isn&amp;#39;t necessary to know the TXIDs of eltoo channels in&lt;br/&gt;&amp;gt;&amp;gt; advance in order to use them.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; An Alternative Proposal::&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Given the overlap in functionality between CTV and ANYPREVOUT, I think it&lt;br/&gt;&amp;gt;&amp;gt; makes sense to decompose their operations into their constituent pieces and&lt;br/&gt;&amp;gt;&amp;gt; reassemble their behaviour programmatically.  To this end, I&amp;#39;d like to&lt;br/&gt;&amp;gt;&amp;gt; instead propose OP_TXHASH and OP_CHECKSIGFROMSTACKVERIFY.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; OP_TXHASH would pop a txhash flag from the stack and compute a (tagged)&lt;br/&gt;&amp;gt;&amp;gt; txhash in accordance with that flag, and push the resulting hash onto the&lt;br/&gt;&amp;gt;&amp;gt; stack.&lt;br/&gt;&amp;gt;&amp;gt; OP_CHECKSIGFROMSTACKVERIFY would pop a pubkey, message, and signature&lt;br/&gt;&amp;gt;&amp;gt; from the stack and fail if the signature does not verify on that message.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; CTV and TXHASH have roughly equivalent functionality.  &amp;#39;CTV DROP&amp;#39; can be&lt;br/&gt;&amp;gt;&amp;gt; simulated by &amp;#39;&amp;lt;ctv_style_flag&amp;gt; TXHASH EQUALVERIFY&amp;#39;.  The reverse is also&lt;br/&gt;&amp;gt;&amp;gt; true where &amp;#39;&amp;lt;ctv_style_flag&amp;gt; TXHASH&amp;#39; can be simulated by CTV by&lt;br/&gt;&amp;gt;&amp;gt; &amp;#39;&amp;lt;ctv-result-from-witness-stack&amp;gt; CTV&amp;#39;, however, as you can see, simulating&lt;br/&gt;&amp;gt;&amp;gt; TXHASH from CTV is much more expensive than the other way around, because&lt;br/&gt;&amp;gt;&amp;gt; the resulting 32-byte hash result must be included as part of the witness&lt;br/&gt;&amp;gt;&amp;gt; stack.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;#39;&amp;lt;anyprevout-pubkey&amp;gt; CHECKSIGVERIFY can be simulated by &amp;#39;&amp;lt;apo_style_flag&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; TXHASH &amp;lt;pubkey&amp;gt; CHECKSIGFROMSTACKVERIFY&amp;#39;.  Here we see the advantage of&lt;br/&gt;&amp;gt;&amp;gt; pushing the hash value onto the stack.  APO can be simulated without&lt;br/&gt;&amp;gt;&amp;gt; needing to include a copy of the resulting txhash inside the witness data.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; In addition to the CTV and ANYPREVOUT applications, with&lt;br/&gt;&amp;gt;&amp;gt; CHECKSIGFROMSTACKVERIFY we can verify signatures on arbitrary messages&lt;br/&gt;&amp;gt;&amp;gt; signed by oracles for oracle applications.  This is where we see the&lt;br/&gt;&amp;gt;&amp;gt; benefit of decomposing operations into primitive pieces.  By giving users&lt;br/&gt;&amp;gt;&amp;gt; the ability to program their own use cases from components, we get more&lt;br/&gt;&amp;gt;&amp;gt; applications out of fewer op codes!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Caveats::&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; First, I acknowledge that replicating the behaviour of CTV and ANYPREVOUT&lt;br/&gt;&amp;gt;&amp;gt; does cost a few more bytes than using the custom purpose built proposals&lt;br/&gt;&amp;gt;&amp;gt; themselves.  That is the price to be paid when we choose the ability to&lt;br/&gt;&amp;gt;&amp;gt; program solutions from pieces.  But we get to reap the advantages of being&lt;br/&gt;&amp;gt;&amp;gt; able to build more applications from these pieces.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Unlike CTV, TXHASH is not NOP-compatable and can only be implemented&lt;br/&gt;&amp;gt;&amp;gt; within tapscript.  In particular, bare CTV isn&amp;#39;t possible with this&lt;br/&gt;&amp;gt;&amp;gt; proposal.  However, this proposal doesn&amp;#39;t preclude the possibility of&lt;br/&gt;&amp;gt;&amp;gt; having CTV added to legacy script in while having TXHASH added to tapscript.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; For similar reasons, TXHASH is not amenable to extending the set of&lt;br/&gt;&amp;gt;&amp;gt; txflags at a later date.  In theory, one could have TXHASH&lt;br/&gt;&amp;gt;&amp;gt; abort-with-success when encountering an unknown set of flags.  However,&lt;br/&gt;&amp;gt;&amp;gt; this would make analyzing tapscript much more difficult. Tapscripts would&lt;br/&gt;&amp;gt;&amp;gt; then be able to abort with success or failure depending on the order script&lt;br/&gt;&amp;gt;&amp;gt; fragments are assembled and executed, and getting the order incorrect would&lt;br/&gt;&amp;gt;&amp;gt; be catastrophic.  This behavior is manifestly different from the current&lt;br/&gt;&amp;gt;&amp;gt; batch of OP_SUCCESS opcodes that abort-with-success just by their mere&lt;br/&gt;&amp;gt;&amp;gt; presence, whether they would be executed or not.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I believe the difficulties with upgrading TXHASH can be mitigated by&lt;br/&gt;&amp;gt;&amp;gt; designing a robust set of TXHASH flags from the start.  For example having&lt;br/&gt;&amp;gt;&amp;gt; bits to control whether (1) the version is covered; (2) the locktime is&lt;br/&gt;&amp;gt;&amp;gt; covered; (3) txids are covered; (4) sequence numbers are covered; (5) input&lt;br/&gt;&amp;gt;&amp;gt; amounts are covered; (6) input scriptpubkeys are covered; (7) number of&lt;br/&gt;&amp;gt;&amp;gt; inputs is covered; (8) output amounts are covered; (9) output scriptpubkeys&lt;br/&gt;&amp;gt;&amp;gt; are covered; (10) number of outputs is covered; (11) the tapbranch is&lt;br/&gt;&amp;gt;&amp;gt; covered; (12) the tapleaf is covered; (13) the opseparator value is&lt;br/&gt;&amp;gt;&amp;gt; covered; (14) whether all, one, or no inputs are covered; (15) whether all,&lt;br/&gt;&amp;gt;&amp;gt; one or no outputs are covered; (16) whether the one input position is&lt;br/&gt;&amp;gt;&amp;gt; covered; (17) whether the one output position is covered; (18) whether the&lt;br/&gt;&amp;gt;&amp;gt; sighash flags are covered or not (note: whether or not the sighash flags&lt;br/&gt;&amp;gt;&amp;gt; are or are not covered must itself be covered).  Possibly specifying which&lt;br/&gt;&amp;gt;&amp;gt; input or output position is covered in the single case and whether the&lt;br/&gt;&amp;gt;&amp;gt; position is relative to the input&amp;#39;s position or is an absolute position.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; That all said, even if other txhash flag modes are needed in the future,&lt;br/&gt;&amp;gt;&amp;gt; adding TXHASH2 always remains an option.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Interactions with potential future opcodes::&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; We should give some consideration on how these opcodes may interact with&lt;br/&gt;&amp;gt;&amp;gt; future opcodes such as CAT, rolling SHA256 opcodes, or how it might&lt;br/&gt;&amp;gt;&amp;gt; interface with other covenant opcodes that may do things like, directly&lt;br/&gt;&amp;gt;&amp;gt; push input or output amounts onto the stack for computation purposes,&lt;br/&gt;&amp;gt;&amp;gt; opcodes which have been added to the Elements project.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; With CAT and/or rolling SHA256 opcodes and/or existing SHA256 opcodes,&lt;br/&gt;&amp;gt;&amp;gt; the CHECKSIGFROMSTACKVERIFY could verify signatures on programmatically&lt;br/&gt;&amp;gt;&amp;gt; assembled messages.  Also, in combination with multiple calls to TXHASH,&lt;br/&gt;&amp;gt;&amp;gt; could be used to create signatures that commit to complex subsets of&lt;br/&gt;&amp;gt;&amp;gt; transaction data.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If new opcodes are added to push parts of the transaction data direction&lt;br/&gt;&amp;gt;&amp;gt; onto the stack, e.g. OP_INSPECTOUTPUTVALUE, there is perhaps concern that&lt;br/&gt;&amp;gt;&amp;gt; they would obsolete TXHASH, since, in the presence of rolling SHA256&lt;br/&gt;&amp;gt;&amp;gt; opcodes, TXHASH could be simulated.  However, given that TXHASH can&lt;br/&gt;&amp;gt;&amp;gt; compactly create a hash of large portions of transaction data, it seems&lt;br/&gt;&amp;gt;&amp;gt; unlikely that TXHASH would fall into disuse.  Also, a combination of TXHASH&lt;br/&gt;&amp;gt;&amp;gt; and transaction introspection opcodes can be used to build &amp;#34;*subtractive&lt;br/&gt;&amp;gt;&amp;gt; covenants*&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The usual way of building a covenant, which we will call &amp;#34;*additive *&lt;br/&gt;&amp;gt;&amp;gt; *covenants*&amp;#34;, is to push all the parts of the transaction data you would&lt;br/&gt;&amp;gt;&amp;gt; like to fix onto the stack, hash it all together, and verify the resulting&lt;br/&gt;&amp;gt;&amp;gt; hash matches a fixed value.  Another way of building covenants, which we&lt;br/&gt;&amp;gt;&amp;gt; will call &amp;#34;*subtractive covenants*&amp;#34;, is to push all the parts of the&lt;br/&gt;&amp;gt;&amp;gt; transaction data you would like to remain free onto the stack.  Then use&lt;br/&gt;&amp;gt;&amp;gt; rolling SHA256 opcodes starting from a fixed midstate that commits to a&lt;br/&gt;&amp;gt;&amp;gt; prefix of the transaction hash data. The free parts are hashed into that&lt;br/&gt;&amp;gt;&amp;gt; midstate.  Finally, the resulting hash value is verified to match a value&lt;br/&gt;&amp;gt;&amp;gt; returned by TXHASH.  The ability to nicely build subtractive covenants&lt;br/&gt;&amp;gt;&amp;gt; depends on the details of how the TXHASH hash value is constructed,&lt;br/&gt;&amp;gt;&amp;gt; something that I&amp;#39;m told CTV has given consideration to.&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220127/97b618df/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220127/97b618df/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:02:51Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdkzk5jlpdglzs2jpqxhq0zlmnkdq5g48ru4m9nwfyrzryda8cqlgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966pxwg0</id>
    
      <title type="html">📅 Original date posted:2022-01-26 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdkzk5jlpdglzs2jpqxhq0zlmnkdq5g48ru4m9nwfyrzryda8cqlgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966pxwg0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyg580wp4sc72d25pez4j0pzlexqasu2r44shg99hgegvcr8gjxfgnyfc42&#39;&gt;nevent1q…fc42&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2022-01-26&lt;br/&gt;📝 Original message:Recapping the relationship between CTV and ANYPREVOUT::&lt;br/&gt;&lt;br/&gt;It is known that there is a significant amount of overlap in the&lt;br/&gt;applications that are enabled by the CTV and ANYPREVOUT proposals despite&lt;br/&gt;the fact that their primary applications (congestion control for CTV and&lt;br/&gt;eltoo lightning channels for ANYPREVOUT) are quite distinct.&lt;br/&gt;In particular, ANYPREVOUT can enable most of the applications of CTV,&lt;br/&gt;albeit with a higher cost.  The primary functionality of CTV is to allow a&lt;br/&gt;scriptPubKey to make a commitment to its spending transaction&amp;#39;s hash with&lt;br/&gt;the input&amp;#39;s TXID excluded from the hash.  This exclusion is necessary&lt;br/&gt;because the scriptPubKey is hashed into the input&amp;#39;s TXID, and including the&lt;br/&gt;TXID would cause a cycle of hash commitments, which is impossible to&lt;br/&gt;construct.  On the other hand, ANYPREVOUT defines a signature hash mode&lt;br/&gt;that similarly excludes the inputs TXID for its purpose of rebindable&lt;br/&gt;signatures.&lt;br/&gt;&lt;br/&gt;This means that ANYPREVOUT can mimic most of the properties of CTV by&lt;br/&gt;committing both a public key along with an ANYPREVOUT signature inside&lt;br/&gt;scriptPubKey.  In fact, the only reason Bitcoin doesn&amp;#39;t have covenants&lt;br/&gt;today is due to this cycle between scriptPubKeys and the TXIDs that occur&lt;br/&gt;in all the sighash modes.&lt;br/&gt;&lt;br/&gt;The major differences between simulating CTV via ANYPREVOUT and the actual&lt;br/&gt;CTV proposal is: (1) The cost of simulating CTV.  With CTV the spending&lt;br/&gt;transaction is committed using a hash of 32 bytes, while simulating it with&lt;br/&gt;ANYPREVOUT requires 64 bytes for a signature, and 32 bytes for some public&lt;br/&gt;key, plus a few more bytes for various flags.  Some of that cost could be&lt;br/&gt;reduced by using the inner public key (1 byte representation) and, if we&lt;br/&gt;had CAT, maybe by assembling the signature from reusable pieces (i.e.&lt;br/&gt;setting the nonce of the commited signature equal to the public key).&lt;br/&gt;&lt;br/&gt;The other major difference is: (2) CTV&amp;#39;s transaction hash covers values&lt;br/&gt;such as the number of inputs in the transaction and their sequence numbers,&lt;br/&gt;which ANYPREVOUT does not cover.  CTV&amp;#39;s hash contains enough information so&lt;br/&gt;that when combined with the missing TXIDs, you can compute the TXID of the&lt;br/&gt;spending transaction.  In particular if the number of inputs is committed&lt;br/&gt;to being 1, once the scriptpubkey&amp;#39;s transaction id is known and committed&lt;br/&gt;to the blockchain, the TXID of its spending transaction is deducible.  And&lt;br/&gt;if that transaction has outputs that have CTV commitments in them, you can&lt;br/&gt;deduce their spending TXIDs in turn.  While this is a pretty neat feature,&lt;br/&gt;something that ANYPREVOUT cannot mimic, the main application for it is&lt;br/&gt;listed as using congestion control to fund lightning channels, fixing their&lt;br/&gt;TXIDs in advance of them being placed on chain.  However, if ANYPREVOUT&lt;br/&gt;were used to mimic CTV, then likely it would be eltoo channels that would&lt;br/&gt;be funded, and it isn&amp;#39;t necessary to know the TXIDs of eltoo channels in&lt;br/&gt;advance in order to use them.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;An Alternative Proposal::&lt;br/&gt;&lt;br/&gt;Given the overlap in functionality between CTV and ANYPREVOUT, I think it&lt;br/&gt;makes sense to decompose their operations into their constituent pieces and&lt;br/&gt;reassemble their behaviour programmatically.  To this end, I&amp;#39;d like to&lt;br/&gt;instead propose OP_TXHASH and OP_CHECKSIGFROMSTACKVERIFY.&lt;br/&gt;&lt;br/&gt;OP_TXHASH would pop a txhash flag from the stack and compute a (tagged)&lt;br/&gt;txhash in accordance with that flag, and push the resulting hash onto the&lt;br/&gt;stack.&lt;br/&gt;OP_CHECKSIGFROMSTACKVERIFY would pop a pubkey, message, and signature from&lt;br/&gt;the stack and fail if the signature does not verify on that message.&lt;br/&gt;&lt;br/&gt;CTV and TXHASH have roughly equivalent functionality.  &amp;#39;CTV DROP&amp;#39; can be&lt;br/&gt;simulated by &amp;#39;&amp;lt;ctv_style_flag&amp;gt; TXHASH EQUALVERIFY&amp;#39;.  The reverse is also&lt;br/&gt;true where &amp;#39;&amp;lt;ctv_style_flag&amp;gt; TXHASH&amp;#39; can be simulated by CTV by&lt;br/&gt;&amp;#39;&amp;lt;ctv-result-from-witness-stack&amp;gt; CTV&amp;#39;, however, as you can see, simulating&lt;br/&gt;TXHASH from CTV is much more expensive than the other way around, because&lt;br/&gt;the resulting 32-byte hash result must be included as part of the witness&lt;br/&gt;stack.&lt;br/&gt;&lt;br/&gt;&amp;#39;&amp;lt;anyprevout-pubkey&amp;gt; CHECKSIGVERIFY can be simulated by &amp;#39;&amp;lt;apo_style_flag&amp;gt;&lt;br/&gt;TXHASH &amp;lt;pubkey&amp;gt; CHECKSIGFROMSTACKVERIFY&amp;#39;.  Here we see the advantage of&lt;br/&gt;pushing the hash value onto the stack.  APO can be simulated without&lt;br/&gt;needing to include a copy of the resulting txhash inside the witness data.&lt;br/&gt;&lt;br/&gt;In addition to the CTV and ANYPREVOUT applications, with&lt;br/&gt;CHECKSIGFROMSTACKVERIFY we can verify signatures on arbitrary messages&lt;br/&gt;signed by oracles for oracle applications.  This is where we see the&lt;br/&gt;benefit of decomposing operations into primitive pieces.  By giving users&lt;br/&gt;the ability to program their own use cases from components, we get more&lt;br/&gt;applications out of fewer op codes!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Caveats::&lt;br/&gt;&lt;br/&gt;First, I acknowledge that replicating the behaviour of CTV and ANYPREVOUT&lt;br/&gt;does cost a few more bytes than using the custom purpose built proposals&lt;br/&gt;themselves.  That is the price to be paid when we choose the ability to&lt;br/&gt;program solutions from pieces.  But we get to reap the advantages of being&lt;br/&gt;able to build more applications from these pieces.&lt;br/&gt;&lt;br/&gt;Unlike CTV, TXHASH is not NOP-compatable and can only be implemented within&lt;br/&gt;tapscript.  In particular, bare CTV isn&amp;#39;t possible with this proposal.&lt;br/&gt;However, this proposal doesn&amp;#39;t preclude the possibility of having CTV added&lt;br/&gt;to legacy script in while having TXHASH added to tapscript.&lt;br/&gt;&lt;br/&gt;For similar reasons, TXHASH is not amenable to extending the set of txflags&lt;br/&gt;at a later date.  In theory, one could have TXHASH abort-with-success when&lt;br/&gt;encountering an unknown set of flags.  However, this would make analyzing&lt;br/&gt;tapscript much more difficult. Tapscripts would then be able to abort with&lt;br/&gt;success or failure depending on the order script fragments are assembled&lt;br/&gt;and executed, and getting the order incorrect would be catastrophic.  This&lt;br/&gt;behavior is manifestly different from the current batch of OP_SUCCESS&lt;br/&gt;opcodes that abort-with-success just by their mere presence, whether they&lt;br/&gt;would be executed or not.&lt;br/&gt;&lt;br/&gt;I believe the difficulties with upgrading TXHASH can be mitigated by&lt;br/&gt;designing a robust set of TXHASH flags from the start.  For example having&lt;br/&gt;bits to control whether (1) the version is covered; (2) the locktime is&lt;br/&gt;covered; (3) txids are covered; (4) sequence numbers are covered; (5) input&lt;br/&gt;amounts are covered; (6) input scriptpubkeys are covered; (7) number of&lt;br/&gt;inputs is covered; (8) output amounts are covered; (9) output scriptpubkeys&lt;br/&gt;are covered; (10) number of outputs is covered; (11) the tapbranch is&lt;br/&gt;covered; (12) the tapleaf is covered; (13) the opseparator value is&lt;br/&gt;covered; (14) whether all, one, or no inputs are covered; (15) whether all,&lt;br/&gt;one or no outputs are covered; (16) whether the one input position is&lt;br/&gt;covered; (17) whether the one output position is covered; (18) whether the&lt;br/&gt;sighash flags are covered or not (note: whether or not the sighash flags&lt;br/&gt;are or are not covered must itself be covered).  Possibly specifying which&lt;br/&gt;input or output position is covered in the single case and whether the&lt;br/&gt;position is relative to the input&amp;#39;s position or is an absolute position.&lt;br/&gt;&lt;br/&gt;That all said, even if other txhash flag modes are needed in the future,&lt;br/&gt;adding TXHASH2 always remains an option.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Interactions with potential future opcodes::&lt;br/&gt;&lt;br/&gt;We should give some consideration on how these opcodes may interact with&lt;br/&gt;future opcodes such as CAT, rolling SHA256 opcodes, or how it might&lt;br/&gt;interface with other covenant opcodes that may do things like, directly&lt;br/&gt;push input or output amounts onto the stack for computation purposes,&lt;br/&gt;opcodes which have been added to the Elements project.&lt;br/&gt;&lt;br/&gt;With CAT and/or rolling SHA256 opcodes and/or existing SHA256 opcodes, the&lt;br/&gt;CHECKSIGFROMSTACKVERIFY could verify signatures on programmatically&lt;br/&gt;assembled messages.  Also, in combination with multiple calls to TXHASH,&lt;br/&gt;could be used to create signatures that commit to complex subsets of&lt;br/&gt;transaction data.&lt;br/&gt;&lt;br/&gt;If new opcodes are added to push parts of the transaction data direction&lt;br/&gt;onto the stack, e.g. OP_INSPECTOUTPUTVALUE, there is perhaps concern that&lt;br/&gt;they would obsolete TXHASH, since, in the presence of rolling SHA256&lt;br/&gt;opcodes, TXHASH could be simulated.  However, given that TXHASH can&lt;br/&gt;compactly create a hash of large portions of transaction data, it seems&lt;br/&gt;unlikely that TXHASH would fall into disuse.  Also, a combination of TXHASH&lt;br/&gt;and transaction introspection opcodes can be used to build &amp;#34;*subtractive&lt;br/&gt;covenants*&amp;#34;.&lt;br/&gt;&lt;br/&gt;The usual way of building a covenant, which we will call &amp;#34;*additive *&lt;br/&gt;*covenants*&amp;#34;, is to push all the parts of the transaction data you would&lt;br/&gt;like to fix onto the stack, hash it all together, and verify the resulting&lt;br/&gt;hash matches a fixed value.  Another way of building covenants, which we&lt;br/&gt;will call &amp;#34;*subtractive covenants*&amp;#34;, is to push all the parts of the&lt;br/&gt;transaction data you would like to remain free onto the stack.  Then use&lt;br/&gt;rolling SHA256 opcodes starting from a fixed midstate that commits to a&lt;br/&gt;prefix of the transaction hash data. The free parts are hashed into that&lt;br/&gt;midstate.  Finally, the resulting hash value is verified to match a value&lt;br/&gt;returned by TXHASH.  The ability to nicely build subtractive covenants&lt;br/&gt;depends on the details of how the TXHASH hash value is constructed,&lt;br/&gt;something that I&amp;#39;m told CTV has given consideration to.&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/20220126/1f33d0b3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20220126/1f33d0b3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T23:02:49Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs07389c7y57nyf3yrfweqytm5k9vexwzq3xe6dq7tez03pjczdjhczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596d4n783</id>
    
      <title type="html">📅 Original date posted:2021-07-07 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs07389c7y57nyf3yrfweqytm5k9vexwzq3xe6dq7tez03pjczdjhczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596d4n783" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszc0gsyqu0wgxt78vdfpzruhv4dfwrq67w66emv3rg7ux5pnj57zqgnegnh&#39;&gt;nevent1q…egnh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-07&lt;br/&gt;📝 Original message:On Wed, Jul 7, 2021 at 9:12 AM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Jul 7, 2021 at 12:26 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Good morning Russell,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I don&amp;#39;t believe we need to ban Turing completeness for the sake of&lt;br/&gt;&amp;gt;&amp;gt; banning Turing completeness.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Well I believe we should ban partial Turing-completeness, but allow total&lt;br/&gt;&amp;gt;&amp;gt; Turing-completeness.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Unfortunately, when it comes to cross-transaction computations, it is&lt;br/&gt;&amp;gt; infeasible to ban non-terminating computation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The nature of recursive covenants is that the program &amp;#34;writes&amp;#34; the *source&lt;br/&gt;&amp;gt; code* next step of the computation to the scriptPubKey to one of the&lt;br/&gt;&amp;gt; outputs of its transaction. Technically speaking it verifies that the&lt;br/&gt;&amp;gt; scriptPubKey is a commitment to the source code of the next step of the&lt;br/&gt;&amp;gt; program, but morally that is the same as writing the source code.  Then the&lt;br/&gt;&amp;gt; next step of the computation is invoked by someone &amp;#34;evaluating* that next&lt;br/&gt;&amp;gt; step&amp;#39;s source code by creating a valid transaction that spends the&lt;br/&gt;&amp;gt; generated output.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The point is this ability to create new source code and then evaluate it&lt;br/&gt;&amp;gt; leads to the ability to write universal (i.e non-terminating)&lt;br/&gt;&amp;gt; computations.  The only way to prevent it is to ban source code&lt;br/&gt;&amp;gt; manipulation, but since Bitcoin Script source code is just a string of&lt;br/&gt;&amp;gt; bytes, it would mean banning the manipulation of strings of bytes.  But the&lt;br/&gt;&amp;gt; entire Bitcoin Script language works by manipulating strings of bytes&lt;br/&gt;&amp;gt; within a stack machine.  Indeed the most trivial of non-terminating&lt;br/&gt;&amp;gt; programs can be implemented by extracting the current input&amp;#39;s scriptPubKey&lt;br/&gt;&amp;gt; from the sighash and &amp;#34;writing&amp;#34; the identical scriptPubKey to one of its&lt;br/&gt;&amp;gt; outputs.  That example hardly takes any manipulation at all to implement.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;A follow up:  Because recursive covenants need to be sent to a new&lt;br/&gt;transaction in order to recurse, you might choose to view this stepping&lt;br/&gt;mechanism as productive by modeling each transaction step as the continue&lt;br/&gt;constructor in your RecResult codata type.  Indeed after (drinking coffee&lt;br/&gt;and) rereading your mailing list item, it seems that this is the point you&lt;br/&gt;were making.&lt;br/&gt;&lt;br/&gt;So sorry for my hasty response.  I believe we are largely in agreement here.&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/20210707/9a33d4a0/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210707/9a33d4a0/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszc0gsyqu0wgxt78vdfpzruhv4dfwrq67w66emv3rg7ux5pnj57zqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5962h929u</id>
    
      <title type="html">📅 Original date posted:2021-07-07 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszc0gsyqu0wgxt78vdfpzruhv4dfwrq67w66emv3rg7ux5pnj57zqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5962h929u" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2wt2y2thfx23zkhe937pyclp6aue92zejucy3kj75etxu8qle5gganx7fx&#39;&gt;nevent1q…x7fx&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-07&lt;br/&gt;📝 Original message:On Wed, Jul 7, 2021 at 12:26 AM ZmnSCPxj &amp;lt;ZmnSCPxj at protonmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Good morning Russell,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Hi ZmnSCPxj,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I don&amp;#39;t believe we need to ban Turing completeness for the sake of&lt;br/&gt;&amp;gt; banning Turing completeness.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Well I believe we should ban partial Turing-completeness, but allow total&lt;br/&gt;&amp;gt; Turing-completeness.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Unfortunately, when it comes to cross-transaction computations, it is&lt;br/&gt;infeasible to ban non-terminating computation.&lt;br/&gt;&lt;br/&gt;The nature of recursive covenants is that the program &amp;#34;writes&amp;#34; the *source&lt;br/&gt;code* next step of the computation to the scriptPubKey to one of the&lt;br/&gt;outputs of its transaction. Technically speaking it verifies that the&lt;br/&gt;scriptPubKey is a commitment to the source code of the next step of the&lt;br/&gt;program, but morally that is the same as writing the source code.  Then the&lt;br/&gt;next step of the computation is invoked by someone &amp;#34;evaluating* that next&lt;br/&gt;step&amp;#39;s source code by creating a valid transaction that spends the&lt;br/&gt;generated output.&lt;br/&gt;&lt;br/&gt;The point is this ability to create new source code and then evaluate it&lt;br/&gt;leads to the ability to write universal (i.e non-terminating)&lt;br/&gt;computations.  The only way to prevent it is to ban source code&lt;br/&gt;manipulation, but since Bitcoin Script source code is just a string of&lt;br/&gt;bytes, it would mean banning the manipulation of strings of bytes.  But the&lt;br/&gt;entire Bitcoin Script language works by manipulating strings of bytes&lt;br/&gt;within a stack machine.  Indeed the most trivial of non-terminating&lt;br/&gt;programs can be implemented by extracting the current input&amp;#39;s scriptPubKey&lt;br/&gt;from the sighash and &amp;#34;writing&amp;#34; the identical scriptPubKey to one of its&lt;br/&gt;outputs.  That example hardly takes any manipulation at all to implement.&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/20210707/1a038896/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210707/1a038896/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsz6agr6p3tl4qauv2zaqt3mzsuwx0qnkaj934e5w873u3mvqennnqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5964h9vmp</id>
    
      <title type="html">📅 Original date posted:2021-07-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsz6agr6p3tl4qauv2zaqt3mzsuwx0qnkaj934e5w873u3mvqennnqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5964h9vmp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszs86cadcn7eymqyxqpvkqx8ayafuevn9zd5ptgwvzlhy27u3w7vqwvuvdm&#39;&gt;nevent1q…uvdm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-06&lt;br/&gt;📝 Original message:On Tue, Jul 6, 2021 at 2:26 AM Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt;  when people are talking about enabling covenants, we are talking about&lt;br/&gt;&amp;gt; whether OP_CAT should be allowed or not&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Are they? Are you implying that anything that enables covenants is&lt;br/&gt;&amp;gt; equivalent to enabling OP_CAT? Generally when I think about enabling&lt;br/&gt;&amp;gt; covenants, I&amp;#39;m thinking more about OP_CTV (or some similarly specific&lt;br/&gt;&amp;gt; opcode&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bip-constraindestination.md&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bip-constraindestination.md&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; ).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; OP_TWEAK&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I wasn&amp;#39;t able to find anything about what that is. Would you mind&lt;br/&gt;&amp;gt; clarifying what that concept is?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;In tapscript one can generally recover the current input&amp;#39;s scriptPubkey&lt;br/&gt;through sighash introspection via the usual covenant tricks.  This allows&lt;br/&gt;you to make a recursive covenant by spending funds back to the same&lt;br/&gt;identical scriptPubkey.  However, in order for a recursive covenant to be&lt;br/&gt;actually interesting, there needs to be some sort of state update in each&lt;br/&gt;transition.  If there is no state update then sending funds back to itself&lt;br/&gt;is of very limited value.  It will reset the timer on relative locks, but&lt;br/&gt;that is about all.&lt;br/&gt;&lt;br/&gt;The &amp;#34;normal&amp;#34; way of writing useful recursive covenants is to modify the&lt;br/&gt;scriptPubkey by changing a fragment of it that contains some sort of&lt;br/&gt;state.  However in order to update a tapscript pubkey one needs to apply&lt;br/&gt;not only hashing, to create a Merkel root, but also to create a tweaked&lt;br/&gt;taproot pubkey that commits to this root.  While script currently comes&lt;br/&gt;with a SHA-256 hashing opcode, there is no opcode that will let you perform&lt;br/&gt;the necessary tweaking to create a taproot scriptPubkey.&lt;br/&gt;&lt;br/&gt;But as I mentioned afterwards, there are other places in the UTXO that you&lt;br/&gt;could put data in order to perform a state update.&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/20210706/e7b418bc/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210706/e7b418bc/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:29Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsp0cd84m4rp2f8jhlwk9v4rw026yfs470yxn2pvdnx9ggvla5920gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hwyna0</id>
    
      <title type="html">📅 Original date posted:2021-07-05 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsp0cd84m4rp2f8jhlwk9v4rw026yfs470yxn2pvdnx9ggvla5920gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hwyna0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsruyy28kfj379ahd7s3gsae9acarqty6cshnshcf52379kts8q8acrrjyc7&#39;&gt;nevent1q…jyc7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-05&lt;br/&gt;📝 Original message:Hi ZmnSCPxj,&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t believe we need to ban Turing completeness for the sake of banning&lt;br/&gt;Turing completeness.  My concerns have always been around ensuring that&lt;br/&gt;transaction and block validation is not unduly burdensome for nodes.  So&lt;br/&gt;for Bitcoin Script, we want to bound the amount of resources needed to&lt;br/&gt;execute it, preferably as a linear function of weight[1], and preferably&lt;br/&gt;have it clear what the evaluation costs are going to be prior to&lt;br/&gt;evaluation[2].  We also want to keep Script execution as a pure function of&lt;br/&gt;the transaction data so that nodes do not need to reevaluate their mempool&lt;br/&gt;on every new block.  For consensus purposes we prefer to have simple&lt;br/&gt;primitive operations that have clear and precise semantics that are as&lt;br/&gt;likely as possible to be reimplemented correctly if they are reimplemented&lt;br/&gt;(or at least let us not make this problem worse than it already is).  In&lt;br/&gt;particular, Script needs to be easy to parse to avoid weird parsing&lt;br/&gt;machines that lead to security vulnerabilities within node software.&lt;br/&gt;&lt;br/&gt;While the above design constraints imply a prohibition on Turing complete&lt;br/&gt;computation within a single Script, they do not imply a prohibition on&lt;br/&gt;arbitrary, covenant-enabled computations that spans across multiple&lt;br/&gt;transactions.  Neither would these constraints prohibit some kind of STARK&lt;br/&gt;or SNARK tapleaf version that was somehow capable of succinctly&lt;br/&gt;representing arbitrary computations, so long as validation costs remain&lt;br/&gt;bounded.&lt;br/&gt;&lt;br/&gt;And while it is true that covenant-enabled computations could allow users&lt;br/&gt;to put their funds at risk through weird machines that manipulate their&lt;br/&gt;money on the blockchain, as longs as that weirdness stays at that level of&lt;br/&gt;the abstract Bitcoin Script machine, then I suppose it is *caveat emptor*;&lt;br/&gt;don&amp;#39;t send your funds to random unverified Bitcoin Scripts, advice that is&lt;br/&gt;already the case today.  We can keep that potential weirdness at bay by&lt;br/&gt;keeping Script simple, and maintaining our understanding that the Script&lt;br/&gt;programs (like the rest of the blockchain data) are untrusted inputs and&lt;br/&gt;they need to be validated and scrutinized before interpretation.&lt;br/&gt;&lt;br/&gt;[1] In tapscript I believe all operations are linear time with the&lt;br/&gt;exception of OP_ROLL.  However OP_ROLL is still constrained by global&lt;br/&gt;limits on stack size, etc.&lt;br/&gt;[2] In Bitcoin Script, without loops of any kind, every opcode is evaluated&lt;br/&gt;at most once, so counting opcodes is an easy way to put an upper bound on&lt;br/&gt;your costs before evaluation.&lt;br/&gt;&lt;br/&gt;On Sun, Jul 4, 2021 at 8:51 PM ZmnSCPxj 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; Good morning Dave,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Sun, Jul 04, 2021 at 11:39:44AM -0700, Jeremy wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; However, I think the broader community is unconvinced by the cost&lt;br/&gt;&amp;gt; benefit&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; of arbitrary covenants. See&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/block-digest-mempool/my-worries-about-too-generalized-covenants-5eff33affbb6&#34;&gt;https://medium.com/block-digest-mempool/my-worries-about-too-generalized-covenants-5eff33affbb6&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; as a recent example. Therefore as a critical part of building&lt;br/&gt;&amp;gt; consensus on&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; various techniques I&amp;#39;ve worked to emphasize that specific additions do&lt;br/&gt;&amp;gt; not&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; entail risk of accidentally introducing more than was bargained for to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; respect the concerns of others.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Respecting the concerns of others doesn&amp;#39;t require lobotomizing useful&lt;br/&gt;&amp;gt; &amp;gt; tools. Being respectful can also be accomplished by politely showing&lt;br/&gt;&amp;gt; &amp;gt; that their concerns are unfounded (or at least less severe than they&lt;br/&gt;&amp;gt; &amp;gt; thought). This is almost always the better course IMO---it takes much&lt;br/&gt;&amp;gt; &amp;gt; more effort to satisfy additional engineering constraints (and prove to&lt;br/&gt;&amp;gt; &amp;gt; reviewers that you&amp;#39;ve done so!) than it does to simply discuss those&lt;br/&gt;&amp;gt; &amp;gt; concerns with reasonable stakeholders. As a demonstration, let&amp;#39;s look&lt;br/&gt;&amp;gt; &amp;gt; at the concerns from Shinobi&amp;#39;s post linked above:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; They seem to be worried that some Bitcoin users will choose to accept&lt;br/&gt;&amp;gt; &amp;gt; coins that can&amp;#39;t subsequently be fungibily mixed with other bitcoins.&lt;br/&gt;&amp;gt; &amp;gt; But that&amp;#39;s already been the case for a decade: users can accept altcoins&lt;br/&gt;&amp;gt; &amp;gt; that are non-fungible with bitcoins.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; They talk about covenants where spending is controlled by governments,&lt;br/&gt;&amp;gt; &amp;gt; but that seems to me exactly like China&amp;#39;s CBDC trial.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; They talk about exchanges depositing users&amp;#39; BTC into a covenant, but&lt;br/&gt;&amp;gt; &amp;gt; that&amp;#39;s just a variation on the classic not-your-keys-not-your-bitcoins&lt;br/&gt;&amp;gt; &amp;gt; problem. For all you know, your local exchange is keeping most of its&lt;br/&gt;&amp;gt; &amp;gt; BTC balance commitments in ETH or USDT.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; To me, it seems like the worst-case problems Shinobi describes with&lt;br/&gt;&amp;gt; &amp;gt; covenants are some of the same problems that already exist with&lt;br/&gt;&amp;gt; &amp;gt; altcoins. I don&amp;#39;t see how recursive covenants could make any of those&lt;br/&gt;&amp;gt; &amp;gt; problems worse, and so I don&amp;#39;t see any point in limiting Bitcoin&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; flexibility to avoid those problems when there are so many interesting&lt;br/&gt;&amp;gt; &amp;gt; and useful things that unlimited covenants could do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The &amp;#34;altcoins are even worse&amp;#34; argument does seem quite convincing, and if&lt;br/&gt;&amp;gt; Bitcoin can survive altcoins, surely it can survive covenants too?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In before &amp;#34;turns out covenants are the next ICO&amp;#34;.&lt;br/&gt;&amp;gt; i.e. ICOs are just colored coins, which are useful for keeping track of&lt;br/&gt;&amp;gt; various stuff, but have then been used as a vehicle to scam people.&lt;br/&gt;&amp;gt; But I suppose that is a problem that humans will always have: limited&lt;br/&gt;&amp;gt; cognition, so that *good* popular things that are outside your specific&lt;br/&gt;&amp;gt; field of study are indistinguishable from *bad* popular things.&lt;br/&gt;&amp;gt; So perhaps it should not be a concern on a technical level.&lt;br/&gt;&amp;gt; Maybe we should instead make articles about covenants so boring nobody&lt;br/&gt;&amp;gt; will hype about it (^^;)v.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Increased functionality implies increased processing, and hopefully&lt;br/&gt;&amp;gt; computation devices are getting cheap enough that the increased processing&lt;br/&gt;&amp;gt; implied by new features should not be too onerous.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To my mind, an &amp;#34;inescapable&amp;#34; covenant (i.e. one that requires the output&lt;br/&gt;&amp;gt; to be paid to the same covenant) is basically a Turing machine, and&lt;br/&gt;&amp;gt; equivalent to a `while (true);` loop.&lt;br/&gt;&amp;gt; In a `while (true);` loop, the state of the machine reverts back to the&lt;br/&gt;&amp;gt; same state, and it repeats again.&lt;br/&gt;&amp;gt; In an inescpable covenant, the control of some amount of funds reverts&lt;br/&gt;&amp;gt; back to the same controlling SCRIPT, and it repeats again.&lt;br/&gt;&amp;gt; Yes, you can certainly add more functionality on top of that loop, just&lt;br/&gt;&amp;gt; think of program main loops for games or daemons, which are, in essence,&lt;br/&gt;&amp;gt; &amp;#34;just&amp;#34; `while (true) ...`.&lt;br/&gt;&amp;gt; But basically, such unbounded infinite loops are possible only under&lt;br/&gt;&amp;gt; Turing machines, thus I consider covenants to be Turing-complete.&lt;br/&gt;&amp;gt; Principle of Least Power should make us wonder if we need full Turing&lt;br/&gt;&amp;gt; machines for the functionality.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand --- codata processing *does* allow for unbounded loops,&lt;br/&gt;&amp;gt; without requiring full Turing-completeness; they just require total&lt;br/&gt;&amp;gt; functionality, not partial (and Turing-completeness is partial, not total).&lt;br/&gt;&amp;gt; Basically, data structures are unbounded storage, while codata structures&lt;br/&gt;&amp;gt; are unbounded processing.&lt;br/&gt;&amp;gt; Perhaps covenants can encode an upper bound on the number of recursions,&lt;br/&gt;&amp;gt; which prevents full Turing-completeness while allowing for a large number&lt;br/&gt;&amp;gt; of use-cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (if the above paragraph makes no sense to you, hopefully this Wikipedia&lt;br/&gt;&amp;gt; article will help:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://en.wikipedia.org/wiki/Total_functional_programming&#34;&gt;https://en.wikipedia.org/wiki/Total_functional_programming&lt;/a&gt; )&lt;br/&gt;&amp;gt; (basically my argument here is based on academic programming stuff, and&lt;br/&gt;&amp;gt; might not actually matter in real life)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&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/20210705/67abbcb9/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210705/67abbcb9/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:26Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxu7pp56hh4rprkejfandvrnyng0au6tsc4na76hm3grfm4dm6clszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596kftmnf</id>
    
      <title type="html">📅 Original date posted:2021-07-04 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxu7pp56hh4rprkejfandvrnyng0au6tsc4na76hm3grfm4dm6clszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596kftmnf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszn9l3nxmq2lawzp482qx8n999qpdpxuxc6wqqtgkjrwvy9pch8jsx5kru9&#39;&gt;nevent1q…kru9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-04&lt;br/&gt;📝 Original message:On Sun, Jul 4, 2021 at 9:02 PM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Bear in mind that when people are talking about enabling covenants, we are&lt;br/&gt;&amp;gt; talking about whether OP_CAT should be allowed or not.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That said, recursive covenants, the type that are most worrying, seems to&lt;br/&gt;&amp;gt; require some kind of OP_TWEAK operation, and I haven&amp;#39;t yet seen any&lt;br/&gt;&amp;gt; evidence that this can be simulated with CHECKSIG(FROMSTACK).  So maybe we&lt;br/&gt;&amp;gt; should leave such worries for the OP_TWEAK operation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Upon further thought, you can probably make recursive covenants even with a&lt;br/&gt;fixed scritpubkey by sneaking the state into a few bits of the UTXO&amp;#39;s&lt;br/&gt;amount.  Or if you try really hard, you may be able to stash your state&lt;br/&gt;into a sibling output that is accessed via the txid embedded in the&lt;br/&gt;prevoutpoint.&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/20210704/b5a2a3f1/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210704/b5a2a3f1/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:24Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszn9l3nxmq2lawzp482qx8n999qpdpxuxc6wqqtgkjrwvy9pch8jszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596zx2t7y</id>
    
      <title type="html">📅 Original date posted:2021-07-04 📝 Original message:Bear ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszn9l3nxmq2lawzp482qx8n999qpdpxuxc6wqqtgkjrwvy9pch8jszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596zx2t7y" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0q8ffpehu8gqd7g5pwtx9gj7um8gw00tc9lpteuhh300466ap6fcdwkvma&#39;&gt;nevent1q…kvma&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-04&lt;br/&gt;📝 Original message:Bear in mind that when people are talking about enabling covenants, we are&lt;br/&gt;talking about whether OP_CAT should be allowed or not.&lt;br/&gt;&lt;br/&gt;That said, recursive covenants, the type that are most worrying, seems to&lt;br/&gt;require some kind of OP_TWEAK operation, and I haven&amp;#39;t yet seen any&lt;br/&gt;evidence that this can be simulated with CHECKSIG(FROMSTACK).  So maybe we&lt;br/&gt;should leave such worries for the OP_TWEAK operation.&lt;br/&gt;&lt;br/&gt;On Sun, Jul 4, 2021 at 8:51 PM ZmnSCPxj 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; Good morning Dave,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Sun, Jul 04, 2021 at 11:39:44AM -0700, Jeremy wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; However, I think the broader community is unconvinced by the cost&lt;br/&gt;&amp;gt; benefit&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; of arbitrary covenants. See&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://medium.com/block-digest-mempool/my-worries-about-too-generalized-covenants-5eff33affbb6&#34;&gt;https://medium.com/block-digest-mempool/my-worries-about-too-generalized-covenants-5eff33affbb6&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; as a recent example. Therefore as a critical part of building&lt;br/&gt;&amp;gt; consensus on&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; various techniques I&amp;#39;ve worked to emphasize that specific additions do&lt;br/&gt;&amp;gt; not&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; entail risk of accidentally introducing more than was bargained for to&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; respect the concerns of others.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Respecting the concerns of others doesn&amp;#39;t require lobotomizing useful&lt;br/&gt;&amp;gt; &amp;gt; tools. Being respectful can also be accomplished by politely showing&lt;br/&gt;&amp;gt; &amp;gt; that their concerns are unfounded (or at least less severe than they&lt;br/&gt;&amp;gt; &amp;gt; thought). This is almost always the better course IMO---it takes much&lt;br/&gt;&amp;gt; &amp;gt; more effort to satisfy additional engineering constraints (and prove to&lt;br/&gt;&amp;gt; &amp;gt; reviewers that you&amp;#39;ve done so!) than it does to simply discuss those&lt;br/&gt;&amp;gt; &amp;gt; concerns with reasonable stakeholders. As a demonstration, let&amp;#39;s look&lt;br/&gt;&amp;gt; &amp;gt; at the concerns from Shinobi&amp;#39;s post linked above:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; They seem to be worried that some Bitcoin users will choose to accept&lt;br/&gt;&amp;gt; &amp;gt; coins that can&amp;#39;t subsequently be fungibily mixed with other bitcoins.&lt;br/&gt;&amp;gt; &amp;gt; But that&amp;#39;s already been the case for a decade: users can accept altcoins&lt;br/&gt;&amp;gt; &amp;gt; that are non-fungible with bitcoins.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; They talk about covenants where spending is controlled by governments,&lt;br/&gt;&amp;gt; &amp;gt; but that seems to me exactly like China&amp;#39;s CBDC trial.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; They talk about exchanges depositing users&amp;#39; BTC into a covenant, but&lt;br/&gt;&amp;gt; &amp;gt; that&amp;#39;s just a variation on the classic not-your-keys-not-your-bitcoins&lt;br/&gt;&amp;gt; &amp;gt; problem. For all you know, your local exchange is keeping most of its&lt;br/&gt;&amp;gt; &amp;gt; BTC balance commitments in ETH or USDT.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; To me, it seems like the worst-case problems Shinobi describes with&lt;br/&gt;&amp;gt; &amp;gt; covenants are some of the same problems that already exist with&lt;br/&gt;&amp;gt; &amp;gt; altcoins. I don&amp;#39;t see how recursive covenants could make any of those&lt;br/&gt;&amp;gt; &amp;gt; problems worse, and so I don&amp;#39;t see any point in limiting Bitcoin&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; flexibility to avoid those problems when there are so many interesting&lt;br/&gt;&amp;gt; &amp;gt; and useful things that unlimited covenants could do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The &amp;#34;altcoins are even worse&amp;#34; argument does seem quite convincing, and if&lt;br/&gt;&amp;gt; Bitcoin can survive altcoins, surely it can survive covenants too?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In before &amp;#34;turns out covenants are the next ICO&amp;#34;.&lt;br/&gt;&amp;gt; i.e. ICOs are just colored coins, which are useful for keeping track of&lt;br/&gt;&amp;gt; various stuff, but have then been used as a vehicle to scam people.&lt;br/&gt;&amp;gt; But I suppose that is a problem that humans will always have: limited&lt;br/&gt;&amp;gt; cognition, so that *good* popular things that are outside your specific&lt;br/&gt;&amp;gt; field of study are indistinguishable from *bad* popular things.&lt;br/&gt;&amp;gt; So perhaps it should not be a concern on a technical level.&lt;br/&gt;&amp;gt; Maybe we should instead make articles about covenants so boring nobody&lt;br/&gt;&amp;gt; will hype about it (^^;)v.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Increased functionality implies increased processing, and hopefully&lt;br/&gt;&amp;gt; computation devices are getting cheap enough that the increased processing&lt;br/&gt;&amp;gt; implied by new features should not be too onerous.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To my mind, an &amp;#34;inescapable&amp;#34; covenant (i.e. one that requires the output&lt;br/&gt;&amp;gt; to be paid to the same covenant) is basically a Turing machine, and&lt;br/&gt;&amp;gt; equivalent to a `while (true);` loop.&lt;br/&gt;&amp;gt; In a `while (true);` loop, the state of the machine reverts back to the&lt;br/&gt;&amp;gt; same state, and it repeats again.&lt;br/&gt;&amp;gt; In an inescpable covenant, the control of some amount of funds reverts&lt;br/&gt;&amp;gt; back to the same controlling SCRIPT, and it repeats again.&lt;br/&gt;&amp;gt; Yes, you can certainly add more functionality on top of that loop, just&lt;br/&gt;&amp;gt; think of program main loops for games or daemons, which are, in essence,&lt;br/&gt;&amp;gt; &amp;#34;just&amp;#34; `while (true) ...`.&lt;br/&gt;&amp;gt; But basically, such unbounded infinite loops are possible only under&lt;br/&gt;&amp;gt; Turing machines, thus I consider covenants to be Turing-complete.&lt;br/&gt;&amp;gt; Principle of Least Power should make us wonder if we need full Turing&lt;br/&gt;&amp;gt; machines for the functionality.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On the other hand --- codata processing *does* allow for unbounded loops,&lt;br/&gt;&amp;gt; without requiring full Turing-completeness; they just require total&lt;br/&gt;&amp;gt; functionality, not partial (and Turing-completeness is partial, not total).&lt;br/&gt;&amp;gt; Basically, data structures are unbounded storage, while codata structures&lt;br/&gt;&amp;gt; are unbounded processing.&lt;br/&gt;&amp;gt; Perhaps covenants can encode an upper bound on the number of recursions,&lt;br/&gt;&amp;gt; which prevents full Turing-completeness while allowing for a large number&lt;br/&gt;&amp;gt; of use-cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (if the above paragraph makes no sense to you, hopefully this Wikipedia&lt;br/&gt;&amp;gt; article will help:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://en.wikipedia.org/wiki/Total_functional_programming&#34;&gt;https://en.wikipedia.org/wiki/Total_functional_programming&lt;/a&gt; )&lt;br/&gt;&amp;gt; (basically my argument here is based on academic programming stuff, and&lt;br/&gt;&amp;gt; might not actually matter in real life)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&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/20210704/21a239fc/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210704/21a239fc/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:23Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsrzgl9er8pk0f2uuramvr7tx9e5pmfzd8lh6yjfff4cuau47w2z3czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hdezch</id>
    
      <title type="html">📅 Original date posted:2021-07-06 📝 Original message:If the ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsrzgl9er8pk0f2uuramvr7tx9e5pmfzd8lh6yjfff4cuau47w2z3czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hdezch" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdplxveg550tvde8l773m74qdjqwaj6h8l8dwunc7awac02qj7urqxvxwhn&#39;&gt;nevent1q…xwhn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-06&lt;br/&gt;📝 Original message:If the main outstanding issue is whether to split R or S, I think as far as&lt;br/&gt;Elements goes, I am inclined to go with the CAT option regardless of&lt;br/&gt;whether Bitcoin chooses to split R/S or not (not that I&amp;#39;m necessarily a&lt;br/&gt;decision maker here).&lt;br/&gt;&lt;br/&gt;The issue here is that (a) Elements already has CAT, and (b) updating&lt;br/&gt;CHECKSIGFROMSTACK is effectively a blocking issue for deploying Taproot on&lt;br/&gt;Elements.  I don&amp;#39;t think we will be holding up CHECKSIGFROMSTACK for this&lt;br/&gt;issue even if it risks being incompatible with an eventual Bitcoin&lt;br/&gt;CHECKSIGFROMSTACK.&lt;br/&gt;&lt;br/&gt;To be clear, I don&amp;#39;t mean to prejudice this discussion by this statement.&lt;br/&gt;This just happens to be what makes sense for the Elements project at this&lt;br/&gt;time, and what makes sense for Elements may not necessarily make sense for&lt;br/&gt;Bitcoin.&lt;br/&gt;&lt;br/&gt;Of course, I think we should just go for CAT compatibility.  Otherwise we&lt;br/&gt;are just going to have a proliferation of trusted CAT oracles paid for with&lt;br/&gt;lightning by people wanting to perform CAT operations.&lt;br/&gt;&lt;br/&gt;On Tue, Jul 6, 2021 at 1:55 PM Jeremy 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; Re-threading Sanket&amp;#39;s comment on split R value:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I also am in general support of the `OP_CHECKSIGFROMSTACK` opcode. We&lt;br/&gt;&amp;gt;&amp;gt; would need to update the suggestion to BIP340, and add it to sigops budget.&lt;br/&gt;&amp;gt;&amp;gt; I have no strong preference for splitting R and s values or variable-length&lt;br/&gt;&amp;gt;&amp;gt; messages.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Back to my comment:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I see a few options:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) Making a new 64 byte PK standard which is (R, PK)&lt;br/&gt;&amp;gt; 2) Splitting (R,S)&lt;br/&gt;&amp;gt; 3) Different opcodes&lt;br/&gt;&amp;gt; 4) CAT&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The drawback of option 1 is that it&amp;#39;s designed to support only very&lt;br/&gt;&amp;gt; specific use cases. The main drawback of splitting via option 2 is that you&lt;br/&gt;&amp;gt; entail an extra push byte for every use. Option 3 wastes opcodes. CAT has&lt;br/&gt;&amp;gt; the general drawbacks of CAT, but worth noting that CAT will likely&lt;br/&gt;&amp;gt; eventually land making the splitting feature redundant.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Before getting too in the weeds, it might be worth listing out interesting&lt;br/&gt;&amp;gt; script fragments that people are aware of with split R/S so we can see how&lt;br/&gt;&amp;gt; useful it might be?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Use a specific R Value&lt;br/&gt;&amp;gt; - &amp;lt;S&amp;gt; &amp;lt;M&amp;gt; || &amp;lt;R&amp;gt; SWAP &amp;lt;PK&amp;gt; CSFS&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Reuse arbitrary R for a specific M (pay to leak key)&lt;br/&gt;&amp;gt; -  &amp;lt;R&amp;gt; &amp;lt;S1&amp;gt; &amp;lt;S2&amp;gt;  ||  DUP2 EQUAL NOT VERIFY 2 PICK SWAP &amp;lt;M&amp;gt; DUP TOALTSTACK&lt;br/&gt;&amp;gt; CSFSV FROMALTSTACK CSFS&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Verify 2 different messages reuse the same R.&lt;br/&gt;&amp;gt; - &amp;lt;S1&amp;gt; &amp;lt;R&amp;gt; &amp;lt;M1&amp;gt; &amp;lt;S2&amp;gt; &amp;lt;M2&amp;gt; ||  2 PICK EQUAL NOT VERIFY 3 PICK &amp;lt;PK&amp;gt; DUP&lt;br/&gt;&amp;gt; TOALTSTACK CSFSV FROMALTSTACK CSFS&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Use a R Value signed by an oracle:&lt;br/&gt;&amp;gt; - &amp;lt;S&amp;gt; &amp;lt;M&amp;gt; &amp;lt;S_oracle&amp;gt; &amp;lt;R_oracle&amp;gt; &amp;lt;R&amp;gt; || DUP TOALTSTACK &amp;lt;PK_oracle&amp;gt; CSFSV&lt;br/&gt;&amp;gt; FROMALTSTACK SWAP &amp;lt;PK&amp;gt; CSFS&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/20210706/d047ffd2/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210706/d047ffd2/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:19Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszeh78cjyucd85ytmffjs643qcuh0vq5dwj65tee9ukttu0j2w6sczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5962n0stl</id>
    
      <title type="html">📅 Original date posted:2021-07-04 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszeh78cjyucd85ytmffjs643qcuh0vq5dwj65tee9ukttu0j2w6sczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5962n0stl" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdqlc4ksndnt4a948q6qptkggursa3pu76ngwme882v220vpph7yg0ll9pa&#39;&gt;nevent1q…l9pa&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-04&lt;br/&gt;📝 Original message:On Sun, Jul 4, 2021 at 1:30 PM Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t really see the point of CHECKSIGFROMSTACKADD since it&amp;#39;s not bound&lt;br/&gt;&amp;gt; to the txdata? When might you use this?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t feel strongly about *ADD.  I just figured it might be useful to do&lt;br/&gt;a 2-of-3 between Alice, Bob and an Oracle signed value.  But I don&amp;#39;t have&lt;br/&gt;any particular use case in mind.  Either way the *ADD functionality can be&lt;br/&gt;replicated by various SWAPs and ADDs etc, so we could just leave it out&lt;br/&gt;until it is wanted.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; And yes -- &amp;#34;Add OP_CHECKSIGFROMSTACK and OP_CHECKSIGFROMSTACKVERIFY to&lt;br/&gt;&amp;gt; follow the semantics from bip340-342 when witness program is v1.&amp;#34; is a bit&lt;br/&gt;&amp;gt; light on detail for what the BIP would end up looking like. If you&amp;#39;re able&lt;br/&gt;&amp;gt; to open up the design process a bit more on that it would be good as I&lt;br/&gt;&amp;gt; think there are some topics worth discussing at large before things proceed&lt;br/&gt;&amp;gt; with Elements (assuming feature compatibility remains a goal).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m certainly open to a wider design process.  We can open a specific issue&lt;br/&gt;on the Elements repo.  That said, I don&amp;#39;t see a particularly wide design&lt;br/&gt;space on this front.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; The non-prehashed argument seems OK (at the cost of an extra byte...) but&lt;br/&gt;&amp;gt; are there specific applications for !=32 arguments? I can&amp;#39;t think of a&lt;br/&gt;&amp;gt; particular one beyond perhaps efficiency. Can we safely use 0-520 byte&lt;br/&gt;&amp;gt; arguments?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;One of the reasons given in the issue (yes, the thread there is very long)&lt;br/&gt;was that hashing the message requires the hash to be collision resistant&lt;br/&gt;while if you give the message directly it only requires the hash to be&lt;br/&gt;&amp;#34;random-prefix&amp;#34; collision / preimage resistant.  For example SHA-1 is&lt;br/&gt;clearly not collision resistant but it appears to still be random-prefix&lt;br/&gt;collision resistant AFAIU.  Another reason is that it allows for extremely&lt;br/&gt;fast signing oracles because and R value and the midstate of the hash can&lt;br/&gt;be precomputed all the way upto the application prefix, and if the message&lt;br/&gt;being signed is less than 55 bytes or so, the signing cost can be as low as&lt;br/&gt;one compression function and a little bit of non-EC modular arithmetic to&lt;br/&gt;compute S.  If the message were required to be prehashed, then it would&lt;br/&gt;take a minimum of 2 compression function calls to sign, nearly doubling the&lt;br/&gt;signing time needed for the fast oracle.&lt;br/&gt;&lt;br/&gt;Even if BIP-0340 kept its requirements that the message be exactly 32&lt;br/&gt;bytes, I would still be inclined to design CHECKSIGFROMSTACK for tapscript&lt;br/&gt;to take the 32-byte message from the stack instead of hashing a message&lt;br/&gt;itself (BIP-0340 does it&amp;#39;s own hashing, so prehashing the message isn&amp;#39;t a&lt;br/&gt;security concern in the same way it is for ECDSA.)  This would keep the&lt;br/&gt;message off the blockchain, saving space and adding some amount of privacy&lt;br/&gt;and making the operation compatible with rolling SHA256 opcodes.  But given&lt;br/&gt;that BIP-0340 is going to be extended to support non-32 byte messages, then&lt;br/&gt;there is no reason to impose a message length restriction on&lt;br/&gt;CHECKSIGFROMSTACK.  Yes the operation will still be subject to stack item&lt;br/&gt;length restrictions.  This is something script writers will have to be&lt;br/&gt;aware of, but I see little reason to support messages split across multiple&lt;br/&gt;stack items when we expect, by far, most messages to be 32-bytes, and I&lt;br/&gt;expect those rare non-32 byte messages are expected to be reasonably short.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Also do you have thoughts on the other questions i posed above? E.g.&lt;br/&gt;&amp;gt; splitting R/S could be helpful w/o CAT.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Regarding  internal pubkeys and invalid pubkeys, I see no reason to deviate&lt;br/&gt;from whatever tapscript CHECKSIG* do.&lt;br/&gt;&lt;br/&gt;Regarding splitting R/S, This is harder because Elements does have CAT and&lt;br/&gt;I think we should add CAT to Bitcoin too.  This game of trying to prevent&lt;br/&gt;covenants by restricting script to the point where we are not even allowed&lt;br/&gt;to have a CAT operation is a losing game.  It&amp;#39;s just a matter of time&lt;br/&gt;before we accidently introduce some way to enable covenants anyways, and it&lt;br/&gt;is not worth cutting off vast amounts of functionality in pursuit of this&lt;br/&gt;questionable goal.  And I say this as someone who was originally of the&lt;br/&gt;opinion that we should be very very cautious before enabling new&lt;br/&gt;expressivity such as covenants.  All the scary scenarios of covenants that&lt;br/&gt;I am aware of can be more easily, cheaply, and flexibility implemented by&lt;br/&gt;just having a counterparty in a multi-party signature that enforces their&lt;br/&gt;own policy that they only sign transactions that pay to outputs that they&lt;br/&gt;remain a party to.  And even if scary covenants were scarier than what can&lt;br/&gt;already be done by multisig and policy, I still don&amp;#39;t think they are scary&lt;br/&gt;enough to warrant keeping CAT disabled.&lt;br/&gt;&lt;br/&gt;So I don&amp;#39;t think we should get fancy with CHECKSIGFROMSTACK.  Just take a&lt;br/&gt;normal 64-byte signature value as a stack item.  But I don&amp;#39;t feel strongly&lt;br/&gt;about this, and I wouldn&amp;#39;t oppose splitting R and S in Bitcoin if that is&lt;br/&gt;where consensus lies.&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/20210704/b7f6ae05/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210704/b7f6ae05/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:17Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsq45lthfu237c3tyqefsrs6ek3q5qtzumdfu35q7xhzn04kwsrlqszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596znn69j</id>
    
      <title type="html">📅 Original date posted:2021-07-03 📝 Original message:There ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsq45lthfu237c3tyqefsrs6ek3q5qtzumdfu35q7xhzn04kwsrlqszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596znn69j" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsf4lxcsnurtnykh36zt6mrr0aqxff0tdzmjjeslhvpyg6nwuu6jlqn2kp8d&#39;&gt;nevent1q…kp8d&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-03&lt;br/&gt;📝 Original message:There is one line written at&lt;br/&gt;&lt;a href=&#34;https://github.com/ElementsProject/elements/pull/949/files#r660130155&#34;&gt;https://github.com/ElementsProject/elements/pull/949/files#r660130155&lt;/a&gt;. I&lt;br/&gt;suppose we need to decide on which variants of *VERIFY and *ADD we want to&lt;br/&gt;include (presumably all of them) and choose which opcodes they will be&lt;br/&gt;assigned to.  And I guess for CHECKSIGFROMSTACKADD will want to place the n&lt;br/&gt;value between the signature and the message on the stack.  ... So I suppose&lt;br/&gt;we will need more than one sentence.&lt;br/&gt;&lt;br/&gt;The semantics would be basically to call secp256k1_schnorrsig_verify &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/blob/0440945fb5ce69d335fed32827b5166e84b02e05/include/secp256k1_schnorrsig.h#L158&amp;gt&#34;&gt;https://github.com/bitcoin-core/secp256k1/blob/0440945fb5ce69d335fed32827b5166e84b02e05/include/secp256k1_schnorrsig.h#L158&amp;gt&lt;/a&gt;;,&lt;br/&gt;treating pubkeys and signatures the same way the other CHECKSIG operations&lt;br/&gt;do, and in passing the (variable length) message from the stack.&lt;br/&gt;CHECKSIGFROMSTACK would also be subject to the same sigops budget that&lt;br/&gt;CHECKSIG has in tapscript.&lt;br/&gt;&lt;br/&gt;On Sat, Jul 3, 2021 at 2:30 PM Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Awesome to hear that!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Actually I don&amp;#39;t think I did know (or I forgot/didn&amp;#39;t catch it) that there&lt;br/&gt;&amp;gt; was an updated spec for elements, I searched around for what I could find&lt;br/&gt;&amp;gt; and came up empty handed. Do you have any links for that? That sounds&lt;br/&gt;&amp;gt; perfect to me.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Sat, Jul 3, 2021, 10:50 AM Russell O&amp;#39;Connor &amp;lt;roconnor at blockstream.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Jermy,&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As you are aware, we, and by we I mean mostly Sanket, are developing an&lt;br/&gt;&amp;gt;&amp;gt; updated OP_CHECKSIGFROMSTACK implementation for tapscript on elements.  The&lt;br/&gt;&amp;gt;&amp;gt; plan here would be to effectively support the an interface to the&lt;br/&gt;&amp;gt;&amp;gt; variable-length extension of BIP-0340 schnorr signatures.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; BIP-0340 would dispense with DER encoding (good riddance).&lt;br/&gt;&amp;gt;&amp;gt; BIP-0340 signatures are batch verifiable along with other BIP-0340&lt;br/&gt;&amp;gt;&amp;gt; transaction signatures and taproot tweak verification.&lt;br/&gt;&amp;gt;&amp;gt; Support for variable length messages in BIP-0340 has been discussed in &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/sipa/bips/issues/207&amp;gt&#34;&gt;https://github.com/sipa/bips/issues/207&amp;gt&lt;/a&gt;; and an implementation has&lt;br/&gt;&amp;gt;&amp;gt; recently been merged in &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/844&amp;gt&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/844&amp;gt&lt;/a&gt;;.  The BIP has not&lt;br/&gt;&amp;gt;&amp;gt; yet been updated but the difference is that the message m does not have to&lt;br/&gt;&amp;gt;&amp;gt; be 32-bytes (it is recommended that the message be a 32-bit tagged hash or&lt;br/&gt;&amp;gt;&amp;gt; a message with a 64-bit application specific prefix). The CHECKSIGFROMSTACK&lt;br/&gt;&amp;gt;&amp;gt; operation (in tapscript) would use a stack item for this m value to&lt;br/&gt;&amp;gt;&amp;gt; BIP-0340 signature verification and would not necessarily have to be 32&lt;br/&gt;&amp;gt;&amp;gt; bytes.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I think this design we are aiming for would be perfectly suited for&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin as well.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Sat, Jul 3, 2021 at 12:32 PM Jeremy via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Reproduced below is the BIP text from Bitcoin Cash&amp;#39;s (MIT-Licensed)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; specification for &amp;#34;CheckDataSig&amp;#34;, more or less the same thing as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; CHECKSIGFROMSTACK&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/op_checkdatasig.md&#34;&gt;https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/op_checkdatasig.md&lt;/a&gt;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; In contrast to Element&amp;#39;s implementation, it does not have Element&amp;#39;s bugs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; around verify semantics and uses the nullfail rule, and there is a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; specification document so it seemed like the easiest starting point for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; discussion v.s. drafting something from scratch.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Does anyone have any issue with adapting this exact text and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implementation to a BIP for Bitcoin using 2 OP_SUCCESSX opcodes?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Note that with *just* CheckSigFromStack, while you can do some very&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; valuable use cases, but without OP_CAT it does not enable sophisticated&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; covenants (and as per&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&#34;&gt;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; just CAT alone enables such uses).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Design questions worth considering as modifications:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1. Should CSFS require some sort of tagged hash? Very likely answer is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; no – tags interfere with certain use cases&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2. Should CSFS split the signature’s R &amp;amp; S value stack items for some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; applications that otherwise may require OP_CAT? E.g. using a pinned R value&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; allows you to extract a private key if ever double signed, using 2 R values&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; allows pay-to-reveal-key contracts. Most likely answer is no, if that is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; desired then OP_CAT can be introduced&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 3. Should CSFS support a cheap way to reference the taproot internal or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; external key? Perhaps, can be handled with undefined upgradeable keytypes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; One might want to use the internal key, if the signed data should be valid&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; independent of the tapscript tree. One might want to use the external key,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; if the data should only be valid for a single tapscript key &#43; tree.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 4. Should invalid public keys types be a NOP to support future extended&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pubkey types?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Best,&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; Jeremy&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ---&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; layout: specification&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; title: OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY Specification&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; category: spec&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; date: 2018-08-20&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; activation: 1542300000&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; version: 0.6&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; OP_CHECKDATASIG&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; OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY check whether a signature is valid with respect to a message and a public key.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIG permits data to be imported into a script, and have its validity checked against some signing authority such as an &amp;#34;Oracle&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY are designed to be implemented similarly to OP_CHECKSIG [1]. Conceptually, one could imagine OP_CHECKSIG functionality being replaced by OP_CHECKDATASIG, along with a separate Op Code to create a hash from the transaction based on the SigHash algorithm.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIG Specification&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; ### Semantics&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIG fails immediately if the stack is not well formed. To be well formed, the stack must contain at least three elements [`&amp;lt;sig&amp;gt;`, `&amp;lt;msg&amp;gt;`, `&amp;lt;pubKey&amp;gt;`] in this order where `&amp;lt;pubKey&amp;gt;` is the top element and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   * `&amp;lt;pubKey&amp;gt;` must be a validly encoded public key&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   * `&amp;lt;msg&amp;gt;` can be any string&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   * `&amp;lt;sig&amp;gt;` must follow the strict DER encoding as described in [2] and the S-value of `&amp;lt;sig&amp;gt;` must be at most the curve order divided by 2 as described in [3]&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If the stack is well formed, then OP_CHECKDATASIG pops the top three elements [`&amp;lt;sig&amp;gt;`, `&amp;lt;msg&amp;gt;`, `&amp;lt;pubKey&amp;gt;`] from the stack and pushes true onto the stack if `&amp;lt;sig&amp;gt;` is valid with respect to the raw single-SHA256 hash of `&amp;lt;msg&amp;gt;` and `&amp;lt;pubKey&amp;gt;` using the secp256k1 elliptic curve. Otherwise, it pops three elements and pushes false onto the stack in the case that `&amp;lt;sig&amp;gt;` is the empty string and fails in all other cases.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Nullfail is enforced the same as for OP_CHECKSIG [3]. If the signature does not match the supplied public key and message hash, and the signature is not an empty byte array, the entire script fails.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Opcode Number&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIG uses the previously unused opcode number 186 (0xba in hex encoding)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### SigOps&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Signature operations accounting for OP_CHECKDATASIG shall be calculated the same as OP_CHECKSIG. This means that each OP_CHECKDATASIG shall be counted as one (1) SigOp.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Activation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Use of OP_CHECKDATASIG, unless occuring in an unexecuted OP_IF branch, will make the transaction invalid if it is included in a block where the median timestamp of the prior 11 blocks is less than 1542300000.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Unit Tests&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if 15 November 2018 protocol upgrade is not yet activated.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; OP_CHECKDATASIG` fails if there are fewer than 3 items on stack.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if `&amp;lt;pubKey&amp;gt;` is not a validly encoded public key.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if `&amp;lt;sig&amp;gt;` is not a validly encoded signature with strict DER encoding.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if signature `&amp;lt;sig&amp;gt;` is not empty and does not pass the Low S check.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if signature `&amp;lt;sig&amp;gt;` is not empty and does not pass signature validation of `&amp;lt;msg&amp;gt;` and `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` pops three elements and pushes false onto the stack if `&amp;lt;sig&amp;gt;` is an empty byte array.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` pops three elements and pushes true onto the stack if `&amp;lt;sig&amp;gt;` is a valid signature of `&amp;lt;msg&amp;gt;` with respect to `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIGVERIFY Specification&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; ### Semantics&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIGVERIFY is equivalent to OP_CHECKDATASIG followed by OP_VERIFY. It leaves nothing on the stack, and will cause the script to fail immediately if the signature check does not pass.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Opcode Number&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIGVERIFY uses the previously unused opcode number 187 (0xbb in hex encoding)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### SigOps&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Signature operations accounting for OP_CHECKDATASIGVERIFY shall be calculated the same as OP_CHECKSIGVERIFY. This means that each OP_CHECKDATASIGVERIFY shall be counted as one (1) SigOp.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Activation&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Use of OP_CHECKDATASIGVERIFY, unless occuring in an unexecuted OP_IF branch, will make the transaction invalid if it is included in a block where the median timestamp of the prior 11 blocks is less than 1542300000.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### Unit Tests&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if 15 November 2018 protocol upgrade is not yet activated.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; OP_CHECKDATASIGVERIFY` fails if there are fewer than 3 item on stack.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY`fails if `&amp;lt;pubKey&amp;gt;` is not a validly encoded public key.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if `&amp;lt;sig&amp;gt;` is not a validly encoded signature with strict DER encoding.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if signature `&amp;lt;sig&amp;gt;` is not empty and does not pass the Low S check.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if `&amp;lt;sig&amp;gt;` is not a valid signature of `&amp;lt;msg&amp;gt;` with respect to `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` pops the top three stack elements if `&amp;lt;sig&amp;gt;` is a valid signature of `&amp;lt;msg&amp;gt;` with respect to `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Sample Implementation [4, 5]&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; ```c&#43;&#43;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                     case OP_CHECKDATASIG:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                     case OP_CHECKDATASIGVERIFY: {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         // Make sure this remains an error before activation.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         if ((flags &amp;amp; SCRIPT_ENABLE_CHECKDATASIG) == 0) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             return set_error(serror, SCRIPT_ERR_BAD_OPCODE);&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;                         // (sig message pubkey -- bool)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         if (stack.size() &amp;lt; 3) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             return set_error(&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                 serror, SCRIPT_ERR_INVALID_STACK_OPERATION);&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;                         valtype &amp;amp;vchSig = stacktop(-3);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         valtype &amp;amp;vchMessage = stacktop(-2);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         valtype &amp;amp;vchPubKey = stacktop(-1);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         if (!CheckDataSignatureEncoding(vchSig, flags,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                                         serror) ||&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             !CheckPubKeyEncoding(vchPubKey, flags, serror)) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             // serror is set&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             return false;&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;                         bool fSuccess = false;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         if (vchSig.size()) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             valtype vchHash(32);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             CSHA256()&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                 .Write(vchMessage.data(), vchMessage.size())&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                 .Finalize(vchHash.data());&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             uint256 message(vchHash);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             CPubKey pubkey(vchPubKey);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             fSuccess = pubkey.Verify(message, vchSig);&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;                         if (!fSuccess &amp;amp;&amp;amp; (flags &amp;amp; SCRIPT_VERIFY_NULLFAIL) &amp;amp;&amp;amp;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             vchSig.size()) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             return set_error(serror, SCRIPT_ERR_SIG_NULLFAIL);&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;                         popstack(stack);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         popstack(stack);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         popstack(stack);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         stack.push_back(fSuccess ? vchTrue : vchFalse);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                         if (opcode == OP_CHECKDATASIGVERIFY) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             if (fSuccess) {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                 popstack(stack);&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                             } else {&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                 return set_error(serror,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                                  SCRIPT_ERR_CHECKDATASIGVERIFY);&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;                     } break;&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; Sample Usage&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; The following example shows a spend and redeem script for a basic use of CHECKDATASIG.  This example validates the signature of some data, provides a placeholder where you would then process that data, and finally allows one of 2 signatures to spend based on the outcome of the data processing.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### spend script:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; push txsignature&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; push txpubkey&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; push msg&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; push sig&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ### redeem script:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;                                 (txsig, txpubkey msg, sig)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_OVER                         (txsig, txpubkey, msg, sig, msg)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; push data pubkey                (txsig, txpubkey, msg, sig, msg, pubkey)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKDATASIGVERIFY           (txsig, txpubkey, msg)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Now that msg is on the stack top, the script can write predicates on it,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; resulting in the message being consumed and a true/false condition left on the stack: (txpubkey, txsig, boolean)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_IF                           (txsig, txpubkey)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   OP_DUP                        (txsig, txpubkey, txpubkey)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   OP_HASH160                    (txsig, txpubkey, address)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   push &amp;lt;p2pkh spend address&amp;gt;    (txsig, txpubkey, address, p2pkh spend address)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   OP_EQUALVERIFY                (txsig, txpubkey)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   OP_CHECKSIG&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_ELSE&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;   (same as if clause but a different &amp;lt;p2pkh spend address&amp;gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_ENDIF&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; History&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; This specification is based on Andrew Stone’s OP_DATASIGVERIFY proposal [6, 7]. It is modified from Stone&amp;#39;s original proposal based on a synthesis of all the peer-review and feedback received [8].&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; References&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; [1] [OP_CHECKSIG](&lt;a href=&#34;https://en.bitcoin.it/wiki/OP_CHECKSIG&#34;&gt;https://en.bitcoin.it/wiki/OP_CHECKSIG&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [2] [Strict DER Encoding](&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [3] [Low-S and Nullfail Specification](&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [4] [Bitcoin ABC implementation](&lt;a href=&#34;https://reviews.bitcoinabc.org/D1621&#34;&gt;https://reviews.bitcoinabc.org/D1621&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [5] [Bitcoin ABC implementation update](&lt;a href=&#34;https://reviews.bitcoinabc.org/D1646&#34;&gt;https://reviews.bitcoinabc.org/D1646&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [6] [Andrew Stone’s OP_DATASIGVERIFY](&lt;a href=&#34;https://github.com/BitcoinUnlimited/BitcoinUnlimited/blob/bucash1.3.0.0/doc/opdatasigverify.md&#34;&gt;https://github.com/BitcoinUnlimited/BitcoinUnlimited/blob/bucash1.3.0.0/doc/opdatasigverify.md&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [7] [Andrew Stone&amp;#39;s article on Scripting](&lt;a href=&#34;https://medium.com/@g.andrew.stone/bitcoin-scripting-applications-decision-based-spending-8e7b93d7bdb9&#34;&gt;https://medium.com/@g.andrew.stone/bitcoin-scripting-applications-decision-based-spending-8e7b93d7bdb9&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; [8] [Peer Review of Andrew Stone&amp;#39;s Proposal](&lt;a href=&#34;https://github.com/bitcoincashorg/bitcoincash.org/pull/10&#34;&gt;https://github.com/bitcoincashorg/bitcoincash.org/pull/10&lt;/a&gt;)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- 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/20210703/e56d5b04/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210703/e56d5b04/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:15Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswxpsd26vyccdcfyqvkc6nz9f9llr00mdrr9fc4uqm0jp7d0eslaqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hv6clq</id>
    
      <title type="html">📅 Original date posted:2021-07-03 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswxpsd26vyccdcfyqvkc6nz9f9llr00mdrr9fc4uqm0jp7d0eslaqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hv6clq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgycdfdzvcywwvgpgeanzkgzc505vpp7lw5fzlvnsglqfqz5nnulggs3y9w&#39;&gt;nevent1q…3y9w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-07-03&lt;br/&gt;📝 Original message:Hi Jermy,&lt;br/&gt;&lt;br/&gt;As you are aware, we, and by we I mean mostly Sanket, are developing an&lt;br/&gt;updated OP_CHECKSIGFROMSTACK implementation for tapscript on elements.  The&lt;br/&gt;plan here would be to effectively support the an interface to the&lt;br/&gt;variable-length extension of BIP-0340 schnorr signatures.&lt;br/&gt;&lt;br/&gt;BIP-0340 would dispense with DER encoding (good riddance).&lt;br/&gt;BIP-0340 signatures are batch verifiable along with other BIP-0340&lt;br/&gt;transaction signatures and taproot tweak verification.&lt;br/&gt;Support for variable length messages in BIP-0340 has been discussed in &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://github.com/sipa/bips/issues/207&amp;gt&#34;&gt;https://github.com/sipa/bips/issues/207&amp;gt&lt;/a&gt;; and an implementation has recently&lt;br/&gt;been merged in &amp;lt;&lt;a href=&#34;https://github.com/bitcoin-core/secp256k1/pull/844&amp;gt&#34;&gt;https://github.com/bitcoin-core/secp256k1/pull/844&amp;gt&lt;/a&gt;;.  The&lt;br/&gt;BIP has not yet been updated but the difference is that the message m does&lt;br/&gt;not have to be 32-bytes (it is recommended that the message be a 32-bit&lt;br/&gt;tagged hash or a message with a 64-bit application specific prefix). The&lt;br/&gt;CHECKSIGFROMSTACK operation (in tapscript) would use a stack item for this&lt;br/&gt;m value to BIP-0340 signature verification and would not necessarily have&lt;br/&gt;to be 32 bytes.&lt;br/&gt;&lt;br/&gt;I think this design we are aiming for would be perfectly suited for Bitcoin&lt;br/&gt;as well.&lt;br/&gt;&lt;br/&gt;On Sat, Jul 3, 2021 at 12:32 PM Jeremy 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; Reproduced below is the BIP text from Bitcoin Cash&amp;#39;s (MIT-Licensed)&lt;br/&gt;&amp;gt; specification for &amp;#34;CheckDataSig&amp;#34;, more or less the same thing as&lt;br/&gt;&amp;gt; CHECKSIGFROMSTACK&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/op_checkdatasig.md&#34;&gt;https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/op_checkdatasig.md&lt;/a&gt;.&lt;br/&gt;&amp;gt; In contrast to Element&amp;#39;s implementation, it does not have Element&amp;#39;s bugs&lt;br/&gt;&amp;gt; around verify semantics and uses the nullfail rule, and there is a&lt;br/&gt;&amp;gt; specification document so it seemed like the easiest starting point for&lt;br/&gt;&amp;gt; discussion v.s. drafting something from scratch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Does anyone have any issue with adapting this exact text and&lt;br/&gt;&amp;gt; implementation to a BIP for Bitcoin using 2 OP_SUCCESSX opcodes?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that with *just* CheckSigFromStack, while you can do some very&lt;br/&gt;&amp;gt; valuable use cases, but without OP_CAT it does not enable sophisticated&lt;br/&gt;&amp;gt; covenants (and as per&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&#34;&gt;https://www.wpsoftware.net/andrew/blog/cat-and-schnorr-tricks-i.html&lt;/a&gt; just&lt;br/&gt;&amp;gt; CAT alone enables such uses).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Design questions worth considering as modifications:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. Should CSFS require some sort of tagged hash? Very likely answer is no&lt;br/&gt;&amp;gt; – tags interfere with certain use cases&lt;br/&gt;&amp;gt; 2. Should CSFS split the signature’s R &amp;amp; S value stack items for some&lt;br/&gt;&amp;gt; applications that otherwise may require OP_CAT? E.g. using a pinned R value&lt;br/&gt;&amp;gt; allows you to extract a private key if ever double signed, using 2 R values&lt;br/&gt;&amp;gt; allows pay-to-reveal-key contracts. Most likely answer is no, if that is&lt;br/&gt;&amp;gt; desired then OP_CAT can be introduced&lt;br/&gt;&amp;gt; 3. Should CSFS support a cheap way to reference the taproot internal or&lt;br/&gt;&amp;gt; external key? Perhaps, can be handled with undefined upgradeable keytypes.&lt;br/&gt;&amp;gt; One might want to use the internal key, if the signed data should be valid&lt;br/&gt;&amp;gt; independent of the tapscript tree. One might want to use the external key,&lt;br/&gt;&amp;gt; if the data should only be valid for a single tapscript key &#43; tree.&lt;br/&gt;&amp;gt; 4. Should invalid public keys types be a NOP to support future extended&lt;br/&gt;&amp;gt; pubkey types?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jeremy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ---&lt;br/&gt;&amp;gt; layout: specification&lt;br/&gt;&amp;gt; title: OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY Specification&lt;br/&gt;&amp;gt; category: spec&lt;br/&gt;&amp;gt; date: 2018-08-20&lt;br/&gt;&amp;gt; activation: 1542300000&lt;br/&gt;&amp;gt; version: 0.6&lt;br/&gt;&amp;gt; ---&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG&lt;br/&gt;&amp;gt; ===============&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY check whether a signature is valid with respect to a message and a public key.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG permits data to be imported into a script, and have its validity checked against some signing authority such as an &amp;#34;Oracle&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG and OP_CHECKDATASIGVERIFY are designed to be implemented similarly to OP_CHECKSIG [1]. Conceptually, one could imagine OP_CHECKSIG functionality being replaced by OP_CHECKDATASIG, along with a separate Op Code to create a hash from the transaction based on the SigHash algorithm.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG Specification&lt;br/&gt;&amp;gt; -----------------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Semantics&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG fails immediately if the stack is not well formed. To be well formed, the stack must contain at least three elements [`&amp;lt;sig&amp;gt;`, `&amp;lt;msg&amp;gt;`, `&amp;lt;pubKey&amp;gt;`] in this order where `&amp;lt;pubKey&amp;gt;` is the top element and&lt;br/&gt;&amp;gt;   * `&amp;lt;pubKey&amp;gt;` must be a validly encoded public key&lt;br/&gt;&amp;gt;   * `&amp;lt;msg&amp;gt;` can be any string&lt;br/&gt;&amp;gt;   * `&amp;lt;sig&amp;gt;` must follow the strict DER encoding as described in [2] and the S-value of `&amp;lt;sig&amp;gt;` must be at most the curve order divided by 2 as described in [3]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the stack is well formed, then OP_CHECKDATASIG pops the top three elements [`&amp;lt;sig&amp;gt;`, `&amp;lt;msg&amp;gt;`, `&amp;lt;pubKey&amp;gt;`] from the stack and pushes true onto the stack if `&amp;lt;sig&amp;gt;` is valid with respect to the raw single-SHA256 hash of `&amp;lt;msg&amp;gt;` and `&amp;lt;pubKey&amp;gt;` using the secp256k1 elliptic curve. Otherwise, it pops three elements and pushes false onto the stack in the case that `&amp;lt;sig&amp;gt;` is the empty string and fails in all other cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Nullfail is enforced the same as for OP_CHECKSIG [3]. If the signature does not match the supplied public key and message hash, and the signature is not an empty byte array, the entire script fails.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Opcode Number&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIG uses the previously unused opcode number 186 (0xba in hex encoding)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### SigOps&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Signature operations accounting for OP_CHECKDATASIG shall be calculated the same as OP_CHECKSIG. This means that each OP_CHECKDATASIG shall be counted as one (1) SigOp.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Activation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Use of OP_CHECKDATASIG, unless occuring in an unexecuted OP_IF branch, will make the transaction invalid if it is included in a block where the median timestamp of the prior 11 blocks is less than 1542300000.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Unit Tests&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if 15 November 2018 protocol upgrade is not yet activated.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; OP_CHECKDATASIG` fails if there are fewer than 3 items on stack.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if `&amp;lt;pubKey&amp;gt;` is not a validly encoded public key.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if `&amp;lt;sig&amp;gt;` is not a validly encoded signature with strict DER encoding.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if signature `&amp;lt;sig&amp;gt;` is not empty and does not pass the Low S check.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` fails if signature `&amp;lt;sig&amp;gt;` is not empty and does not pass signature validation of `&amp;lt;msg&amp;gt;` and `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` pops three elements and pushes false onto the stack if `&amp;lt;sig&amp;gt;` is an empty byte array.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIG` pops three elements and pushes true onto the stack if `&amp;lt;sig&amp;gt;` is a valid signature of `&amp;lt;msg&amp;gt;` with respect to `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIGVERIFY Specification&lt;br/&gt;&amp;gt; -----------------------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Semantics&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIGVERIFY is equivalent to OP_CHECKDATASIG followed by OP_VERIFY. It leaves nothing on the stack, and will cause the script to fail immediately if the signature check does not pass.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Opcode Number&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKDATASIGVERIFY uses the previously unused opcode number 187 (0xbb in hex encoding)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### SigOps&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Signature operations accounting for OP_CHECKDATASIGVERIFY shall be calculated the same as OP_CHECKSIGVERIFY. This means that each OP_CHECKDATASIGVERIFY shall be counted as one (1) SigOp.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Activation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Use of OP_CHECKDATASIGVERIFY, unless occuring in an unexecuted OP_IF branch, will make the transaction invalid if it is included in a block where the median timestamp of the prior 11 blocks is less than 1542300000.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### Unit Tests&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if 15 November 2018 protocol upgrade is not yet activated.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; OP_CHECKDATASIGVERIFY` fails if there are fewer than 3 item on stack.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY`fails if `&amp;lt;pubKey&amp;gt;` is not a validly encoded public key.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if `&amp;lt;sig&amp;gt;` is not a validly encoded signature with strict DER encoding.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if signature `&amp;lt;sig&amp;gt;` is not empty and does not pass the Low S check.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` fails if `&amp;lt;sig&amp;gt;` is not a valid signature of `&amp;lt;msg&amp;gt;` with respect to `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;  - `&amp;lt;sig&amp;gt; &amp;lt;msg&amp;gt; &amp;lt;pubKey&amp;gt; OP_CHECKDATASIGVERIFY` pops the top three stack elements if `&amp;lt;sig&amp;gt;` is a valid signature of `&amp;lt;msg&amp;gt;` with respect to `&amp;lt;pubKey&amp;gt;`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sample Implementation [4, 5]&lt;br/&gt;&amp;gt; ----------------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ```c&#43;&#43;&lt;br/&gt;&amp;gt;                     case OP_CHECKDATASIG:&lt;br/&gt;&amp;gt;                     case OP_CHECKDATASIGVERIFY: {&lt;br/&gt;&amp;gt;                         // Make sure this remains an error before activation.&lt;br/&gt;&amp;gt;                         if ((flags &amp;amp; SCRIPT_ENABLE_CHECKDATASIG) == 0) {&lt;br/&gt;&amp;gt;                             return set_error(serror, SCRIPT_ERR_BAD_OPCODE);&lt;br/&gt;&amp;gt;                         }&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;                         // (sig message pubkey -- bool)&lt;br/&gt;&amp;gt;                         if (stack.size() &amp;lt; 3) {&lt;br/&gt;&amp;gt;                             return set_error(&lt;br/&gt;&amp;gt;                                 serror, SCRIPT_ERR_INVALID_STACK_OPERATION);&lt;br/&gt;&amp;gt;                         }&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;                         valtype &amp;amp;vchSig = stacktop(-3);&lt;br/&gt;&amp;gt;                         valtype &amp;amp;vchMessage = stacktop(-2);&lt;br/&gt;&amp;gt;                         valtype &amp;amp;vchPubKey = stacktop(-1);&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;                         if (!CheckDataSignatureEncoding(vchSig, flags,&lt;br/&gt;&amp;gt;                                                         serror) ||&lt;br/&gt;&amp;gt;                             !CheckPubKeyEncoding(vchPubKey, flags, serror)) {&lt;br/&gt;&amp;gt;                             // serror is set&lt;br/&gt;&amp;gt;                             return false;&lt;br/&gt;&amp;gt;                         }&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;                         bool fSuccess = false;&lt;br/&gt;&amp;gt;                         if (vchSig.size()) {&lt;br/&gt;&amp;gt;                             valtype vchHash(32);&lt;br/&gt;&amp;gt;                             CSHA256()&lt;br/&gt;&amp;gt;                                 .Write(vchMessage.data(), vchMessage.size())&lt;br/&gt;&amp;gt;                                 .Finalize(vchHash.data());&lt;br/&gt;&amp;gt;                             uint256 message(vchHash);&lt;br/&gt;&amp;gt;                             CPubKey pubkey(vchPubKey);&lt;br/&gt;&amp;gt;                             fSuccess = pubkey.Verify(message, vchSig);&lt;br/&gt;&amp;gt;                         }&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;                         if (!fSuccess &amp;amp;&amp;amp; (flags &amp;amp; SCRIPT_VERIFY_NULLFAIL) &amp;amp;&amp;amp;&lt;br/&gt;&amp;gt;                             vchSig.size()) {&lt;br/&gt;&amp;gt;                             return set_error(serror, SCRIPT_ERR_SIG_NULLFAIL);&lt;br/&gt;&amp;gt;                         }&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;                         popstack(stack);&lt;br/&gt;&amp;gt;                         popstack(stack);&lt;br/&gt;&amp;gt;                         popstack(stack);&lt;br/&gt;&amp;gt;                         stack.push_back(fSuccess ? vchTrue : vchFalse);&lt;br/&gt;&amp;gt;                         if (opcode == OP_CHECKDATASIGVERIFY) {&lt;br/&gt;&amp;gt;                             if (fSuccess) {&lt;br/&gt;&amp;gt;                                 popstack(stack);&lt;br/&gt;&amp;gt;                             } else {&lt;br/&gt;&amp;gt;                                 return set_error(serror,&lt;br/&gt;&amp;gt;                                                  SCRIPT_ERR_CHECKDATASIGVERIFY);&lt;br/&gt;&amp;gt;                             }&lt;br/&gt;&amp;gt;                         }&lt;br/&gt;&amp;gt;                     } break;&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sample Usage&lt;br/&gt;&amp;gt; ------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The following example shows a spend and redeem script for a basic use of CHECKDATASIG.  This example validates the signature of some data, provides a placeholder where you would then process that data, and finally allows one of 2 signatures to spend based on the outcome of the data processing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ### spend script:&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt; push txsignature&lt;br/&gt;&amp;gt; push txpubkey&lt;br/&gt;&amp;gt; push msg&lt;br/&gt;&amp;gt; push sig&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt; ### redeem script:&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt;                                 (txsig, txpubkey msg, sig)&lt;br/&gt;&amp;gt; OP_OVER                         (txsig, txpubkey, msg, sig, msg)&lt;br/&gt;&amp;gt; push data pubkey                (txsig, txpubkey, msg, sig, msg, pubkey)&lt;br/&gt;&amp;gt; OP_CHECKDATASIGVERIFY           (txsig, txpubkey, msg)&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt; Now that msg is on the stack top, the script can write predicates on it,&lt;br/&gt;&amp;gt; resulting in the message being consumed and a true/false condition left on the stack: (txpubkey, txsig, boolean)&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt; OP_IF                           (txsig, txpubkey)&lt;br/&gt;&amp;gt;   OP_DUP                        (txsig, txpubkey, txpubkey)&lt;br/&gt;&amp;gt;   OP_HASH160                    (txsig, txpubkey, address)&lt;br/&gt;&amp;gt;   push &amp;lt;p2pkh spend address&amp;gt;    (txsig, txpubkey, address, p2pkh spend address)&lt;br/&gt;&amp;gt;   OP_EQUALVERIFY                (txsig, txpubkey)&lt;br/&gt;&amp;gt;   OP_CHECKSIG&lt;br/&gt;&amp;gt; OP_ELSE&lt;br/&gt;&amp;gt;   (same as if clause but a different &amp;lt;p2pkh spend address&amp;gt;)&lt;br/&gt;&amp;gt; OP_ENDIF&lt;br/&gt;&amp;gt; ```&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; History&lt;br/&gt;&amp;gt; -------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This specification is based on Andrew Stone’s OP_DATASIGVERIFY proposal [6, 7]. It is modified from Stone&amp;#39;s original proposal based on a synthesis of all the peer-review and feedback received [8].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; References&lt;br/&gt;&amp;gt; ----------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] [OP_CHECKSIG](&lt;a href=&#34;https://en.bitcoin.it/wiki/OP_CHECKSIG&#34;&gt;https://en.bitcoin.it/wiki/OP_CHECKSIG&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2] [Strict DER Encoding](&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] [Low-S and Nullfail Specification](&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [4] [Bitcoin ABC implementation](&lt;a href=&#34;https://reviews.bitcoinabc.org/D1621&#34;&gt;https://reviews.bitcoinabc.org/D1621&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [5] [Bitcoin ABC implementation update](&lt;a href=&#34;https://reviews.bitcoinabc.org/D1646&#34;&gt;https://reviews.bitcoinabc.org/D1646&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [6] [Andrew Stone’s OP_DATASIGVERIFY](&lt;a href=&#34;https://github.com/BitcoinUnlimited/BitcoinUnlimited/blob/bucash1.3.0.0/doc/opdatasigverify.md&#34;&gt;https://github.com/BitcoinUnlimited/BitcoinUnlimited/blob/bucash1.3.0.0/doc/opdatasigverify.md&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [7] [Andrew Stone&amp;#39;s article on Scripting](&lt;a href=&#34;https://medium.com/@g.andrew.stone/bitcoin-scripting-applications-decision-based-spending-8e7b93d7bdb9&#34;&gt;https://medium.com/@g.andrew.stone/bitcoin-scripting-applications-decision-based-spending-8e7b93d7bdb9&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [8] [Peer Review of Andrew Stone&amp;#39;s Proposal](&lt;a href=&#34;https://github.com/bitcoincashorg/bitcoincash.org/pull/10&#34;&gt;https://github.com/bitcoincashorg/bitcoincash.org/pull/10&lt;/a&gt;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&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/20210703/ce1d831d/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210703/ce1d831d/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:56:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxuhgf63c90rz8s0hklyw4fuuczr2sr68hj7utcclx0yuqwml2q9szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596slkc7q</id>
    
      <title type="html">📅 Original date posted:2021-06-12 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxuhgf63c90rz8s0hklyw4fuuczr2sr68hj7utcclx0yuqwml2q9szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596slkc7q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstm2l74n6hpgzcv2qekn9egu8dn53rs3fecekkqk2s5llhq24vtzganlh0j&#39;&gt;nevent1q…lh0j&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-12&lt;br/&gt;📝 Original message:On Sat, Jun 12, 2021 at 3:59 AM Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt;  taproot annex&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; From what I can tell, the annex is basically additional inputs to a script&lt;br/&gt;&amp;gt; that might have additional constraints put on it. Is that right? I don&amp;#39;t&lt;br/&gt;&amp;gt; quite follow how moving the max height to the annex helps script caching&lt;br/&gt;&amp;gt; here. I wasn&amp;#39;t able to find much information on how the annex is envisioned&lt;br/&gt;&amp;gt; to be used. Would you mind elaborating on how this would work?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, I think the proposal as it stands already addresses script caching&lt;br/&gt;&amp;gt; (in the Transaction Evaluation section&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md#transaction-evaluation&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md#transaction-evaluation&amp;gt&lt;/a&gt;;).&lt;br/&gt;&amp;gt; The result of the script can be cached as long as the cache item also&lt;br/&gt;&amp;gt; contains information requiring just the OP_BBV to be re-evaluated (for the&lt;br/&gt;&amp;gt; relevant block).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The normal approach for this problem would be a design that adds an &amp;#34;annex&lt;br/&gt;field&amp;#34; (where the details on how to delimit annex fields is not yet&lt;br/&gt;standardized) for a maxheight value, and add a consensus rule that&lt;br/&gt;transaction with one (or more?) maxheight fields are invalid in blocks&lt;br/&gt;whose height exceeds this (or any) maxheight value.  Then you could/would&lt;br/&gt;add an OP code to push a copy of the (smallest) maxheight value from the&lt;br/&gt;annex onto the stack or maybe an opcode to compare a stack item with this&lt;br/&gt;(every) maxheight value from the annex.  This indirection is how OP_CLTV&lt;br/&gt;and OP_CSV work and this indirection makes script validity cacheable&lt;br/&gt;because script remains a function of the transaction data only.  Since&lt;br/&gt;transaction data doesn&amp;#39;t change, neither does the outcome of script&lt;br/&gt;evaluation. The rule that invalidates late transactions looks only at the&lt;br/&gt;annex and is independent of any script evaluation considerations.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; this auto-double-spend wallet would send every payment with an annex value&lt;br/&gt;&amp;gt; that limits the payment to being valid only up to the next block&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One possible solution to that would be to require that the input to OP_BBV&lt;br/&gt;&amp;gt; to be in the script itself and not originate from the witness.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regardless, I think the ideal solution is to not have any of these such&lt;br/&gt;&amp;gt; rules if we can simply change the definition for what counts as&lt;br/&gt;&amp;gt; finalization to account for the fact that BBV transactions mined close to&lt;br/&gt;&amp;gt; their expiration. Is there a reason this finalization-redefinition is not&lt;br/&gt;&amp;gt; an adequate solution?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Generally speaking, you cannot solve security problems through optional and&lt;br/&gt;completely voluntary transaction relay policy.  I&amp;#39;ll just send my&lt;br/&gt;about-to-expire transactions directly to miners and they will probably mine&lt;br/&gt;them because they are, in fact, valid, and pay fees.  Why wouldn&amp;#39;t they&lt;br/&gt;mine it?&lt;br/&gt;&lt;br/&gt;(Yes, I know this logic also applies to RBF flagged transactions.  Indeed,&lt;br/&gt;you cannot rely on an RBF flag to prevent double spending,  Yes I think the&lt;br/&gt;RBF flag ought to be removed from consideration and every transaction&lt;br/&gt;should be considered RBFable.  Maybe that even happens to be my own node&amp;#39;s&lt;br/&gt;relay policy.)&lt;br/&gt;&lt;br/&gt;I apologize, but I don&amp;#39;t think I have further time to engage in an idea&lt;br/&gt;that I don&amp;#39;t consider likely to achieve broad community support.&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/20210612/b68c365f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210612/b68c365f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:54:40Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxsn4gwwrg2ct5qdjmygmsuprajgm6vmul6kwpvk9fsxfrmt0x98gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596uk2zyu</id>
    
      <title type="html">📅 Original date posted:2021-06-11 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxsn4gwwrg2ct5qdjmygmsuprajgm6vmul6kwpvk9fsxfrmt0x98gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596uk2zyu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9m2mfdxt9gkjf374ggle85xrhc2dmtf42yhfgpkamds5wg87xrtc5lcavc&#39;&gt;nevent1q…cavc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-11&lt;br/&gt;📝 Original message:On Fri, Jun 11, 2021 at 7:12 AM James MacWhyte &amp;lt;macwhyte at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; @Billy I like the idea. It is very obvious how useful an opcode like this&lt;br/&gt;&amp;gt; would be! (My background is in wallet implementation)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; @Russell I do understand your concerns of monotonism, however I&amp;#39;m having a&lt;br/&gt;&amp;gt; hard time really coming up with an attack vector. You said &amp;#34;one can design&lt;br/&gt;&amp;gt; a wallet to passively take advantage of reorgs by always spending through&lt;br/&gt;&amp;gt; an OP_BBV that is on the verge of becoming invalid.&amp;#34; Unless I&amp;#39;m mistaken,&lt;br/&gt;&amp;gt; this means you would need to send yourself a fresh transaction using OP_BBV&lt;br/&gt;&amp;gt; set to, say, 2 blocks in the future, then immediately spend that output in&lt;br/&gt;&amp;gt; a new payment to someone else and hope a reorg happens. Does this mean the&lt;br/&gt;&amp;gt; theoretical double-spend wallet you are proposing would have to send two&lt;br/&gt;&amp;gt; transactions every time you make a single payment, doubling the transaction&lt;br/&gt;&amp;gt; fees and adding more uncertainty around when the second transaction would&lt;br/&gt;&amp;gt; get confirmed?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Assuming the proposal is rewritten to place the maxheight into the taproot&lt;br/&gt;annex in order to address the issue with caching of script validity, then&lt;br/&gt;this auto-double-spend wallet would send every payment with an annex value&lt;br/&gt;that limits the payment to being valid only up to the next block.  If the&lt;br/&gt;payment doesn&amp;#39;t make it into the next block, then resign it with the annex&lt;br/&gt;incremented to the next block, and repeat.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; In a normal double spend scenario, there is no cost to a failed attempt,&lt;br/&gt;&amp;gt; but much to gain from a success. With your design, there is a real cost to&lt;br/&gt;&amp;gt; every single attempt (transaction fees) and no evidence that the rate of&lt;br/&gt;&amp;gt; success would be higher (you still have to bet on the reorg not including&lt;br/&gt;&amp;gt; your transaction in the first few blocks). It sounds like this new system&lt;br/&gt;&amp;gt; would actually be less attractive to double spenders than the current model!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I also agree with Billy&amp;#39;s idea for relay rules. We already have abusable&lt;br/&gt;&amp;gt; chain rules (e.g. a tx can be included in a block with 0 transaction fee&lt;br/&gt;&amp;gt; [spam?]) but we add protection with relay rules (e.g. minimum fee to&lt;br/&gt;&amp;gt; relay). I don&amp;#39;t see how this would be any different, if the chain rules&lt;br/&gt;&amp;gt; only enforced the block height for confirmation and the relay rules forced&lt;br/&gt;&amp;gt; a minimum OP_BBV value in order to protect against reorg double spends.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The inclusion of a tx with 0 transaction fee in a block is not in of itself&lt;br/&gt;an abuse.  There is nothing wrong with blocks containing such&lt;br/&gt;transactions.  The *relay* of 0 transaction fee transactions is what is an&lt;br/&gt;abuse because it allows one to usurp Bitcoin&amp;#39;s gossip network for their own&lt;br/&gt;arbitrary communications platform without cost.  Most Bitcoin users aren&amp;#39;t&lt;br/&gt;signing up for being a usenet provider.  So, by policy, nodes require a&lt;br/&gt;cost to relay transactions so that broadcasting isn&amp;#39;t free. Even when that&lt;br/&gt;price is paid to someone else, it still is an effective limitation on abuse.&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/20210611/acb7ba99/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210611/acb7ba99/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:54:39Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfd5hgyu3sktjx0dx83uvx2wprr8jx66c8qzflftz4qjfl9erfrzszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5960qhejg</id>
    
      <title type="html">📅 Original date posted:2021-06-10 📝 Original message:As it ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfd5hgyu3sktjx0dx83uvx2wprr8jx66c8qzflftz4qjfl9erfrzszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5960qhejg" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgcfhh3m98wmh7qxny5vy0h90wtcn2f5upmzqv9glphjs7ldu8xfs6z5q8f&#39;&gt;nevent1q…5q8f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-10&lt;br/&gt;📝 Original message:As it stands today, in order to double spend a transaction during a reorg,&lt;br/&gt;one must take an active role of recognizing that a reorg has happened, hope&lt;br/&gt;that the new branch has completely omitted your spending transaction, and&lt;br/&gt;then quickly broadcast a replacement transaction with a higher fee to&lt;br/&gt;outbid your previous transaction.&lt;br/&gt;&lt;br/&gt;However with, pretty much any change to Bitcoin that leads to non-monotonic&lt;br/&gt;validity rules, that is any rule where transactions that are valid at one&lt;br/&gt;tip, can become invalid at a latter tip through some other means than their&lt;br/&gt;inputs being spent, such as OP_BBV, one can design a wallet to passively&lt;br/&gt;take advantage of reorgs by always spending through an OP_BBV that is on&lt;br/&gt;the verge of becoming invalid.  Then you just have to sit back and wait for&lt;br/&gt;a suitable reorg to take back your UTXO for you without any work.  I would&lt;br/&gt;probably attempt to build such a wallet for myself should any OP_BBV-like&lt;br/&gt;proposal be implemented.  Think of it as an auto-double spend wallet.&lt;br/&gt;&lt;br/&gt;Some people hold the opinion that there is no meaningful distinction&lt;br/&gt;between the active and passive roles in these two scenarios.  I&amp;#39;m not&lt;br/&gt;convinced.  I see a material difference between needing to actively&lt;br/&gt;broadcast a replacement transaction and passively waiting for your&lt;br/&gt;transaction to fall out of validity.  I also see a material difference&lt;br/&gt;between needing the transaction to be completely omitted from the reorging&lt;br/&gt;chain versus just having the transaction fail a height qualification in the&lt;br/&gt;reorging chain.&lt;br/&gt;&lt;br/&gt;(There are a few other lesser problems with an OP_BBV proposal, including&lt;br/&gt;the fact that Bitcoin software tends to cache script validity so you&amp;#39;d want&lt;br/&gt;to use the taproot annex instead of pure script; and a possible issue that&lt;br/&gt;the proposal defeats limits on transaction replacement because now instead&lt;br/&gt;of meeting minimum thresholds for fee bumping you can just let the previous&lt;br/&gt;transaction expire and bump the fee by a fraction (though you are&lt;br/&gt;effectively rate limited so maybe that is considered sufficiently&lt;br/&gt;mitigated?).  But there is little point in addressing these lesser concerns&lt;br/&gt;if the main concern is outstanding.)&lt;br/&gt;&lt;br/&gt;On Thu, Jun 10, 2021 at 6:20 PM Billy Tetrud &amp;lt;billy.tetrud at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; @Russell In that thread, you quoted Satoshi there, but neither he nor you&lt;br/&gt;&amp;gt; really deeply explained the concern. Would you mind elaborating on a&lt;br/&gt;&amp;gt; situation that calls for concern here? Some deeper explanation of the&lt;br/&gt;&amp;gt; &amp;#34;reorg safety&amp;#34; property would also be helpful. I&amp;#39;d very much like to know&lt;br/&gt;&amp;gt; what your thoughts are on the specific points I brought up in the BIP as&lt;br/&gt;&amp;gt; well.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Jun 10, 2021 at 11:35 AM Russell O&amp;#39;Connor &amp;lt;&lt;br/&gt;&amp;gt; roconnor at blockstream.com&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This is a continuation of the thread at&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-April/018760.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-April/018760.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; on this topic.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I still remain unconvinced that we ought to give up on the &amp;#34;reorg safety&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; property that is explicitly part of Bitcoin&amp;#39;s design.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Thu, Jun 10, 2021 at 1:56 PM Billy Tetrud via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Hi Everyone,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;d like to open a discussion of an opcode I call OP_BEFOREBLOCKVERIFY&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (OP_BBV) which is similar to ones that have been discussed before (eg&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_BLOCKNUMBER). The opcode is very simple: the it takes as a parameter&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a number representing a block height, and marks the transaction invalid if&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the current block the transaction is being evaluated for is greater than or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; equal to that block height, the transaction is invalid. I wrote up a bip&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for OP_BBV here&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; .&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The motivation for this opcode is primarily to do switch-off kinds of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transactions. Eg, an output that contains both a spend path that uses&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_BBV and a spend path that uses OP_CHECKSEQUENCEVERIFY so that before a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; particular block one person can spend, and after that block a different&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; person can spend. This can allow doing things like expiring payments or&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; reversible payments in a cheaper way. Currently, things like that require a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sequence of multiple transactions, however OP_BBV can do it in a single&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction, making these applications a lot more economically feasible.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The particular application I&amp;#39;m most interested in is more efficient&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallet vaults. However, wallet vaults requires other new opcodes, and I&amp;#39;ve&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; been given the (good, I think) advice to start off this discussion with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; something a bit more bite sized and manageable. So I want to keep this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; discussion to OP_BBV and steer away from the specifics of the wallet vaults&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m thinking of (which are more involved, requiring other new opcodes that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I think makes more sense to discuss in a different thread).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The main thing I&amp;#39;d like to discuss is the historical avoidance of and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; stigma toward opcodes that can cause a valid transaction to become invalid.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; It seems there are two concerns:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 1. that an opcode like might create a DOS vector where a malicious actor&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; might be able to spam the mempool with transactions containing this opcode.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2. that an opcode like this could cause &amp;#34;bad&amp;#34; reorg behavior, where in a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; reorg, transactions that were spent become not spend and not spendable&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; because they were mined too near their expiry point.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; While I don&amp;#39;t want to claim anything about opcodes that can cause spend&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; paths to expire in general, I do want to claim that *some* opcodes like&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that are safe - in particular OP_BBV. In the context of OP_BBV&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; specifically, it seems to me like item 1 (mempool handling) is a solvable&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; problem and that point 2 (reorg issues) is not really a problem since&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; people should generally be waiting for 6 confirmations and software can&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; warn the user to wait for 6 confirmations in relevant scenarios where a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 6-block reorg might reverse the transaction. I discuss this in detail in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the Design Tradeoffs and Risks&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md#transaction-expiry&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md#transaction-expiry&amp;gt&lt;/a&gt;; section&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of the document I wrote for OP_BBV. I&amp;#39;d love to hear thoughts from others&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; on here about these things and especially the discussion of these issues in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the document I linked to.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; BT&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- 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/20210610/22b0d8c3/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210610/22b0d8c3/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:54:36Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsxmnhzslct53kwwvrh05ck2vmnfahhyhr4pgtgraga3cc9yakjvfgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596e85c6l</id>
    
      <title type="html">📅 Original date posted:2021-06-10 📝 Original message:This ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsxmnhzslct53kwwvrh05ck2vmnfahhyhr4pgtgraga3cc9yakjvfgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596e85c6l" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgs2t0vgvwy2znvua8eknx5q3wh0fyq3ra4kkc5680pz5ze92yhkc78r8mv&#39;&gt;nevent1q…r8mv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-10&lt;br/&gt;📝 Original message:This is a continuation of the thread at&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-April/018760.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-April/018760.html&lt;/a&gt;&lt;br/&gt;on this topic.&lt;br/&gt;&lt;br/&gt;I still remain unconvinced that we ought to give up on the &amp;#34;reorg safety&amp;#34;&lt;br/&gt;property that is explicitly part of Bitcoin&amp;#39;s design.&lt;br/&gt;&lt;br/&gt;On Thu, Jun 10, 2021 at 1:56 PM Billy Tetrud via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Everyone,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;d like to open a discussion of an opcode I call OP_BEFOREBLOCKVERIFY&lt;br/&gt;&amp;gt; (OP_BBV) which is similar to ones that have been discussed before (eg&lt;br/&gt;&amp;gt; OP_BLOCKNUMBER). The opcode is very simple: the it takes as a parameter a&lt;br/&gt;&amp;gt; number representing a block height, and marks the transaction invalid if&lt;br/&gt;&amp;gt; the current block the transaction is being evaluated for is greater than or&lt;br/&gt;&amp;gt; equal to that block height, the transaction is invalid. I wrote up a bip&lt;br/&gt;&amp;gt; for OP_BBV here&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; .&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The motivation for this opcode is primarily to do switch-off kinds of&lt;br/&gt;&amp;gt; transactions. Eg, an output that contains both a spend path that uses&lt;br/&gt;&amp;gt; OP_BBV and a spend path that uses OP_CHECKSEQUENCEVERIFY so that before a&lt;br/&gt;&amp;gt; particular block one person can spend, and after that block a different&lt;br/&gt;&amp;gt; person can spend. This can allow doing things like expiring payments or&lt;br/&gt;&amp;gt; reversible payments in a cheaper way. Currently, things like that require a&lt;br/&gt;&amp;gt; sequence of multiple transactions, however OP_BBV can do it in a single&lt;br/&gt;&amp;gt; transaction, making these applications a lot more economically feasible.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The particular application I&amp;#39;m most interested in is more efficient wallet&lt;br/&gt;&amp;gt; vaults. However, wallet vaults requires other new opcodes, and I&amp;#39;ve been&lt;br/&gt;&amp;gt; given the (good, I think) advice to start off this discussion with&lt;br/&gt;&amp;gt; something a bit more bite sized and manageable. So I want to keep this&lt;br/&gt;&amp;gt; discussion to OP_BBV and steer away from the specifics of the wallet vaults&lt;br/&gt;&amp;gt; I&amp;#39;m thinking of (which are more involved, requiring other new opcodes that&lt;br/&gt;&amp;gt; I think makes more sense to discuss in a different thread).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The main thing I&amp;#39;d like to discuss is the historical avoidance of and&lt;br/&gt;&amp;gt; stigma toward opcodes that can cause a valid transaction to become invalid.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It seems there are two concerns:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. that an opcode like might create a DOS vector where a malicious actor&lt;br/&gt;&amp;gt; might be able to spam the mempool with transactions containing this opcode.&lt;br/&gt;&amp;gt; 2. that an opcode like this could cause &amp;#34;bad&amp;#34; reorg behavior, where in a&lt;br/&gt;&amp;gt; reorg, transactions that were spent become not spend and not spendable&lt;br/&gt;&amp;gt; because they were mined too near their expiry point.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While I don&amp;#39;t want to claim anything about opcodes that can cause spend&lt;br/&gt;&amp;gt; paths to expire in general, I do want to claim that *some* opcodes like&lt;br/&gt;&amp;gt; that are safe - in particular OP_BBV. In the context of OP_BBV&lt;br/&gt;&amp;gt; specifically, it seems to me like item 1 (mempool handling) is a solvable&lt;br/&gt;&amp;gt; problem and that point 2 (reorg issues) is not really a problem since&lt;br/&gt;&amp;gt; people should generally be waiting for 6 confirmations and software can&lt;br/&gt;&amp;gt; warn the user to wait for 6 confirmations in relevant scenarios where a&lt;br/&gt;&amp;gt; 6-block reorg might reverse the transaction. I discuss this in detail in&lt;br/&gt;&amp;gt; the Design Tradeoffs and Risks&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md#transaction-expiry&amp;gt&#34;&gt;https://github.com/fresheneesz/bip-efficient-bitcoin-vaults/blob/main/bbv/bip-beforeblockverify.md#transaction-expiry&amp;gt&lt;/a&gt;; section&lt;br/&gt;&amp;gt; of the document I wrote for OP_BBV. I&amp;#39;d love to hear thoughts from others&lt;br/&gt;&amp;gt; on here about these things and especially the discussion of these issues in&lt;br/&gt;&amp;gt; the document I linked to.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; BT&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/20210610/8acbf1df/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210610/8acbf1df/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:54:35Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszy6pfq7tfcfty84uzzzwvxddrt3ywwvkcrl5s8vc92kfkm56fwjqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596amdf4m</id>
    
      <title type="html">📅 Original date posted:2021-04-16 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszy6pfq7tfcfty84uzzzwvxddrt3ywwvkcrl5s8vc92kfkm56fwjqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596amdf4m" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsz639ur2zgaj9y6jvhz5fk6e7w0cr3me7jsj4p0v3w5p6fekw3t9qh964tp&#39;&gt;nevent1q…64tp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-16&lt;br/&gt;📝 Original message:Firstly, a minor point is that your proposal is a soft-fork, not a&lt;br/&gt;hard-fork.&lt;br/&gt;&lt;br/&gt;But more importantly, adding limitations on OP_RETURN transactions is not&lt;br/&gt;helpful.  Users who want to embed arbitrary data in their transactions can&lt;br/&gt;always do so by encoding their data inside the values of legacy&lt;br/&gt;multi-signature scriptpubkeys (pubkeys can be generated without knowing the&lt;br/&gt;private key in order to encode non-key related data).  Not only can users&lt;br/&gt;do this, users have done this in the past.  However, this behaviour is&lt;br/&gt;problematic because such multi-signature &amp;#34;data&amp;#34; scriptpubkeys are&lt;br/&gt;indistinguishable from &amp;#34;real&amp;#34; multisignature scriptpubkeys, and thus must&lt;br/&gt;be kept in the UTXO set.  This differs from outputs using OP_RETURN which&lt;br/&gt;are provably unspendable, and therefore can be safely omitted from the UTXO&lt;br/&gt;set.&lt;br/&gt;&lt;br/&gt;Thus, given that it is otherwise impossible to stop people from putting&lt;br/&gt;arbitrary data values into their transactions, then we rather encourage&lt;br/&gt;people who are going to encode their arbitrary data in transaction to use&lt;br/&gt;the OP_RETURN outputs in order to avoid UTXO bloat.&lt;br/&gt;&lt;br/&gt;Also, as it stands, fees already nudge various participants to consolidate&lt;br/&gt;their data in the way that you suggest they do.&lt;br/&gt;&lt;br/&gt;On Fri, Apr 16, 2021 at 9:32 AM Christopher Gilliard 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 have created a BIP which can be found here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/cgilliard/bips/blob/notarization/bip-XXXX.mediawiki&#34;&gt;https://github.com/cgilliard/bips/blob/notarization/bip-XXXX.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m sending this email to start the discussion regarding this proposal. If&lt;br/&gt;&amp;gt; there are any comments/suggestions, please let me know.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; Chris&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/20210416/d620ca08/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210416/d620ca08/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:51:42Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9pr5v9x5lgusyn8gngqnsctgc3m3ymredvw3gvsdsnwadk6lrwuczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596k8gd3f</id>
    
      <title type="html">📅 Original date posted:2021-04-09 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9pr5v9x5lgusyn8gngqnsctgc3m3ymredvw3gvsdsnwadk6lrwuczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596k8gd3f" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrhsh260g8t98gwzheck22y78xttz048jshergmrzkj9kvvptsqwgsc3puj&#39;&gt;nevent1q…3puj&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-09&lt;br/&gt;📝 Original message:&amp;gt;From &lt;a href=&#34;https://bitcointalk.org/index.php?topic=1786.msg22119#msg22119&#34;&gt;https://bitcointalk.org/index.php?topic=1786.msg22119#msg22119&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;We can&amp;#39;t safely do OP_BLOCKNUMBER.  In the event of a block chain reorg&lt;br/&gt;&amp;gt; after a segmentation, transactions need to be able to get into the chain in&lt;br/&gt;&amp;gt; a later block.  The OP_BLOCKNUMBER transaction and all its dependants would&lt;br/&gt;&amp;gt; become invalid.  This wouldn&amp;#39;t be fair to later owners of the coins who&lt;br/&gt;&amp;gt; weren&amp;#39;t involved in the time limited transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; nTimeLock does the reverse.  It&amp;#39;s an open transaction that can be replaced&lt;br/&gt;&amp;gt; with new versions until the deadline.  It can&amp;#39;t be recorded until it&lt;br/&gt;&amp;gt; locks.  The highest version when the deadline hits gets recorded.  It could&lt;br/&gt;&amp;gt; be used, for example, to write an escrow transaction that will&lt;br/&gt;&amp;gt; automatically permanently lock and go through unless it is revoked before&lt;br/&gt;&amp;gt; the deadline.  The feature isn&amp;#39;t enabled or used yet, but the support is&lt;br/&gt;&amp;gt; there so it could be implemented later.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Unfortunately, limiting the maximum block height for a specific transaction&lt;br/&gt;would have exactly the same problem as cited above for OP_BLOCKNUMBER.&lt;br/&gt;&lt;br/&gt;On Fri, Apr 9, 2021 at 7:21 AM 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; is there any way to specify a maximum block height on a transaction?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ie: this tx is only valid if included in a block with a certain height or&lt;br/&gt;&amp;gt; less&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; i feel like this would be useful&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/20210409/fed819a8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/fed819a8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:51:37Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8562xxs49z8l3y0clukhfg4kzgy6zu9zwz6t3mhv7qrzmmsl74mszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ghekuv</id>
    
      <title type="html">📅 Original date posted:2021-04-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8562xxs49z8l3y0clukhfg4kzgy6zu9zwz6t3mhv7qrzmmsl74mszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ghekuv" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgqd5ywprsy04ewe7vuaw6kdxj9j55f2rlq9fsw2mrfh8w56n3qjgdll8ka&#39;&gt;nevent1q…l8ka&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-06&lt;br/&gt;📝 Original message:On Tue, Apr 6, 2021 at 12:23 PM David A. Harding &amp;lt;dave at dtrt.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   You need to upgrade by $( date -d &amp;#34;$MIN_LOCKIN_TIME &#43; 11 days&amp;#34; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ten minute estimators can say:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   You need to upgrade by $( date -d &amp;#34;$MIN_LOCKIN_TIME &#43; $((10 * 2016))&lt;br/&gt;&amp;gt; minutes&amp;#34; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And nine minute estimators can say:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   You need to upgrade by $( date -d &amp;#34;$MIN_LOCKIN_TIME &#43; $((9 * 2016))&lt;br/&gt;&amp;gt; minutes&amp;#34; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It isn&amp;#39;t  &amp;#34;$MIN_LOCKIN_TIME &#43; $((10 * 2016)) minutes&amp;#34;. It&amp;#39;s&lt;br/&gt;&amp;#34;$MIN_LOCKIN_TIME &#43; time until next retargeting period &#43; $((10 * 2016))&lt;br/&gt;minutes&amp;#34;.&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/20210406/bdadc623/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210406/bdadc623/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:51:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgsenqlct6t7w9a5xv7kgfscm20yazdtgk8x9nc6shm2v7764mwcszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596u8xxyt</id>
    
      <title type="html">📅 Original date posted:2021-04-06 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgsenqlct6t7w9a5xv7kgfscm20yazdtgk8x9nc6shm2v7764mwcszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596u8xxyt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxnlralpen4mu3m0kh5gx6dc96dwqnyn2qwxk5ywwamzll4tezuhcnfmhcq&#39;&gt;nevent1q…mhcq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-06&lt;br/&gt;📝 Original message:I&amp;#39;m pretty sure that the question of &amp;#34;is signalling still possible by the&lt;br/&gt;time enough miners have upgraded and are ready to start signalling?&amp;#34;&lt;br/&gt;Strongly benefits from a guaranteed number of signaling periods that height&lt;br/&gt;based activation offers.  Especially for the short activation period of&lt;br/&gt;Speedy Trial.&lt;br/&gt;&lt;br/&gt;The other relevant value of giving enough time for users to upgrade is not&lt;br/&gt;very sensitive.  It&amp;#39;s not like 180 days is magic number that going over is&lt;br/&gt;safe and going below is unsafe.&lt;br/&gt;&lt;br/&gt;That said, as Jeremy has pointed out before (maybe it was on IRC), we can&lt;br/&gt;almost ensure a minimum of 7 retargeting periods by carefully selecting&lt;br/&gt;signaling start and end dates to line up in the middle of expected&lt;br/&gt;retargeting periods that we would otherwise chose with height based&lt;br/&gt;activation. Why we would rather use MTP to fake a height based activation,&lt;br/&gt;I will never understand. But if this is what it takes to activate taproot,&lt;br/&gt;that is fine by me.&lt;br/&gt;&lt;br/&gt;The differences between height and MTP activation are too small to matter&lt;br/&gt;that much for what is ultimately transient code.  As long as MTP activation&lt;br/&gt;can pass code review it is okay with me.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Mon., Apr. 5, 2021, 06:35 Anthony Towns 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 Sat, Apr 03, 2021 at 09:39:11PM -0700, Jeremy via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; As such, the main conversation in this agenda item is&lt;br/&gt;&amp;gt; &amp;gt; around the pros/cons of height or MTP and determining if we can reach&lt;br/&gt;&amp;gt; consensus&lt;br/&gt;&amp;gt; &amp;gt; on either approach.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here&amp;#39;s some numbers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given a desired signalling period of xxx days, where signaling begins&lt;br/&gt;&amp;gt; on the first retarget boundary after the starttime and ends on the last&lt;br/&gt;&amp;gt; retarget boundary before the endtime, this is how many retarget periods&lt;br/&gt;&amp;gt; you get (based on blocks since 2015-01-01):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  90 days: mainnet  5-7 full 2016-block retarget periods&lt;br/&gt;&amp;gt; 180 days: mainnet 11-14&lt;br/&gt;&amp;gt; 365 days: mainnet 25-27&lt;br/&gt;&amp;gt; 730 days: mainnet 51-55&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (This applies to non-signalling periods like the activation/lock in delay&lt;br/&gt;&amp;gt; too of course. If you change it so that it ends at the first retarget&lt;br/&gt;&amp;gt; period after endtime, all the values just get incremented -- ie, 6-8,&lt;br/&gt;&amp;gt; 12-15 etc)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If I&amp;#39;ve got the maths right, then requiring 1814 of 2016 blocks to signal,&lt;br/&gt;&amp;gt; means that having 7 periods instead of 5 lets you get a 50% chance of&lt;br/&gt;&amp;gt; successful activation by maintaining 89.04% of hashpower over the entire&lt;br/&gt;&amp;gt; period instead of 89.17%, while 55 periods instead of 51 gives you a 50%&lt;br/&gt;&amp;gt; chance of success with 88.38% hashpower instead of 88.40% hashpower.&lt;br/&gt;&amp;gt; So the &amp;#34;repeated trials&amp;#34; part doesn&amp;#39;t look like it has any significant&lt;br/&gt;&amp;gt; effect on mainnet.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you target yy periods instead of xxx days, starting and ending on a&lt;br/&gt;&amp;gt; retarget boundary, you get the following stats from the last few years&lt;br/&gt;&amp;gt; of mainnet (again starting at 2015-01-01):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  1 period:  mainnet 11-17 days (range 5.2 days)&lt;br/&gt;&amp;gt;  7 periods: mainnet 87-103 days (range 15.4 days)&lt;br/&gt;&amp;gt; 13 periods: mainnet 166-185 days (range 17.9 days)&lt;br/&gt;&amp;gt; 27 periods: mainnet 352-377 days (range 24.4 days)&lt;br/&gt;&amp;gt; 54 periods: mainnet 711-747 days (range 35.0 days)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As far as I can see the questions that matter are:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * is signalling still possible by the time enough miners have upgraded&lt;br/&gt;&amp;gt;    and are ready to start signalling?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * have nodes upgraded to enforce the new rules by the time activation&lt;br/&gt;&amp;gt;    occurs, if it occurs?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But both those benefit from less real time variance, rather than less&lt;br/&gt;&amp;gt; variance in the numbers of signalling periods, at least in every way&lt;br/&gt;&amp;gt; that I can think of.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Corresponding numbers for testnet:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  90 days: testnet   5-85&lt;br/&gt;&amp;gt; 180 days: testnet  23-131&lt;br/&gt;&amp;gt; 365 days: testnet  70-224&lt;br/&gt;&amp;gt; 730 days: testnet 176-390&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (A 50% chance of activating within 5 periods requires sustaining 89.18%&lt;br/&gt;&amp;gt; hashpower; within 85 periods, 88.26% hashpower; far smaller differences&lt;br/&gt;&amp;gt; with all the other ranges -- of course, presumably the only way the&lt;br/&gt;&amp;gt; higher block rates ever actually happen is by someone pointing an ASIC at&lt;br/&gt;&amp;gt; testnet, and thus controlling 100% of blocks for multiple periods anyway)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   1 period:  testnet 5.6minutes-26 days (range 26.5 days)&lt;br/&gt;&amp;gt;  13 periods: testnet 1-135 days (range 133.5 days)&lt;br/&gt;&amp;gt;  27 periods: testnet 13-192 days (range 178.3 days)&lt;br/&gt;&amp;gt;  54 periods: testnet 39-283 days (range 243.1 days)&lt;br/&gt;&amp;gt; 100 periods: testnet 114-476 days (range 360.9 days)&lt;br/&gt;&amp;gt;              (this is the value used in [0] in order to ensure 3 months&amp;#39;&lt;br/&gt;&amp;gt;               worth of signalling is available)&lt;br/&gt;&amp;gt; 132 periods: testnet 184-583 days (range 398.1 days)&lt;br/&gt;&amp;gt; 225 periods: testnet 365-877 days (range 510.7 days)&lt;br/&gt;&amp;gt; 390 periods: testnet 725-1403 days (range 677.1 days)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0] &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1081#pullrequestreview-621934640&#34;&gt;https://github.com/bitcoin/bips/pull/1081#pullrequestreview-621934640&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&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/20210406/1049635d/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210406/1049635d/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T22:51:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswsyffg6av6sz0wjvvh5533lzuhz72jq77uuplp5ksx863rljuskczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596k6qz48</id>
    
      <title type="html">📅 Original date posted:2021-04-16 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswsyffg6av6sz0wjvvh5533lzuhz72jq77uuplp5ksx863rljuskczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596k6qz48" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0fvthsvf9xztycd0dp9zta9f8ts34qaf70lpz5alar28jdqg47fq67akgv&#39;&gt;nevent1q…akgv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-16&lt;br/&gt;📝 Original message:Firstly, a minor point is that your proposal is a soft-fork, not a&lt;br/&gt;hard-fork.&lt;br/&gt;&lt;br/&gt;But more importantly, adding limitations on OP_RETURN transactions is not&lt;br/&gt;helpful.  Users who want to embed arbitrary data in their transactions can&lt;br/&gt;always do so by encoding their data inside the values of legacy&lt;br/&gt;multi-signature scriptpubkeys (pubkeys can be generated without knowing the&lt;br/&gt;private key in order to encode non-key related data).  Not only can users&lt;br/&gt;do this, users have done this in the past.  However, this behaviour is&lt;br/&gt;problematic because such multi-signature &amp;#34;data&amp;#34; scriptpubkeys are&lt;br/&gt;indistinguishable from &amp;#34;real&amp;#34; multisignature scriptpubkeys, and thus must&lt;br/&gt;be kept in the UTXO set.  This differs from outputs using OP_RETURN which&lt;br/&gt;are provably unspendable, and therefore can be safely omitted from the UTXO&lt;br/&gt;set.&lt;br/&gt;&lt;br/&gt;Thus, given that it is otherwise impossible to stop people from putting&lt;br/&gt;arbitrary data values into their transactions, then we rather encourage&lt;br/&gt;people who are going to encode their arbitrary data in transaction to use&lt;br/&gt;the OP_RETURN outputs in order to avoid UTXO bloat.&lt;br/&gt;&lt;br/&gt;Also, as it stands, fees already nudge various participants to consolidate&lt;br/&gt;their data in the way that you suggest they do.&lt;br/&gt;&lt;br/&gt;On Fri, Apr 16, 2021 at 9:32 AM Christopher Gilliard 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 have created a BIP which can be found here:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/cgilliard/bips/blob/notarization/bip-XXXX.mediawiki&#34;&gt;https://github.com/cgilliard/bips/blob/notarization/bip-XXXX.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m sending this email to start the discussion regarding this proposal. If&lt;br/&gt;&amp;gt; there are any comments/suggestions, please let me know.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; Chris&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/20210416/d620ca08/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210416/d620ca08/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:31:34Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs88cwxwwsvq4tqcaynax2wjpc9ps26hfutwl7h99saejc425tlwhczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596j45q26</id>
    
      <title type="html">📅 Original date posted:2021-04-09 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs88cwxwwsvq4tqcaynax2wjpc9ps26hfutwl7h99saejc425tlwhczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596j45q26" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9yryev42tq6ah2ngtta605370dmewggdqhev56ccwdmu8llkze2spaq4za&#39;&gt;nevent1q…q4za&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-09&lt;br/&gt;📝 Original message:&amp;gt;From &lt;a href=&#34;https://bitcointalk.org/index.php?topic=1786.msg22119#msg22119&#34;&gt;https://bitcointalk.org/index.php?topic=1786.msg22119#msg22119&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;We can&amp;#39;t safely do OP_BLOCKNUMBER.  In the event of a block chain reorg&lt;br/&gt;&amp;gt; after a segmentation, transactions need to be able to get into the chain in&lt;br/&gt;&amp;gt; a later block.  The OP_BLOCKNUMBER transaction and all its dependants would&lt;br/&gt;&amp;gt; become invalid.  This wouldn&amp;#39;t be fair to later owners of the coins who&lt;br/&gt;&amp;gt; weren&amp;#39;t involved in the time limited transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; nTimeLock does the reverse.  It&amp;#39;s an open transaction that can be replaced&lt;br/&gt;&amp;gt; with new versions until the deadline.  It can&amp;#39;t be recorded until it&lt;br/&gt;&amp;gt; locks.  The highest version when the deadline hits gets recorded.  It could&lt;br/&gt;&amp;gt; be used, for example, to write an escrow transaction that will&lt;br/&gt;&amp;gt; automatically permanently lock and go through unless it is revoked before&lt;br/&gt;&amp;gt; the deadline.  The feature isn&amp;#39;t enabled or used yet, but the support is&lt;br/&gt;&amp;gt; there so it could be implemented later.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Unfortunately, limiting the maximum block height for a specific transaction&lt;br/&gt;would have exactly the same problem as cited above for OP_BLOCKNUMBER.&lt;br/&gt;&lt;br/&gt;On Fri, Apr 9, 2021 at 7:21 AM 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; is there any way to specify a maximum block height on a transaction?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ie: this tx is only valid if included in a block with a certain height or&lt;br/&gt;&amp;gt; less&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; i feel like this would be useful&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/20210409/fed819a8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210409/fed819a8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:31:30Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9g63quetumyf896dqjyw4cgpvevkv9s4pg9xuqspkw8sz965x8kgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5965k3jwh</id>
    
      <title type="html">📅 Original date posted:2021-04-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9g63quetumyf896dqjyw4cgpvevkv9s4pg9xuqspkw8sz965x8kgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5965k3jwh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsptjeluucgh6r95p5dp0v5x087vq6249gygzz9dufr944w273ndgsl5rrsr&#39;&gt;nevent1q…rrsr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-06&lt;br/&gt;📝 Original message:On Tue, Apr 6, 2021 at 12:23 PM David A. Harding &amp;lt;dave at dtrt.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   You need to upgrade by $( date -d &amp;#34;$MIN_LOCKIN_TIME &#43; 11 days&amp;#34; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Ten minute estimators can say:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   You need to upgrade by $( date -d &amp;#34;$MIN_LOCKIN_TIME &#43; $((10 * 2016))&lt;br/&gt;&amp;gt; minutes&amp;#34; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And nine minute estimators can say:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   You need to upgrade by $( date -d &amp;#34;$MIN_LOCKIN_TIME &#43; $((9 * 2016))&lt;br/&gt;&amp;gt; minutes&amp;#34; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;It isn&amp;#39;t  &amp;#34;$MIN_LOCKIN_TIME &#43; $((10 * 2016)) minutes&amp;#34;. It&amp;#39;s&lt;br/&gt;&amp;#34;$MIN_LOCKIN_TIME &#43; time until next retargeting period &#43; $((10 * 2016))&lt;br/&gt;minutes&amp;#34;.&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/20210406/bdadc623/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210406/bdadc623/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:31:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswnl4lfd24ru345wknheqfjfchvv0txt6kdrges04hl5vaw9p4mpgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968kz09v</id>
    
      <title type="html">📅 Original date posted:2021-04-06 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswnl4lfd24ru345wknheqfjfchvv0txt6kdrges04hl5vaw9p4mpgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968kz09v" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg9v4lquc98g7d3w2rl9d2k9rqyf5ts4wxnyxwawaq9l9zme528sc38syd3&#39;&gt;nevent1q…syd3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-04-06&lt;br/&gt;📝 Original message:I&amp;#39;m pretty sure that the question of &amp;#34;is signalling still possible by the&lt;br/&gt;time enough miners have upgraded and are ready to start signalling?&amp;#34;&lt;br/&gt;Strongly benefits from a guaranteed number of signaling periods that height&lt;br/&gt;based activation offers.  Especially for the short activation period of&lt;br/&gt;Speedy Trial.&lt;br/&gt;&lt;br/&gt;The other relevant value of giving enough time for users to upgrade is not&lt;br/&gt;very sensitive.  It&amp;#39;s not like 180 days is magic number that going over is&lt;br/&gt;safe and going below is unsafe.&lt;br/&gt;&lt;br/&gt;That said, as Jeremy has pointed out before (maybe it was on IRC), we can&lt;br/&gt;almost ensure a minimum of 7 retargeting periods by carefully selecting&lt;br/&gt;signaling start and end dates to line up in the middle of expected&lt;br/&gt;retargeting periods that we would otherwise chose with height based&lt;br/&gt;activation. Why we would rather use MTP to fake a height based activation,&lt;br/&gt;I will never understand. But if this is what it takes to activate taproot,&lt;br/&gt;that is fine by me.&lt;br/&gt;&lt;br/&gt;The differences between height and MTP activation are too small to matter&lt;br/&gt;that much for what is ultimately transient code.  As long as MTP activation&lt;br/&gt;can pass code review it is okay with me.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Mon., Apr. 5, 2021, 06:35 Anthony Towns 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 Sat, Apr 03, 2021 at 09:39:11PM -0700, Jeremy via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; As such, the main conversation in this agenda item is&lt;br/&gt;&amp;gt; &amp;gt; around the pros/cons of height or MTP and determining if we can reach&lt;br/&gt;&amp;gt; consensus&lt;br/&gt;&amp;gt; &amp;gt; on either approach.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here&amp;#39;s some numbers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Given a desired signalling period of xxx days, where signaling begins&lt;br/&gt;&amp;gt; on the first retarget boundary after the starttime and ends on the last&lt;br/&gt;&amp;gt; retarget boundary before the endtime, this is how many retarget periods&lt;br/&gt;&amp;gt; you get (based on blocks since 2015-01-01):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  90 days: mainnet  5-7 full 2016-block retarget periods&lt;br/&gt;&amp;gt; 180 days: mainnet 11-14&lt;br/&gt;&amp;gt; 365 days: mainnet 25-27&lt;br/&gt;&amp;gt; 730 days: mainnet 51-55&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (This applies to non-signalling periods like the activation/lock in delay&lt;br/&gt;&amp;gt; too of course. If you change it so that it ends at the first retarget&lt;br/&gt;&amp;gt; period after endtime, all the values just get incremented -- ie, 6-8,&lt;br/&gt;&amp;gt; 12-15 etc)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If I&amp;#39;ve got the maths right, then requiring 1814 of 2016 blocks to signal,&lt;br/&gt;&amp;gt; means that having 7 periods instead of 5 lets you get a 50% chance of&lt;br/&gt;&amp;gt; successful activation by maintaining 89.04% of hashpower over the entire&lt;br/&gt;&amp;gt; period instead of 89.17%, while 55 periods instead of 51 gives you a 50%&lt;br/&gt;&amp;gt; chance of success with 88.38% hashpower instead of 88.40% hashpower.&lt;br/&gt;&amp;gt; So the &amp;#34;repeated trials&amp;#34; part doesn&amp;#39;t look like it has any significant&lt;br/&gt;&amp;gt; effect on mainnet.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If you target yy periods instead of xxx days, starting and ending on a&lt;br/&gt;&amp;gt; retarget boundary, you get the following stats from the last few years&lt;br/&gt;&amp;gt; of mainnet (again starting at 2015-01-01):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  1 period:  mainnet 11-17 days (range 5.2 days)&lt;br/&gt;&amp;gt;  7 periods: mainnet 87-103 days (range 15.4 days)&lt;br/&gt;&amp;gt; 13 periods: mainnet 166-185 days (range 17.9 days)&lt;br/&gt;&amp;gt; 27 periods: mainnet 352-377 days (range 24.4 days)&lt;br/&gt;&amp;gt; 54 periods: mainnet 711-747 days (range 35.0 days)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As far as I can see the questions that matter are:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * is signalling still possible by the time enough miners have upgraded&lt;br/&gt;&amp;gt;    and are ready to start signalling?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  * have nodes upgraded to enforce the new rules by the time activation&lt;br/&gt;&amp;gt;    occurs, if it occurs?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; But both those benefit from less real time variance, rather than less&lt;br/&gt;&amp;gt; variance in the numbers of signalling periods, at least in every way&lt;br/&gt;&amp;gt; that I can think of.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Corresponding numbers for testnet:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  90 days: testnet   5-85&lt;br/&gt;&amp;gt; 180 days: testnet  23-131&lt;br/&gt;&amp;gt; 365 days: testnet  70-224&lt;br/&gt;&amp;gt; 730 days: testnet 176-390&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (A 50% chance of activating within 5 periods requires sustaining 89.18%&lt;br/&gt;&amp;gt; hashpower; within 85 periods, 88.26% hashpower; far smaller differences&lt;br/&gt;&amp;gt; with all the other ranges -- of course, presumably the only way the&lt;br/&gt;&amp;gt; higher block rates ever actually happen is by someone pointing an ASIC at&lt;br/&gt;&amp;gt; testnet, and thus controlling 100% of blocks for multiple periods anyway)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   1 period:  testnet 5.6minutes-26 days (range 26.5 days)&lt;br/&gt;&amp;gt;  13 periods: testnet 1-135 days (range 133.5 days)&lt;br/&gt;&amp;gt;  27 periods: testnet 13-192 days (range 178.3 days)&lt;br/&gt;&amp;gt;  54 periods: testnet 39-283 days (range 243.1 days)&lt;br/&gt;&amp;gt; 100 periods: testnet 114-476 days (range 360.9 days)&lt;br/&gt;&amp;gt;              (this is the value used in [0] in order to ensure 3 months&amp;#39;&lt;br/&gt;&amp;gt;               worth of signalling is available)&lt;br/&gt;&amp;gt; 132 periods: testnet 184-583 days (range 398.1 days)&lt;br/&gt;&amp;gt; 225 periods: testnet 365-877 days (range 510.7 days)&lt;br/&gt;&amp;gt; 390 periods: testnet 725-1403 days (range 677.1 days)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [0] &lt;a href=&#34;https://github.com/bitcoin/bips/pull/1081#pullrequestreview-621934640&#34;&gt;https://github.com/bitcoin/bips/pull/1081#pullrequestreview-621934640&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; aj&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/20210406/1049635d/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210406/1049635d/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:31:09Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfwwly5y0fmsdhmahhn5jw4zjv5mtcsn6g7pgn9x26lzkzafmak4szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5969rxnf4</id>
    
      <title type="html">📅 Original date posted:2021-03-06 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfwwly5y0fmsdhmahhn5jw4zjv5mtcsn6g7pgn9x26lzkzafmak4szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5969rxnf4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsz2ycllzns3ddx35gr5gth0u6smyhavc4gtmdg8m38p2x965x9a6qjaxvz3&#39;&gt;nevent1q…xvz3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-06&lt;br/&gt;📝 Original message:Hi Andrew,&lt;br/&gt;&lt;br/&gt;This is a slight misunderstanding of the proposal.  Rather than an extended&lt;br/&gt;lockin period (a term I&amp;#39;ve erroneously used in the past) it is really a&lt;br/&gt;minimum activation height.&lt;br/&gt;&lt;br/&gt;Thus using your figures it would instead be:&lt;br/&gt;&lt;br/&gt;* start height = 681408 /* about May 1st */&lt;br/&gt;* timeout height = 695520 /* about Aug 7th */&lt;br/&gt;* min activation height = 709632 /* about Nov 13th */&lt;br/&gt;* lockinontimeout = False&lt;br/&gt;* signaling bit = 2&lt;br/&gt;* threshold = 1815/2016 blocks (90%)&lt;br/&gt;&lt;br/&gt;This guarantees 7 retargeting periods between start height and timeout&lt;br/&gt;height.&lt;br/&gt;&lt;br/&gt;Being able to make a guarantee about how many retargeting periods we get is&lt;br/&gt;perhaps something worth pursuing given that the signaling period is so&lt;br/&gt;short for this trial.&lt;br/&gt;&lt;br/&gt;On Sat, Mar 6, 2021 at 1:04 AM Andrew Chow 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 like this idea.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In terms of actual parameters, I propose that we base this Speedy Trial&lt;br/&gt;&amp;gt; off of BIP 8 with the following parameters:&lt;br/&gt;&amp;gt; * start height = 681408&lt;br/&gt;&amp;gt; * timeout height = 695520&lt;br/&gt;&amp;gt; * lockinontimeout = False&lt;br/&gt;&amp;gt; * signaling bit = 2&lt;br/&gt;&amp;gt; * threshold = 1815/2016 blocks (90%)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For the extended lockin period, I propose 14112 blocks, which is 7&lt;br/&gt;&amp;gt; retarget periods. Thus the earliest activation height will be 697536 and&lt;br/&gt;&amp;gt; the latest activation height will be 709632.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This will give us an approximate start time of May 1st 2021 and an&lt;br/&gt;&amp;gt; approximate timeout time of August 7th 2021, for a total activation&lt;br/&gt;&amp;gt; period of just over 3 months. The extended lockin period is the same&lt;br/&gt;&amp;gt; number of blocks as the activation period so that will also be just over&lt;br/&gt;&amp;gt; 3 months, giving us the latest activation time of November 13th, 2021.&lt;br/&gt;&amp;gt; If miners activated as soon as possible, the earliest activation time&lt;br/&gt;&amp;gt; would be August 21st 2021.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Additionally, this timeline assumes a mid-April release of Bitcoin Core&lt;br/&gt;&amp;gt; 0.21.1 containing these parameters. They could be changed to move up if&lt;br/&gt;&amp;gt; the expected release date were sooner.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Andrew Chow&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On 3/5/21 10:43 PM, David A. Harding via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt; On the ##taproot-activation IRC channel, Russell O&amp;#39;Connor recently&lt;br/&gt;&amp;gt; &amp;gt; proposed a modification of the &amp;#34;Let&amp;#39;s see what happens&amp;#34; activation&lt;br/&gt;&amp;gt; &amp;gt; proposal.[1] The idea received significant discussion and seemed&lt;br/&gt;&amp;gt; &amp;gt; acceptable to several people who could not previously agree on a&lt;br/&gt;&amp;gt; &amp;gt; proposal (although this doesn&amp;#39;t necessarily make it their first&lt;br/&gt;&amp;gt; &amp;gt; choice).  The following is my attempt at a description.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. Start soon: shortly after the release of software containing this&lt;br/&gt;&amp;gt; &amp;gt;     proposed activation logic, nodes will begin counting blocks towards&lt;br/&gt;&amp;gt; &amp;gt;     the 90% threshold required to lock in taproot.[2]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2. Stop soon: if the lockin threshold isn&amp;#39;t reached within approximately&lt;br/&gt;&amp;gt; &amp;gt;     three months, the activation attempt fails.  There is no mandatory&lt;br/&gt;&amp;gt; &amp;gt;     activation and everyone is encouraged to try again using different&lt;br/&gt;&amp;gt; &amp;gt;     activation parameters.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2. Delayed activation: in the happy occasion where the lockin threshold&lt;br/&gt;&amp;gt; &amp;gt;     is reached, taproot is guaranteed to eventually activate---but not&lt;br/&gt;&amp;gt; &amp;gt;     until approximately six months after signal tracking started.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Example timeline&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; (All dates approximate; see the section below about BIP9 vs BIP8.)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - T&#43;0: release of one or more full nodes with activation code&lt;br/&gt;&amp;gt; &amp;gt; - T&#43;14: signal tracking begins&lt;br/&gt;&amp;gt; &amp;gt; - T&#43;28: earliest possible lock in&lt;br/&gt;&amp;gt; &amp;gt; - T&#43;104: locked in by this date or need to try a different activation&lt;br/&gt;&amp;gt; process&lt;br/&gt;&amp;gt; &amp;gt; - T&#43;194: activation (if lockin occurred)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Analysis&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The goal of Speedy Trial is to allow a taproot activation attempt to&lt;br/&gt;&amp;gt; &amp;gt; either quickly succeed or quickly fail---without compromising safety in&lt;br/&gt;&amp;gt; &amp;gt; either case.  Details below:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Mitigating the problems of early success&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; New rules added in a soft fork need to be enforced by a large part of&lt;br/&gt;&amp;gt; &amp;gt; the economy or there&amp;#39;s a risk that a long chain of blocks breaking the&lt;br/&gt;&amp;gt; &amp;gt; rules will be accepted by some users and rejected by others, causing a&lt;br/&gt;&amp;gt; &amp;gt; chain split that can result in large direct losses to transaction&lt;br/&gt;&amp;gt; &amp;gt; receivers and potentially even larger indirect losses to holders due to&lt;br/&gt;&amp;gt; &amp;gt; reduced confidence in the safety of the Bitcoin system.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; One step developers have taken in the past to ensure widespread adoption&lt;br/&gt;&amp;gt; &amp;gt; of new consensus rules is programming in a delay between the time&lt;br/&gt;&amp;gt; software&lt;br/&gt;&amp;gt; &amp;gt; with those rules is expected to be released and when the software starts&lt;br/&gt;&amp;gt; &amp;gt; tracking which blocks signal for activation.  For example:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;      Soft fork        | Release    | Start      | Delta&lt;br/&gt;&amp;gt; &amp;gt;      -----------------&#43;------------&#43;------------&#43;----------&lt;br/&gt;&amp;gt; &amp;gt;      BIP68 (v0.12.1)  | 2016-04-15 | 2016-05-11 | 26 days&lt;br/&gt;&amp;gt; &amp;gt;      BIP141 (v0.13.1) | 2016-10-27 | 2016-11-18 | 24 days&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;      Sources: BitcoinCore.org,&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/ajtowns/1c5e3b8bdead01124c04c45f01c817bc&#34;&gt;https://gist.github.com/ajtowns/1c5e3b8bdead01124c04c45f01c817bc&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Speedy Trial replaces most of that upfront delay with a backend delay.&lt;br/&gt;&amp;gt; &amp;gt; No matter how fast taproot&amp;#39;s activation threshold is reached by miners,&lt;br/&gt;&amp;gt; &amp;gt; there will be six months between the time signal tracking starts and when&lt;br/&gt;&amp;gt; &amp;gt; nodes will begin enforcing taproot&amp;#39;s rules.  This gives the userbase even&lt;br/&gt;&amp;gt; &amp;gt; more time to upgrade than if we had used the most recently proposed start&lt;br/&gt;&amp;gt; &amp;gt; date for a BIP8 activation (~July 23rd).[2]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Succeed, or fail fast&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The earlier version of this proposal was documented over 200 days ago[3]&lt;br/&gt;&amp;gt; &amp;gt; and taproot&amp;#39;s underlying code was merged into Bitcoin Core over 140 days&lt;br/&gt;&amp;gt; &amp;gt; ago.[4]  If we had started Speedy Trial at the time taproot&lt;br/&gt;&amp;gt; &amp;gt; was merged (which is a bit unrealistic), we would&amp;#39;ve either be less than&lt;br/&gt;&amp;gt; &amp;gt; two months away from having taproot or we would have moved on to the&lt;br/&gt;&amp;gt; &amp;gt; next activation attempt over a month ago.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Instead, we&amp;#39;ve debated at length and don&amp;#39;t appear to be any closer to&lt;br/&gt;&amp;gt; &amp;gt; what I think is a widely acceptable solution than when the mailing list&lt;br/&gt;&amp;gt; &amp;gt; began discussing post-segwit activation schemes over a year ago.[5]  I&lt;br/&gt;&amp;gt; &amp;gt; think Speedy Trial is a way to generate fast progress that will either&lt;br/&gt;&amp;gt; &amp;gt; end the debate (for now, if activation is successful) or give us some&lt;br/&gt;&amp;gt; &amp;gt; actual data upon which to base future taproot activation proposals.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Of course, for those who enjoy the debate, discussion can continue while&lt;br/&gt;&amp;gt; &amp;gt; waiting for the results of Speedy Trial.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Base activation protocol&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The idea can be implemented on top of either Bitcoin Core&amp;#39;s existing&lt;br/&gt;&amp;gt; &amp;gt; BIP9 code or its proposed BIP8 patchset.[6]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - BIP9 uses two time-based[7] parameters, starttime and timeout.  Using&lt;br/&gt;&amp;gt; &amp;gt;    these values plus a time-based parameter for the minimum activation&lt;br/&gt;&amp;gt; &amp;gt;    delay would give three months for miners to activate taproot, but some&lt;br/&gt;&amp;gt; &amp;gt;    of that time near the start or the end might not be usable due to&lt;br/&gt;&amp;gt; &amp;gt;    signals only being measured in full retarget periods.  However, the&lt;br/&gt;&amp;gt; &amp;gt;    six month time for users to upgrade their node would be not be&lt;br/&gt;&amp;gt; &amp;gt;    affected by either slow or fast block production.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;      BIP9 is already part of Bitcoin Core and I think the changes being&lt;br/&gt;&amp;gt; &amp;gt;      proposed would be relatively small, resulting in a small patch that&lt;br/&gt;&amp;gt; &amp;gt;      could be easy to review.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - BIP8 uses two height-based parameters, startheight and timeoutheight.&lt;br/&gt;&amp;gt; &amp;gt;    Using height values would ensure miners had a certain number of&lt;br/&gt;&amp;gt; &amp;gt;    retarget periods (6) to lock in taproot and that there&amp;#39;d be a certain&lt;br/&gt;&amp;gt; &amp;gt;    number of blocks (about 24,000) until activation, although latest lock&lt;br/&gt;&amp;gt; &amp;gt;    in and expected activation could occur moderately earlier or later&lt;br/&gt;&amp;gt; &amp;gt;    than the estimated three and six months.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;      BIP8 would likely be used if Speedy Trial fails, so it could be&lt;br/&gt;&amp;gt; &amp;gt;      advantageous to base this proposal on BIP8 so that we gain&lt;br/&gt;&amp;gt; &amp;gt;      experience running that code in production.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; For additional discussion about using times versus heights, see today&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; log for ##taproot-activation.[11]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Additional concerns&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - Encourages false signaling: false signaling is when miners signal&lt;br/&gt;&amp;gt; &amp;gt;    readiness to enforce rules that their nodes don&amp;#39;t actually support.&lt;br/&gt;&amp;gt; &amp;gt;    This was partially responsible for a six-block reorg shortly after the&lt;br/&gt;&amp;gt; &amp;gt;    final BIP66 activation[8] and was found to still be a problem during&lt;br/&gt;&amp;gt; &amp;gt;    the BIP68 lockin period despite BIP9 being designed to avoid it.[9]&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;    Because Speedy Trial only gives miners a maximum of three months to&lt;br/&gt;&amp;gt; &amp;gt;    signal support for taproot, it may encourage such false signaling.  If&lt;br/&gt;&amp;gt; &amp;gt;    taproot locks in as a result of their signaling but most of them fail&lt;br/&gt;&amp;gt; &amp;gt;    to upgrade by the activation date several months later, unprepared&lt;br/&gt;&amp;gt; &amp;gt;    miners could lose large amounts of money and users could see long&lt;br/&gt;&amp;gt; &amp;gt;    reorgs (with unupgraded nodes and SPV lite clients potentially losing&lt;br/&gt;&amp;gt; &amp;gt;    money).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;    Compared to other activation proposals, I think the only difference is&lt;br/&gt;&amp;gt; &amp;gt;    Speedy Trial&amp;#39;s short timeline.  False signaling is possible with any&lt;br/&gt;&amp;gt; &amp;gt;    other proposal and the same problems can occur if miners fail to&lt;br/&gt;&amp;gt; &amp;gt;    upgrade for any mandatory activation.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Additional advantages&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - No mandatory signaling: at no time are miners required to signal by&lt;br/&gt;&amp;gt; &amp;gt;    Speedy Trial.  This includes no mandatory signaling during the&lt;br/&gt;&amp;gt; &amp;gt;    locked_in period(s), although such signaling will be encouraged (as it&lt;br/&gt;&amp;gt; &amp;gt;    was with BIP9[10]).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; - Party time: to a lesser degree, a benefit mentioned for flag day&lt;br/&gt;&amp;gt; &amp;gt;    activation may also apply here: we could get up to six months&lt;br/&gt;&amp;gt; &amp;gt;    advanced notice of taproot activation, allowing users, developers, and&lt;br/&gt;&amp;gt; &amp;gt;    organizations to prepare software, announcements, and celebrations for&lt;br/&gt;&amp;gt; &amp;gt;    that event.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Implementation details and next steps&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Initial discussion about implementation may be found in today&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; ##taproot-activation log.[11] If it appears Speedy Trial may have&lt;br/&gt;&amp;gt; &amp;gt; traction, Russell O&amp;#39;Connor has offered to work on a patch against BIP8&lt;br/&gt;&amp;gt; &amp;gt; implementing it.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Acknowledgments&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The original idea for a short-duration attempt was discussed in the&lt;br/&gt;&amp;gt; &amp;gt; ##taproot-activation IRC channel last July and the revised idea saw&lt;br/&gt;&amp;gt; &amp;gt; additional evaluation there this week.  Despite growing frustration,&lt;br/&gt;&amp;gt; &amp;gt; discussion has been overwhelmingly constructive, for which all the&lt;br/&gt;&amp;gt; &amp;gt; contributors should be commended.  Although this should not in any way&lt;br/&gt;&amp;gt; &amp;gt; imply endorsement, I&amp;#39;m grateful for the review and comments on a draft&lt;br/&gt;&amp;gt; &amp;gt; of this email by Adam Gibson, Andrew Chow, Anthony Towns, Chris Belcher,&lt;br/&gt;&amp;gt; &amp;gt; Jeremy Rubin, Jonas Nick, Luke Dashjr, Michael Folkson, Russell&lt;br/&gt;&amp;gt; &amp;gt; O&amp;#39;Connor, and IRC users maybehuman and proofofkeags&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Footnotes&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://en.bitcoin.it/wiki/Taproot_activation_proposals#Let.E2.80.99s_see_what_happens.2C_BIP8.28false.2C_3m.29&#34;&gt;https://en.bitcoin.it/wiki/Taproot_activation_proposals#Let.E2.80.99s_see_what_happens.2C_BIP8.28false.2C_3m.29&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [2] A threshold of 1,815/2,016 blocks (90%) in a single retarget period&lt;br/&gt;&amp;gt; &amp;gt;      seemed to have near-universal support during the 2021-02-16 IRC&lt;br/&gt;&amp;gt; &amp;gt;      meeting.  See:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://en.bitcoin.it/wiki/Taproot_activation_proposal_202102&#34;&gt;https://en.bitcoin.it/wiki/Taproot_activation_proposal_202102&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [3]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://en.bitcoin.it/w/index.php?title=Taproot_activation_proposals&amp;amp;oldid=68062&#34;&gt;https://en.bitcoin.it/w/index.php?title=Taproot_activation_proposals&amp;amp;oldid=68062&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [4] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/19953&#34;&gt;https://github.com/bitcoin/bitcoin/pull/19953&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [5]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-January/017547.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2020-January/017547.html&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [6] &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/19573&#34;&gt;https://github.com/bitcoin/bitcoin/pull/19573&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [7] BIP9&amp;#39;s times are based on the median of the past 11 blocks, which&lt;br/&gt;&amp;gt; &amp;gt;      usually trails UTC by about 90 minutes but which can trail behind&lt;br/&gt;&amp;gt; &amp;gt;      realtime significantly if miners are doing weird things.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [8] &lt;a href=&#34;https://en.bitcoin.it/wiki/July_2015_chain_forks&#34;&gt;https://en.bitcoin.it/wiki/July_2015_chain_forks&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [9]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://buildingbitcoin.org/bitcoin-core-dev/log-2016-06-21.html#l-32&#34;&gt;https://buildingbitcoin.org/bitcoin-core-dev/log-2016-06-21.html#l-32&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [10]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/ed25cb58f605ba583c735f330482df0bf9348f3a/src/test/versionbits_tests.cpp#L337-L339&#34;&gt;https://github.com/bitcoin/bitcoin/blob/ed25cb58f605ba583c735f330482df0bf9348f3a/src/test/versionbits_tests.cpp#L337-L339&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; [11] &lt;a href=&#34;http://gnusha.org/taproot-activation/2021-03-05.log&#34;&gt;http://gnusha.org/taproot-activation/2021-03-05.log&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&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/20210306/ac5abbef/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210306/ac5abbef/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:30:31Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfdckadgwk0fyk7x7wpjrn2z60v6mjwk25xly02h8g8aw8sstdn0szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596a6mded</id>
    
      <title type="html">📅 Original date posted:2021-03-04 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfdckadgwk0fyk7x7wpjrn2z60v6mjwk25xly02h8g8aw8sstdn0szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596a6mded" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrh4kvecjusdmq0wx5dwelcturzt8mfsfc0nyygsakqaw3jge2aycclhsh3&#39;&gt;nevent1q…hsh3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-04&lt;br/&gt;📝 Original message:Appologies as I&amp;#39;ve rearranged your comments in my reply.&lt;br/&gt;&lt;br/&gt;On Wed, Mar 3, 2021 at 5:14 PM Matt Corallo &amp;lt;lf-lists at mattcorallo.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On 3/3/21 14:08, Russell O&amp;#39;Connor via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After a normal and successful Core update with LOT=false, we will have&lt;br/&gt;&amp;gt; more data showing broad community support for the&lt;br/&gt;&amp;gt; &amp;gt; taproot upgrade in hand.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think this is one of the strongest arguments against a flag day&lt;br/&gt;&amp;gt; activation, but, as I described in more detail in the&lt;br/&gt;&amp;gt; thread &amp;#34;Straight Flag Day (Height) Taproot Activation&amp;#34;, I&amp;#39;m not sure we&lt;br/&gt;&amp;gt; aren&amp;#39;t there enough already.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I agree with you.  I also think we have plenty of evidence to proceed with&lt;br/&gt;taproot and could proceed with a PR for such a flag day activation.  If&lt;br/&gt;there is support for it to be merged, that would be fantastic.  I think we&lt;br/&gt;should proceed along these lines forthwith.&lt;br/&gt;&lt;br/&gt;However, the existence and/or release of a flag day activation code does&lt;br/&gt;not in of itself preclude concurrently developing and/or releasing a BIP8&lt;br/&gt;LOT=false deployment.  Activating taproot is &amp;#34;idempotent&amp;#34; after all. We&lt;br/&gt;could even do a Core release with a flag day activation while we continue&lt;br/&gt;to discuss BIP8 LOT=false if that gets the ball rolling.  Certainly having&lt;br/&gt;a flag day activation code merged would take a lot of pressure off further&lt;br/&gt;BIP8 LOT=false work.&lt;br/&gt;&lt;br/&gt;As Aaron noted on IRC, if the sticking point here is the MUST_SIGNAL state,&lt;br/&gt;then running BIP8 LOT=false alongside a flag day activation at timeout may&lt;br/&gt;be the way to go.  Once a flag day deployment is released, the LOT=true&lt;br/&gt;people would have their guaranteed activation and would be less interested&lt;br/&gt;in an alternative client. And without a MUST_SIGNAL state, I believe the&lt;br/&gt;LOT=false deployment won&amp;#39;t lead any hashpower that is following&lt;br/&gt;standardness rules to create invalid blocks.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; In the next release, 6 months later or so, Core could then confidently&lt;br/&gt;&amp;gt; deploy a BIP8 LOT=true&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Could you clarify what an acceptable timeline is, then? Six months from&lt;br/&gt;&amp;gt; release of new consensus rules to activation (in&lt;br/&gt;&amp;gt; the case of a one-year original window) seems incredibly agressive for a&lt;br/&gt;&amp;gt; flag-day activation, let alone one with&lt;br/&gt;&amp;gt; forced-signaling, which would require significantly higher level of&lt;br/&gt;&amp;gt; adoption to avoid network split risk. In such a&lt;br/&gt;&amp;gt; world, we&amp;#39;d probably get Taproot faster with a flag day from day one.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Whatever timeline people are in favour of.  I think having a year or more&lt;br/&gt;between the LOT=true or flag day more and the anticipated second release&lt;br/&gt;date is fair myself.&lt;br/&gt;That would suggest a 2-year timeout from the start to give plenty of room.&lt;br/&gt;&lt;br/&gt;Of course, if we start with a flag day from the start then we can just do 1&lt;br/&gt;year and we don&amp;#39;t need a second deployment.&lt;br/&gt;&lt;br/&gt;We could also do a &amp;#34;Let’s see what happens&amp;#34; with a short 3 or 4-month&lt;br/&gt;deployment and still do a follow up activation if that is more agreeable.&lt;br/&gt;That would give a net of about 1.5 years or so because we don&amp;#39;t need to&lt;br/&gt;anticipate the second relase date.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m good with whatever, and I&amp;#39;m happy to make more concrete suggestions if&lt;br/&gt;that is necessary.  I think there exist acceptable timelines here.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; client, should it prove to be necessary.  A second Core deployment of&lt;br/&gt;&amp;gt; LOT=true would mitigate some of the concerns with&lt;br/&gt;&amp;gt; &amp;gt; LOT=false, but still provide a period beforehand to objective actions&lt;br/&gt;&amp;gt; taken by the community in support of taproot.  We&lt;br/&gt;&amp;gt; &amp;gt; don&amp;#39;t even have to have agreement today on a second deployment of&lt;br/&gt;&amp;gt; LOT=true after 6 months to start the process of a&lt;br/&gt;&amp;gt; &amp;gt; LOT=false deployment. The later deployment will almost certainly be&lt;br/&gt;&amp;gt; moot, and we will have 6 months to spend debating&lt;br/&gt;&amp;gt; &amp;gt; the LOT=true deployment versus doing a flag day activation or something&lt;br/&gt;&amp;gt; else.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; That was precisely the original goal with the LOT=false movement - do&lt;br/&gt;&amp;gt; something easy and avoid having to hash out all&lt;br/&gt;&amp;gt; the technical details of a second deployment. Sadly, that&amp;#39;s no longer&lt;br/&gt;&amp;gt; tennable as a number of people are publicly&lt;br/&gt;&amp;gt; committed to deploying LOT=true software on the network ASAP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;First things last:&lt;br/&gt;&lt;br/&gt;&amp;gt; Even today, I still think that starting with BIP8 LOT=false is, generally&lt;br/&gt;&amp;gt; speaking, considered a reasonably safe&lt;br/&gt;&amp;gt; &amp;gt; activation method in the sense that I think it will be widely considered&lt;br/&gt;&amp;gt; as a &amp;#34;not wholly unacceptable&amp;#34; approach to&lt;br/&gt;&amp;gt; &amp;gt; activation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; How do you propose avoiding divergent consensus rules on the network,&lt;br/&gt;&amp;gt; something which a number of commentors on this&lt;br/&gt;&amp;gt; list have publicly committed to?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Firstly, it is an open network.  Anyone can join and run whatever consensus&lt;br/&gt;rules they want.  People have run divergent consensus rules on the network&lt;br/&gt;in the past and it will continue to do so in the future.&lt;br/&gt;It is troublesome when it happens in mass, but it isn&amp;#39;t fatal.  We can&amp;#39;t&lt;br/&gt;prevent it, and we should continue working to keep the protocol robust in&lt;br/&gt;the face of it.&lt;br/&gt;And we certainly shouldn&amp;#39;t be bullied by anyone who comes threatening their&lt;br/&gt;own soft-fork.&lt;br/&gt;&lt;br/&gt;Even simply doing nothing may not prevent divergent consensus from&lt;br/&gt;appearing on the network.  Playing conservative isn&amp;#39;t playing it safe&lt;br/&gt;because there is nothing more conservative than doing nothing, which isn&amp;#39;t&lt;br/&gt;guaranteed to be safe in this sense.&lt;br/&gt;&lt;br/&gt;Secondly, for the specific concern of people running BIP8 LOT=true clients,&lt;br/&gt;we could start with &amp;#34;Let’s see what happens&amp;#34; with a short 3 or 4 month&lt;br/&gt;signaling period.  A short enough signaling period is not &amp;#34;hijackable&amp;#34;.  We&lt;br/&gt;could add a longer LOCKED_IN period if there are worries about getting&lt;br/&gt;enough nodes upgraded in time for activation.  I see other options as well.&lt;br/&gt;&lt;br/&gt;I keep being told that miners are ready and willing to activate, and&lt;br/&gt;taproot will probably activate in two months. All we have to do is get&lt;br/&gt;something out the door that does that.  If taproot activates in two months,&lt;br/&gt;great.  If it fails to activate we will learn so much in so little time.&lt;br/&gt;UASF&amp;#39;s will get to say &amp;#34;I told you so&amp;#34; without waiting a year.  Users will&lt;br/&gt;get to take active, meaningful and observable steps to demonstrate their&lt;br/&gt;desire for a taproot upgrade.  Very little time will be wasted, in&lt;br/&gt;particular we don&amp;#39;t have to finish debating how best to handle the unlikely&lt;br/&gt;scenario where taproot doesn&amp;#39;t activate right away for whatever reason that&lt;br/&gt;is, an scenario that isn&amp;#39;t even likely to occur.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m still very optimistic.  I see multiple plausible and potentially&lt;br/&gt;acceptable paths towards activation still open and we don&amp;#39;t even have to&lt;br/&gt;choose only one.  I can hardly wait to look at the forthcoming PRs for&lt;br/&gt;these possibilities.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Matt&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/20210304/c752f684/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210304/c752f684/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:29:58Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsfj07ax0dr4fzxmsp7rzsg7sqy4lw3cu8c35lk3ylsv9yq0leylsqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5960eglc9</id>
    
      <title type="html">📅 Original date posted:2021-03-03 📝 Original message:While ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsfj07ax0dr4fzxmsp7rzsg7sqy4lw3cu8c35lk3ylsv9yq0leylsqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5960eglc9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyn6qfkyn9lppgx7vduqfm0shkjdx64lr4gherzeq2jemd5766uwqywyekw&#39;&gt;nevent1q…yekw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-03-03&lt;br/&gt;📝 Original message:While I support essentially any proposed taproot activation method,&lt;br/&gt;including a flag day activation, I think it is premature to call BIP8 dead.&lt;br/&gt;&lt;br/&gt;Even today, I still think that starting with BIP8 LOT=false is, generally&lt;br/&gt;speaking, considered a reasonably safe activation method in the sense that&lt;br/&gt;I think it will be widely considered as a &amp;#34;not wholly unacceptable&amp;#34;&lt;br/&gt;approach to activation.&lt;br/&gt;&lt;br/&gt;After a normal and successful Core update with LOT=false, we will have more&lt;br/&gt;data showing broad community support for the taproot upgrade in hand.  In&lt;br/&gt;the next release, 6 months later or so, Core could then confidently deploy&lt;br/&gt;a BIP8 LOT=true client, should it prove to be necessary.  A second Core&lt;br/&gt;deployment of LOT=true would mitigate some of the concerns with LOT=false,&lt;br/&gt;but still provide a period beforehand to objective actions taken by the&lt;br/&gt;community in support of taproot.  We don&amp;#39;t even have to have agreement&lt;br/&gt;today on a second deployment of LOT=true after 6 months to start the&lt;br/&gt;process of a LOT=false deployment. The later deployment will almost&lt;br/&gt;certainly be moot, and we will have 6 months to spend debating the LOT=true&lt;br/&gt;deployment versus doing a flag day activation or something else.&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think we need to start self-sabotaging our efforts to get taproot&lt;br/&gt;activated this year just yet.  Let&amp;#39;s cherry-pick the commits of PR #19573&lt;br/&gt;to split it up into non-MUST_SIGNAL and MUST_SIGNAL components, and get&lt;br/&gt;some reviews on that first.  Then afterwards we can decide if BIP8 is dead&lt;br/&gt;or not.&lt;br/&gt;&lt;br/&gt;On Wed, Mar 3, 2021 at 9:39 AM Chris Belcher 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; The bitcoin world is close to total gridlock on the question of how to&lt;br/&gt;&amp;gt; activate taproot. There&amp;#39;s no agreement on activation[1][2], and if an&lt;br/&gt;&amp;gt; agreement isn&amp;#39;t reached then nothing happens. That would be really&lt;br/&gt;&amp;gt; terrible because we&amp;#39;d miss out on the benefits of taproot and&lt;br/&gt;&amp;gt; potentially other future soft forks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A major problem with BIP8 is that it would result to a situation where&lt;br/&gt;&amp;gt; different parts of the bitcoin ecosystem run different consensus rules.&lt;br/&gt;&amp;gt; Some people will run LOT=true and others LOT=false. Worst of all, it&lt;br/&gt;&amp;gt; becomes vulnerable to a twitter/reddit/social media blitz which could&lt;br/&gt;&amp;gt; attempt to move the date of miner activation around.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Twitter and reddit drama provide a perfect cover for social attacks on&lt;br/&gt;&amp;gt; bitcoin.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Forced signalling leads to brinksmanship. Where two or more sides&lt;br/&gt;&amp;gt; (backed up by social media drama) enter into a game of chicken with&lt;br/&gt;&amp;gt; deployed nodes. If one of them doesn&amp;#39;t concede then we get a damaging&lt;br/&gt;&amp;gt; chain split. And the $1 trillion in value that the bitcoin network&lt;br/&gt;&amp;gt; protects is put at risk. From the point of view of a miner or big&lt;br/&gt;&amp;gt; exchange stuck in the middle, if they look at the ecosystem of twitter&lt;br/&gt;&amp;gt; and reddit (especially if you think about all the problems with bots and&lt;br/&gt;&amp;gt; sockpuppets) they have no idea which consensus rules they should&lt;br/&gt;&amp;gt; actually follow and exactly what date they take effect. Miners,&lt;br/&gt;&amp;gt; exchanges, merchants and the rest of the ecosystem exist to serve their&lt;br/&gt;&amp;gt; customers and users, and trouble happens when they don&amp;#39;t know what their&lt;br/&gt;&amp;gt; customers really want. Social media attacks are not just a theoretical&lt;br/&gt;&amp;gt; concern; back during the block size drama, the bitcoin reddits were&lt;br/&gt;&amp;gt; targetted by bots, sockpuppets and brigading[3].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Enter flag day activation. With a flag day there can be no&lt;br/&gt;&amp;gt; brinksmanship. A social media blitz cant do anything except have its own&lt;br/&gt;&amp;gt; followers fork away. Crucially, miner signalling cant be used to change&lt;br/&gt;&amp;gt; the activation date for nodes that didn&amp;#39;t choose to and just passively&lt;br/&gt;&amp;gt; follow signalling. Changing the activation date requires all those users&lt;br/&gt;&amp;gt; to actually run different node software.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Flag day activation works simply: we choose a block height and after&lt;br/&gt;&amp;gt; that block height the new taproot rules become enforced.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Supporters of the permissionless, &amp;#34;users rule&amp;#34; approach of LOT=true&lt;br/&gt;&amp;gt; should be happy because it completely takes miners out of activation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Supporters of the safe, conservative approach of LOT=false can be made&lt;br/&gt;&amp;gt; happy with a few ways of derisking:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Getting mining pools, businesses and users to look at the code and ask&lt;br/&gt;&amp;gt; if they (a) think its either neutral or good for their business or use&lt;br/&gt;&amp;gt; case and (b) they believe others view it similarly and that the&lt;br/&gt;&amp;gt; consensus changes proposed have a good social consensus around them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Setting the flag day far in the future (18 months or 2 years in the&lt;br/&gt;&amp;gt; original proposal[3]).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == What if flag day activation is used maliciously? ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What if one day the Core developer team is co-opted and uses the flag&lt;br/&gt;&amp;gt; day method to do something bad? For example, a soft fork where sending&lt;br/&gt;&amp;gt; to certain blacklisted addresses is not allowed. The bitcoin user&lt;br/&gt;&amp;gt; community who wants to resist this can create their own&lt;br/&gt;&amp;gt; counter-soft-fork full node, where the first block after the flag day&lt;br/&gt;&amp;gt; MUST pay to one of those addresses on the blacklist. This forces a chain&lt;br/&gt;&amp;gt; split between the censorship rules and the no-censorship rules, and its&lt;br/&gt;&amp;gt; pretty obvious that the real bitcoin which most people follow will be&lt;br/&gt;&amp;gt; the chain without censorship.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For example, if a group of users didn&amp;#39;t agree with taproot then they&lt;br/&gt;&amp;gt; could create their own counter-flag-day-activation which requires that a&lt;br/&gt;&amp;gt; transaction is included that does an invalid-spend from a taproot output&lt;br/&gt;&amp;gt; in the first block after the flag day height.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is always possible with any user activated soft fork. In BIP8&lt;br/&gt;&amp;gt; LOT=true it could be done by rejecting block headers with certain&lt;br/&gt;&amp;gt; version bits signalled.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == But it will take so long! ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We seem to be at a deadlock now. This will take less time than any other&lt;br/&gt;&amp;gt; method, because other methods might never happen. BIP8 is dead and from&lt;br/&gt;&amp;gt; what I see there&amp;#39;s no other credible plan.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We&amp;#39;ve already waited years for taproot. I remember listening to talks&lt;br/&gt;&amp;gt; about bitcoin from 2015 of people discussing Schnorr signatures. And&lt;br/&gt;&amp;gt; given how slow segwit and p2sh adoption were its pretty likely that&lt;br/&gt;&amp;gt; we&amp;#39;ll waiting a while for taproot to be actually adopted.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == A social media blitz could still try to activate it early ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The brinksmanship only works because miner signalling can make many&lt;br/&gt;&amp;gt; other nodes activate early, even if those other nodes didn&amp;#39;t do&lt;br/&gt;&amp;gt; anything. There can&amp;#39;t be a game of chicken that puts the bitcoin network&lt;br/&gt;&amp;gt; at risk.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If a group of people did adopt alternative node software which has a&lt;br/&gt;&amp;gt; shorter flag day, they actually have a risk of slow blocks. Because they&lt;br/&gt;&amp;gt; cant trick or force any other nodes to come along with them, they are&lt;br/&gt;&amp;gt; likely to only have a small economy and therefore would lose a lot of&lt;br/&gt;&amp;gt; hashrate. Imagine trading bitcoins for cash in person and instead of&lt;br/&gt;&amp;gt; waiting 10 minutes for a confirmation you have to wait 3 hours because&lt;br/&gt;&amp;gt; the blocks are slow.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, the argument for downloading and running a different software only&lt;br/&gt;&amp;gt; to speed up activation is pretty weak. Taproot would activate in ~18&lt;br/&gt;&amp;gt; months, so why are you so impatient that you need it in 6 months? And&lt;br/&gt;&amp;gt; risk slow blocks for you while doing so? The big difference with BIP148&lt;br/&gt;&amp;gt; the segwit UASF, is that people *had to* run some other software&lt;br/&gt;&amp;gt; otherwise they would get *no soft fork at all*.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == Without miner signalling how do we know the new rules are even&lt;br/&gt;&amp;gt; activated? ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; When did you see miners signalling their support for the inflation&lt;br/&gt;&amp;gt; schedule?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Bitcoin&amp;#39;s rules are enforced by wallets backed by full nodes. You&amp;#39;ll&lt;br/&gt;&amp;gt; always know if your own full node is enforcing the new rules. The thing&lt;br/&gt;&amp;gt; that matters isnt miner signalling but your own full node, and the nodes&lt;br/&gt;&amp;gt; of those you trade with.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Flag day activation is quite similar to the way block reward halvenings&lt;br/&gt;&amp;gt; work. At and after block height 630000 miners are only allowed to create&lt;br/&gt;&amp;gt; 6.25 BTC rather than 12.5 BTC. Everyone knows that if miners continued&lt;br/&gt;&amp;gt; to create 12.5 BTC or more they would be unable to sell or spend those&lt;br/&gt;&amp;gt; coins anywhere.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In 2017 when segwit was being activated people created a huge list of&lt;br/&gt;&amp;gt; various bitcoin companies, merchants and wallets:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://web.archive.org/web/20171228111943/https://bitcoincore.org/en/segwit_adoption/&#34;&gt;https://web.archive.org/web/20171228111943/https://bitcoincore.org/en/segwit_adoption/&lt;/a&gt;&lt;br/&gt;&amp;gt; Looking at that list, you would know that if someone stole coins from a&lt;br/&gt;&amp;gt; segwit address they would be unable to deposit them in many exchanges&lt;br/&gt;&amp;gt; and merchants: Bitrefill, Bitstamp, Kraken, Localbitcoins, Paxful,&lt;br/&gt;&amp;gt; Vaultoro, HitBTC, etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then what happened is only a month after S2X was beaten this guy moved&lt;br/&gt;&amp;gt; 40000 BTC to a segwit address, confident about the power of the network&lt;br/&gt;&amp;gt; to protect his coins.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/7tcmi4/bitcointalks_famous_user_loaded_moved_his_40k_btc/&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/7tcmi4/bitcointalks_famous_user_loaded_moved_his_40k_btc/&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If there&amp;#39;s ever any doubt about flag day activation we can always draw&lt;br/&gt;&amp;gt; up a similar list, although if there&amp;#39;s broad consensus about it then&lt;br/&gt;&amp;gt; there&amp;#39;s no reason why bitcoin businesses wouldn&amp;#39;t upgrade to the latest&lt;br/&gt;&amp;gt; Core, like they did with every other previous soft fork.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == This gives the impression that Core developers control the protocol ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This objection has a mirror image argument: BIP8 with LOT=false gives&lt;br/&gt;&amp;gt; the impression that miners control the protocol(!)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Eventually some group has to make a decision. We will ask the bitcoin&lt;br/&gt;&amp;gt; economy and users what they think of flag day activation. It&amp;#39;s pretty&lt;br/&gt;&amp;gt; clear that nobody seriously objects to taproot, and as described above&lt;br/&gt;&amp;gt; if Core developers did something evil the community could resist it with&lt;br/&gt;&amp;gt; a counter-flag-day-activation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == TL;DR ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe flag day activation is the way forward. It should answer all&lt;br/&gt;&amp;gt; the objections and risks which make other methods too controversial.&lt;br/&gt;&amp;gt; Let&amp;#39;s go ahead and bring taproot to bitcoin!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; == References ==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018498.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018498.html&lt;/a&gt;&lt;br/&gt;&amp;gt;       luke-jr posts saying LOT=false in his view reintroduces a bug, he&lt;br/&gt;&amp;gt; compares it to introducing an inflation bug and just hoping that miners&lt;br/&gt;&amp;gt; will not exploit it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [2] -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018425.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018425.html&lt;/a&gt;&lt;br/&gt;&amp;gt;       This whole thread has many people disagreeing with LOT=true&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [3] -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/4biob5/research_into_instantaneous_vote_behavior_in/&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/4biob5/research_into_instantaneous_vote_behavior_in/&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/3v04pd/can_we_please_have_a_civil_discussion_about/cxjnz1d/?context=1&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/3v04pd/can_we_please_have_a_civil_discussion_about/cxjnz1d/?context=1&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://old.reddit.com/r/Bitcoin/comments/41ykkt/members_trying_to_destroy_bitcoin_on_this_thread/cz6ccka/?context=3&#34;&gt;https://old.reddit.com/r/Bitcoin/comments/41ykkt/members_trying_to_destroy_bitcoin_on_this_thread/cz6ccka/?context=3&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [4] -&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018495.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018495.html&lt;/a&gt;&lt;br/&gt;&amp;gt;       Matt Corallo&amp;#39;s flag day activation proposal&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/20210303/f33b24c3/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20210303/f33b24c3/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:29:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgutkxc8srcmuxad64ddahrnv3tyh3elp2tjp48wzuvnxgswwrwmczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968p3nmc</id>
    
      <title type="html">📅 Original date posted:2020-10-08 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgutkxc8srcmuxad64ddahrnv3tyh3elp2tjp48wzuvnxgswwrwmczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968p3nmc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9g67sk7mgulvuvtvls2zmrak24zjlqavgyndmm6395kvyqv2n53c86uu4q&#39;&gt;nevent1q…uu4q&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-10-08&lt;br/&gt;📝 Original message:On Thu, Oct 8, 2020 at 11:00 AM David A. Harding 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; Rather than go through that again, I&amp;#39;d prefer we use the&lt;br/&gt;&amp;gt; backwards compatible proposal from BIPs PR#945 and, if we want to&lt;br/&gt;&amp;gt; maximize safety, consensus restrict v1 witness program size, e.g. reject&lt;br/&gt;&amp;gt; transactions with scriptPubKeys paying v1 witness programs that aren&amp;#39;t&lt;br/&gt;&amp;gt; exactly 32 bytes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Adding some kind of relay policy rule would be easier than a consensus&lt;br/&gt;rule, and maybe effective enough.  (This comment is not intended to endorse&lt;br/&gt;any one proposal over another.)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Hopefully by the time we want to use segwit v2, most software will have&lt;br/&gt;&amp;gt; implemented length limits and so we won&amp;#39;t need any additional consensus&lt;br/&gt;&amp;gt; restrictions from then on forward.&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/20201008/e79a6702/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20201008/e79a6702/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:27:22Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv2z4gftzyphya4pda9s8azwnn7m6vl23r0r5qfudh5f3pzfhvdfgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967vna35</id>
    
      <title type="html">📅 Original date posted:2020-08-03 📝 Original message:With ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv2z4gftzyphya4pda9s8azwnn7m6vl23r0r5qfudh5f3pzfhvdfgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967vna35" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv5a2wwj70sz5ynp732gdq5vdfk9azrxq3xxsh9j2l0j5tkthnj8g0yfv3d&#39;&gt;nevent1q…fv3d&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-08-03&lt;br/&gt;📝 Original message:With the help of Pieter I&amp;#39;ve recently made some interesting mathematical&lt;br/&gt;observations about Bech32 codewords and Shamir&amp;#39;s secret sharing:&lt;br/&gt;&lt;br/&gt;(1) Affine combinations of two Bech32 codewords is again a valid Bech32&lt;br/&gt;codeword.&lt;br/&gt;(2) Lagrange polynomials form a partition of unity.&lt;br/&gt;&lt;br/&gt;The consequences of these facts is that when you perform Shamir&amp;#39;s secret&lt;br/&gt;sharing where all your shares have valid Bech32 checksums, then the&lt;br/&gt;resulting secret will also have a valid Bech32 checksum.  Conversely, if&lt;br/&gt;your secret has a valid Bech32 checksum, and your random shares have valid&lt;br/&gt;Bech32 checksums, then all your derived shares will have valid Bech32&lt;br/&gt;checksums.  This can form a basis on which we can build a simple secret&lt;br/&gt;sharing scheme for dividing up a BIP-32 master seed.&lt;br/&gt;&lt;br/&gt;In order to illustrate this, I&amp;#39;ll describe an example scheme for *k*-of-*n*&lt;br/&gt;Shamir&amp;#39;s secret sharing scheme where *2 &amp;lt;= k* &amp;lt;= *n* &amp;lt;= 31.&lt;br/&gt;&lt;br/&gt;Suppose we have a 128-bit master seed 0xb6721d937d82f238672de4db91b87d0c.&lt;br/&gt;We encode this secret as the following Bech32 codeword: &amp;#34;&lt;br/&gt;donotusesss321s2name00keepmymasterseedunderwraps2n89wr&amp;#34;.  Let&amp;#39;s deconstruct&lt;br/&gt;this codeword.&lt;br/&gt;&lt;br/&gt;&amp;#34;donotusesss32&amp;#34;: A Bech32 hrp for this example scheme.&lt;br/&gt;&amp;#34;1&amp;#34;: The Bech32 separator.&lt;br/&gt;&amp;#34;s&amp;#34;: The first data character is the index of this share. Each index is a&lt;br/&gt;Bech32 character.  In this scheme the secret share is always at index &amp;#34;s&amp;#34;,&lt;br/&gt;which stands for &amp;#34;secret&amp;#34;.&lt;br/&gt;&amp;#34;2&amp;#34;: The second data character is the threshold.  In this example we are&lt;br/&gt;using a 2-of-n threshold.  We use the digits 2-9 for thresholds upto 9.  We&lt;br/&gt;use Bech32 characters a-y for thresholds from 10 to 31.&lt;br/&gt;&amp;#34;name00&amp;#34;: The next 6 characters are an id for this set of shares.  This id&lt;br/&gt;isn&amp;#39;t part of the secret data. It is used to ensure that the shares you are&lt;br/&gt;reconstructing were generated for the same secret.  This id just needs to&lt;br/&gt;be unique for all the secrets that you are dividing up with this scheme.&lt;br/&gt;The id can be chosen randomly, sequentially, or even set to the constant&lt;br/&gt;such as &amp;#34;qqqqqq&amp;#34; if you do not want to use it for identification.&lt;br/&gt;&amp;#34;keepmymasterseedunderwraps&amp;#34;: This is the 128-bit secret master seed&lt;br/&gt;0xb6721d937d82f238672de4db91b87d0c encoded in Bech32.  The master seed can&lt;br/&gt;be a 128-bit, 256-bit or 512-bit value.&lt;br/&gt;&amp;#34;2n89wr&amp;#34; is the Bech32 checksum.&lt;br/&gt;&lt;br/&gt;We will generate shares for a 2-of-3 threshold.  We generate the first&lt;br/&gt;share at index &amp;#34;a&amp;#34;.  In this example we generate &amp;#34;&lt;br/&gt;donotusesss321a2name00q0h5aajczn04g9sh0wtsl2f0y0g3vlkr&amp;#34;.&lt;br/&gt;&lt;br/&gt;&amp;#34;donotusesss32&amp;#34;: The Bech32 hrp for this example scheme.&lt;br/&gt;&amp;#34;1&amp;#34;: The Bech32 separator.&lt;br/&gt;&amp;#34;a&amp;#34;: The first data character is the index of this share which we have&lt;br/&gt;chosen to be &amp;#34;a&amp;#34;.&lt;br/&gt;&amp;#34;2&amp;#34;: The second data character is the threshold, which is 2.&lt;br/&gt;&amp;#34;name00&amp;#34;: The next 6 characters is the id we chose above for this set of&lt;br/&gt;shares.&lt;br/&gt;&amp;#34;q0h5aajczn04g9sh0wtsl2f0y0&amp;#34;: This is 26 randomly selected bech32 characters&lt;br/&gt;&amp;#34;g3vlkr&amp;#34; is the Bech32 checksum.&lt;br/&gt;&lt;br/&gt;We generated the next two shares at index &amp;#34;c&amp;#34; and and index &amp;#34;d&amp;#34;.  These&lt;br/&gt;shares are generated using characterwise Lagrange interpolation of the&lt;br/&gt;secret share and the above randomly generated share.&lt;br/&gt;The resulting shares are &amp;#34;&lt;br/&gt;donotusesss321c2name00chzu58ep57hd9xmaw6zmuyjeau0kq4mr&amp;#34; and &amp;#34;&lt;br/&gt;donotusesss321d2name00ung8rmkf2snftj57zu45g7z84hzmzk4r&amp;#34;&lt;br/&gt;&lt;br/&gt;Notice that the resulting strings have&lt;br/&gt;(1) valid checksums;&lt;br/&gt;(2) have correct indices;&lt;br/&gt;(3) have the correct threshold values;&lt;br/&gt;(4) have the correct ids.&lt;br/&gt;&lt;br/&gt;This scheme still enjoys the perfect information hiding property of&lt;br/&gt;Shamir&amp;#39;s secret sharing.  Even when you know *k*-1 shares, every possible&lt;br/&gt;master seed value has exactly one set of shares that includes those&lt;br/&gt;particular *k*-1 shares, so knowing *k*-1 shares tells you nothing about&lt;br/&gt;the secret data value.&lt;br/&gt;&lt;br/&gt;One nice property of Lagrange interpolation is that it is simple enough to&lt;br/&gt;compute by hand with the help of a few lookup tables.  Bech32 checksums can&lt;br/&gt;also be computed and checked by hand with the help of lookup tables.  While&lt;br/&gt;the majority of users wouldn&amp;#39;t do hand computations, those motivated users&lt;br/&gt;who have a healthy distrust of digital devices can generate and manipulate&lt;br/&gt;the secret shares by hand.  The Bech32 checksum property means that after&lt;br/&gt;generating the shares by hand, you can then validate the checksums by hand.&lt;br/&gt;With extremely high probability, you will catch any computation error you&lt;br/&gt;make.  My SSS32 repository at &lt;a href=&#34;https://github.com/roconnor-blockstream/SSS32&#34;&gt;https://github.com/roconnor-blockstream/SSS32&lt;/a&gt;&lt;br/&gt;has a postscript file that generates the lookup tables needed for hand&lt;br/&gt;computation, although the document is a bit disorganized at the moment.&lt;br/&gt;&lt;br/&gt;The main deficiency of the scheme presented here is that we want a longer&lt;br/&gt;checksum than used in BIP-173 that is more suitable for error correction,&lt;br/&gt;rather than simply error detection.&lt;br/&gt;&lt;br/&gt;This example scheme was inspired in part by SLIP-32&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://github.com/satoshilabs/slips/blob/master/slip-0032.md&amp;gt&#34;&gt;https://github.com/satoshilabs/slips/blob/master/slip-0032.md&amp;gt&lt;/a&gt;; with the&lt;br/&gt;intent to be a hand computable version of the same idea.&lt;br/&gt;&lt;br/&gt;P.S. It is possible that this all could be made obsolete by a threshold&lt;br/&gt;musig signature scheme.&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/20200803/67e64b4d/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200803/67e64b4d/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:26:10Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsd05dkcdty93dnd6vrmrka3nmq526u0fqlp75p33nk35peqz84n7gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596z02x95</id>
    
      <title type="html">📅 Original date posted:2020-07-15 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsd05dkcdty93dnd6vrmrka3nmq526u0fqlp75p33nk35peqz84n7gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596z02x95" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8x20rgzvqsgvnlvqyaqr76txeneazduxmh9fn8wfsryl2avqse7c4kr43f&#39;&gt;nevent1q…r43f&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-07-15&lt;br/&gt;📝 Original message:On Wed, Nov 13, 2019 at 1:31 AM Pieter Wuille 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;&lt;br/&gt;&amp;gt; That brings me to Matt&amp;#39;s point: there is no need to do this right now. We&lt;br/&gt;&amp;gt; can simply amend BIP173 to only permit length 20 and length 32 (and only&lt;br/&gt;&amp;gt; length 20 for v0, if you like; but they&amp;#39;re so far apart that permitting&lt;br/&gt;&amp;gt; both shouldn&amp;#39;t hurt), for now. Introducing the &amp;#34;new&amp;#34; address format (the&lt;br/&gt;&amp;gt; one using an improved checksum algorithm) only needs to be there in time&lt;br/&gt;&amp;gt; for when a non-32-byte-witness-program would come in sight.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;As a prerequisite to taproot activation, I was looking into amending BIP173&lt;br/&gt;as stated above.  However after reviewing&lt;br/&gt;&lt;a href=&#34;https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb#detection-of-insertion-errors&#34;&gt;https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb#detection-of-insertion-errors&lt;/a&gt;&lt;br/&gt;it seems that insertions of 5 characters or more is &amp;#34;safe&amp;#34; in the sense&lt;br/&gt;that there is low probability of creating a valid checksum by doing so&lt;br/&gt;randomly.&lt;br/&gt;&lt;br/&gt;This means we could safely allow witness programs of lengths *20*, 23, 26,&lt;br/&gt;29, *32*, 36, and 40 (or 39).  These correspond to Bech32 addresses of&lt;br/&gt;length *42*, 47, 52, 57, *62*, 68, and 74 (or 73).  We could also support a&lt;br/&gt;set of shorter addresses, but given the lack of entropy in such short&lt;br/&gt;addresses, it is hard to believe that such witness programs could be used&lt;br/&gt;to secure anything.  I&amp;#39;m not sure what the motivation for allowing such&lt;br/&gt;short witness programs was, but I&amp;#39;m somewhat inclined to exclude them from&lt;br/&gt;the segwit address format.&lt;br/&gt;&lt;br/&gt;Given that we would only be able to support one of 39 or 40 byte witness&lt;br/&gt;programs, it is sensible to choose to allow 40 byte witness programs to be&lt;br/&gt;addressable.  This is the maximum witness program size allowed by BIP 141.&lt;br/&gt;&lt;br/&gt;So my proposal would be to amend BIP173 in such a way to restrict &amp;#34;bc&amp;#34; and&lt;br/&gt;&amp;#34;tb&amp;#34; segwit address formats to require witness programs be of size *20*,&lt;br/&gt;23, 26, 29, *32*, 36, or 40.  Witness programs of other sizes (between 2&lt;br/&gt;and 40) would, of course, still be legal in accordance with BIP 141;&lt;br/&gt;however they would be unaddressable by using this &amp;#34;bc&amp;#34; and &amp;#34;tb&amp;#34; prefix.&lt;br/&gt;Another address format would be needed to support other witness sizes,&lt;br/&gt;should the need ever arise.&lt;br/&gt;&lt;br/&gt;-- &lt;br/&gt;Russell O&amp;#39;Connor&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/20200715/42e33bf5/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200715/42e33bf5/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:25:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqst552f8hdv6gpfskyt3jqe6f90jewzwzmex45vnm5alwf0w0n3p3gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596zdww0n</id>
    
      <title type="html">📅 Original date posted:2020-07-15 📝 Original message:The ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqst552f8hdv6gpfskyt3jqe6f90jewzwzmex45vnm5alwf0w0n3p3gzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596zdww0n" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsq7h5hxy5r22l6a8w4z7y49a8psvh7zykztkfpjkmhy4uhh9eh95s6pxl60&#39;&gt;nevent1q…xl60&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-07-15&lt;br/&gt;📝 Original message:The bold values are the witness program lengths and address lengths of the&lt;br/&gt;segwit v0 programs (BIP-141), which clearly need to be covered in my&lt;br/&gt;proposed amendment.  32 bytes is also the proposed witness program length&lt;br/&gt;for segwit v1 that would correspond to a taproot (BIP-341) program.&lt;br/&gt;&lt;br/&gt;On Wed, Jul 15, 2020 at 5:05 PM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Can you make it clear what the bold vs not-bold numbers mean?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Wed, Jul 15, 2020 at 4:56 PM Russell O&amp;#39;Connor 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; On Wed, Nov 13, 2019 at 1:31 AM Pieter Wuille via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; That brings me to Matt&amp;#39;s point: there is no need to do this right now.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; We can simply amend BIP173 to only permit length 20 and length 32 (and only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; length 20 for v0, if you like; but they&amp;#39;re so far apart that permitting&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; both shouldn&amp;#39;t hurt), for now. Introducing the &amp;#34;new&amp;#34; address format (the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; one using an improved checksum algorithm) only needs to be there in time&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for when a non-32-byte-witness-program would come in sight.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; As a prerequisite to taproot activation, I was looking into amending&lt;br/&gt;&amp;gt;&amp;gt; BIP173 as stated above.  However after reviewing&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb#detection-of-insertion-errors&#34;&gt;https://gist.github.com/sipa/a9845b37c1b298a7301c33a04090b2eb#detection-of-insertion-errors&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; it seems that insertions of 5 characters or more is &amp;#34;safe&amp;#34; in the sense&lt;br/&gt;&amp;gt;&amp;gt; that there is low probability of creating a valid checksum by doing so&lt;br/&gt;&amp;gt;&amp;gt; randomly.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This means we could safely allow witness programs of lengths *20*, 23,&lt;br/&gt;&amp;gt;&amp;gt; 26, 29, *32*, 36, and 40 (or 39).  These correspond to Bech32 addresses&lt;br/&gt;&amp;gt;&amp;gt; of length *42*, 47, 52, 57, *62*, 68, and 74 (or 73).  We could also&lt;br/&gt;&amp;gt;&amp;gt; support a set of shorter addresses, but given the lack of entropy in such&lt;br/&gt;&amp;gt;&amp;gt; short addresses, it is hard to believe that such witness programs could be&lt;br/&gt;&amp;gt;&amp;gt; used to secure anything.  I&amp;#39;m not sure what the motivation for allowing&lt;br/&gt;&amp;gt;&amp;gt; such short witness programs was, but I&amp;#39;m somewhat inclined to exclude them&lt;br/&gt;&amp;gt;&amp;gt; from the segwit address format.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Given that we would only be able to support one of 39 or 40 byte witness&lt;br/&gt;&amp;gt;&amp;gt; programs, it is sensible to choose to allow 40 byte witness programs to be&lt;br/&gt;&amp;gt;&amp;gt; addressable.  This is the maximum witness program size allowed by BIP 141.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; So my proposal would be to amend BIP173 in such a way to restrict &amp;#34;bc&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; and &amp;#34;tb&amp;#34; segwit address formats to require witness programs be of size&lt;br/&gt;&amp;gt;&amp;gt; *20*, 23, 26, 29, *32*, 36, or 40.  Witness programs of other sizes&lt;br/&gt;&amp;gt;&amp;gt; (between 2 and 40) would, of course, still be legal in accordance with BIP&lt;br/&gt;&amp;gt;&amp;gt; 141; however they would be unaddressable by using this &amp;#34;bc&amp;#34; and &amp;#34;tb&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; prefix.  Another address format would be needed to support other witness&lt;br/&gt;&amp;gt;&amp;gt; sizes, should the need ever arise.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt; Russell O&amp;#39;Connor&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200715/33a67832/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200715/33a67832/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:25:57Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsf9l3wcnxtnxk9c3ah7tm7k8xqxpdy485nerc870r4348584v8dgqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ljqq7t</id>
    
      <title type="html">📅 Original date posted:2020-05-27 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsf9l3wcnxtnxk9c3ah7tm7k8xqxpdy485nerc870r4348584v8dgqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ljqq7t" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsql6hst965henq6vqalkme9fvcysey0ddtvu9yhtzy4kdtlwffwms36rqch&#39;&gt;nevent1q…rqch&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-27&lt;br/&gt;📝 Original message:I don&amp;#39;t believe that 60 bytes is a problem here.  SHA256 padding includes a&lt;br/&gt;length value of the original message data. Thus a padded non-64 byte&lt;br/&gt;transaction can never be the same as any padded 64-byte value, and&lt;br/&gt;therefore after applying the SHA256 compression function the resulting&lt;br/&gt;hashes cannot be identical (unless SHA256 itself is broken).&lt;br/&gt;&lt;br/&gt;P.S. SHA256 also includes 10* padding, which also suffices to ensure&lt;br/&gt;messages of different lengths have different padding.&lt;br/&gt;&lt;br/&gt;On Sat, May 23, 2020 at 8:52 PM ZmnSCPxj 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; Good morning Thomas,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; So I think the question to ask would be &amp;#34;why can&amp;#39;t we just make sure&lt;br/&gt;&amp;gt; it&amp;#39;s not 64?&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If we accept a 60-byte tx, then SHA-256 will pad it to 64 bytes, and it&lt;br/&gt;&amp;gt; may still be possible to mount CVE-2017-12842 attack with 32-bits of work.&lt;br/&gt;&amp;gt; Of course some other details will be changed from the standard SHA-256 in&lt;br/&gt;&amp;gt; mounting this attack, but from my poor understanding it seems safer to just&lt;br/&gt;&amp;gt; avoid the area around length 64.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It *might* be safe to accept 65-byte or larger (but do not believe me, I&lt;br/&gt;&amp;gt; only play a cryptographer on the Internet), but that does not help your&lt;br/&gt;&amp;gt; specific application, which uses 60 byte tx.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Sat, May 23, 2020 at 11:24 AM Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; AFAIU the number was picked to protect against CVE-2017-12842&lt;br/&gt;&amp;gt; covertly. See: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/16885&#34;&gt;https://github.com/bitcoin/bitcoin/pull/16885&lt;/a&gt; which&lt;br/&gt;&amp;gt; updated the text to explicitly mention this fact.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; On Sat, May 23, 2020 at 11:20 AM Thomas Voegtlin via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Hello list,&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; I have been trying to CPFP a transaction using OP_RETURN, because the&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; remaining output value would have been lower than the dust threshold.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The scriptPubkey of the output was OP_RETURN &#43; OP_0, and there was a&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; single p2wsh input.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; The result is a 60 bytes transaction (without witness), that gets&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; rejected because it is lower than MIN_STANDARD_TX_NONWITNESS_SIZE,&lt;br/&gt;&amp;gt; which&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; is equal to 82 bytes.&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Why is that value so high? Would it make sense to lower it to 60?&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Thomas&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/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; 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/20200527/ce628abf/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200527/ce628abf/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:24:53Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstt3lzxv53uu8weeejxdr0jfluxkrkp3lqqps66pykmpzs5afs36czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596x7xa8r</id>
    
      <title type="html">📅 Original date posted:2020-05-02 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstt3lzxv53uu8weeejxdr0jfluxkrkp3lqqps66pykmpzs5afs36czyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596x7xa8r" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs0ycrpfuag9ppr7tl46f65m47wt96s76dncj6pmf4pj8euu8hhrfsr03c0l&#39;&gt;nevent1q…3c0l&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-02&lt;br/&gt;📝 Original message:&amp;gt; If you didn&amp;#39;t verify the output scriptPubKeys, you would *only* be able&lt;br/&gt;&amp;gt; to care about fees since you couldn&amp;#39;t verify where any of the funds went?&lt;br/&gt;&amp;gt; And you&amp;#39;d only be able to say fees are &amp;#34;at least x&amp;#34;, since they could be&lt;br/&gt;&amp;gt; more if one of the scriptPubKeys turned out to be OP_TRUE eg. That might&lt;br/&gt;&amp;gt; almost make sense for a transaction accelerator that&amp;#39;s trying to increase&lt;br/&gt;&amp;gt; the fees; but only if you were doing it for someone else&amp;#39;s transaction&lt;br/&gt;&amp;gt; (since otherwise you&amp;#39;d care about the output addresses) and only if you&lt;br/&gt;&amp;gt; were happy to not receive any change? Seems like a pretty weird use case?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;You are right of course.  I was thinking of cases where you only care about&lt;br/&gt;where some of the outputs go but not all.  But of course, even in that case&lt;br/&gt;you will need to wade through all of the output ScriptPubKeys anyways.&lt;br/&gt;The current design shares the hashOuputs value with the one computed with&lt;br/&gt;BIP-143, and that is a somewhat valuable property to keep.&lt;br/&gt;&lt;br/&gt;Thanks for setting me straight.&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/20200502/6d03957c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200502/6d03957c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:24:14Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswhy72dwykhptwp8wj9z7grgua3ae38evfdep5m6wylhvgdp8h5tqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968u0jgm</id>
    
      <title type="html">📅 Original date posted:2020-05-02 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswhy72dwykhptwp8wj9z7grgua3ae38evfdep5m6wylhvgdp8h5tqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968u0jgm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgd327zuqerh3nslen054fvz4lqdgvqux46jw89k5f5uk8yzh7hssznucnr&#39;&gt;nevent1q…ucnr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-02&lt;br/&gt;📝 Original message:On Sat, May 2, 2020 at 10:26 AM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; except that we&amp;#39;d arguably still be missing:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     is this a coinbase output? (Coin.fCoinBase)&lt;br/&gt;&amp;gt;     what was the height of the coin? (Coin.nHeight)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Maybe committing to the coinbase flag would have some use, but committing&lt;br/&gt;&amp;gt; to the height would make it hard to chain unconfirmed spends, so at&lt;br/&gt;&amp;gt; least that part doesn&amp;#39;t seem worth adding.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;To add to this point, the height of the coin is something that is *not*&lt;br/&gt;currently covered by any signature mode and including it would constitute a&lt;br/&gt;change of an entirely different  caliber; a change that I would strongly&lt;br/&gt;caution against for your above reason and more.&lt;br/&gt;&lt;br/&gt;The coinbase output flag is currently covered by the signature as the&lt;br/&gt;outpoint hash has the required information (its prevout index of 0xFFFFFFFF&lt;br/&gt;is only legal in a coinbase transaction).  While I&amp;#39;m not particularly&lt;br/&gt;enthusiastic about making it easier to distinguish coinbase outputs from&lt;br/&gt;other outputs, and I worry a little about alternative designs for&lt;br/&gt;implementing the Bitcoin protocol where this information is not so readily&lt;br/&gt;available, I suppose I won&amp;#39;t really oppose adding it.  However, I don&amp;#39;t&lt;br/&gt;think anyone is seriously proposing it.&lt;br/&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/20200502/4a4b2947/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200502/4a4b2947/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:24:13Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqstjg8udvel0fhm7n0y86mjmfqjdfj8fzgjy9hsyyvpgyzvawfungqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5963f89x6</id>
    
      <title type="html">📅 Original date posted:2020-05-01 📝 Original message:While ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqstjg8udvel0fhm7n0y86mjmfqjdfj8fzgjy9hsyyvpgyzvawfungqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5963f89x6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswgh753p3rjzeqj0pxl7ud9hugem7jgpttz87v7tqm57cxnla6eeqzxtxxn&#39;&gt;nevent1q…txxn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-05-01&lt;br/&gt;📝 Original message:While I&amp;#39;m not entirely convinced yet that accertaining non-ownership of an&lt;br/&gt;input is a robust method of solving the problem here, I also see little&lt;br/&gt;reason not to amend BIP-341 as proposed. The ScriptPubKeys in question is&lt;br/&gt;already indirectly covered through the outpoints, so it is just a matter of&lt;br/&gt;optimization.  Furthermore in the consensus code, the ScriptPubKeys are&lt;br/&gt;part of the UTXO data set, and it is already being retrieved as part of the&lt;br/&gt;transaction checking process, so it is readily available.&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure how much my opinion on the topic matters, but I did include&lt;br/&gt;this kind of functionality in my design for Simplicity on Elements, and I&lt;br/&gt;have been leaning towards adding this kind of functionality in my Bitcoin&lt;br/&gt;demo application of Simplicity.&lt;br/&gt;&lt;br/&gt;Regarding specifics, I personally think it would be better to keep the&lt;br/&gt;hashes of the ScriptPubKeys separate from the hashes of the input values.&lt;br/&gt;This way anyone only interested in input values does not need to wade&lt;br/&gt;through what are, in principle, arbitrarily long ScriptPubKeys in order to&lt;br/&gt;check the input values (which each fixed size).  To that end, I would also&lt;br/&gt;(and independently) propose separating the hashing of the output values&lt;br/&gt;from the output ScriptPubKeys in `sha_outputs` so again, applications&lt;br/&gt;interested only in summing the values of the outputs (for instance to&lt;br/&gt;compute fees) do not have to wade through those arbitrarily long&lt;br/&gt;ScriptPubKeys in the outputs.&lt;br/&gt;&lt;br/&gt;On Thu, Apr 30, 2020 at 4:22 AM Andrew Kozlik via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi everyone,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In the current draft of BIP-0341 [1] the signature message commits to the&lt;br/&gt;&amp;gt; scriptPubKey of the output being spent by the input. I propose that the&lt;br/&gt;&amp;gt; signature message should commit to the scriptPubKeys of *all* transaction&lt;br/&gt;&amp;gt; inputs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In certain applications like CoinJoin, a wallet has to deal with&lt;br/&gt;&amp;gt; transactions containing external inputs. To calculate the actual amount&lt;br/&gt;&amp;gt; that the user is spending, the wallet needs to reliably determine for each&lt;br/&gt;&amp;gt; input whether it belongs to the wallet or not. Without such a mechanism an&lt;br/&gt;&amp;gt; adversary can fool the wallet into displaying incorrect information about&lt;br/&gt;&amp;gt; the amount being spent, which can result in theft of user funds [2].&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; In order to ascertain non-ownership of an input which is claimed to be&lt;br/&gt;&amp;gt; external, the wallet needs the scriptPubKey of the previous output spent by&lt;br/&gt;&amp;gt; this input. It must acquire the full transaction being spent and verify its&lt;br/&gt;&amp;gt; hash against that which is given in the outpoint. This is an obstacle in&lt;br/&gt;&amp;gt; the implementation of lightweight air-gapped wallets and hardware wallets&lt;br/&gt;&amp;gt; in general. If the signature message would commit to the scriptPubKeys of&lt;br/&gt;&amp;gt; all transaction inputs, then the wallet would only need to acquire the&lt;br/&gt;&amp;gt; scriptPubKey of the output being spent without having to acquire and verify&lt;br/&gt;&amp;gt; the hash of the entire previous transaction. If an attacker would provide&lt;br/&gt;&amp;gt; an incorrect scriptPubKey, then that would cause the wallet to generate an&lt;br/&gt;&amp;gt; invalid signature message.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that committing only to the scriptPubKey of the output being spent is&lt;br/&gt;&amp;gt; insufficient for this application, because the scriptPubKeys which are&lt;br/&gt;&amp;gt; needed to ascertain non-ownership of external inputs are precisely the ones&lt;br/&gt;&amp;gt; that would not be included in any of the signature messages produced by the&lt;br/&gt;&amp;gt; wallet.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The obvious way to implement this is to add another hash to the signature&lt;br/&gt;&amp;gt; message:&lt;br/&gt;&amp;gt; sha_scriptPubKeys (32): the SHA256 of the serialization of all&lt;br/&gt;&amp;gt; scriptPubKeys of the previous outputs spent by this transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Andrew Kozlik&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#common-signature-message&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#common-signature-message&lt;/a&gt;&lt;br/&gt;&amp;gt; [2]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-August/014843.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-August/014843.html&lt;/a&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/20200501/cc57f1b0/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200501/cc57f1b0/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:24:11Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsgxdm20f64wjr4760ff8c8xy8tds8vdpflfx0r7exjuugw6mafapqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tvvqgz</id>
    
      <title type="html">📅 Original date posted:2020-03-06 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsgxdm20f64wjr4760ff8c8xy8tds8vdpflfx0r7exjuugw6mafapqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596tvvqgz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyze43gtuhthk05akvcdqgrgfklleseq7sr6tkvglcm2ypt220gpcrutu4w&#39;&gt;nevent1q…tu4w&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-06&lt;br/&gt;📝 Original message:On Wed, Feb 26, 2020 at 2:56 PM Jeremy 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; As a replacement for paper, something like this makes sense v.s. what you&lt;br/&gt;&amp;gt; do with a ledger presently.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, shamir&amp;#39;s shares notoriously have the issue that the key does&lt;br/&gt;&amp;gt; exist plaintext on a device at some point.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Non-interactive multisig has the benefit of being able to sign&lt;br/&gt;&amp;gt; transactions without having keys in the same room/place/device ever.&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt; &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&lt;/a&gt;;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The way I see it, the main benefit of Shamir&amp;#39;s Secret Sharing is for those&lt;br/&gt;people who are already willing or wanting to be able to sign transactions&lt;br/&gt;on a single device, in a single room, etc., but would prefer not to keep&lt;br/&gt;their secret backup in a single room/place/device.  It is one thing to go&lt;br/&gt;and gather your shares whenever you need to recover from a broken/wiped&lt;br/&gt;hardware wallet versus having to go gather your shares whenever you want to&lt;br/&gt;make a transaction.  (I do agree that SSS is not a suitabl for creating a&lt;br/&gt;multisig from multiple participants.)&lt;br/&gt;&lt;br/&gt;This thread inspired me tidy up and post my concept for creating secret&lt;br/&gt;shares using paper computers (slide charts) and can be found at&lt;br/&gt;&lt;a href=&#34;https://github.com/roconnor-blockstream/SSS32/blob/master/SSS32.ps&#34;&gt;https://github.com/roconnor-blockstream/SSS32/blob/master/SSS32.ps&lt;/a&gt;. It is a&lt;br/&gt;design for splitting a secret encoded in the Bech32 alphabet into 2-of-n&lt;br/&gt;shares (where n &amp;lt;= 31) using pencil, paper and lookup tables.  There are&lt;br/&gt;numerous issues &amp;lt;&lt;a href=&#34;https://github.com/roconnor-blockstream/SSS32/issues&amp;gt&#34;&gt;https://github.com/roconnor-blockstream/SSS32/issues&amp;gt&lt;/a&gt;; and&lt;br/&gt;more that need to be addressed before one could even think about using it&lt;br/&gt;for actual valuable data.  Right now I&amp;#39;m mostly interested to find out if&lt;br/&gt;paper sharing is really feasible.&lt;br/&gt;&lt;br/&gt;A secret of 26 random Bech32 characters provides 130 bits of entropy, and a&lt;br/&gt;secret of 51 random Bech32 characters provides 255 bits of entropy.&lt;br/&gt;However, to enable robust recovery, the secret data ought to contain an&lt;br/&gt;error correcting code.  Because each character of the secret is&lt;br/&gt;independently split into shares, any single character error in one of the&lt;br/&gt;shares translates into a single character error in the recovered secret&lt;br/&gt;which can be corrected by the error correcting code.  See the exercise at&lt;br/&gt;the end of &amp;#34;Verifying Bech32 Checksums with Pen and Paper&amp;#34; &amp;lt;&lt;br/&gt;&lt;a href=&#34;http://r6.ca/blog/20180106T164028Z.html&amp;gt&#34;&gt;http://r6.ca/blog/20180106T164028Z.html&amp;gt&lt;/a&gt;; on how to attach the Bech32 error&lt;br/&gt;correcting code to a raw secret string by hand.  However, protecting the&lt;br/&gt;secret data is so important that one would want to design a checksum BCH&lt;br/&gt;code longer than 6 characters to get strong error correcting capabilities.&lt;br/&gt;&lt;br/&gt;I still don&amp;#39;t know if this proposed method all a good idea or not.  I&amp;#39;ve&lt;br/&gt;only experimented with encoding and recovering a 10 character &amp;#34;secret&amp;#34;&lt;br/&gt;data.  Generating 2-of-n shares is quite easy as all the shares are a&lt;br/&gt;function of the secret share and the first random share.  It only takes&lt;br/&gt;lookup up a pair of coordinates in a table to generate one character for&lt;br/&gt;each of the n shares together.  Recovering the secret data is more work;&lt;br/&gt;however, if your plan is to recover a hardware wallet anyways, it is&lt;br/&gt;reasonable for the hardware wallet to do the recovery from the shares&lt;br/&gt;itself for you.  Generating the error correcting code by hand is a bit more&lt;br/&gt;worrying, because it doesn&amp;#39;t do you much good if your generate an incorrect&lt;br/&gt;checksum.  However, by doing 1 or 2 manual passes to verify the checksum is&lt;br/&gt;maybe adequate.  Also passing the secret data into the hardware wallet you&lt;br/&gt;wish to use, along with its checksum, would let the hardware wallet tell&lt;br/&gt;you if there was an error in the checksum.  I think creating more general&lt;br/&gt;3-of-n schemes can be implemented too, but require work similar to recovery&lt;br/&gt;to generate rather than the simple lookup table process.  Generating 4-of-n&lt;br/&gt;and higher schemes may also be possible, but would require even more hand&lt;br/&gt;computation (i.e. computing lagrange polynomials.)&lt;br/&gt;&lt;br/&gt;Maybe this scheme is workable for the subset of people that this would&lt;br/&gt;appeal to.  In anycase, my document is open source and available for those&lt;br/&gt;who want to tinker with it.&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200306/00d09243/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200306/00d09243/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:23:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs82wmznjut8zv88cmxezm2mzra20gfrycz2jhrxgase8lyny4kdegzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5969t2d4n</id>
    
      <title type="html">📅 Original date posted:2020-03-22 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs82wmznjut8zv88cmxezm2mzra20gfrycz2jhrxgase8lyny4kdegzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5969t2d4n" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrl7h48rslcc8e0v54df9uggwz6am35uv2z5045q3sh03pr27tyjqct4tex&#39;&gt;nevent1q…4tex&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-22&lt;br/&gt;📝 Original message:On Sun, Mar 22, 2020 at 5:43 AM Tim Ruffing &amp;lt;crypto at timruffing.de&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Sat, 2020-03-21 at 12:59 -0400, Russell O&amp;#39;Connor wrote:&lt;br/&gt;&amp;gt; &amp;gt; Public keys are deterministic and can be spot checked.  In fact,&lt;br/&gt;&amp;gt; &amp;gt; AFAIU if hardened HD key derivations are not used, then spot checking&lt;br/&gt;&amp;gt; &amp;gt; is very easy.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; While spot checking isn&amp;#39;t ideal, my original concern with the&lt;br/&gt;&amp;gt; &amp;gt; synthetic none standard proposal was that it is inherently non-&lt;br/&gt;&amp;gt; &amp;gt; deterministic and cannot ever be spot checked.  This is why anti-&lt;br/&gt;&amp;gt; &amp;gt; covert signing protocols are so important if we are going to use&lt;br/&gt;&amp;gt; &amp;gt; synthetic nonces.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If spot checking means checking a few instances, then I think this is a&lt;br/&gt;&amp;gt; pretty weak defense. What if the device starts to behave differently&lt;br/&gt;&amp;gt; after a year?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I agree, which is why there perhaps is merit in using a non-hardered&lt;br/&gt;derivation path so that the software side of a hardware wallet can check&lt;br/&gt;the pubkey. Though I understand there are some disadvantages to the&lt;br/&gt;non-hardened paths.&lt;br/&gt;&lt;br/&gt;However, spot checking can even be done retroactively (and thoroughly).&lt;br/&gt;Again, I agree that this is less than ideal, but does let you take some&lt;br/&gt;action once you notice a deviation.&lt;br/&gt;&lt;br/&gt;Your claim is that if we don&amp;#39;t fix the pubkey issue there is no point in&lt;br/&gt;fixing the signature issue.  I disagree.  While I think both issues need to&lt;br/&gt;be fully addressed, the issues around the original proposed&lt;br/&gt;non-deterministic signature scheme are far more severe. The proposal would&lt;br/&gt;move us from a deterministic scheme, where spot checks are possible, with&lt;br/&gt;all the caveats that entails, to a non-deterministic scheme where spot&lt;br/&gt;checks are impossible.  My hope is that we can standardise a scheme that&lt;br/&gt;has the advantages of non-determinism without the threat of covert channels.&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/20200322/53768608/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200322/53768608/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:23:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsx6u0gmmccp007pp37ddzgzu9c5lxxh8wpumdvg3qtlejqv85mdmqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596l26ul8</id>
    
      <title type="html">📅 Original date posted:2020-03-21 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsx6u0gmmccp007pp37ddzgzu9c5lxxh8wpumdvg3qtlejqv85mdmqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596l26ul8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrrv29dn2vr2y55q4789hgs7d9uuwhdjhlq9v2ed7x4nlf4ryjwescuj8hu&#39;&gt;nevent1q…j8hu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-03-21&lt;br/&gt;📝 Original message:On Sat, Mar 21, 2020 at 12:46 PM Tim Ruffing via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Pieter,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Let&amp;#39;s take a step back first. If we believe that malicious hardware&lt;br/&gt;&amp;gt; wallets are big enough of a concern, then signing is only part of the&lt;br/&gt;&amp;gt; problem. The other issue is key generation. The PRG from which the seed&lt;br/&gt;&amp;gt; is derived can be malicious, e.g., just H(k_OO,counter) for a key k_OO&lt;br/&gt;&amp;gt; chosen by the hardware manufacturer. I haven&amp;#39;t seen an argument why&lt;br/&gt;&amp;gt; attacks during the signing model should more realistic than attacks&lt;br/&gt;&amp;gt; during key generation, so I&amp;#39;d be very hesitant to deploy anti-covert&lt;br/&gt;&amp;gt; channel singing protocols without deploying protocols for key&lt;br/&gt;&amp;gt; generation that are secure in the same attacker model.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Public keys are deterministic and can be spot checked.  In fact, AFAIU if&lt;br/&gt;hardened HD key derivations are not used, then spot checking is very easy.&lt;br/&gt;&lt;br/&gt;While spot checking isn&amp;#39;t ideal, my original concern with the synthetic&lt;br/&gt;none standard proposal was that it is inherently non-deterministic and&lt;br/&gt;cannot ever be spot checked.  This is why anti-covert signing protocols are&lt;br/&gt;so important if we are going to use synthetic nonces.&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/20200321/33b4ef58/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200321/33b4ef58/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:23:12Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqszyyt3dk9ecy22z5d06egvd3qr4kaxtqdl7dvm3snlfu4cuw8ureszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596fm4645</id>
    
      <title type="html">📅 Original date posted:2020-02-26 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqszyyt3dk9ecy22z5d06egvd3qr4kaxtqdl7dvm3snlfu4cuw8ureszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596fm4645" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsplcn42tkdfq0c8m5fksdqxk2ex2khtpqp373mfjefxpq66muxmucnehqrs&#39;&gt;nevent1q…hqrs&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-02-26&lt;br/&gt;📝 Original message:On Sun, Feb 23, 2020 at 11:26 PM Pieter Wuille 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;&lt;br/&gt;&amp;gt; 2. Nonce generation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; All other semantical changes are around more secure nonce generation&lt;br/&gt;&amp;gt; in BIP 340, dealing with various failure cases:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * To protect against fault injection attacks it is recommended to&lt;br/&gt;&amp;gt; include actual signing-time randomness into the nonce generation&lt;br/&gt;&amp;gt; process. This was mentioned already, but the update elaborates much&lt;br/&gt;&amp;gt; more about this, and integrates this randomness into the standard&lt;br/&gt;&amp;gt; signing process.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I do worry that standardizing on a non-deterministic nonce generation&lt;br/&gt;scheme makes the problem of private key exfiltration a much bigger concern&lt;br/&gt;in the application of hardware signing devices.&lt;br/&gt;While sorely imperfect, with a deterministic nonce scheme, we at least have&lt;br/&gt;the option of spot checking hardware devices to see if they are producing&lt;br/&gt;signatures in accordance with their specified nonce scheme.  But short of&lt;br/&gt;providing some kind of certificate, we won&amp;#39;t be able to do such checks&lt;br/&gt;against hardware devices that use the proposed synthetic nonce. (Question:&lt;br/&gt;can a hardware device safely output the random value &amp;#39;a&amp;#39; it used its&lt;br/&gt;&amp;#34;certificate&amp;#34;?  AFAIU &amp;#39;a&amp;#39; is not considered secret data; it just needs to&lt;br/&gt;be not under attacker control.  Should hardware wallets be encouraged to&lt;br/&gt;return this value?)&lt;br/&gt;&lt;br/&gt;The best way to mitigate this is to use the Nonce exfiltration protection&lt;br/&gt;mentioned; however there are no references on how to do this.  Ideally we&amp;#39;d&lt;br/&gt;standardize this Nonce exfiltration protection scheme within this synthetic&lt;br/&gt;nonce scheme.  However, I don&amp;#39;t think it is worth holding this BIP up on&lt;br/&gt;that; it seems reasonable to introduce a new section to this BIP addressing&lt;br/&gt;that problem in the future.  Maybe instead we can get references to more&lt;br/&gt;information about this Nonce exfiltration protection that is mentioned?&lt;br/&gt;&lt;br/&gt;Really I just want to do whatever we reasonably can do to avoid a world&lt;br/&gt;where we end up providing hardware signing devices with a hard to detect&lt;br/&gt;underhanded communications channel.&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/20200225/1f8350fd/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20200225/1f8350fd/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:23:04Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqthej3khnvsxawls2a5dsy4zt9jrjyh74nvz82x08txtddl0tfdszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hehqzf</id>
    
      <title type="html">📅 Original date posted:2019-12-05 📝 Original message:After ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqthej3khnvsxawls2a5dsy4zt9jrjyh74nvz82x08txtddl0tfdszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596hehqzf" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg4pcdr88f4zvk0m2t8rxkx9x5ce55x23hdpcas7nz73mzck0hhmsug2z7g&#39;&gt;nevent1q…2z7g&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-12-05&lt;br/&gt;📝 Original message:After chatting with andytoshi and others, and some more thinking I&amp;#39;ve been&lt;br/&gt;convinced that my specific concern about other users masquerading other&lt;br/&gt;people pubkeys as their own in complex scripts is actually a non-issue.&lt;br/&gt;&lt;br/&gt;No matter what you write in Script (today), you are limited to expressing&lt;br/&gt;some policy that is logically equivalent to a set of conditions and&lt;br/&gt;signatures on pubkeys that can be expressed in disjunctive normal form.  We&lt;br/&gt;can write such a policy as&lt;br/&gt;&lt;br/&gt;(C[1] &amp;amp;&amp;amp; PK[1,1] &amp;amp;&amp;amp; ... &amp;amp;&amp;amp; PK[1,m[1]]) || ... || (C[n] &amp;amp;&amp;amp; PK[n,1] &amp;amp;&amp;amp; ... &amp;amp;&amp;amp;&lt;br/&gt;PK[n,m[n]])&lt;br/&gt;&lt;br/&gt;where C[i] is some conjunction of conditions such as timelock constraints,&lt;br/&gt;or hash-lock constraints or any other kind of proof of publication, and&lt;br/&gt;where PK[i,j] is a requirement of a signature against a specific public key.&lt;br/&gt;&lt;br/&gt;&amp;gt;From Alice&amp;#39;s point of view, she can divide set of clauses under the&lt;br/&gt;disjunction into those that contain a pubkey that she considers (partially)&lt;br/&gt;under her control and those clauses that she does not control (even though&lt;br/&gt;as we shall see those other keys might actually be under Alice&amp;#39;s control,&lt;br/&gt;unbeknownst to her). To that end, let us consider a specific representative&lt;br/&gt;policy.&lt;br/&gt;&lt;br/&gt;    (C[1] &amp;amp;&amp;amp; APK[1]) || (C[2] &amp;amp;&amp;amp; APK[2] &amp;amp;&amp;amp; BPK[2]) || (C[3] &amp;amp;&amp;amp; BPK[3])&lt;br/&gt;&lt;br/&gt;where Alice considers herself in control of APK[1] and APK[2], and where&lt;br/&gt;she considers Bob in control of BPK[2] and BPK[3] and where C[1], C[2], and&lt;br/&gt;C[3] are different conditions, let&amp;#39;s say three different hash-locks.  We&lt;br/&gt;will also say that Alice has ensured that her pubkeys in different clauses&lt;br/&gt;are different (i.e. APK[1] != APK[2]), but she doesn&amp;#39;t make any such&lt;br/&gt;assumption for Bob&amp;#39;s keys and neither will we.&lt;br/&gt;&lt;br/&gt;When Alice funded this Script, or otherwise accepted it for consideration,&lt;br/&gt;she agreed that she wouldn&amp;#39;t control the redemption of the UTXO as long as&lt;br/&gt;the preimage for C[3] is published.  In particular, Alice doesn&amp;#39;t even need&lt;br/&gt;to fully decode the Script semantics for that clause beyond determining&lt;br/&gt;that it enforces the C[3] requirement that she cares about. Even if Bob was&lt;br/&gt;masquerading Alice&amp;#39;s pubkey as his own (as in BPK[3] = APK[1] or BPK[3] =&lt;br/&gt;APK[2]), and he ends up copying her signature into that clause, Alice ends&lt;br/&gt;up with C[3] published as she originally accepted as a possibility.  Bob&lt;br/&gt;masquerading Alice&amp;#39;s pubkey as his own only serves to hamper his own&lt;br/&gt;ability to sign for his clauses (I mean, Bob might be trying to convince&lt;br/&gt;some third party that Alice signed for something she didn&amp;#39;t actually sign&lt;br/&gt;for, but such misrepresentations of the meaning of digital signatures is&lt;br/&gt;outside our scope and this just serves as a reminder not to be deceived by&lt;br/&gt;Bob&amp;#39;s tricks here).&lt;br/&gt;&lt;br/&gt;And the same argument holds for BPK[2].  Even if BPK[2] = APK[1] and Bob&lt;br/&gt;tries to copy Alice&amp;#39;s signature into the C[2] condition, he still needs a&lt;br/&gt;countersignature with her APK[2], so Alice remains in control of that&lt;br/&gt;clause.  And if BPK[2] = APK[2] then Bob can only copy Alice&amp;#39;s signature on&lt;br/&gt;the C[2] condition, but in that case she has already authorised that&lt;br/&gt;condition.  Again, Bob masquerading Alice&amp;#39;s pubkey as his own only serves&lt;br/&gt;to hamper his own ability to sign for his clauses.&lt;br/&gt;&lt;br/&gt;So what makes our potential issue here safe, versus the dangers that would&lt;br/&gt;happen in &amp;lt;&lt;a href=&#34;https://bitcoin.stackexchange.com/a/85665/49364&amp;gt&#34;&gt;https://bitcoin.stackexchange.com/a/85665/49364&amp;gt&lt;/a&gt;; where Bob&lt;br/&gt;masqurades Alice&amp;#39;s UTXO as his own?  The key problem in the UTXO case isn&amp;#39;t&lt;br/&gt;so much Bob masquerading Alice&amp;#39;s pubkey as his own, as it is an issue with&lt;br/&gt;Alice reusing her pubkeys and Bob taking advantage of that.  We do, in&lt;br/&gt;fact, have exactly the same issue in Script.  If Alice were to reuse&lt;br/&gt;pubkeys such that APK[1] = APK[2], then Bob could take her signature for&lt;br/&gt;C[1] and transplant it to redeem under condition C[2].  We see that it is&lt;br/&gt;imperative that Alice ensures that she doesn&amp;#39;t reuse pubkeys that she&lt;br/&gt;considers under her control for different conditions when she wants her&lt;br/&gt;signature to distinguish between them.&lt;br/&gt;&lt;br/&gt;For various reasons, some historical, it is much harder to avoid pubkey&lt;br/&gt;reuse for different UTXOs than it is to avoid pubkey reuse within a single&lt;br/&gt;script.  We often use Bitcoin addresses in non-interactive ways, such as&lt;br/&gt;putting them on flyers or painting them on walls and such.  Without a&lt;br/&gt;standard for tweaking such pubkeys in a per-transaction way, we end up with&lt;br/&gt;a lot of pubkey reuse between various UTXOs.  However, within a Script,&lt;br/&gt;avoiding pubkey reuse ought to be easier.  Alice must communicate different&lt;br/&gt;pubkeys intended for different clauses, or if Bob is constructing a whole&lt;br/&gt;complex script on Alice&amp;#39;s behalf, he may need to add CODESEPARATORs if&lt;br/&gt;tweaking Alice&amp;#39;s pubkey isn&amp;#39;t an option.&lt;br/&gt;&lt;br/&gt;The conversion of a policy to disjunctive normal form can involve an&lt;br/&gt;exponential blowup (see &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Disjunctive_normal_form#Conversion_to_DNF&amp;gt&#34;&gt;https://en.wikipedia.org/wiki/Disjunctive_normal_form#Conversion_to_DNF&amp;gt&lt;/a&gt;;).&lt;br/&gt;For instance, if Alice&amp;#39;s policy (not in disjunctive normal form) is of the&lt;br/&gt;form&lt;br/&gt;&lt;br/&gt;    (C[1] || D[1]) &amp;amp;&amp;amp; ... &amp;amp;&amp;amp; (C[n] || D[n]) &amp;amp;&amp;amp; APK&lt;br/&gt;&lt;br/&gt;where C[i] and D[i] are all distinct hashlocks, we require O(2^n) clauses&lt;br/&gt;to put it in disjunctive normal form.  If Alice wants to create signatures&lt;br/&gt;that are restricted to a specific combination of C[i]&amp;#39;s and D[i]&amp;#39;s, she&lt;br/&gt;needs to use an exponential number of pubkeys, which isn&amp;#39;t tractable to do&lt;br/&gt;in Script.  But neither my original proposal nor CODESEPARATOR helps in&lt;br/&gt;this case either because CODESEPARATOR can mark only the last executed&lt;br/&gt;position.  Taproot&amp;#39;s MAST (Merklized Alternative Script Tree per aj&amp;#39;s&lt;br/&gt;suggestion), can maybe provide a tractable solution to this in cases where&lt;br/&gt;it is applicable.  The MAST is always a disjunction and because the tapleaf&lt;br/&gt;is signed, it is safe to reuse pubkeys between alternative branches.&lt;br/&gt;&lt;br/&gt;This analysis suggests that we should amend CODESEPARATORs behaviour to&lt;br/&gt;update an accumulator (presumably a running hash value), so that all&lt;br/&gt;executed CODESEPARATOR positions end up covered by the signature.  That&lt;br/&gt;would provide a solution to the above problem for those cases where&lt;br/&gt;taproot&amp;#39;s MAST cannot be used.  I&amp;#39;m not sure if it is better to propose&lt;br/&gt;such an amendment to CODESEPARATOR&amp;#39;s behaviour now, or to propose to&lt;br/&gt;soft-fork in such optional behaviour at a later time.&lt;br/&gt;&lt;br/&gt;However, what I said above was even too simplified.  In general, a policy&lt;br/&gt;of the form.&lt;br/&gt;&lt;br/&gt;    (Exists w[1]. C[1](w[1]) &amp;amp;&amp;amp; PK[1,1](w[1]) &amp;amp;&amp;amp; ... &amp;amp;&amp;amp; PK[1,m[1]](w[1]) ||&lt;br/&gt;... || (Exists w[n]. C[n](w[n]) &amp;amp;&amp;amp; PK[n,1](w[n]) &amp;amp;&amp;amp; ... &amp;amp;&amp;amp; PK[n,m[n]](w[n]))&lt;br/&gt;&lt;br/&gt;where each term could possibly be parameterized by some witness value&lt;br/&gt;(though at the moment there isn&amp;#39;t enough functionality in Script to&lt;br/&gt;parameterize the pubkeys in any reasonably way and it maybe isn&amp;#39;t even&lt;br/&gt;possible to parameterise the conditions in any reasonable way).  In&lt;br/&gt;general, you might want your signature to cover (some function of) this&lt;br/&gt;witness value.  This suggests that we would actually want a CODESEPARATOR&lt;br/&gt;variant that pushes a stack item into the accumulator that gets covered by&lt;br/&gt;the signature rather than pushing the CODESEPARATOR position.  Though at&lt;br/&gt;this point the name CODESEPARATOR is probably not suitable, even if it&lt;br/&gt;subsumes the functionality.  Again, I&amp;#39;m not sure if it is better to propose&lt;br/&gt;such a replacement for CODESEPARATOR&amp;#39;s behaviour now, or to propose to&lt;br/&gt;soft-fork in such optional behaviour at a later time.&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/20191205/5dc3e915/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191205/5dc3e915/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:21:53Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsz2ajxqee9y8r6qgmpys79gzwrysw7rkc9s0rdqeljvxm0rje6nzqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596f5tlak</id>
    
      <title type="html">📅 Original date posted:2019-12-01 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsz2ajxqee9y8r6qgmpys79gzwrysw7rkc9s0rdqeljvxm0rje6nzqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596f5tlak" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg8u4r0z5l4dpm9383g3695ltxptdtrslccsshpcknx89pawxqalq4acjm6&#39;&gt;nevent1q…cjm6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-12-01&lt;br/&gt;📝 Original message:On Thu, Nov 28, 2019 at 3:07 AM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; FWIW, there&amp;#39;s discussion of this at&lt;br/&gt;&amp;gt; &lt;a href=&#34;http://www.erisian.com.au/taproot-bip-review/log-2019-11-28.html#l-65&#34;&gt;http://www.erisian.com.au/taproot-bip-review/log-2019-11-28.html#l-65&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I think variants like signing the position of the enclosing&lt;br/&gt;OP_IF/OP_NOTIF/OP_ELSE of the OP_IF/OP_NOTIF/OP_ELSE block that the&lt;br/&gt;checksig is within, or signing the byte offset instead of the opcode number&lt;br/&gt;offset are all fine.  In particular, signing the enclosing OP_IF... would&lt;br/&gt;allow sharing of the hashed signed data in a normal multisig sequence of&lt;br/&gt;operations.  Below I&amp;#39;ll continue to refer to my proposal as signing the&lt;br/&gt;CHECKSIG position, but please take it to mean any of these proposed,&lt;br/&gt;semantically equivalent, realizations of this idea.&lt;br/&gt;&lt;br/&gt;I also think that it is quite reasonable to have a sighash flag control&lt;br/&gt;whether or not the signature covers the CHECKSIG position or not, with&lt;br/&gt;SIGHASH_ALL including the CHECKSIG position.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; First, it seems like a bad idea for Alice to have put funds behind a&lt;br/&gt;&amp;gt; script she doesn&amp;#39;t understand in the first place. There&amp;#39;s plenty of&lt;br/&gt;&amp;gt; scripts that are analysable, so just not using ones that are too hard to&lt;br/&gt;&amp;gt; analyse sure seems like an option.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t think this is true in general.  When constructing a script it seems&lt;br/&gt;quite reasonable for one party to come to the table with their own custom&lt;br/&gt;script that they want to use because they have some sort of 7-of-11 scheme&lt;br/&gt;but in one of those cases is really a 2-of-3 and another is 5-of-6.  The&lt;br/&gt;point is that you shouldn&amp;#39;t need to decode their exact policy in order to&lt;br/&gt;collaborate with them.  This notion is captured quite clearly in the MAST&lt;br/&gt;aspect of taproot.  In many circumstances, it is sufficient for you to know&lt;br/&gt;that there exists a branch that contains a particular script without need&lt;br/&gt;to know what every branch contains.  Because we include the tapleaf in the&lt;br/&gt;signature, we already prevent this signature copying attack against&lt;br/&gt;attempts to transplant one&amp;#39;s signature from one tapleaf to another.  My&lt;br/&gt;proposal is to simply extend this same protection to branches within a&lt;br/&gt;single tapscript.&lt;br/&gt;&lt;br/&gt;Second, if there are many branches in the script, it&amp;#39;s probably more&lt;br/&gt;&amp;gt; efficient to do them via different branches in the merkle tree, which&lt;br/&gt;&amp;gt; at least for this purpose would make them easier to analyse as well&lt;br/&gt;&amp;gt; (since you can analyse them independently).&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Of course this should be done when practical.  This point isn&amp;#39;t under&lt;br/&gt;dispute.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; Third, if you are doing something crazy complex where a particular key&lt;br/&gt;&amp;gt; could appear in different CHECKSIG operators and they should have&lt;br/&gt;&amp;gt; independent signatures, that seems like you&amp;#39;re at the level of&lt;br/&gt;&amp;gt; complexity where learning about CODESEPARATOR is a reasonable thing to&lt;br/&gt;&amp;gt; do.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;So while I agree that learning about CODESEPARATOR is a reasonable thing to&lt;br/&gt;do, given that I haven&amp;#39;t heard the CODESEPARATOR being proposed as&lt;br/&gt;protection against this sort of signature-copying attack before and given&lt;br/&gt;the subtle nature of the issue, I&amp;#39;m not sure people will know to use it to&lt;br/&gt;protect themselves.  We should aim for a Script design that makes the&lt;br/&gt;cheaper default Script programming choices the safer one.&lt;br/&gt;&lt;br/&gt;On the other hand, in a previous thread a while ago I was also arguing that&lt;br/&gt;sophisticated people are plausibly using CODESEPARATOR today, hidden away&lt;br/&gt;in unredeemed P2SH UTXOs.  So perhaps I&amp;#39;m right about at least one of these&lt;br/&gt;two points. :)&lt;br/&gt;&lt;br/&gt;I think CODESEPARATOR is a better solution to this problem anyway. In&lt;br/&gt;&amp;gt; particular, consider a &amp;#34;leaf path root OP_MERKLEPATHVERIFY&amp;#34; opcode,&lt;br/&gt;&amp;gt; and a script that says &amp;#34;anyone in group A can spend if the preimage for&lt;br/&gt;&amp;gt; X is revelaed, anyone in group B can spend unconditionally&amp;#34;:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  IF HASH160 x EQUALVERIFY groupa ELSE groupb ENDIF&lt;br/&gt;&amp;gt;  MERKLEPATHVERIFY CHECKSIG&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; spendable by&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  siga keya path preimagex 1&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; or&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  sigb keyb path 0&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With your proposed semantics, if my pubkey is in both groups, my signature&lt;br/&gt;&amp;gt; will sign for position 10, and still be valid on either path, even if&lt;br/&gt;&amp;gt; the signature commits to the CHECKSIG position.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I could fix my script either by having two CHECKSIG opcodes (one for&lt;br/&gt;&amp;gt; each branch) and also duplicating the MERKLEPATHVERIFY; or I could&lt;br/&gt;&amp;gt; add a CODESEPARATOR in either IF branch.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; (Or I could just not reuse the exact same pubkey across groups; or I could&lt;br/&gt;&amp;gt; have two separate scripts: &amp;#34;HASH160 x EQUALVERIFY groupa MERKLEPATHVERIFY&lt;br/&gt;&amp;gt; CHECKSIG&amp;#34; and &amp;#34;groupb MERKLEPATHVERIFY CHECKSIG&amp;#34;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I admit my proposal doesn&amp;#39;t automatically prevent this signature-copying&lt;br/&gt;attack against every Script template.  To be fully effective you need to be&lt;br/&gt;aware of this signature-copying attack vector to ensure your scripts are&lt;br/&gt;designed so that your CHECKSIG operations are protected by being within the&lt;br/&gt;IF block that does the verification of the hash-preimage.  My thinking is&lt;br/&gt;that my proposal is effective enough to save most people most of the time,&lt;br/&gt;even if it doesn&amp;#39;t save everyone all the time, all while having no&lt;br/&gt;significant burden otherwise.  Therefore, I don&amp;#39;t think your point that&lt;br/&gt;there still exists a Script where a signature copying attack can be&lt;br/&gt;performed is adequate by itself to dismiss my proposal.  However if you&lt;br/&gt;believe that if we don&amp;#39;t save everyone all the time then there is no point&lt;br/&gt;in trying, or if you believe that signing the CHECKSIG position probably&lt;br/&gt;will not protect most users most of the time, or if you believe the burden&lt;br/&gt;on all the other cases is too great, then maybe it is better to rely on&lt;br/&gt;people using CODESEPARATOR.&lt;br/&gt;&lt;br/&gt;Given that MAST design of taproot greatly reduces this problem compared to&lt;br/&gt;legacy script, I suppose you could argue that &amp;#34;the burden on all the other&lt;br/&gt;cases is too great&amp;#34; simply because you believe the problematic situation is&lt;br/&gt;now extremely rare.&lt;br/&gt;&lt;br/&gt;I still think we ought to choose designs that are safer by default and&lt;br/&gt;include as much user intention within the signed data as we can reasonably&lt;br/&gt;get away, and use other sighash flags for those cases when we need to&lt;br/&gt;exclude data from the signature.&lt;br/&gt;&lt;br/&gt;In particular, imagine a world where CODESEPARATOR never existed.  We have&lt;br/&gt;this signature copying attack to deal with, and we are designing a new&lt;br/&gt;Segwit version in which we can now address the problem.  One proposal that&lt;br/&gt;someone comes up with is to sign the CHECKSIG position (or sign the&lt;br/&gt;enclosing OP_IF/OP_ELSE... position), maybe using a SIGHASH flag to&lt;br/&gt;optionally disable it.  Someone else comes up with a proposal to add new&lt;br/&gt;&amp;#34;CODESEPARATOR&amp;#34; opcode which requires adding a new piece of state to the&lt;br/&gt;Script interpreter (the only non-stack based piece of state) to track the&lt;br/&gt;last executed CODESEPARATOR position and include that in the signature.&lt;br/&gt;Would you really prefer the CODESEPARATOR proposal?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; I believe that it would be safer, and less surprising to users, to&lt;br/&gt;&amp;gt; always sign&lt;br/&gt;&amp;gt; &amp;gt; the CHECKSIG position by default.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As a side benefit, we get to eliminate CODESEPARATOR, removing a fairly&lt;br/&gt;&amp;gt; awkward&lt;br/&gt;&amp;gt; &amp;gt; opcode from this script version.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; As it stands, ANYPREVOUTANYSCRIPT proposes to not sign the script code&lt;br/&gt;&amp;gt; (allowing the signature to be reused in different scripts) but does&lt;br/&gt;&amp;gt; continue signing the CODESEPARATOR position, allowing you to optionally&lt;br/&gt;&amp;gt; restrict how flexibly you can reuse signatures. That seems like a better&lt;br/&gt;&amp;gt; tradeoff than having ANYPREVOUTANYSCRIPT signatures commit to the CHECKSIG&lt;br/&gt;&amp;gt; position which would make it a fair bit harder to design scripts that&lt;br/&gt;&amp;gt; can share signatures, or not having any way to restrict which scripts&lt;br/&gt;&amp;gt; the signature could apply to other than changing the pubkey.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Um, I believe that signing the CODESEPERATOR position without signing the&lt;br/&gt;script code is nonsensical.  You are talking about signing a piece of data&lt;br/&gt;without an interpretation of its meaning.&lt;br/&gt;&lt;br/&gt;Recall that originally CODESEPARTOR would let you sign a suffix of the&lt;br/&gt;Script program.  In the context of signing the whole script (which is&lt;br/&gt;always signed indirectly as part of the txid in legacy signatures) signing&lt;br/&gt;the offset into that scripts contains just as much information as signing a&lt;br/&gt;script suffix, while being constant sized.  When you remove the Script from&lt;br/&gt;the data being signed, signing an offset is no longer equivalent to signing&lt;br/&gt;a Script suffix, and an offset into an unknown data structure is a&lt;br/&gt;meaningless value by itself.  There is no way that you should be signing&lt;br/&gt;CODESEPARATOR position without also covering the Script with the signature.&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/20191201/75cc9af7/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191201/75cc9af7/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:21:52Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqst64mjth8763x2avnhg5dll90amvdw7d49ye34yn0qd5xf0xj670qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596sawvd7</id>
    
      <title type="html">📅 Original date posted:2019-11-27 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqst64mjth8763x2avnhg5dll90amvdw7d49ye34yn0qd5xf0xj670qzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596sawvd7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstx28rh60sxslfl7dl0ym2lc8npyrgwtkeuwcum9v8lnl96evy6wgqm0vgc&#39;&gt;nevent1q…0vgc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-27&lt;br/&gt;📝 Original message:Hi all,&lt;br/&gt;&lt;br/&gt;I&amp;#39;d like to revisit an old topic from last year about the data signed in&lt;br/&gt;tapscript signatures &amp;lt;&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-November/016508.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-November/016508.html&lt;/a&gt;&lt;br/&gt;&amp;gt;.&lt;br/&gt;&lt;br/&gt;The current tapscript proposal requires a signature on the last executed&lt;br/&gt;CODESEPRATOR position.  I&amp;#39;d like to propose an amendment whereby instead of&lt;br/&gt;signing the last executed CODESEPRATOR position, we simply always sign the&lt;br/&gt;position of the CHECKSIG (or other signing opcode) being executed. Then we&lt;br/&gt;can deprecate CODESEPARTOR (either by making it OP_SUCCESS, or a nop, or&lt;br/&gt;always fail when executed, or whatever).&lt;br/&gt;&lt;br/&gt;The main motivation for this proposal is to increase robustness against&lt;br/&gt;various signature-copying attacks in Scripts that have multiple spending&lt;br/&gt;conditions.  Bitcoin is already robust against attacks where the attacker&lt;br/&gt;attempts to peddle a victim&amp;#39;s UTXO as their own and try to copy the&lt;br/&gt;victim&amp;#39;s signature from one transaction input to another input.  Because&lt;br/&gt;Bitcoin signatures specify which input within a transaction is being signed&lt;br/&gt;for, such attacks fail (see &lt;a href=&#34;https://bitcoin.stackexchange.com/a/85665/49364&#34;&gt;https://bitcoin.stackexchange.com/a/85665/49364&lt;/a&gt;&lt;br/&gt;).&lt;br/&gt;&lt;br/&gt;However, unless CODESEPARATOR is explicitly used, there is no protection&lt;br/&gt;against these sorts of attacks when there are multiple participants that&lt;br/&gt;have signing conditions within a single UTXO (or rather within a single&lt;br/&gt;tapleaf in the tapscript case).  As it stands, Bitcoin&amp;#39;s signed data only&lt;br/&gt;covers which input is being signed, and not the specific conditions are&lt;br/&gt;being signed for.  So for example, if Alice and Bob are engaged in some&lt;br/&gt;kind of multi-party protocol, and Alice wants to pre-sign a transaction&lt;br/&gt;redeeming a UTXO but subject to the condition that a certain hash-preimage&lt;br/&gt;is revealed, she might verify the Script template shows that the code path&lt;br/&gt;to her public key enforces that the hash pre-image is revealed (using a&lt;br/&gt;toolkit like miniscript can aid in this), and she might make her signature&lt;br/&gt;feeling secure that it, if her signature is used, the required preimage&lt;br/&gt;must be revealed on the blockchain.  But perhaps Bob has masquated Alice&amp;#39;s&lt;br/&gt;pubkey as his own, and maybe he has inserted a copy of Alice&amp;#39;s pubkey into&lt;br/&gt;a different path of the Script template.  Now Alice&amp;#39;s signature can be&lt;br/&gt;copied and used in this alternate path, allowing the UTXO to be redeemed&lt;br/&gt;under circumstances that Alice didn&amp;#39;t believe she was authorizing.  In&lt;br/&gt;general, to protect herself, Alice needs to inspect the Script to see if&lt;br/&gt;her pubkey occurs in any other branch.  Given that her pubkey, in&lt;br/&gt;principle, could be derived from a computation rather that pushed directly&lt;br/&gt;into the stack, it is arguably infeasible for Alice to perform the required&lt;br/&gt;check in general.&lt;br/&gt;&lt;br/&gt;I believe that it would be safer, and less surprising to users, to always&lt;br/&gt;sign the CHECKSIG position by default.  This will automatically enforce&lt;br/&gt;conditions with the signature in most cases, rather than requiring users to&lt;br/&gt;proactively try to reason if CODESEPARATOR is required for protection&lt;br/&gt;within their protocol or not, and risk having them leave it out for cost&lt;br/&gt;savings when it ends up being required for security after all.&lt;br/&gt;&lt;br/&gt;I do not believe signing the CHECKSIG position is an undue burden on those&lt;br/&gt;signers who have no conditions they require enforcement for.  As it stands,&lt;br/&gt;the tapscript proposal already requires the tapleaf_hash value under the&lt;br/&gt;signature; this CHECKSIG position value is simply more of the same kind of&lt;br/&gt;data.  In simple Script templates (e.g. those with only one CHECKSIG&lt;br/&gt;operation) the signed position will be a fixed known value.  Complex Script&lt;br/&gt;templates are precisely the situations where you want to be careful about&lt;br/&gt;enforcement of conditions with your signature.&lt;br/&gt;&lt;br/&gt;As a side benefit, we get to eliminate CODESEPARATOR, removing a fairly&lt;br/&gt;awkward opcode from this script version.&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/20191127/8cc191b9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191127/8cc191b9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:21:51Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsqyklg2tvwnezg3p98lpd7z2mzuus0j9raveyyq40a8kge35c3dqgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596edzwv6</id>
    
      <title type="html">📅 Original date posted:2019-11-27 📝 Original message:Thanks ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsqyklg2tvwnezg3p98lpd7z2mzuus0j9raveyyq40a8kge35c3dqgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596edzwv6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs00jwa6jtzcdkdfahakv07kf3de9zgg7c86nnmw0ad282cazszwxcan7y22&#39;&gt;nevent1q…7y22&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-27&lt;br/&gt;📝 Original message:Thanks for this work Jeremy.&lt;br/&gt;&lt;br/&gt;I know we&amp;#39;ve discussed this before, but I&amp;#39;ll restate my concerns with&lt;br/&gt;adding a new &amp;#34;global&amp;#34; state variable to the Script interpreter for tracking&lt;br/&gt;whether the previous opcode was a push-data operation or not.  While it&lt;br/&gt;isn&amp;#39;t so hard to implement this in Bitcoin Core&amp;#39;s Script interpreter,&lt;br/&gt;adding a new global state variable adds that much more complexity to anyone&lt;br/&gt;trying to formally model Script semantics.  Perhaps one can argue that&lt;br/&gt;there is already (non-stack) state in Script, e.g. to deal with&lt;br/&gt;CODESEPARATOR, so why not add more?  But I&amp;#39;d argue that we should avoid&lt;br/&gt;making bad problems worse.&lt;br/&gt;&lt;br/&gt;If we instead make the CHECKTEMPLATEVERIFY operation fail if it isn&amp;#39;t&lt;br/&gt;preceded by (or alternatively followed by) an appropriate sized&lt;br/&gt;(canonical?) PUSHDATA constant, even in an unexecuted IF branch, then we&lt;br/&gt;can model the Script semantics by considering the&lt;br/&gt;PUSHDATA-CHECKTEMPLATEVERIFY pair as a single operation.  This allows&lt;br/&gt;implementations to consider improper use of CHECKTEMPLATEVERIFY as a&lt;br/&gt;parsing error (just as today unbalanced IF-ENDIF pairs can be modeled as a&lt;br/&gt;parsing error, even though that isn&amp;#39;t how it is implemented in Bitcoin&lt;br/&gt;Core).&lt;br/&gt;&lt;br/&gt;I admit we would lose your soft-fork upgrade path to reading values off the&lt;br/&gt;stack; however, in my opinion, this is a reasonable tradeoff.  When we are&lt;br/&gt;ready to add programmable covenants to Script, we&amp;#39;ll do so by adding CAT&lt;br/&gt;and operations to push transaction data right onto the stack, rather than&lt;br/&gt;posting a preimage to this template hash.&lt;br/&gt;&lt;br/&gt;Pleased to announce refinements to the BIP draft for OP_CHECKTEMPLATEVERIFY&lt;br/&gt;&amp;gt; (replaces previous OP_SECURETHEBAG BIP). Primarily:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) Changed the name to something more fitting and acceptable to the&lt;br/&gt;&amp;gt; community&lt;br/&gt;&amp;gt; 2) Changed the opcode specification to use the argument off of the stack&lt;br/&gt;&amp;gt; with a primitive constexpr/literal tracker rather than script lookahead&lt;br/&gt;&amp;gt; 3) Permits future soft-fork updates to loosen or remove &amp;#34;constexpr&amp;#34;&lt;br/&gt;&amp;gt; restrictions&lt;br/&gt;&amp;gt; 4) More detailed comparison to alternatives in the BIP, and why&lt;br/&gt;&amp;gt; OP_CHECKTEMPLATEVERIFY should be favored even if a future technique may&lt;br/&gt;&amp;gt; make it semi-redundant.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Please see:&lt;br/&gt;&amp;gt; BIP: &lt;a href=&#34;https://github.com/JeremyRubin/bips/blob/ctv/bip-ctv.mediawiki&#34;&gt;https://github.com/JeremyRubin/bips/blob/ctv/bip-ctv.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt; Reference Implementation:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/JeremyRubin/bitcoin/tree/checktemplateverify&#34;&gt;https://github.com/JeremyRubin/bitcoin/tree/checktemplateverify&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe this addresses all outstanding feedback on the design of this&lt;br/&gt;&amp;gt; opcode, unless there are any new concerns with these changes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m also planning to host a review workshop in Q1 2020, most likely in San&lt;br/&gt;&amp;gt; Francisco. Please fill out the form here&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://forms.gle/pkevHNj2pXH9MGee9&#34;&gt;https://forms.gle/pkevHNj2pXH9MGee9&lt;/a&gt; if you&amp;#39;re interested in participating&lt;br/&gt;&amp;gt; (even if you can&amp;#39;t physically attend).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And as a &amp;#34;but wait, there&amp;#39;s more&amp;#34;:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) RPC functions are under preliminary development, to aid in testing and&lt;br/&gt;&amp;gt; evaluation of OP_CHECKTEMPLATEVERIFY. The new command `sendmanycompacted`&lt;br/&gt;&amp;gt; shows one way to use OP_CHECKTEMPLATEVERIFY. See:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/JeremyRubin/bitcoin/tree/checktemplateverify-rpcs&#34;&gt;https://github.com/JeremyRubin/bitcoin/tree/checktemplateverify-rpcs&lt;/a&gt;.&lt;br/&gt;&amp;gt; `sendmanycompacted` is still under early design. Standard practices for&lt;br/&gt;&amp;gt; using OP_CHECKTEMPLATEVERIFY &amp;amp; wallet behaviors may be codified into a&lt;br/&gt;&amp;gt; separate BIP. This work generalizes even if an alternative strategy is used&lt;br/&gt;&amp;gt; to achieve the scalability techniques of OP_CHECKTEMPLATEVERIFY.&lt;br/&gt;&amp;gt; 2) Also under development are improvements to the mempool which will, in&lt;br/&gt;&amp;gt; conjunction with improvements like package relay, help make it safe to lift&lt;br/&gt;&amp;gt; some of the mempool&amp;#39;s restrictions on longchains specifically for&lt;br/&gt;&amp;gt; OP_CHECKTEMPLATEVERIFY output trees. See: &lt;a href=&#34;https://github.com/bitcoin/bitcoin/pull/17268&#34;&gt;https://github.com/bitcoin/bitcoin/pull/17268&lt;/a&gt;&lt;br/&gt;&amp;gt; This work offers an improvement irrespective of OP_CHECKTEMPLATEVERIFY&amp;#39;s&lt;br/&gt;&amp;gt; fate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Neither of these are blockers for proceeding with the BIP, as they are&lt;br/&gt;&amp;gt; ergonomics and usability improvements needed once/if the BIP is activated.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; See prior mailing list discussions here:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; *&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-May/016934.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-May/016934.html&lt;/a&gt;&lt;br/&gt;&amp;gt; *&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-June/016997.html&#34;&gt;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-June/016997.html&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks to the many developers who have provided feedback on iterations of&lt;br/&gt;&amp;gt; this design.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jeremy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; @JeremyRubin &amp;lt;&lt;a href=&#34;https://twitter.com/JeremyRubin&amp;gt&#34;&gt;https://twitter.com/JeremyRubin&amp;gt&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/20191127/4bb82570/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191127/4bb82570/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:21:50Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsv7yx5xgh8qcyq0uey0dj8skx2xnf0uj2h89kyehcjyqepccenytszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596agffgm</id>
    
      <title type="html">📅 Original date posted:2019-11-08 📝 Original message:I do ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsv7yx5xgh8qcyq0uey0dj8skx2xnf0uj2h89kyehcjyqepccenytszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596agffgm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs00nj0f3fxuh74j2mvdj9vwjrdflqs320caszv23jxsgm8ryj0vkq4d9y92&#39;&gt;nevent1q…9y92&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-08&lt;br/&gt;📝 Original message:I do like the idea of length prefixing the witness program.  I will note&lt;br/&gt;that the 1 byte witness version is really more like a 1 character witness&lt;br/&gt;version.  There are 17 different segwit versions and there are 32&lt;br/&gt;characters in the bech32 alphabet.  That leaves 15 unused characters that&lt;br/&gt;we can use for assigning new meanings too.&lt;br/&gt;&lt;br/&gt;That said, it is probably most sensible to define a new&lt;br/&gt;human-readable-prefix for length prefixed bitcoin witness programs.  &amp;#34;btc1&amp;#34;&lt;br/&gt;anyone?&lt;br/&gt;&lt;br/&gt;On Fri, Nov 8, 2019 at 12:12 AM ZmnSCPxj 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; Good morning Pieter, and all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Can we modify Bech32 SegWit address format for version 1 and above as&lt;br/&gt;&amp;gt; below?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;       * The data-part values:&lt;br/&gt;&amp;gt;       ** 1 byte: the witness version&lt;br/&gt;&amp;gt;     &#43; ** If the witness version is non-zero, 1 byte: the length of the&lt;br/&gt;&amp;gt; witness program.&lt;br/&gt;&amp;gt;       ** A conversion of the 2-to-40-byte witness program (as defined by [&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki&lt;/a&gt; BIP141])&lt;br/&gt;&amp;gt; to base32:&lt;br/&gt;&amp;gt;       *** Start with the bits of the witness program, most significant bit&lt;br/&gt;&amp;gt; per byte first.&lt;br/&gt;&amp;gt;       *** Re-arrange those bits into groups of 5, and pad with zeroes at&lt;br/&gt;&amp;gt; the end if needed.&lt;br/&gt;&amp;gt;       *** Translate those bits to characters using the table above.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This retains the ability of a bech32 address to specify any valid witness&lt;br/&gt;&amp;gt; length and allows future version 1 addresses with lengths other than 32,&lt;br/&gt;&amp;gt; while closing this malleation.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Older software being given the modified v1 address format would mis-send&lt;br/&gt;&amp;gt; it to the wrong witness program, however.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Alternately we could just keep using version 0 in the address format&lt;br/&gt;&amp;gt; forever.&lt;br/&gt;&amp;gt; The requirement would be to ensure that SegWit vN (N &amp;gt;= 1) output witness&lt;br/&gt;&amp;gt; programs would have a data-part value encoded as below:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     * The data-part values:&lt;br/&gt;&amp;gt;     ** 1 byte: legacy witness version, which must always be 0.&lt;br/&gt;&amp;gt;     ** 1 byte: actual witness version, which must be non-zero.&lt;br/&gt;&amp;gt;     ** 1 byte: padding length: 0 or 1.&lt;br/&gt;&amp;gt;     ** If padding length is 1, 1 byte: padding, which must be 0.&lt;br/&gt;&amp;gt;     ** 1 byte: witness program length.&lt;br/&gt;&amp;gt;     ** variable: witness program.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A writer for a v1 or later address would initially set an empty padding,&lt;br/&gt;&amp;gt; then compute:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;       1 // actual witness version&lt;br/&gt;&amp;gt;     &#43; 1 // padding length&lt;br/&gt;&amp;gt;     &#43; 1 // witness length&lt;br/&gt;&amp;gt;     &#43; witness_length&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the above sum is 20 or 32, then the writer selects a non-zero padding&lt;br/&gt;&amp;gt; and inserts the padding byte so that the above sum is now 21 or 33.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To a reader that understands only bech32 v0, such an encoding would look&lt;br/&gt;&amp;gt; like a SegWit v0 invalid-program-length, and be rejected.&lt;br/&gt;&amp;gt; A reader which understands the above protocol would, instead of rejecting&lt;br/&gt;&amp;gt; a SegWit v0 invalid-program-length, instead attempt to parse it as above&lt;br/&gt;&amp;gt; first, and consider it as SegWit v1 or higher if it was parsed correctly as&lt;br/&gt;&amp;gt; above.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The above proposal is of course ridiculous and I am now currently running&lt;br/&gt;&amp;gt; diagnostics on my processing units to see if further glitches occur in test&lt;br/&gt;&amp;gt; reasoning skills.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&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/20191108/7280da70/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191108/7280da70/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:21:39Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs02fd3mc6vk969ksxvgqgz70v3le5cshv67ryrsmm5kshgfnk6tgszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966uh8qk</id>
    
      <title type="html">📅 Original date posted:2019-06-26 📝 Original message:I have ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs02fd3mc6vk969ksxvgqgz70v3le5cshv67ryrsmm5kshgfnk6tgszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5966uh8qk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd0gdnudkkmwl0ranlqzs8z6nr6cvdwjwt2zznxqjhcynn6r03zhcc0wfzc&#39;&gt;nevent1q…wfzc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-26&lt;br/&gt;📝 Original message:I have a comment about the &amp;#39;input_index&amp;#39; of the transaction digest for&lt;br/&gt;taproot signatures.  It is currently listed as 2 bytes.  I think it would&lt;br/&gt;be better to expand that to 4 bytes.&lt;br/&gt;The two byte limit is derived from the block size / weight limit, which&lt;br/&gt;limits the maximum size of a transaction, which in turn, due to a minimum&lt;br/&gt;size of an inputs, places a limit on the maximum number of inputs.&lt;br/&gt;&lt;br/&gt;However, I think it is a mistake to mix limits from the block layer into&lt;br/&gt;the transaction layer of the consensus rules.  For example, I believe that,&lt;br/&gt;as it stands currently, if we wanted to hardfork an increase in the block&lt;br/&gt;weight limit, doing so wouldn&amp;#39;t have any impact on the transaction layer&lt;br/&gt;and we could transparently manage larger transactions with the current&lt;br/&gt;transaction format [2].  However if we start incorporating the block limits&lt;br/&gt;into the transaction layer, then we run the risk of such a hard fork&lt;br/&gt;needing to also make consensus changes in the transaction&lt;br/&gt;format/interpretation if we wanted to handle larger transaction sizes,&lt;br/&gt;which, while doable, wouldn&amp;#39;t be so great.&lt;br/&gt;&lt;br/&gt;The current transaction format limits the number of inputs (and the number&lt;br/&gt;of outputs) to 2^32-1 or less [1].  So using 4 bytes for the &amp;#39;input_index&amp;#39;&lt;br/&gt;will suffice.&lt;br/&gt;&lt;br/&gt;Given that adding 2 bytes to the signed transaction digest isn&amp;#39;t a big&lt;br/&gt;deal, it&amp;#39;s probably better just to keep block limits and transaction limits&lt;br/&gt;separate.&lt;br/&gt;&lt;br/&gt;[1]The var-integer field for the number of inputs (and the number of&lt;br/&gt;outputs) in a transaction looks like it should allow upto 2^64-1 inputs;&lt;br/&gt;however this is an illusion.  The P2P rules dictate that these values are&lt;br/&gt;immediately taken modulo 2^32 after decoding.  For example, if the number&lt;br/&gt;of inputs is a var-integer encoding of 0x0100000001, it is actually just a&lt;br/&gt;non-canonical way of encoding that there is 1 input.  Try this at home!&lt;br/&gt;&lt;br/&gt;[2]If we were to hardfork an increase in the block weight limit, we would&lt;br/&gt;probably want to still keep the limit on the size of transactions that&lt;br/&gt;consume legacy UTXOs in order to avoid the quadratic computation problems&lt;br/&gt;that plagues the legacy transaction digest.&lt;br/&gt;&lt;br/&gt;On Mon, May 6, 2019 at 2:36 PM Pieter Wuille 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 everyone,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Here are two BIP drafts that specify a proposal for a Taproot&lt;br/&gt;&amp;gt; softfork. A number of ideas are included:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Taproot to make all outputs and cooperative spends indistinguishable&lt;br/&gt;&amp;gt; from eachother.&lt;br/&gt;&amp;gt; * Merkle branches to hide the unexecuted branches in scripts.&lt;br/&gt;&amp;gt; * Schnorr signatures enable wallet software to use key&lt;br/&gt;&amp;gt; aggregation/thresholds within one input.&lt;br/&gt;&amp;gt; * Improvements to the signature hashing algorithm (including signing&lt;br/&gt;&amp;gt; all input amounts).&lt;br/&gt;&amp;gt; * Replacing OP_CHECKMULTISIG(VERIFY) with OP_CHECKSIGADD, to support&lt;br/&gt;&amp;gt; batch validation.&lt;br/&gt;&amp;gt; * Tagged hashing for domain separation (avoiding issues like&lt;br/&gt;&amp;gt; CVE-2012-2459 in Merkle trees).&lt;br/&gt;&amp;gt; * Extensibility through leaf versions, OP_SUCCESS opcodes, and&lt;br/&gt;&amp;gt; upgradable pubkey types.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The BIP drafts can be found here:&lt;br/&gt;&amp;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;&amp;gt; specifies the transaction input spending rules.&lt;br/&gt;&amp;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;&amp;gt; specifies the changes to Script inside such spends.&lt;br/&gt;&amp;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;&amp;gt; is the Schnorr signature proposal that was discussed earlier on this&lt;br/&gt;&amp;gt; list (See&lt;br/&gt;&amp;gt; &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;&amp;gt; )&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An initial reference implementation of the consensus changes, plus&lt;br/&gt;&amp;gt; preliminary construction/signing tests in the Python framework can be&lt;br/&gt;&amp;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;&amp;gt; together, excluding the Schnorr signature module in libsecp256k1, the&lt;br/&gt;&amp;gt; consensus changes are around 520 LoC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; While many other ideas exist, not everything is incorporated. This&lt;br/&gt;&amp;gt; includes several ideas that can be implemented separately without loss&lt;br/&gt;&amp;gt; of effectiveness. One such idea is a way to integrate SIGHASH_NOINPUT,&lt;br/&gt;&amp;gt; which we&amp;#39;re working on as an independent proposal.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The document explains basic wallet operations, such as constructing&lt;br/&gt;&amp;gt; outputs and signing. However, a wide variety of more complex&lt;br/&gt;&amp;gt; constructions exist. Standardizing these is useful, but out of scope&lt;br/&gt;&amp;gt; for now. It is likely also desirable to define extensions to PSBT&lt;br/&gt;&amp;gt; (BIP174) for interacting with Taproot. That too is not included here.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Pieter&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/20190626/7223bf9f/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190626/7223bf9f/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2unk5unyay932c2lgrswrhrn5w72qmrkzzzlrxcwp5q89xe54xvszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5960mw4qz</id>
    
      <title type="html">📅 Original date posted:2019-06-28 📝 Original message:Hmm? ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2unk5unyay932c2lgrswrhrn5w72qmrkzzzlrxcwp5q89xe54xvszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5960mw4qz" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvr42pv6latql53gapeqltu82agwm3spfkmadyp2wj89px3v75ldgtc3dpp&#39;&gt;nevent1q…3dpp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-28&lt;br/&gt;📝 Original message:Hmm? If I&amp;#39;m following what you mean, that&amp;#39;s not the P2P rules, it&amp;#39;s the&lt;br/&gt;&amp;gt; Unserialize code, in particular:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   compat/assumptions.h:52:static_assert(sizeof(int) == 4, &amp;#34;32-bit int&lt;br/&gt;&amp;gt; assumed&amp;#34;);&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   serialize.h:289:uint64_t ReadCompactSize(Stream&amp;amp; is)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   serialize.h-679-template&amp;lt;typename Stream, unsigned int N, typename T,&lt;br/&gt;&amp;gt; typename V&amp;gt;&lt;br/&gt;&amp;gt;   serialize.h-680-void Unserialize_impl(Stream&amp;amp; is, prevector&amp;lt;N, T&amp;gt;&amp;amp; v,&lt;br/&gt;&amp;gt; const V&amp;amp;)&lt;br/&gt;&amp;gt;   serialize.h-681-{&lt;br/&gt;&amp;gt;   serialize.h-682-    v.clear();&lt;br/&gt;&amp;gt;   serialize.h:683:    unsigned int nSize = ReadCompactSize(is);&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   (and other Unserialize_impl implementations)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, ReadCompactSize throws &amp;#34;size too large&amp;#34; if the return value is&lt;br/&gt;&amp;gt; greater than MAX_SIZE == 0x02000000 =~ 33.5M, which prior to the implicit&lt;br/&gt;&amp;gt; cast to 32 bits in Unserialize_impl. And it looks like that check&amp;#39;s been&lt;br/&gt;&amp;gt; there since Satoshi...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So as far as I can see, that encoding&amp;#39;s just unsupported/invalid, rather&lt;br/&gt;&amp;gt; than equivalent/non-canonical?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Thanks for this correction!  I totally missed that MAX_SIZE == 0x02000000.&lt;br/&gt;I think I mistook it for SIZE_MAX when reviewing this, or just didn&amp;#39;t&lt;br/&gt;notice it at all.&lt;br/&gt;&lt;br/&gt;Cheers,&lt;br/&gt;&amp;gt; aj&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/20190628/e7442a36/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190628/e7442a36/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:44Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs9mlqxap44pf5jknx4femwlf7u7x49yqtfm246refa5jugj0c7a9szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596psef3r</id>
    
      <title type="html">📅 Original date posted:2019-06-09 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs9mlqxap44pf5jknx4femwlf7u7x49yqtfm246refa5jugj0c7a9szyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596psef3r" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8aq2p4vemr773wjrk8zmj9dklkkcr0expstp8z22zmhqt5zhy6ls3h5rw9&#39;&gt;nevent1q…5rw9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-09&lt;br/&gt;📝 Original message:On Sat, Jun 8, 2019 at 11:59 PM Rusty Russell &amp;lt;rusty at rustcorp.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;#34;Russell O&amp;#39;Connor&amp;#34; &amp;lt;roconnor at blockstream.io&amp;gt; writes:&lt;br/&gt;&amp;gt; &amp;gt; Hi Rusty,&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; On Sun, Jun 2, 2019 at 9:21 AM Rusty Russell via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; The new &amp;#34;emergency RBF&amp;#34; rule:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;  6. If the original transaction was not in the first 4,000,000 weight&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;     units of the fee-ordered mempool and the replacement transaction is,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;     rules 3, 4 and 5 do not apply.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; This means:&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt; 3. This proposal does not open any significant new ability to RBF spam,&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;    since it can (usually) only be used once.  IIUC bitcoind won&amp;#39;t&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;    accept more that 100 descendents of an unconfirmed tx anyway.&lt;br/&gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Is it not possible for Alice to grief Bob&amp;#39;s node by alternating RBFing&lt;br/&gt;&amp;gt; two&lt;br/&gt;&amp;gt; &amp;gt; transactions, each one placing itself at the bottom of Bob&amp;#39;s top&lt;br/&gt;&amp;gt; 4,000,000&lt;br/&gt;&amp;gt; &amp;gt; weight mempool which pushes the other one below the top 4,000,000 weight,&lt;br/&gt;&amp;gt; &amp;gt; and then repeating with the other transaction?  It might be possible to&lt;br/&gt;&amp;gt; &amp;gt; amend this proposal to partially mitigate this.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Good point.  This will cost Alice approximately one tx every block, but&lt;br/&gt;&amp;gt; that may still be annoying.  My intuition says it&amp;#39;s hard to play these&lt;br/&gt;&amp;gt; games across swathes of non-direct peers, since mempools are in constant&lt;br/&gt;&amp;gt; flux and propagation is a bit random.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; What mitigations were you thinking?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;For example,  &amp;#34;If the original transaction was not in the first 4,000,000&lt;br/&gt;weight units of the fee-ordered mempool and the replacement transaction is&lt;br/&gt;in the first 2,000,000 weight units....&amp;#34; might adequately address the issue.&lt;br/&gt;There are probably other ways as well.&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/20190609/e1605c53/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190609/e1605c53/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:34Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsdtwkrxuka8dptkjwat9u7ev7dgz3e4sun9vfsem4cam87w3jcepqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596xze5jk</id>
    
      <title type="html">📅 Original date posted:2019-06-03 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsdtwkrxuka8dptkjwat9u7ev7dgz3e4sun9vfsem4cam87w3jcepqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596xze5jk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfn9u74zl24rd5t920j53vvzpxs95yhaduwzcxh9updup2wc7njqcu52pah&#39;&gt;nevent1q…2pah&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-03&lt;br/&gt;📝 Original message:Hi Rusty,&lt;br/&gt;&lt;br/&gt;On Sun, Jun 2, 2019 at 9:21 AM Rusty Russell 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; The new &amp;#34;emergency RBF&amp;#34; rule:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;  6. If the original transaction was not in the first 4,000,000 weight&lt;br/&gt;&amp;gt;     units of the fee-ordered mempool and the replacement transaction is,&lt;br/&gt;&amp;gt;     rules 3, 4 and 5 do not apply.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This means:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 3. This proposal does not open any significant new ability to RBF spam,&lt;br/&gt;&amp;gt;    since it can (usually) only be used once.  IIUC bitcoind won&amp;#39;t&lt;br/&gt;&amp;gt;    accept more that 100 descendents of an unconfirmed tx anyway.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Is it not possible for Alice to grief Bob&amp;#39;s node by alternating RBFing two&lt;br/&gt;transactions, each one placing itself at the bottom of Bob&amp;#39;s top 4,000,000&lt;br/&gt;weight mempool which pushes the other one below the top 4,000,000 weight,&lt;br/&gt;and then repeating with the other transaction?  It might be possible to&lt;br/&gt;amend this proposal to partially mitigate this.&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/20190603/66962193/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190603/66962193/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:33Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqswedq9e5ffz33zwhvhrqsza8mmncmm07p33nxjp0cs7qyxwm7xfcgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968sz8j3</id>
    
      <title type="html">📅 Original date posted:2019-06-25 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqswedq9e5ffz33zwhvhrqsza8mmncmm07p33nxjp0cs7qyxwm7xfcgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968sz8j3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9tt8rlynxls6glpapkw6mwa3jmj3rulhld8dme898rzqjndgh7xqmpazdc&#39;&gt;nevent1q…azdc&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-25&lt;br/&gt;📝 Original message:Bitcoin Core is somewhat outside my core competence, but the various&lt;br/&gt;OP_PUSHDATA are already multi-byte opcodes and GetOp already has a data&lt;br/&gt;return parameter that is suitable for returning the payload of an immediate&lt;br/&gt;32-byte data variant of OP_SECURETHEBAG.  All that I expect is needed is to&lt;br/&gt;ensure that nowhere else is using a non-empty data-field as a proxy for a&lt;br/&gt;non-empty push operation and fixing any such occurrences if they exist.&lt;br/&gt;(AFAIKT there are only a handful of calls to GetOp).&lt;br/&gt;&lt;br/&gt;It is probably worth updating the tapscript implementation to better&lt;br/&gt;prepare it for new uses of OP_SUCCESSx.  Parsing should halt when an&lt;br/&gt;OP_SUCCESSx is encountered, by having GetScriptOp advance the pc to end&lt;br/&gt;after encountering such a code (decoding Script is no longer meaningful&lt;br/&gt;after an OP_SUCCESS is encountered).  However, that means that GetScriptOp&lt;br/&gt;needs to know what version of script it is expected to be parsing.  This&lt;br/&gt;could be done by sending down some versioning flags, possibly by adding a&lt;br/&gt;versioning field to CScript that can be initialized @&lt;br/&gt;&lt;a href=&#34;https://github.com/sipa/bitcoin/blob/7ddc7027b2cbdd11416809400c588e585a8b44ed/src/script/interpreter.cpp#L1679&#34;&gt;https://github.com/sipa/bitcoin/blob/7ddc7027b2cbdd11416809400c588e585a8b44ed/src/script/interpreter.cpp#L1679&lt;/a&gt;&lt;br/&gt;or some other mechanism (and at the same time perhaps having GetSigOpCount&lt;br/&gt;return 0 for tapscript, since counting sigops is not really meaningful in&lt;br/&gt;tapscript). There are probably other reasonable approaches too (e.g your&lt;br/&gt;option 2 below).  I could write some code to illustrate what I&amp;#39;m thinking&lt;br/&gt;if you feel that would be helpful and I do think such changes around&lt;br/&gt;OP_SUCCESS should be implemented regardless of whether we move forward with&lt;br/&gt;OP_SECURETHEBAG or not.&lt;br/&gt;&lt;br/&gt;It is probably worth doing this properly the first time around if we are&lt;br/&gt;going to do it at all.&lt;br/&gt;&lt;br/&gt;P.S. OP_RESERVED1 has been renamed to OP_SUCCESS137 in bip-tapscript.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Mon, Jun 24, 2019 at 6:47 PM Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I agree in principal, but I think that&amp;#39;s just a bit of &amp;#39;how things are&amp;#39;&lt;br/&gt;&amp;gt; versus how they should be.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I disagree that we get composability semantics because of OP_IF. E.g., the&lt;br/&gt;&amp;gt; script &amp;#34;OP_IF .... &amp;#34; and &amp;#34;OP_END&amp;#34; are two scripts that separately are&lt;br/&gt;&amp;gt; invalid as parsed, but together are valid. OP_IF already imposes some&lt;br/&gt;&amp;gt; lookahead functionality... but as I understand it, it may be feasible to&lt;br/&gt;&amp;gt; get rid of OP_IF for tapscripts anyways. Also in this bucket are P2SH and&lt;br/&gt;&amp;gt; segwit, which I think breaks this because the concat of two p2sh scripts or&lt;br/&gt;&amp;gt; segwit scripts is not the same as them severally.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I also think that the OP_SECURETHEBAG use of pushdata is a backwards&lt;br/&gt;&amp;gt; compatible hack: we can always later redefine the parser to parse&lt;br/&gt;&amp;gt; OP_SECURETHEBAG as the 34 byte opcode, recapturing the purity of the&lt;br/&gt;&amp;gt; semantics. We can also fix it to not use an extra byte in a future tapleaf&lt;br/&gt;&amp;gt; version.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; In any case, I don&amp;#39;t disagree with figuring out what patching the parser&lt;br/&gt;&amp;gt; to handle multibyte opcodes would look like. If that sort of upgrade-path&lt;br/&gt;&amp;gt; were readily available when I wrote this, it&amp;#39;s how I would have done it.&lt;br/&gt;&amp;gt; There are two approaches I looked at mostly:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) Adding flags to GetOp to change how it parses&lt;br/&gt;&amp;gt;   a) Most of the same code paths used for new and old script&lt;br/&gt;&amp;gt;   b) Higher risk of breaking something in old script style/downstream&lt;br/&gt;&amp;gt;   c) Cleans up only one issue (multibyte opcodes) leaves other warts in&lt;br/&gt;&amp;gt; place&lt;br/&gt;&amp;gt;   d) less bikesheddable design (mostly same as old script)&lt;br/&gt;&amp;gt;   e) code not increased in size&lt;br/&gt;&amp;gt; 2) Adding a completely new interpreter for Tapscript&lt;br/&gt;&amp;gt;   a) Fork the existing interpreter code&lt;br/&gt;&amp;gt;   b) For all places where scripts are run, switch based on if it is&lt;br/&gt;&amp;gt; tapscript or not&lt;br/&gt;&amp;gt;   c) Can clean up various semantics, can even do fancier things like&lt;br/&gt;&amp;gt; huffman encode opcodes to less than a byte&lt;br/&gt;&amp;gt;   d) Can clearly separate parsing the script from executing it&lt;br/&gt;&amp;gt;   e) Can improve versioning techniques&lt;br/&gt;&amp;gt;   f) Low risk of breaking something in old script style/downstream&lt;br/&gt;&amp;gt;   g) Increases amount of code substantially&lt;br/&gt;&amp;gt;   h) Bikesheddable design (everything is on the table).&lt;br/&gt;&amp;gt;   i) probably a better general mechanism for future changes to script&lt;br/&gt;&amp;gt; parsing, less consensus risk&lt;br/&gt;&amp;gt;   j) More compatible with templated script as well.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If not clear, I think that 2 is probably a better approach, but I&amp;#39;m&lt;br/&gt;&amp;gt; worried that 2.h means this would take a much longer time to implement.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2 can be segmented into two components:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) the architecture of script parser versioning&lt;br/&gt;&amp;gt; 2) the actual new script version&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that component 1 can be relatively non controversial, thankfully,&lt;br/&gt;&amp;gt; using tapleaf versions (the architecture question is more around code&lt;br/&gt;&amp;gt; structure). A proof of concept of this would be to have a fork that uses&lt;br/&gt;&amp;gt; two independent, but identical, script parsers.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Part two of this plan would be to modify one of the versions&lt;br/&gt;&amp;gt; substantially. I&amp;#39;m not sure what exists on the laundry list, but I think it&lt;br/&gt;&amp;gt; would be possible to pick a few worthwhile cleanups. E.g.:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1) Multibyte opcodes&lt;br/&gt;&amp;gt; 2) Templated scripts&lt;br/&gt;&amp;gt; 3) Huffman Encoding opcodes&lt;br/&gt;&amp;gt; 4) OP_IF handling (maybe just get rid of it in favor of conditional Verify&lt;br/&gt;&amp;gt; semantics)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; And make it clear that because we can add future script versions fairly&lt;br/&gt;&amp;gt; easily, this is a sufficient step.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Does that seem in line with your understanding of how this might be done?&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/20190625/870a1cdd/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190625/870a1cdd/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:30Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsraj5r2ree4jfw2cqvxng5uy23n9z8r5fnjqqm5nnfvntpwsgmsrqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967h6unn</id>
    
      <title type="html">📅 Original date posted:2019-06-24 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsraj5r2ree4jfw2cqvxng5uy23n9z8r5fnjqqm5nnfvntpwsgmsrqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967h6unn" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd2xk99r4wqkljznxl0qfetkcl8wuuytav7g9tpcwdj3pc8n028vckllgvf&#39;&gt;nevent1q…lgvf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-24&lt;br/&gt;📝 Original message:I suspect that your conjecture is true.  And given that it is plausible&lt;br/&gt;that we would want to add an opcode to tweak public keys, it seems like a&lt;br/&gt;reason design to avoid accidental covenants.&lt;br/&gt;(That said, I strongly prefer that the SECURETHEBAG data be the 32-bytes&lt;br/&gt;immediately following the opcode rather than a OP_PUSHDATA, and I&amp;#39;d be&lt;br/&gt;willing to help code this up (see below)).&lt;br/&gt;&lt;br/&gt;On Mon, Jun 24, 2019 at 2:07 PM Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Do you think the following hypothesis is more or less true:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; H: There is no set of pure extensions* to script E such that enabling E&lt;br/&gt;&amp;gt; and OP_SECURETHEBAG as proposed enables recursive covenants, but E alone&lt;br/&gt;&amp;gt; does not enable recursive covenants?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Of course there are things that specifically are specifically designed&lt;br/&gt;&amp;gt; to switch on if OP_SECURETHEBAG, so pure means normal things like OP_CAT&lt;br/&gt;&amp;gt; that are a function of the arguments on the stack or hashed txn data.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is the main draw of the design I proposed, it should be highly&lt;br/&gt;&amp;gt; improbable or impossible to accidentally introduce more behavior than&lt;br/&gt;&amp;gt; intended with a new opcode.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that given that H is not true for the stack reading version of the&lt;br/&gt;&amp;gt; opcode, we should avoid doing it unless strongly motivated, so as to permit&lt;br/&gt;&amp;gt; more flexibility for which opcodes we can add in the future without&lt;br/&gt;&amp;gt; introducing recursion unless it is explicitly intended.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;On Sat, Jun 1, 2019 at 12:47 PM Jeremy 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; A particularly useful topic of discussion is how best to eliminate the&lt;br/&gt;&amp;gt; PUSHDATA and treat OP_SECURETHEBAG like a pushdata directly. I thought&lt;br/&gt;&amp;gt; about how the interpreter works and is implemented and couldn&amp;#39;t come up&lt;br/&gt;&amp;gt; with something noninvasive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;We shouldn&amp;#39;t be using the complexity of the changes to the Bitcoin Core a&lt;br/&gt;measure of the complexity of a proposal.  That is looking the issue from&lt;br/&gt;the wrong side.  If we measure the complexity of Script proposals by how&lt;br/&gt;hard it is to change Bitcoin Core, what will happen is more and more of the&lt;br/&gt;incidental details of Bitcoin Core&amp;#39;s implementation will be pulled into the&lt;br/&gt;semantics of Script (e.g. the fact that surrounding opcode values are&lt;br/&gt;readily available in Bitcoin Core&amp;#39;s particular implementation of its Script&lt;br/&gt;interpreter).  Instead we should use the complexity of how hard it is to&lt;br/&gt;reason about the new Script semantics.&lt;br/&gt;&lt;br/&gt;The peeking semantics of OP_SECURETHEBAG is particularly awful because it&lt;br/&gt;more-or-less breaks the fact that Bitcoin Script can be decomposed into&lt;br/&gt;individual units of &amp;#34;opcodes&amp;#34; whose semantics and be individually&lt;br/&gt;described, and it harms the composability of Bitcoin Script where you can&lt;br/&gt;divide the script between any opcodes and the semantics of the&lt;br/&gt;concatenation of those two scripts is simply the composition of the&lt;br/&gt;semantics of the two halves.  (For those interested in formal semantics,&lt;br/&gt;what we have here is a monoid homomorphism from list of opcodes (syntax) to&lt;br/&gt;stack transformation functions (with side-effects) under (Kleisli)&lt;br/&gt;composition (semantics).) Being able to decompose a Bitcoin Script this way&lt;br/&gt;and reasoning about components is how one would reason about Bitcoin Script&lt;br/&gt;in practice.  (Technically the structure is more involved than a list of&lt;br/&gt;opcodes due to OP_IF, and instead you get a railroad diagram&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Syntax_diagram&amp;gt&#34;&gt;https://en.wikipedia.org/wiki/Syntax_diagram&amp;gt&lt;/a&gt;;).&lt;br/&gt;&lt;br/&gt;Putting the 32 bytes of data required by OP_SECURETHEBAG immediately after&lt;br/&gt;the opcode, like how OP_PUSHDATA* works, is a superior design choice.  It&lt;br/&gt;lets us treat the opcodes and its immediate data as an atomic unit when&lt;br/&gt;reasoning about Script and removes the need to define what happens when&lt;br/&gt;OP_SECURETHEBAG is not followed by an OP_PUSDATA.&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/20190624/9d04f319/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190624/9d04f319/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:29Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0suzhl4s9wqxu33ngtn08ac988s3p2dl0rknytt5y0s5amz9d5pszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967h5eel</id>
    
      <title type="html">📅 Original date posted:2019-06-24 📝 Original ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0suzhl4s9wqxu33ngtn08ac988s3p2dl0rknytt5y0s5amz9d5pszyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5967h5eel" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxmzzpksk9lg007u55t29ur47rlefnhesaxuf8hfzk4u4xkddfgessaw8a8&#39;&gt;nevent1q…w8a8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-24&lt;br/&gt;📝 Original message:OP_SECURETHEBAG doesn&amp;#39;t include the script being executed (i.e the&lt;br/&gt;scriptPubKey specified in the output that is redeemed by this input) in its&lt;br/&gt;hash like ordinary signatures do&lt;br/&gt;&amp;lt;&lt;a href=&#34;https://github.com/bitcoin/bitcoin/blob/master/src/script/interpreter.cpp#L1271&amp;gt&#34;&gt;https://github.com/bitcoin/bitcoin/blob/master/src/script/interpreter.cpp#L1271&amp;gt&lt;/a&gt;;.&lt;br/&gt;Of course, this ScriptPubKey is indirectly committed to through the input&amp;#39;s&lt;br/&gt;prevoutpoint.  However Script isn&amp;#39;t able to reconstruct this script being&lt;br/&gt;executed from the prevoutpoint in tapscript without an implementation of&lt;br/&gt;public key tweeking in Bitcoin Script.&lt;br/&gt;&lt;br/&gt;On Sun, Jun 23, 2019 at 2:41 AM Jeremy Rubin &amp;lt;jeremy.l.rubin at gmail.com&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Can you clarify this comment?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We do in fact commit to the script and scriptsig itself (not the witness&lt;br/&gt;&amp;gt; stack) in OP_SECURETHEBAG (unless I&amp;#39;m missing what you meant)?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Jun 20, 2019, 10:59 AM Russell O&amp;#39;Connor 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; Just to be clear, while OP_CHECKTXDIGESTVERIFY would enable this style&lt;br/&gt;&amp;gt;&amp;gt; of covenants if it pulled data from the stack, the OP_SECURETHEBAG&lt;br/&gt;&amp;gt;&amp;gt; probably cannot create covenants even if it were to pull the data from the&lt;br/&gt;&amp;gt;&amp;gt; stack unless some OP_TWEEKPUBKEY operation is added to Script because the&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;commitment of the script itself&amp;#34; isn&amp;#39;t part of the OP_SECURETHEBAG.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; So with regards to OP_SECURETHEBAG, I am also &amp;#34;not really seeing any&lt;br/&gt;&amp;gt;&amp;gt; reason to complicate the spec to ensure the digest is precommitted as part&lt;br/&gt;&amp;gt;&amp;gt; of the opcode.&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Thu, Jun 6, 2019 at 3:33 AM ZmnSCPxj via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Good morning aj,&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; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Wednesday, June 5, 2019 5:30 PM, Anthony Towns via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Fri, May 31, 2019 at 10:35:45PM -0700, Jeremy via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;gt; OP_CHECKOUTPUTSHASHVERIFY is retracted in favor of OP_SECURETHEBAG*.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I think you could generalise that slightly and make it fit in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; with the existing opcode naming by calling it something like&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; &amp;#34;OP_CHECKTXDIGESTVERIFY&amp;#34; and pull a 33-byte value from the stack,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; consisting of a sha256 hash and a sighash-byte, and adding a new&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; sighash&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; value corresponding to the set of info you want to include in the hash,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; which I think sounds a bit like &amp;#34;SIGHASH_EXACTLY_ONE_INPUT |&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; SIGHASH_ALL&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; FWIW, I&amp;#39;m not really seeing any reason to complicate the spec to ensure&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; the digest is precommitted as part of the opcode.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I believe in combination with `OP_LEFT` and `OP_CAT` this allows&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Turing-complete smart contracts, in much the same way as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; `OP_CHECKSIGFROMSTACK`?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Pass in the spent transaction (serialised for txid) and the spending&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction (serialised for sighash) as part of the witness of the spending&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Script verifies that the spending transaction witness value is indeed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the spending transaction by `OP_SHA256 &amp;lt;SIGHASH_ALL&amp;gt; OP_SWAP OP_CAT&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; OP_CHECKTXDIGESTVERIFY`.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Script verifies the spent transaction witness value is indeed the spent&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction by hashing it, then splitting up the hash with `OP_LEFT` into&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bytes, and comparing the bytes to the bytes in the input of the spending&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; transaction witness value (txid being the bytes in reversed order).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Then the Script can extract a commitment of itself by extracting the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; output of the spent transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This lets the Script check that the spending transaction also pays to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the same script.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The Script can then access a state value, for example from an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; `OP_RETURN` output of the spent transaction, and enforce that a correct&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; next-state is used in the spending transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If the state is too large to fit in a standard `OP_RETURN`, then the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; current state can be passed in as a witness and validated against a hash&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; commitment in an `OP_RETURN` output.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I believe this is the primary reason against not pulling data from the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; stack.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190624/f738daa1/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190624/f738daa1/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:28Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs8uqh55288lxv927g4ryncs7rvy8r9kea096rm674tjy0jwkxx4agzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5962qhq7r</id>
    
      <title type="html">📅 Original date posted:2019-06-18 📝 Original message:Just ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs8uqh55288lxv927g4ryncs7rvy8r9kea096rm674tjy0jwkxx4agzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5962qhq7r" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs88eq4yalqljalh0j9hepcvyz65xvvkuw0y3ktwwef8p2azusv7wc6e3g9n&#39;&gt;nevent1q…3g9n&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-18&lt;br/&gt;📝 Original message:Just to be clear, while OP_CHECKTXDIGESTVERIFY would enable this style of&lt;br/&gt;covenants if it pulled data from the stack, the OP_SECURETHEBAG probably&lt;br/&gt;cannot create covenants even if it were to pull the data from the stack&lt;br/&gt;unless some OP_TWEEKPUBKEY operation is added to Script because the&lt;br/&gt;&amp;#34;commitment of the script itself&amp;#34; isn&amp;#39;t part of the OP_SECURETHEBAG.&lt;br/&gt;&lt;br/&gt;So with regards to OP_SECURETHEBAG, I am also &amp;#34;not really seeing any reason&lt;br/&gt;to complicate the spec to ensure the digest is precommitted as part of the&lt;br/&gt;opcode.&amp;#34;&lt;br/&gt;&lt;br/&gt;On Thu, Jun 6, 2019 at 3:33 AM ZmnSCPxj 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; Good morning aj,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sent with ProtonMail Secure Email.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐&lt;br/&gt;&amp;gt; On Wednesday, June 5, 2019 5:30 PM, Anthony Towns 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; On Fri, May 31, 2019 at 10:35:45PM -0700, Jeremy via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; &amp;gt; OP_CHECKOUTPUTSHASHVERIFY is retracted in favor of OP_SECURETHEBAG*.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I think you could generalise that slightly and make it fit in&lt;br/&gt;&amp;gt; &amp;gt; with the existing opcode naming by calling it something like&lt;br/&gt;&amp;gt; &amp;gt; &amp;#34;OP_CHECKTXDIGESTVERIFY&amp;#34; and pull a 33-byte value from the stack,&lt;br/&gt;&amp;gt; &amp;gt; consisting of a sha256 hash and a sighash-byte, and adding a new sighash&lt;br/&gt;&amp;gt; &amp;gt; value corresponding to the set of info you want to include in the hash,&lt;br/&gt;&amp;gt; &amp;gt; which I think sounds a bit like &amp;#34;SIGHASH_EXACTLY_ONE_INPUT | SIGHASH_ALL&amp;#34;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; FWIW, I&amp;#39;m not really seeing any reason to complicate the spec to ensure&lt;br/&gt;&amp;gt; &amp;gt; the digest is precommitted as part of the opcode.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe in combination with `OP_LEFT` and `OP_CAT` this allows&lt;br/&gt;&amp;gt; Turing-complete smart contracts, in much the same way as&lt;br/&gt;&amp;gt; `OP_CHECKSIGFROMSTACK`?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Pass in the spent transaction (serialised for txid) and the spending&lt;br/&gt;&amp;gt; transaction (serialised for sighash) as part of the witness of the spending&lt;br/&gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Script verifies that the spending transaction witness value is indeed the&lt;br/&gt;&amp;gt; spending transaction by `OP_SHA256 &amp;lt;SIGHASH_ALL&amp;gt; OP_SWAP OP_CAT&lt;br/&gt;&amp;gt; OP_CHECKTXDIGESTVERIFY`.&lt;br/&gt;&amp;gt; Script verifies the spent transaction witness value is indeed the spent&lt;br/&gt;&amp;gt; transaction by hashing it, then splitting up the hash with `OP_LEFT` into&lt;br/&gt;&amp;gt; bytes, and comparing the bytes to the bytes in the input of the spending&lt;br/&gt;&amp;gt; transaction witness value (txid being the bytes in reversed order).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then the Script can extract a commitment of itself by extracting the&lt;br/&gt;&amp;gt; output of the spent transaction.&lt;br/&gt;&amp;gt; This lets the Script check that the spending transaction also pays to the&lt;br/&gt;&amp;gt; same script.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The Script can then access a state value, for example from an `OP_RETURN`&lt;br/&gt;&amp;gt; output of the spent transaction, and enforce that a correct next-state is&lt;br/&gt;&amp;gt; used in the spending transaction.&lt;br/&gt;&amp;gt; If the state is too large to fit in a standard `OP_RETURN`, then the&lt;br/&gt;&amp;gt; current state can be passed in as a witness and validated against a hash&lt;br/&gt;&amp;gt; commitment in an `OP_RETURN` output.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I believe this is the primary reason against not pulling data from the&lt;br/&gt;&amp;gt; stack.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; ZmnSCPxj&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&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/20190618/783d5ba9/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190618/783d5ba9/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:27Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs0s9l2h55ecfjc4csq8fxg3rmqrhxn25as8m0w4nze2c05c3tjeuczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968tfmyr</id>
    
      <title type="html">📅 Original date posted:2019-06-02 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs0s9l2h55ecfjc4csq8fxg3rmqrhxn25as8m0w4nze2c05c3tjeuczyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j5968tfmyr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9wm5n6vnua392vaca8g9mr95qdap6r6cueglxe6pxstnrgh42fkc57ecu9&#39;&gt;nevent1q…ecu9&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-06-02&lt;br/&gt;📝 Original message:On Sat, Jun 1, 2019 at 12:47 PM Jeremy via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi All,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKOUTPUTSHASHVERIFY is retracted in favor of OP_SECURETHEBAG*.&lt;br/&gt;&amp;gt; OP_SECURETHEBAG does more or less the same thing, but fixes malleability&lt;br/&gt;&amp;gt; issues and lifts the single output restriction to a known number of inputs&lt;br/&gt;&amp;gt; restriction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; OP_CHECKOUTPUTSVERIFY had some issues with malleability of version and&lt;br/&gt;&amp;gt; locktime. OP_SECURETHEBAG commits to both of these values.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Can you elaborate a bit more on what the issues were?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; OP_SECURETHEBAG also lifts the restriction that OP_CHECKOUTPUTSVERIFY had&lt;br/&gt;&amp;gt; to be spent as only a single input, and instead just commits to the number&lt;br/&gt;&amp;gt; of inputs. This allows for more flexibility, but keeps it easy to get the&lt;br/&gt;&amp;gt; same single output restriction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; BIP:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/JeremyRubin/bips/blob/op-secure-the-bag/bip-secure-the-bag.mediawiki&#34;&gt;https://github.com/JeremyRubin/bips/blob/op-secure-the-bag/bip-secure-the-bag.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt; Implementation: &lt;a href=&#34;https://github.com/JeremyRubin/bitcoin/tree/secure_the_bag&#34;&gt;https://github.com/JeremyRubin/bitcoin/tree/secure_the_bag&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A particularly useful topic of discussion is how best to eliminate the&lt;br/&gt;&amp;gt; PUSHDATA and treat OP_SECURETHEBAG like a pushdata directly. I thought&lt;br/&gt;&amp;gt; about how the interpreter works and is implemented and couldn&amp;#39;t come up&lt;br/&gt;&amp;gt; with something noninvasive.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not a Core developer but from what I understand, I&amp;#39;d be inclined to to&lt;br/&gt;treat OP_SECURETHEBAG as with an immediate 32-byte parameter by modifying&lt;br/&gt;GetScriptOp to return the 32-byte parameter through pvchRet.&lt;br/&gt;&lt;br/&gt;bool GetScriptOp(CScriptBase::const_iterator&amp;amp; pc,&lt;br/&gt;CScriptBase::const_iterator end, opcodetype&amp;amp; opcodeRet,&lt;br/&gt;std::vector&amp;lt;unsigned char&amp;gt;* pvchRet)&lt;br/&gt;{&lt;br/&gt;    opcodeRet = OP_INVALIDOPCODE;&lt;br/&gt;    if (pvchRet)&lt;br/&gt;        pvchRet-&amp;gt;clear();&lt;br/&gt;    if (pc &amp;gt;= end)&lt;br/&gt;        return false;&lt;br/&gt;&lt;br/&gt;    // Read instruction&lt;br/&gt;    if (end - pc &amp;lt; 1)&lt;br/&gt;        return false;&lt;br/&gt;    unsigned int opcode = *pc&#43;&#43;;&lt;br/&gt;&lt;br/&gt;    // Immediate operand&lt;br/&gt;    if (opcode &amp;lt;= OP_PUSHDATA4)&lt;br/&gt;    {&lt;br/&gt;        // ...&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    if (opcode == OP_SECURETHEBAG) {&lt;br/&gt;        if (end - pc &amp;lt; 0 || (unsigned int)(end - pc) &amp;lt; 32)&lt;br/&gt;            return false;&lt;br/&gt;        if (pvchRet)&lt;br/&gt;            pvchRet-&amp;gt;assign(pc, pc &#43; 32);&lt;br/&gt;        pc &#43;= 32;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    opcodeRet = static_cast&amp;lt;opcodetype&amp;gt;(opcode);&lt;br/&gt;    return true;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;and go from there.&lt;br/&gt;&lt;br/&gt;Thank you for your review and discussion,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Jeremy&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Plus the name is better&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/20190602/74ada17f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190602/74ada17f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:26Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqs2lm7pmwdpf27r4f7xwv9s7n3e6c07v8v540gz4a75w6dpdnzxsnqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596z60hr0</id>
    
      <title type="html">📅 Original date posted:2019-05-24 📝 Original message:In ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqs2lm7pmwdpf27r4f7xwv9s7n3e6c07v8v540gz4a75w6dpdnzxsnqzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596z60hr0" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsge5nqwwajy6saaxkef9rqkss794yvhgt0f0p9x2c2na0jhl342kguu4pe8&#39;&gt;nevent1q…4pe8&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-24&lt;br/&gt;📝 Original message:In order of escalating scope of amendments to OP_COSHV, I suggest&lt;br/&gt;&lt;br/&gt;1) Peeking at surrounding data surrounding data should definitely be&lt;br/&gt;replaced by a pushdata-like op-code that uses the subsequent 32-bytes&lt;br/&gt;directly.  The OP_SUCCESSx upgrade path specifically allows for this, and&lt;br/&gt;avoids complicating the semantics Bitcoin Script.&lt;br/&gt;2) Furthermore, the number-of-input-verification and the&lt;br/&gt;outputhash-verification operations ought to be split into different opcodes&lt;br/&gt;as they are logically unrelated.&lt;br/&gt;3) Better still, we should instead implement the transaction reflection&lt;br/&gt;operations of OP_PUSHOUTPUTHASH and OP_NUMINPUTS that puts the outputhash&lt;br/&gt;and number of inputs respectively onto the stack.  Recursive covenants&lt;br/&gt;appear to be effectively impossible without either an OP_TWEEKPUBKEY or an&lt;br/&gt;OP_PUSHSCRIPTPUBKEY so the effort your proposal goes through to guard&lt;br/&gt;against placing an arbitrary outputhash onto the stack appears to be wasted&lt;br/&gt;effort to me.&lt;br/&gt;4) If we anticipate adding OP_CHECKSIGFROMSTACKVERIFY, then we should most&lt;br/&gt;definitely prefer (3) instead of OP_COSHV, if we still feel the need to do&lt;br/&gt;anything at all.  It is probably best to have both&lt;br/&gt;OP_CHECKSIGFROMSTACKVERIFY and transaction reflection operations of&lt;br/&gt;OP_PUSHOUTPUTHASH and OP_NUMINPUTS but I think I would be fine with just&lt;br/&gt;OP_CHECKSIGFROMSTACKVERIFY as well.&lt;br/&gt;&lt;br/&gt;On the other hand, if we are serious about preferring less per-block&lt;br/&gt;bandwidth over reusable primitive opcodes for programming, then we should&lt;br/&gt;instead abandon the RISC-style Bitcoin Script and instead add an&lt;br/&gt;alternative CISC-style taproot leaf type that directly provides (a&lt;br/&gt;conjunction of) the various popular common policies: channel opening,&lt;br/&gt;channel factories, coinjoins, hashlocks, timelocks, congestion control&lt;br/&gt;etc.  Segwit v0 already implements this CISC-style for the single most&lt;br/&gt;popular policy: single signature verification.&lt;br/&gt;&lt;br/&gt;On Fri, May 24, 2019 at 4:51 PM Jeremy &amp;lt;jlrubin at mit.edu&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi Russell,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks for this detailed comparison. The COSHV BIP does include a brief&lt;br/&gt;&amp;gt; comparison to OP_CHECKSIGFROMSTACKVERIFY and ANYPREVOUT, but this is more&lt;br/&gt;&amp;gt; detailed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that the power from CHECKSIGFROMSTACKVERIFY is awesome. It&amp;#39;s&lt;br/&gt;&amp;gt; clearly one of the more flexible options available and would enable a&lt;br/&gt;&amp;gt; multitude of new use cases.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; When I originally presented my work on congestion control at Jan 2017&lt;br/&gt;&amp;gt; BPASE, I also discussed it as an option for covenants. Unfortunately I&lt;br/&gt;&amp;gt; think it may be on the edge of too powerful -- there are a lot of use cases&lt;br/&gt;&amp;gt; and implications from having a potentially recursive covenant. If you see&lt;br/&gt;&amp;gt; my response to Matt in the OP_COSHV BIP thread I classify it as enabling a&lt;br/&gt;&amp;gt; non-computationally enumerable set of restrictions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think also from a developer point of view working with OP_COSHV is much&lt;br/&gt;&amp;gt; much simpler (maybe this can be abstracted) which will lead to increased&lt;br/&gt;&amp;gt; adoption. OP_COSHV also uses less per-block bandwidth which also makes it&lt;br/&gt;&amp;gt; preferable for a measure intended to decongest blocks. Do you know the&lt;br/&gt;&amp;gt; exact byte cost for OP_CHECKSIGFROMSTACK? OP_COSHV scripts, with templating&lt;br/&gt;&amp;gt; changes to taproot, can be a single byte. OP_COSHV also has less potential&lt;br/&gt;&amp;gt; to have a negative interaction with future opcodes we may want like&lt;br/&gt;&amp;gt; OP_PUBKEYTWEAK. While we&amp;#39;re getting to an exact spec for the features we&lt;br/&gt;&amp;gt; want in Bitcoin scripting, it&amp;#39;s hard to sign on to OP_CHECKSIGFROMSTACK&lt;br/&gt;&amp;gt; unless there&amp;#39;s an exact specification which makes us confident we&amp;#39;re&lt;br/&gt;&amp;gt; hitting all the points.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If the main complaint about OP_COSHV is that it peeks at surrounding data,&lt;br/&gt;&amp;gt; it&amp;#39;s also possible to implement it more closely to a multi-byte pushdata&lt;br/&gt;&amp;gt; opcode or do the template optimization.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Lastly, as I have previously noted, OP_LEFT is probably safer to implement&lt;br/&gt;&amp;gt; than OP_CAT and should be more efficient for OP_CHECKSIGFROMSTACK scripts.&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/20190524/868860a9/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190524/868860a9/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:20Z</updated>
  </entry>

  <entry>
    <id>https://njump.me/nevent1qqsge5nqwwajy6saaxkef9rqkss794yvhgt0f0p9x2c2na0jhl342kgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ejyl5x</id>
    
      <title type="html">📅 Original date posted:2019-05-29 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://njump.me/nevent1qqsge5nqwwajy6saaxkef9rqkss794yvhgt0f0p9x2c2na0jhl342kgzyp4cuaek3qzqz0t3y6ayka78jcaulmlepyf40y2nzzta0g8s8j596ejyl5x" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdmz3tjxmha0wvxhs4q7yv6lc9ynnyp72hymdxg6uy3r6l26jkuuqgjpkmf&#39;&gt;nevent1q…pkmf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-29&lt;br/&gt;📝 Original message:On Mon, May 27, 2019 at 3:21 AM Anthony Towns &amp;lt;aj at erisian.com.au&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; On Wed, May 22, 2019 at 05:01:21PM -0400, Russell O&amp;#39;Connor via bitcoin-dev&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; Bitcoin Script appears designed to be a flexible programmable system that&lt;br/&gt;&amp;gt; &amp;gt; provides generic features to be composed to achieve various purposes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Counterpoint: haven&amp;#39;t the flexibly designed parts of script mostly been&lt;br/&gt;&amp;gt; a failure -- requiring opcodes to be disabled due to DoS vectors or&lt;br/&gt;&amp;gt; consensus bugs, and mostly not being useful in practice where they&amp;#39;re&lt;br/&gt;&amp;gt; still enabled in BTC or on other chains where they have been re-enabled&lt;br/&gt;&amp;gt; (eg, Liquid and BCH)?&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;You may have a point.  However, I&amp;#39;m still inclined to think that problem is&lt;br/&gt;that you want some subset of concatenation, arithmetic, CHECKDATASIG,&lt;br/&gt;transaction reflection and/or covenants in order to create particularly&lt;br/&gt;useful programs.&lt;br/&gt;&lt;br/&gt;A while ago, I was designing a moderately sophisticated Script for Elements&lt;br/&gt;Alpha to see if I could implement a toy game, but ultimately I was thwarted&lt;br/&gt;due to the fact that Elements Alpha didn&amp;#39;t support multiplication.&lt;br/&gt;I did briefly consider using repeated additions and nested if statements to&lt;br/&gt;implement multiplication since I was expecting my numbers to be 11 or less,&lt;br/&gt;but ultimately I decided to just continue my work on an alternative to&lt;br/&gt;Script rather than trying to work around the missing multiplication.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; &amp;gt; Instead, I propose that, for the time being, we simply implement OP_CAT&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; &amp;gt; OP_CHECKSIGFROMSTACKVERIFY.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FWIW, I&amp;#39;d like to see CAT enabled, though I&amp;#39;m less convinced about a&lt;br/&gt;&amp;gt; CHECKSIG that takes the message from the stack. I think CAT&amp;#39;s plausibly&lt;br/&gt;&amp;gt; useful in practice, but a sig against data from the stack seems more&lt;br/&gt;&amp;gt; useful in theory than in practice. Has it actually seen use on BCH or&lt;br/&gt;&amp;gt; Liquid, eg?  (Also, I think BCH&amp;#39;s name for that opcode makes more sense&lt;br/&gt;&amp;gt; than Elements&amp;#39; -- all the CHECKSIG opcodes pull a sig from the stack,&lt;br/&gt;&amp;gt; after all)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; * Transaction introspection including:&lt;br/&gt;&amp;gt; &amp;gt; &#43; Simulated SIGHASH_ANYPREVOUT, which are necessarily chaperoned simply&lt;br/&gt;&amp;gt; by the&lt;br/&gt;&amp;gt; &amp;gt; nature of the construction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think simulating an ANYPREVOUT sig with a data signature means checking:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     S1 P CHECKSIG -- to check S1 is a signature for the tx&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     S1 H_TapSighash(XAB) P CHECKDATASIG&lt;br/&gt;&amp;gt;          -- to pull out the tx data &amp;#34;X&amp;#34;, &amp;#34;A&amp;#34;, &amp;#34;B&amp;#34;)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     S2 H_TapSighash(XCB) Q CHECKDATASIG&lt;br/&gt;&amp;gt;          -- for the ANYPREVOUT sig, with A changed to C to&lt;br/&gt;&amp;gt;             avoid committing to prevout info&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     X SIZE 42 EQUALVERIFY&lt;br/&gt;&amp;gt;     B SIZE 47 EQUALVERIFY&lt;br/&gt;&amp;gt;          -- to make sure only C is replaced from &amp;#34;XCB&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So to get all those conditions checked, I think you could do:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    P 2DUP TOALT TOALT CHECKSIGVERIFY&lt;br/&gt;&amp;gt;    SIZE 42 EQUALVERIFY&lt;br/&gt;&amp;gt;    &amp;#34;TapSighash&amp;#34; SHA256 DUP CAT SWAP CAT TOALT&lt;br/&gt;&amp;gt;    SIZE 47 EQUALVERIFY TUCK&lt;br/&gt;&amp;gt;    CAT FROMALT TUCK SWAP CAT SHA256 FROMALT SWAP FROMALT&lt;br/&gt;&amp;gt;    CHECKDATASIGVERIFY&lt;br/&gt;&amp;gt;    SWAP TOALT SWAP CAT FROMALT CAT SHA256 Q CHECKDATASIG&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Where the stack elements are, from top to bottom:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    S1: (65B) signature by P of tx&lt;br/&gt;&amp;gt;    X:  (42B) start of TapSighash spec&lt;br/&gt;&amp;gt;    B:  (47B) end of TapSighash spec (amount, nSequence, tapleaf_hash,&lt;br/&gt;&amp;gt;              key_version, codesep_pos)&lt;br/&gt;&amp;gt;    A:  (73B) middle of TapSighash spec dropped for ANYPREVOUT (spend_type,&lt;br/&gt;&amp;gt;              scriptPubKey and outpoint)&lt;br/&gt;&amp;gt;    C:   (1B) alternate middle (different spend_type)&lt;br/&gt;&amp;gt;    S2: (64B) signature of &amp;#34;XCB&amp;#34; by key Q&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So 298B for the witness data, and 119B or so for the script (if I&amp;#39;ve not&lt;br/&gt;&amp;gt; made mistakes), versus &amp;#34;P CHECKSIGVERIFY Q CHECKSIG&amp;#34; and S2 and S1 on&lt;br/&gt;&amp;gt; the stack, for 132B of witness data and 70B of script, or half that if&lt;br/&gt;&amp;gt; the chaperone requirement is removed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I haven&amp;#39;t checked your details but the above looks about correct to me.&lt;br/&gt;&lt;br/&gt;So what I was thinking is that we could add CHECKDATASIG first, and then&lt;br/&gt;people could get started on actually using ANYPREVOUT in practice and we&lt;br/&gt;can take our time to debate the merits of the chaperone vs non-chaperone,&lt;br/&gt;and possibly learn something about actual use before making a decision.&lt;br/&gt;There is no doubt that using ANYPREVOUT directly uses less weight, but they&lt;br/&gt;seem close enough to that it the simulation is usable, though perhaps far&lt;br/&gt;enough apart that we would want to eventually add ANYPREVOUT.  However, do&lt;br/&gt;keep in mind that our goal is not to minimize the weight of specific&lt;br/&gt;redemption policies.  The weight of implementing any particular redemption&lt;br/&gt;policy in Script is somewhat arbitrary to begin with anyways, being&lt;br/&gt;dependent on the choices made for the Script language operations and its&lt;br/&gt;encoding.  Again, if our goal were to minimize weight for specific&lt;br/&gt;redemption policies we should abandon SCRIPT and directly use a language&lt;br/&gt;similar to Miniscript, and/or just directly implement an enumeration of&lt;br/&gt;policies.&lt;br/&gt;&lt;br/&gt;However, my proposal CHECKSIGFROMSTACK (aka CHECKDATASIG) proposal was&lt;br/&gt;based on my argument that CHECKDATASIG covenant abilities wouldn&amp;#39;t be&lt;br/&gt;controversial since it was limited to self-recursion and had less than&lt;br/&gt;64-bits of state space.  But ZmnSCPxj has shown that my conclusions were&lt;br/&gt;hasty and that self-recursion has access to arbitrarily large amounts of&lt;br/&gt;state space.  In light of this, it would appear that self-recursive&lt;br/&gt;covenants is nearly as powerful as arbitrary recursive covenants, and&lt;br/&gt;therefore is nearly as controversial.&lt;br/&gt;&lt;br/&gt;So, while I do think that we should add support for recursive covenants to&lt;br/&gt;Bitcoin, we probably not ready to add it yet given the controversy around&lt;br/&gt;the far more innocent ANYPREVOUT.  I do think it would be useful to add&lt;br/&gt;support for CAT and CHECKDATASIG in order to implement MPC with penalties,&lt;br/&gt;but perhaps we should support that via a HASH_tapdata digest function&lt;br/&gt;rather than SHA256, in order to avoid any accidental covenants.  Of course&lt;br/&gt;doing so would no longer count as &amp;#34;an alternative&amp;#34; proposal to ANYPREVOUT&lt;br/&gt;or COSHV, and simply &amp;#34;an additional&amp;#34; proposal.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; I think you&amp;#39;d need to complicate it a bit further to do the&lt;br/&gt;&amp;gt; ANYPREVOUTANYSCRIPT variant, where you retain the commitment to&lt;br/&gt;&amp;gt; amount/nseq but drop the commitment to tapleaf_hash.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; I feel that this style of generic building blocks truly embodies what is&lt;br/&gt;&amp;gt; meant&lt;br/&gt;&amp;gt; &amp;gt; by &amp;#34;programmable money&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; For practical purposes, this doesn&amp;#39;t seem like a great level of&lt;br/&gt;&amp;gt; abstraction to me. It&amp;#39;s certainly better at &amp;#34;permissionless innovation&amp;#34;&lt;br/&gt;&amp;gt; though.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You could make these constructions a little bit simpler by having a&lt;br/&gt;&amp;gt; &amp;#34;CHECK_SIG_MSG_VERIFY&amp;#34; opcode that accepts [sig msg key], and does &amp;#34;sig&lt;br/&gt;&amp;gt; key CHECKSIGVERIFY&amp;#34; but also checks the the provided msg was what was&lt;br/&gt;&amp;gt; passed into bip-schnorr.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;The whole point is to keep the functionality simple and let users program&lt;br/&gt;what they want.  What we don&amp;#39;t want to do is tailor an opcode for the&lt;br/&gt;specific use case we have in mind, because that just comes at the expense&lt;br/&gt;of all the use cases we don&amp;#39;t have in mind.&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/20190529/ac866e25/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190529/ac866e25/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:18:19Z</updated>
  </entry>

</feed>