<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated></updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1fgnnmg7f4wzup9hct8nv5pnd9l07wcjqdjku9ax432n4g69v4rgq7xak44.rss" />
  <link href="https://nostr.ae/npub1fgnnmg7f4wzup9hct8nv5pnd9l07wcjqdjku9ax432n4g69v4rgq7xak44" />
  <id>https://nostr.ae/npub1fgnnmg7f4wzup9hct8nv5pnd9l07wcjqdjku9ax432n4g69v4rgq7xak44</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqspjwvqu7pzc7nq5a2vwpy8jcs4tgx7hqhj9hg38q964d5ccaa54rszyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqfptysk</id>
    
      <title type="html">📅 Original date posted:2021-11-17 📝 Original message:Prior ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqspjwvqu7pzc7nq5a2vwpy8jcs4tgx7hqhj9hg38q964d5ccaa54rszyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqfptysk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2w8ypjqtxcvjdxyl87c27vu5jldr2phdsmk4p52qqfjmt7yy33zcujyjd3&#39;&gt;nevent1q…yjd3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-11-17&lt;br/&gt;📝 Original message:Prior to 0.19.0, creating outputs with an unknown witness version was considered non-standard. This was a violation of BIP 173 and was fixed for 0.19.0&#43; in PR #15846.&lt;br/&gt;&lt;br/&gt;On 11/16/2021 10:17 PM, n1ms0s via bitcoin-dev wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hello all,&lt;br/&gt;&amp;gt; I am currently working on a fork of bitcoinj with basic Taproot support. Currently it supports basic sending and receiving with Taproot addresses using a bitcoinj SPV wallet.&lt;br/&gt;&amp;gt; See here: &lt;a href=&#34;https://github.com/n1ms0s/bitcoinj&#34;&gt;https://github.com/n1ms0s/bitcoinj&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It supports the above along with public/private key tweaking. Feel free to take a look, and leave feedback or even work on it yourself and submit a pull request.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; One issue I am running into right now though is when broadcasting a Taproot transaction to older nodes (old as in ~0.18.0) I get an error response of &amp;#34;Witness version reserved for soft-fork upgrades&amp;#34;. Anyone have any idea why this happens? I have a stackexchange question open here for it:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://bitcoin.stackexchange.com/questions/110787/issue-when-broadcasting-taproot-transaction-to-older-nodes&#34;&gt;https://bitcoin.stackexchange.com/questions/110787/issue-when-broadcasting-taproot-transaction-to-older-nodes&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; n1ms0s&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/20211117/d99c1571/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20211117/d99c1571/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-08T01:00:36&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs2kne2m4ewuwc9wmwhmymfznyww0v2qyl2s8vhv6542htrpm74k9czyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqajell8</id>
    
      <title type="html">📅 Original date posted:2021-06-29 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs2kne2m4ewuwc9wmwhmymfznyww0v2qyl2s8vhv6542htrpm74k9czyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqajell8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstgmnxmu4kt3e2e5mhv39ratwdj9smsd9x8p6hzmh32wepewcge7cmg2xuu&#39;&gt;nevent1q…2xuu&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-29&lt;br/&gt;📝 Original message:Hi All,&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve been working on formalizing the Output Script Descriptors that have&lt;br/&gt;been available in Bitcoin Core for a while into BIPs. Since descriptors&lt;br/&gt;are modular and have optional components, I&amp;#39;ve decided to split it into&lt;br/&gt;7 BIPs, rather than a single one. The first describes descriptors in&lt;br/&gt;general and does not specify any particular descriptor. However it does&lt;br/&gt;describe the general operation, key expressions (including derivation&lt;br/&gt;paths and key origin info), and the descriptor checksum. The following 6&lt;br/&gt;BIPs specify the actual descriptors themselves. These are non-segwit&lt;br/&gt;descriptor (pk, pkh, sh), segwit descriptors (wpkh, wsh), multisig&lt;br/&gt;descriptors (multi, sortedmulti), the taproot descriptor (tr), the combo&lt;br/&gt;descriptor, and opaque descriptors (raw, addr). This separation is so&lt;br/&gt;that implementors can choose to not implement some descriptors and still&lt;br/&gt;say which descriptors they support without being too difficult to&lt;br/&gt;understand.&lt;br/&gt;&lt;br/&gt;The text of all of the documents are below, and they can also be found&lt;br/&gt;on github:&lt;a href=&#34;https://github.com/achow101/bips/tree/descriptors/&#34;&gt;https://github.com/achow101/bips/tree/descriptors/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Thanks,&lt;br/&gt;Andrew Chow&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-general&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: Output Script Descriptors General Operation&lt;br/&gt;   Author: Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;           Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-general&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-general&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;Output Script Descriptors are a simple language which can be used to&lt;br/&gt;describe collections ofoutput scripts.&lt;br/&gt;There can be many different descriptor fragments and functions.&lt;br/&gt;This document describes the general syntax for descriptors, descriptor&lt;br/&gt;checksums, and common expressions.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;Bitcoin wallets traditionally have stored a set of keys which are later&lt;br/&gt;serialized and mutated to produce the output scripts that the wallet&lt;br/&gt;watches and the addresses it provides to users.&lt;br/&gt;Typically backups have consisted of solely the private keys, nowadays&lt;br/&gt;primarily in the form of BIP 39 mnemonics.&lt;br/&gt;However this backup solution is insuffient, especially since the&lt;br/&gt;introduction of Segregated Witness which added new output types.&lt;br/&gt;Given just the private keys, it is not possible for restored wallets to&lt;br/&gt;know which kinds of output scripts and addresses to produce.&lt;br/&gt;This has lead to incompatibilities between wallets when restoring a&lt;br/&gt;backup or exporting data for a watch only wallet.&lt;br/&gt;&lt;br/&gt;Further complicating matters are BIP 32 derivation paths.&lt;br/&gt;Although BIPs 44, 49, and 84 have specified standard BIP 32 derivation&lt;br/&gt;paths for different output scripts and addresses, not all wallets&lt;br/&gt;support them nor use those derivation paths.&lt;br/&gt;The lack of derivation path information in these backups and exports&lt;br/&gt;leads to further incompatibilities between wallets.&lt;br/&gt;&lt;br/&gt;Current solutions to these issues have not been generic and can be&lt;br/&gt;viewed as being layer violations.&lt;br/&gt;Solutions such as introducing different version bytes for extended key&lt;br/&gt;serialization both are a layer violation (key derivation should be&lt;br/&gt;separate from script type meaning) and specific only to a particular&lt;br/&gt;derivation path and script type.&lt;br/&gt;&lt;br/&gt;Output Script Descriptors introduces a generic solution to these issues.&lt;br/&gt;Script types are specified explicitly through the use of Script Expressions.&lt;br/&gt;Key derivation paths are specified explicitly in Key Expressions.&lt;br/&gt;These allow for creating wallet backups and exports which specify the&lt;br/&gt;exact scripts, subscripts (redeemScript, witnessScript, etc.), and keys&lt;br/&gt;to produce.&lt;br/&gt;With the general structure specified in this BIP, new Script Expressions&lt;br/&gt;can be introduced as new script types are added.&lt;br/&gt;Lastly, the use of common terminology and existing standards allow for&lt;br/&gt;Output Script Descriptors to be engineer readable so that the results&lt;br/&gt;can be understood at a glance.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;Descriptors consist of several types of expressions.&lt;br/&gt;The top level expression is a &amp;lt;tt&amp;gt;SCRIPT&amp;lt;/tt&amp;gt;.&lt;br/&gt;This expression may be followed by &amp;lt;tt&amp;gt;#CHECKSUM&amp;lt;/tt&amp;gt;, where&lt;br/&gt;&amp;lt;tt&amp;gt;CHECKSUM&amp;lt;/tt&amp;gt; is an 8 character alphanumeric descriptor checksum.&lt;br/&gt;&lt;br/&gt;===Script Expressions===&lt;br/&gt;&lt;br/&gt;Script Expressions (denoted &amp;lt;tt&amp;gt;SCRIPT&amp;lt;/tt&amp;gt;) are expressions which&lt;br/&gt;correspond directly with a Bitcoin script.&lt;br/&gt;These expressions are written as functions and take arguments.&lt;br/&gt;Such expressions have a script template which is filled with the&lt;br/&gt;arguments correspondingly.&lt;br/&gt;Expressions are written with a human readable identifier string with the&lt;br/&gt;arguments enclosed with parentheses.&lt;br/&gt;The identifier string should be alphanumeric and may include underscores.&lt;br/&gt;&lt;br/&gt;The arguments to a script expression are defined by that expression itself.&lt;br/&gt;They could be a script expression, a key expression, or some other&lt;br/&gt;expression entirely.&lt;br/&gt;&lt;br/&gt;===Key Expressions===&lt;br/&gt;&lt;br/&gt;A common expression used as an argument to script expressions are key&lt;br/&gt;expressions (denoted &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt;).&lt;br/&gt;These represent a public or private key and, optionally, information&lt;br/&gt;about the origin of that key.&lt;br/&gt;Key expressions can only be used as arguments to script expressions.&lt;br/&gt;&lt;br/&gt;Key expressions consist of:&lt;br/&gt;* Optionally, key origin information, consisting of:&lt;br/&gt;** An open bracket &amp;lt;tt&amp;gt;[&amp;lt;/tt&amp;gt;&lt;br/&gt;** Exactly 8 hex characters for the fingerprint of the key where the&lt;br/&gt;derivation starts (see BIP 32 for details)&lt;br/&gt;** Followed by zero or more &amp;lt;tt&amp;gt;/NUM&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/NUM&amp;#39;&amp;lt;/tt&amp;gt;  path&lt;br/&gt;elements to indicate the unhardened or hardened derivation steps between&lt;br/&gt;the fingerprint and the key that follows.&lt;br/&gt;** A closing bracket &amp;lt;tt&amp;gt;]&amp;lt;/tt&amp;gt;&lt;br/&gt;* Followed by the actual key, which is either:&lt;br/&gt;** A hex encoded public key, which depending the script expression, may&lt;br/&gt;be either:&lt;br/&gt;*** 66 hex character string beginning with &amp;lt;tt&amp;gt;02&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;03&amp;lt;/tt&amp;gt;&lt;br/&gt;representing a compressed public key&lt;br/&gt;*** 130 hex character string beginning with &amp;lt;tt&amp;gt;04&amp;lt;/tt&amp;gt; representing an&lt;br/&gt;uncompressed public key&lt;br/&gt;*** 64 hex character string representing an x-only public key&lt;br/&gt;** A [[&lt;a href=&#34;https://en.bitcoin.it/wiki/Wallet_import_format&#34;&gt;https://en.bitcoin.it/wiki/Wallet_import_format&lt;/a&gt;|WIF]] encoded&lt;br/&gt;private key&lt;br/&gt;** &amp;lt;tt&amp;gt;xpub&amp;lt;/tt&amp;gt; encoded extended public key or &amp;lt;tt&amp;gt;xprv&amp;lt;/tt&amp;gt; encoded&lt;br/&gt;extended private key (as defined in BIP 32)&lt;br/&gt;*** Followed by zero or more &amp;lt;tt&amp;gt;/NUM&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/NUM&amp;#39;&amp;lt;/tt&amp;gt; path&lt;br/&gt;elements indicating BIP 32 derivation steps to be taken after the given&lt;br/&gt;extended key.&lt;br/&gt;*** Optionally followed by a single &amp;lt;tt&amp;gt;/*&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/*&amp;#39;&amp;lt;/tt&amp;gt; final&lt;br/&gt;step to denote all direct unhardened or hardened children.&lt;br/&gt;&lt;br/&gt;If the &amp;lt;tt&amp;gt;KEY&amp;lt;/tt&amp;gt; is a BIP 32 extended key, before output scripts can&lt;br/&gt;be created, child keys must be derived using the derivation information&lt;br/&gt;that follows the extended key.&lt;br/&gt;When the final step is &amp;lt;tt&amp;gt;/*&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/*&amp;#39;&amp;lt;/tt&amp;gt;, an output script&lt;br/&gt;will be produced for every child key index.&lt;br/&gt;The derived key must be serialized as a compressed public key.&lt;br/&gt;&lt;br/&gt;In the above specification, the hardened indicator &amp;lt;tt&amp;gt;&amp;#39;&amp;lt;/tt&amp;gt; may be&lt;br/&gt;replaced with alternative hardnened indicators of &amp;lt;tt&amp;gt;h&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;H&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;===Character Set===&lt;br/&gt;&lt;br/&gt;The expressions used in descriptors must only contain characters within&lt;br/&gt;this character set so that the descriptor checksum will work.&lt;br/&gt;&lt;br/&gt;The allowed characters are:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;0123456789()[],&amp;#39;/*abcdefgh@:$%{}&lt;br/&gt;IJKLMNOPQRSTUVWXYZ&amp;amp;&#43;-.;&amp;lt;=&amp;gt;?!^_|~&lt;br/&gt;ijklmnopqrstuvwxyzABCDEFGH`#&amp;#34;\&amp;lt;space&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;Note that &amp;lt;tt&amp;gt;&amp;lt;space&amp;gt;&amp;lt;/tt&amp;gt; on the last line is a space character.&lt;br/&gt;&lt;br/&gt;This character set is written as 3 groups of 32 characters in this&lt;br/&gt;specific order so that the checksum below can identify more errors.&lt;br/&gt;The first group are the most common &amp;#34;unprotected&amp;#34; characters (i.e.&lt;br/&gt;things such as hex and keypaths that do not already have their own&lt;br/&gt;checksums).&lt;br/&gt;Case errors cause an offset that is a multiple of 32 while as many&lt;br/&gt;alphabetic characters are in the same group while following the previous&lt;br/&gt;restrictions.&lt;br/&gt;&lt;br/&gt;===Checksum===&lt;br/&gt;&lt;br/&gt;Follwing the top level script expression is a single octothorpe&lt;br/&gt;(&amp;lt;tt&amp;gt;#&amp;lt;/tt&amp;gt;) followed by the 8 character checksum.&lt;br/&gt;The checksum is an error correcting checksum similar to bech32.&lt;br/&gt;&lt;br/&gt;The checksum has the following properties:&lt;br/&gt;* Mistakes in a descriptor string are measured in &amp;#34;symbol errors&amp;#34;. The&lt;br/&gt;higher the number of symbol errors, the harder it is to detect:&lt;br/&gt;** An error substituting a character from&lt;br/&gt;&amp;lt;tt&amp;gt;0123456789()[],&amp;#39;/*abcdefgh@:$%{}&amp;lt;/tt&amp;gt; for another in that set always&lt;br/&gt;counts as 1 symbol error.&lt;br/&gt;*** Note that hex encoded keys are covered by these characters. Extended&lt;br/&gt;keys (&amp;lt;tt&amp;gt;xpub&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;xprv&amp;lt;/tt&amp;gt;) use other characters too, but&lt;br/&gt;also have their own checksum mechansim.&lt;br/&gt;*** &amp;lt;tt&amp;gt;SCRIPT&amp;lt;/tt&amp;gt; expression function names use other characters, but&lt;br/&gt;mistakes in these would generally result in an unparsable descriptor.&lt;br/&gt;** A case error always counts as 1 symbol error.&lt;br/&gt;** Any other 1 character substitution error counts as 1 or 2 symbol errors.&lt;br/&gt;* Any 1 symbol error is always detected.&lt;br/&gt;* Any 2 or 3 symbol error in a descriptor of up to 49154 characters is&lt;br/&gt;always detected.&lt;br/&gt;* Any 4 symbol error in a descriptor of up to 507 characters is always&lt;br/&gt;detected.&lt;br/&gt;* Any 5 symbol error in a descriptor of up to 77 characters is always&lt;br/&gt;detected.&lt;br/&gt;* Is optimized to minimize the chance of a 5 symbol error in a&lt;br/&gt;descriptor up to 387 characters is undetected&lt;br/&gt;* Random errors have a chance of 1 in 2&amp;lt;super&amp;gt;40&amp;lt;/super&amp;gt; of being&lt;br/&gt;undetected.&lt;br/&gt;&lt;br/&gt;The checksum itself uses the same character set as bech32:&lt;br/&gt;&amp;lt;tt&amp;gt;qpzry9x8gf2tvdw0s3jn54khce6mua7l&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;Valid descriptor strings with a checksum must pass the criteria for&lt;br/&gt;validity specified by the Python3 code snippet below.&lt;br/&gt;The function &amp;lt;tt&amp;gt;descsum_check&amp;lt;/tt&amp;gt; must return true when its argument&lt;br/&gt;&amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt; is a descriptor consisting in the form &amp;lt;tt&amp;gt;SCRIPT#CHECKSUM&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;INPUT_CHARSET =&lt;br/&gt;&amp;#34;0123456789()[],&amp;#39;/*abcdefgh@:$%{}IJKLMNOPQRSTUVWXYZ&amp;amp;&#43;-.;&amp;lt;=&amp;gt;?!^_|~ijklmnopqrstuvwxyzABCDEFGH`#\&amp;#34;\\&lt;br/&gt;&amp;#34;&lt;br/&gt;CHECKSUM_CHARSET = &amp;#34;qpzry9x8gf2tvdw0s3jn54khce6mua7l&amp;#34;&lt;br/&gt;GENERATOR = [0xf5dee51989, 0xa9fdca3312, 0x1bab10e32d, 0x3706b1677a,&lt;br/&gt;0x644d626ffd]&lt;br/&gt;&lt;br/&gt;def descsum_polymod(symbols):&lt;br/&gt;     &amp;#34;&amp;#34;&amp;#34;Internal function that computes the descriptor checksum.&amp;#34;&amp;#34;&amp;#34;&lt;br/&gt;     chk = 1&lt;br/&gt;     for value in symbols:&lt;br/&gt;         top = chk &amp;gt;&amp;gt; 35&lt;br/&gt;         chk = (chk &amp;amp; 0x7ffffffff) &amp;lt;&amp;lt; 5 ^ value&lt;br/&gt;         for i in range(5):&lt;br/&gt;             chk ^= GENERATOR[i] if ((top &amp;gt;&amp;gt; i) &amp;amp; 1) else 0&lt;br/&gt;     return chk&lt;br/&gt;&lt;br/&gt;def descsum_expand(s):&lt;br/&gt;     &amp;#34;&amp;#34;&amp;#34;Internal function that does the character to symbol expansion&amp;#34;&amp;#34;&amp;#34;&lt;br/&gt;     groups = []&lt;br/&gt;     symbols = []&lt;br/&gt;     for c in s:&lt;br/&gt;         if not c in INPUT_CHARSET:&lt;br/&gt;             return None&lt;br/&gt;         v = INPUT_CHARSET.find(c)&lt;br/&gt;         symbols.append(v &amp;amp; 31)&lt;br/&gt;         groups.append(v &amp;gt;&amp;gt; 5)&lt;br/&gt;         if len(groups) == 3:&lt;br/&gt;             symbols.append(groups[0] * 9 &#43; groups[1] * 3 &#43; groups[2])&lt;br/&gt;             groups = []&lt;br/&gt;     if len(groups) == 1:&lt;br/&gt;         symbols.append(groups[0])&lt;br/&gt;     elif len(groups) == 2:&lt;br/&gt;         symbols.append(groups[0] * 3 &#43; groups[1])&lt;br/&gt;     return symbols&lt;br/&gt;&lt;br/&gt;def descsum_check(s):&lt;br/&gt;     &amp;#34;&amp;#34;&amp;#34;Verify that the checksum is correct in a descriptor&amp;#34;&amp;#34;&amp;#34;&lt;br/&gt;     if s[-9] != &amp;#39;#&amp;#39;:&lt;br/&gt;         return False&lt;br/&gt;     if not all(x in CHECKSUM_CHARSET for x in s[-8:]):&lt;br/&gt;         return False&lt;br/&gt;     symbols = descsum_expand(s[:-9]) &#43; [CHECKSUM_CHARSET.find(x) for x&lt;br/&gt;in s[-8:]]&lt;br/&gt;     return descsum_polymod(symbols) == 1&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;This implements a BCH code that has the properties described above.&lt;br/&gt;The entire descriptor string is first processed into an array of symbols.&lt;br/&gt;The symbol for each character is its position within its group.&lt;br/&gt;After every 3rd symbol, a 4th symbol is inserted which represents the&lt;br/&gt;group numbers combined together.&lt;br/&gt;This means that a change that only affects the position within a group,&lt;br/&gt;or only a group number change, will only affect a single symbol.&lt;br/&gt;&lt;br/&gt;To construct a valid checksum given a script expression, the code below&lt;br/&gt;can be used:&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;def descsum_create(s):&lt;br/&gt;     &amp;#34;&amp;#34;&amp;#34;Add a checksum to a descriptor without&amp;#34;&amp;#34;&amp;#34;&lt;br/&gt;     symbols = descsum_expand(s) &#43; [0, 0, 0, 0, 0, 0, 0, 0]&lt;br/&gt;     checksum = descsum_polymod(symbols) ^ 1&lt;br/&gt;     return s &#43; &amp;#39;#&amp;#39; &#43; &amp;#39;&amp;#39;.join(CHECKSUM_CHARSET[(checksum &amp;gt;&amp;gt; (5 * (7 -&lt;br/&gt;i))) &amp;amp; 31] for i in range(8))&lt;br/&gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;Output script descriptors are an entirely new language which is not&lt;br/&gt;compatible with any existing software.&lt;br/&gt;However many components of the expressions reuse encodings and&lt;br/&gt;serializations defined by previous BIPs.&lt;br/&gt;&lt;br/&gt;Output script descriptors are designed for future extension with further&lt;br/&gt;fragment types and new script expressions.&lt;br/&gt;These will be specified in additional BIPs.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;Descriptors have been implemented in Bitcoin Core since version 0.17.&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-segwit&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: segwit Output Script Descriptors&lt;br/&gt;   Author: Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;           Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-segwit&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-segwit&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document specifies &amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; output&lt;br/&gt;script descriptors.&lt;br/&gt;&amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt; descriptors take a key and produces a P2WPKH output script.&lt;br/&gt;&amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; descriptors take a script and produces a P2WSH output script.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;Segregated Witness added 2 additional standard output script formats:&lt;br/&gt;P2WPKH and P2WSH.&lt;br/&gt;These expressions allow specifying those formats as a descriptor.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;Two new script expressions are defined: &amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;wpkh(KEY)&amp;lt;/tt&amp;gt; expression can be used as a top level expression,&lt;br/&gt;or inside of a &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; descriptor.&lt;br/&gt;It takes a single key expression as an argument and produces a P2WPKH&lt;br/&gt;output script.&lt;br/&gt;Only keys which are/has compressed public keys can be contained in a&lt;br/&gt;&amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt; expression.&lt;br/&gt;&lt;br/&gt;The output script produced is:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;OP_0 &amp;lt;KEY_hash160&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;wsh(SCRIPT)&amp;lt;/tt&amp;gt; expression can be used as a top level&lt;br/&gt;expression, or inside of a &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; descriptor.&lt;br/&gt;It takes a single script expression as an argument and produces a P2WSH&lt;br/&gt;output script.&lt;br/&gt;&amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; expressions also create a witnessScript which is required&lt;br/&gt;in order to spend outputs which use its output script.&lt;br/&gt;This redeemScript is the output script produced by the &amp;lt;tt&amp;gt;SCRIPT&amp;lt;/tt&amp;gt;&lt;br/&gt;argument to &amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt;.&lt;br/&gt;Any key expression found in any script expression contained by a&lt;br/&gt;&amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; expression must only produce compresed public keys.&lt;br/&gt;&lt;br/&gt;The output script produced is:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;OP_0 &amp;lt;SCRIPT_sha256&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; descriptors use the format and&lt;br/&gt;general operation specified in&lt;br/&gt;[[bip-descriptor-general.mediawiki|bip-descriptor-general]].&lt;br/&gt;As these are a wholly new descriptors, they are not compatible with any&lt;br/&gt;implementation.&lt;br/&gt;However the scripts produced are standard scripts so existing software&lt;br/&gt;are likely to be familiar with them.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; descriptors have been implemented in&lt;br/&gt;Bitcoin Core since version 0.17.&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-non-segwit&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: Non-segwit Output Script Descriptors&lt;br/&gt;   Author: Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;           Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-non-segwit&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-non-segwit&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document specifies &amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt;&lt;br/&gt;output script descriptors.&lt;br/&gt;&amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt; descriptors take a key and produces a P2PK output script.&lt;br/&gt;&amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt; descriptors take a key and produces a P2PKH output script.&lt;br/&gt;&amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; descriptors take a script and produces a P2SH output script.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;Prior to the activation of Segregated Witness, there were 3 main&lt;br/&gt;standard output script formats: P2PK, P2PKH, and P2SH.&lt;br/&gt;These expressions allow specifying those formats as a descriptor.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;Three new script expressions are defined: &amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt;,&lt;br/&gt;and &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;pk(KEY)&amp;lt;/tt&amp;gt; expression can be used in any context or level of a&lt;br/&gt;descriptor.&lt;br/&gt;It takes a single key expression as an argument and produces a P2PK&lt;br/&gt;output script.&lt;br/&gt;Depending on the higher level descriptors, there may be restrictions on&lt;br/&gt;the type of public keys that can be included.&lt;br/&gt;Such restrictions will be specified by those descriptors.&lt;br/&gt;&lt;br/&gt;The output script produced is:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;&amp;lt;KEY&amp;gt; OP_CHECKSIG&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;pkh(KEY)&amp;lt;/tt&amp;gt; expression can be used as a top level expression,&lt;br/&gt;or inside of either a &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; descriptor.&lt;br/&gt;It takes a single key expression as an argument and produces a P2PKH&lt;br/&gt;output script.&lt;br/&gt;Depending on the higher level descriptors, there may be restrictions on&lt;br/&gt;the type of public keys that can be included.&lt;br/&gt;Such restrictions will be specified by those descriptors.&lt;br/&gt;&lt;br/&gt;The output script produced is:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;OP_DUP OP_HASH160 &amp;lt;KEY_hash160&amp;gt; OP_EQUALVERIFY OP_CHECKSIG&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;sh(SCRIPT)&amp;lt;/tt&amp;gt; expression can only be used as a top level&lt;br/&gt;expression.&lt;br/&gt;It takes a single script expression as an argument and produces a P2SH&lt;br/&gt;output script.&lt;br/&gt;&amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; expressions also create a redeemScript which is required&lt;br/&gt;in order to spend outputs which use its output script.&lt;br/&gt;This redeemScript is the output script produced by the &amp;lt;tt&amp;gt;SCRIPT&amp;lt;/tt&amp;gt;&lt;br/&gt;argument to &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;The output script produced is:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;OP_HASH160 &amp;lt;SCRIPT_hash160&amp;gt; OP_EQUAL&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; descriptors use the&lt;br/&gt;format and general operation specified in&lt;br/&gt;[[bip-descriptor-general.mediawiki|bip-descriptor-general]].&lt;br/&gt;As these are a wholly new descriptors, they are not compatible with any&lt;br/&gt;implementation.&lt;br/&gt;However the scripts produced are standard scripts so existing software&lt;br/&gt;are likely to be familiar with them.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; descriptors have been&lt;br/&gt;implemented in Bitcoin Core since version 0.17.&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-tr&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: tr() Output Script Descriptors&lt;br/&gt;   Author: Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;           Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-tr&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-tr&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document specifies &amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt; output script descriptors.&lt;br/&gt;&amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt; descriptors take a key and optionally a tree of scripts&lt;br/&gt;and produces a P2TR output script.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;Taproot added one additional standard output script format: P2TR.&lt;br/&gt;These expressions allow specifying those formats as a descriptor.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;A new script expressions are defined: &amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt;.&lt;br/&gt;A new expression is defined: Tree Expressions&lt;br/&gt;&lt;br/&gt;===Tree Expression===&lt;br/&gt;&lt;br/&gt;A Tree Expression (denoted &amp;lt;tt&amp;gt;TREE&amp;lt;/tt&amp;gt;) is an expression which&lt;br/&gt;represents a tree of scripts.&lt;br/&gt;The way the tree is represented in an output script is dependent on the&lt;br/&gt;higher level expressions.&lt;br/&gt;&lt;br/&gt;A Tree Expression is:&lt;br/&gt;* Any Script Expression that is allowed at the level this Tree&lt;br/&gt;Expression is in.&lt;br/&gt;* A pair of Tree Expressions consisting of:&lt;br/&gt;** An open brace &amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;&lt;br/&gt;** A Tree Expression&lt;br/&gt;** A comma &amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt;&lt;br/&gt;** A Tree Expression&lt;br/&gt;** A closing brance &amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;tr(KEY)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;tr(KEY, TREE)&amp;lt;/tt&amp;gt; expression can only be&lt;br/&gt;used as a top level expression.&lt;br/&gt;All key expressions under any &amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt; expression must create&lt;br/&gt;x-only public keys.&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;tr(KEY&amp;lt;/tt&amp;gt; takes a single key expression as an argument and&lt;br/&gt;produces a P2TR output script which does not have a script path.&lt;br/&gt;The keys produced by the key expression are used as the internal key as&lt;br/&gt;specified by [[bip-0341.mediawiki#cite_ref-22-0|BIP 341]].&lt;br/&gt;Specifically, &amp;#34;If the spending conditions do not require a script path,&lt;br/&gt;the output key should commit to an unspendable script path instead of&lt;br/&gt;having no script path.&lt;br/&gt;This can be achieved by computing the output key point as &amp;#39;&amp;#39;Q = P &#43;&lt;br/&gt;int(hash&amp;lt;sub&amp;gt;TapTweak&amp;lt;/sub&amp;gt;(bytes(P)))G&amp;#39;&amp;#39;.&amp;#34;&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;internal_key:       lift_x(KEY)&lt;br/&gt;32_byte_output_key: internal_key &#43; int(HashTapTweak(bytes(internal_key)))G&lt;br/&gt;scriptPubKey:       OP_1 &amp;lt;32_byte_output_key&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;tr(KEY, TREE)&amp;lt;/tt&amp;gt; takes a key expression as the first argument, and&lt;br/&gt;a tree expression as the second argument and produces a P2TR output&lt;br/&gt;script which has a script path.&lt;br/&gt;The keys produced by the first key expression are used as the internal&lt;br/&gt;key as specified by&lt;br/&gt;[[bip-0341.mediawiki#Constructing_and_spending_Taproot_outputs|BIP 341]].&lt;br/&gt;The Tree expression becomes the Taproot script tree as described in BIP 341.&lt;br/&gt;A merkle root is computed from this tree and combined with the internal&lt;br/&gt;key to create the Taproot output key.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;internal_key:       lift_x(KEY)&lt;br/&gt;merkle_root:        HashTapBranch(TREE)&lt;br/&gt;32_byte_output_key: internal_key &#43; int(HashTapTweak(bytes(internal_key)&lt;br/&gt;|| merkle_root))G&lt;br/&gt;scriptPubKey:       OP_1 &amp;lt;32_byte_output_key&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt; descriptors use the format and general operation specified&lt;br/&gt;in [[bip-descriptor-general.mediawiki|bip-descriptor-general]].&lt;br/&gt;As these are a wholly new descriptors, they are not compatible with any&lt;br/&gt;implementation.&lt;br/&gt;However the scripts produced are standard scripts so existing software&lt;br/&gt;are likely to be familiar with them.&lt;br/&gt;&lt;br/&gt;Tree Expressions are largely incompatible with existing script&lt;br/&gt;expressions due to the restrictions in those expressions.&lt;br/&gt;As of 2021-06-27, the only allowed script expression that can be used in&lt;br/&gt;a tree expression is &amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt;.&lt;br/&gt;However there will be future BIPs that specify script expressions that&lt;br/&gt;can be used in tree expressions.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;tr()&amp;lt;/tt&amp;gt; descriptors have been implemented in Bitcoin Core since&lt;br/&gt;version 22.0.&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-multi&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: Multisig Output Script Descriptors&lt;br/&gt;   Author: Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;           Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-multi&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-multi&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document specifies &amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt;&lt;br/&gt;output script descriptors.&lt;br/&gt;Both functions take a threshold and one or more public keys and produce&lt;br/&gt;a multisig output script.&lt;br/&gt;&amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt; specifies the public keys in the output script in the&lt;br/&gt;order given in the descriptor while &amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt; sorts the&lt;br/&gt;public keys lexicographically when the output script is produced.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;The most common complex script used in Bitcoin is a threshold multisig.&lt;br/&gt;These expressions allow specifying multisig scripts as a descriptor.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;Two new script expressions are defined: &amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt;, and&lt;br/&gt;&amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt;.&lt;br/&gt;Both expressions produce the scripts of the same template and take the&lt;br/&gt;same arguments.&lt;br/&gt;They are written as &amp;lt;tt&amp;gt;multi(k,KEY_1,KEY_2,...,KEY_n)&amp;lt;/tt&amp;gt;.&lt;br/&gt;&amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; is the threshold - the number of keys that must sign the&lt;br/&gt;input for the script to be valid.&lt;br/&gt;&amp;lt;tt&amp;gt;KEY_1,KEY_2,...,KEY_n&amp;lt;/tt&amp;gt; are the key expressions for the multisig.&lt;br/&gt;&amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; must be less than or equal to &amp;lt;tt&amp;gt;n&amp;lt;tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt; expressions can be used as a&lt;br/&gt;top level expression, or inside of either a &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; or&lt;br/&gt;&amp;lt;tt&amp;gt;wsh()&amp;lt;/tt&amp;gt; descriptor.&lt;br/&gt;Depending on the higher level descriptors, there may be restrictions on&lt;br/&gt;the type of public keys that can be included.&lt;br/&gt;&lt;br/&gt;Depending on the higher level descriptors, there are also restrictions&lt;br/&gt;on the number of keys that can be present, i.e. the maximum value of&lt;br/&gt;&amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt;.&lt;br/&gt;When used at the top level, there can only be at most 3 keys.&lt;br/&gt;When used inside of a &amp;lt;tt&amp;gt;sh()&amp;lt;/tt&amp;gt; expression, there can only be most&lt;br/&gt;15 compressed public keys (this is limited by the P2SH script limit).&lt;br/&gt;Otherwise the maximum number of keys is 20.&lt;br/&gt;&lt;br/&gt;The output script produced also depends on the value of &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt;. If&lt;br/&gt;&amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; is less than or equal to 16:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;OP_k KEY_1 KEY_2 ... KEY_n OP_CHECKMULTISIG&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;if &amp;lt;tt&amp;gt;k&amp;lt;/tt&amp;gt; is greater than 16:&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;k KEY_1 KEY_2 ... KEY_n OP_CHECKMULTISIG&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The only change for &amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt; is that the keys are sorted&lt;br/&gt;lexicographically prior to the creation of the output script.&lt;br/&gt;This sorting is on the keys that are to be put into the output script,&lt;br/&gt;i.e. after all extended keys are derived.&lt;br/&gt;&lt;br/&gt;===Multiple Extended Keys&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;When one or more the key expressions in a &amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt; or&lt;br/&gt;&amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt; expression are extended keys, the derived keys&lt;br/&gt;use the same child index.&lt;br/&gt;This changes the keys in lockstep and allows for output scripts to be&lt;br/&gt;indexed in the same way that the derived keys are indexed.&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;sortedmulti()&amp;lt;/tt&amp;gt; descriptors use the format&lt;br/&gt;and general operation specified in&lt;br/&gt;[[bip-descriptor-general.mediawiki|bip-descriptor-general]].&lt;br/&gt;As these are a wholly new descriptors, they are not compatible with any&lt;br/&gt;implementation.&lt;br/&gt;However the scripts produced are standard scripts so existing software&lt;br/&gt;are likely to be familiar with them.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;multi()&amp;lt;/tt&amp;gt; descriptors have been implemented&lt;br/&gt;in Bitcoin Core since version 0.17.&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-combo&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: combo() Output Script Descriptors&lt;br/&gt;   Author: Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;           Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-combo&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-combo&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document specifies &amp;lt;tt&amp;gt;combo()&amp;lt;/tt&amp;gt; output script descriptors.&lt;br/&gt;These take a key and produce P2PK, P2PKH, P2WPKH, and P2SH-P2WPKH output&lt;br/&gt;scripts if applicable to the key.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;In order to make the transition from traditional key based wallets to&lt;br/&gt;descriptor based wallets easier, it is useful to be able to take a key&lt;br/&gt;and produce the scripts which have traditionally been produced by wallet&lt;br/&gt;software.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;A new top level script expression is defined: &amp;lt;tt&amp;gt;combo(KEY)&amp;lt;/tt&amp;gt;.&lt;br/&gt;This expression can only be used as a top level expression.&lt;br/&gt;It takes a single key expression as an argument and produces either 2 or&lt;br/&gt;4 output scripts, depending on the key.&lt;br/&gt;A &amp;lt;tt&amp;gt;combo()&amp;lt;/tt&amp;gt; expression always produces a P2PK and P2PKH script,&lt;br/&gt;the same as putting the key in both a &amp;lt;tt&amp;gt;pk()&amp;lt;/tt&amp;gt; and a &amp;lt;tt&amp;gt;pkh()&amp;lt;/tt&amp;gt;&lt;br/&gt;expression.&lt;br/&gt;If the key is/has a compressed public key, then P2WPKH and P2SH-P2WPKH&lt;br/&gt;scripts are also produced, the same as putting the key in both a&lt;br/&gt;&amp;lt;tt&amp;gt;wpkh()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;sh(wpkh())&amp;lt;/tt&amp;gt; expression.&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;combo()&amp;lt;/tt&amp;gt; descriptors use the format and general operation&lt;br/&gt;specified in [[bip-descriptor-general.mediawiki|bip-descriptor-general]].&lt;br/&gt;As this is a wholly new descriptor, it is not compatible with any&lt;br/&gt;implementation.&lt;br/&gt;However the scripts produced are standard scripts so existing software&lt;br/&gt;are likely to be familiar with them.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;combo&amp;lt;/tt&amp;gt; descriptors have been implemented in Bitcoin Core since&lt;br/&gt;version 0.17.&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-descriptors-encap&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: raw() and addr() Output Script Descriptors&lt;br/&gt;   Author: Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;           Pieter Wuille &amp;lt;pieter at wuille.net&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-raw&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-descriptors-raw&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-27&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document specifies &amp;lt;tt&amp;gt;raw()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;addr()&amp;lt;/tt&amp;gt; output script&lt;br/&gt;descriptors.&lt;br/&gt;&amp;lt;tt&amp;gt;raw()&amp;lt;/tt&amp;gt; encapsulates a raw script as a descriptor.&lt;br/&gt;&amp;lt;tt&amp;gt;addr()&amp;lt;/tt&amp;gt; encapsulates an address as a descriptor.&lt;br/&gt;&lt;br/&gt;==Copyright==&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the BSD 2-clause license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;In order to make descriptors maximally compatible with scripts in use&lt;br/&gt;today, it is useful to be able to wrap any arbitrary output script or an&lt;br/&gt;address into a descriptor.&lt;br/&gt;&lt;br/&gt;==Specification==&lt;br/&gt;&lt;br/&gt;Two new script expressions are defined: &amp;lt;tt&amp;gt;raw()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;addr()&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;raw()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;raw(HEX)&amp;lt;/tt&amp;gt; expression can only be used as a top level descriptor.&lt;br/&gt;As the argument, it takes a hex string representing a Bitcoin script.&lt;br/&gt;The output script produced by this descriptor is the script represented&lt;br/&gt;by &amp;lt;tt&amp;gt;HEX&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;===&amp;lt;tt&amp;gt;addr()&amp;lt;/tt&amp;gt;===&lt;br/&gt;&lt;br/&gt;The &amp;lt;tt&amp;gt;addr(ADDR)&amp;lt;/tt&amp;gt; expression can only be used as a top level&lt;br/&gt;descriptor.&lt;br/&gt;It takes an address as its single argument.&lt;br/&gt;The output script produced by this descriptor is the output script&lt;br/&gt;produced by the address &amp;lt;tt&amp;gt;ADDR&amp;lt;/tt&amp;gt;.&lt;br/&gt;&lt;br/&gt;==Test Vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;raw()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;addr()&amp;lt;/tt&amp;gt; descriptors use the format and&lt;br/&gt;general operation specified in&lt;br/&gt;[[bip-descriptor-general.mediawiki|bip-descriptor-general]].&lt;br/&gt;As this is a wholly new descriptor, it is not compatible with any&lt;br/&gt;implementation.&lt;br/&gt;The reuse of existing Bitcoin addresses allows for this to be more&lt;br/&gt;easily implemented.&lt;br/&gt;&lt;br/&gt;==Reference Implemntation==&lt;br/&gt;&lt;br/&gt;&amp;lt;tt&amp;gt;raw()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;addr&amp;lt;/tt&amp;gt; descriptors have been implemented in&lt;br/&gt;Bitcoin Core since version 0.17.
    </content>
    <updated>2023-06-08T00:55:46&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvfxs4pceqr0s66fugr8eha90arp3rurw7286se76a8wehczsdpmgzyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqy9u763</id>
    
      <title type="html">📅 Original date posted:2021-06-22 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvfxs4pceqr0s66fugr8eha90arp3rurw7286se76a8wehczsdpmgzyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqy9u763" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsrudx756lsaaxwj34tpycy3wwg070cvmsnw46zsnple2v8k6zq95snl0u2r&#39;&gt;nevent1q…0u2r&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2021-06-22&lt;br/&gt;📝 Original message:Hi All,&lt;br/&gt;&lt;br/&gt;I would like to propose a simple derivation path scheme for keys to be&lt;br/&gt;used in single key Taproot scripts. This is based on BIP 44 so it is&lt;br/&gt;basically identical to BIPs 49 and 84. Like with those BIPs, the actual&lt;br/&gt;value to be used in the purpose level will be set to the BIP number,&lt;br/&gt;once assigned.&lt;br/&gt;&lt;br/&gt;Note that the keys derived in this method should be for the Taproot&lt;br/&gt;internal key, which should then be tweaked with the hash of itself as&lt;br/&gt;recommended by BIP 341. The keys derived at this path should not be used&lt;br/&gt;directly as the Taproot output pubkey. Additionally, this BIP does not&lt;br/&gt;specify new version bytes for extended key serialization because, with&lt;br/&gt;the advent of descriptors, I think that is unnecessary. In fact, this&lt;br/&gt;BIP feels somewhat unnecessary to me, but it seems like it will be&lt;br/&gt;needed for now in order to drive adoption and implementation of Taproot&lt;br/&gt;into software and hardware wallets.&lt;br/&gt;&lt;br/&gt;The text can be viewed below, with the rendered text available at&lt;br/&gt;&lt;a href=&#34;https://github.com/achow101/bips/blob/taproot-bip44/bip-taproot-bip44.mediawiki&#34;&gt;https://github.com/achow101/bips/blob/taproot-bip44/bip-taproot-bip44.mediawiki&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Andrew Chow&lt;br/&gt;&lt;br/&gt;---&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;   BIP: bip-taproot-bip44&lt;br/&gt;   Layer: Applications&lt;br/&gt;   Title: Derivation scheme for P2TR based accounts&lt;br/&gt;   Author: Andrew Chow &amp;lt;andrew at achow101.com&amp;gt;&lt;br/&gt;   Comments-Summary: No comments yet.&lt;br/&gt;   Comments-URI:&lt;br/&gt;&lt;a href=&#34;https://github.com/bitcoin/bips/wiki/Comments:BIP-taproot-bip44&#34;&gt;https://github.com/bitcoin/bips/wiki/Comments:BIP-taproot-bip44&lt;/a&gt;&lt;br/&gt;   Status: Draft&lt;br/&gt;   Type: Informational&lt;br/&gt;   Created: 2021-06-22&lt;br/&gt;   License: BSD-2-Clause&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Abstract==&lt;br/&gt;&lt;br/&gt;This document suggests a derivation scheme for HD wallets whose keys are&lt;br/&gt;involved in single key&lt;br/&gt;P2TR ([[bip-0341.mediawiki|BIP 341]]) outputs as the Taproot internal key.&lt;br/&gt;&lt;br/&gt;===Copyright===&lt;br/&gt;&lt;br/&gt;This BIP is licensed under the 2-clause BSD license.&lt;br/&gt;&lt;br/&gt;==Motivation==&lt;br/&gt;&lt;br/&gt;With the usage of single key P2TR transactions, it is useful to have a&lt;br/&gt;common derivation scheme so&lt;br/&gt;that HD wallets that only have a backup of the HD seed can be likely to&lt;br/&gt;recover single key Taproot&lt;br/&gt;outputs. Although there are now solutions which obviate the need for&lt;br/&gt;fixed derivation paths for&lt;br/&gt;specific script types, many software wallets and hardware signers still&lt;br/&gt;use seed backups which&lt;br/&gt;lack derivation path and script information. Thus we largely use the&lt;br/&gt;same approach used in BIPs&lt;br/&gt;[[bip-0049.mediawiki|49]] and [[bip-0084.mediawiki|84]] for ease of&lt;br/&gt;implementation.&lt;br/&gt;&lt;br/&gt;==Specifications==&lt;br/&gt;&lt;br/&gt;This BIP defines the two needed steps to derive multiple deterministic&lt;br/&gt;addresses based on a&lt;br/&gt;[[bip-0032.mediawiki|BIP 32]] master private key.&lt;br/&gt;&lt;br/&gt;===Public key derivation===&lt;br/&gt;&lt;br/&gt;To derive a public key from the root account, this BIP uses the same&lt;br/&gt;account-structure as&lt;br/&gt;defined in BIPs [[bip-0044.mediawiki|44]], [[bip-0049.mediawiki|49]],&lt;br/&gt;and [[bip-0084.mediawiki|84]],&lt;br/&gt;but with a different purpose value for the script type.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;m / purpose&amp;#39; / coin_type&amp;#39; / account&amp;#39; / change / address_index&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;For the &amp;lt;tt&amp;gt;purpose&amp;lt;/tt&amp;gt;-path level it uses &amp;lt;tt&amp;gt;&amp;lt;BIPNUMBER&amp;gt;&amp;#39;&amp;lt;/tt&amp;gt;.&lt;br/&gt;The rest of the levels are used as defined in BIPs 44, 49, and 84.&lt;br/&gt;&lt;br/&gt;===Address derivation===&lt;br/&gt;&lt;br/&gt;To derive the output key used in the P2TR script from the derived public&lt;br/&gt;key, we use the method&lt;br/&gt;recommended in&lt;br/&gt;[[bip-0341.mediawiki#constructing-and-spending-taproot-outputs|BIP 341]]:&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;internal_key:       lift_x(derived_key)&lt;br/&gt;32_byte_output_key: internal_key &#43; int(HashTapTweak(bytes(internal_key)))G&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;In a transaction, the scripts and witnesses are as defined in&lt;br/&gt;[[bip-0341.mediawiki#specification|BIP 341]]:&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;witness:      &amp;lt;signature&amp;gt;&lt;br/&gt;scriptSig:    (empty)&lt;br/&gt;scriptPubKey: 1 &amp;lt;32_byte_output_key&amp;gt;&lt;br/&gt;               (0x5120{32_byte_output_key})&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;==Backwards Compatibility==&lt;br/&gt;&lt;br/&gt;This BIP is not backwards compatible by design.&lt;br/&gt;An incompatible wallet will not discover these accounts at all and the&lt;br/&gt;user will notice that&lt;br/&gt;something is wrong.&lt;br/&gt;&lt;br/&gt;However this BIP uses the same method used in BIPs 44, 49, and 84, so it&lt;br/&gt;should not be difficult&lt;br/&gt;to implement.&lt;br/&gt;&lt;br/&gt;==Test vectors==&lt;br/&gt;&lt;br/&gt;TBD&lt;br/&gt;&lt;br/&gt;==Reference==&lt;br/&gt;&lt;br/&gt;* [[bip-0032.mediawiki|BIP32 - Hierarchical Deterministic Wallets]]&lt;br/&gt;* [[bip-0043.mediawiki|BIP43 - Purpose Field for Deterministic Wallets]]&lt;br/&gt;* [[bip-0044.mediawiki|BIP44 - Multi-Account Hierarchy for Deterministic&lt;br/&gt;Wallets]]&lt;br/&gt;* [[bip-0049.mediawiki|BIP49 - Derivation scheme for&lt;br/&gt;P2WPKH-nested-in-P2SH based accounts]]&lt;br/&gt;* [[bip-0084.mediawiki|BIP84 - Derivation scheme for P2WPKH based accounts]]&lt;br/&gt;* [[bip-0341.mediawiki|BIP341 - Taproot: SegWit version 1 spending rules]]
    </content>
    <updated>2023-06-08T00:55:22&#43;02:00</updated>
  </entry>

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

  <entry>
    <id>https://nostr.ae/nevent1qqsvdln27pdv05f2wlz9krxm76gnapf5l02zle3c4h2qwgpwhvy7lfszyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dq4udcvj</id>
    
      <title type="html">📅 Original date posted:2020-01-13 📝 Original message:On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvdln27pdv05f2wlz9krxm76gnapf5l02zle3c4h2qwgpwhvy7lfszyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dq4udcvj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswldq84k94wutwuqc8gkgrzvxqmd03at93vatans6kthfd8cjnwnsvwfctq&#39;&gt;nevent1q…fctq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-01-13&lt;br/&gt;📝 Original message:On 1/13/20 9:28 AM, Peter D. Gray wrote:&lt;br/&gt;&amp;gt; I don&amp;#39;t have a specific attack in mind, but these signatures, if&lt;br/&gt;&amp;gt; adopted by the community at large, will allow detection of-, and&lt;br/&gt;&amp;gt; could mitigate damage from-, some broad &amp;#34;bug-classes&amp;#34;.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Consider if the PSBT Signer (hardware wallet) has bugs. Perhaps if&lt;br/&gt;&amp;gt; you tweak the PSBT in some unnatural way it produces output that&lt;br/&gt;&amp;gt; reveals the private key (duplicate k-value perhaps), or corrupts&lt;br/&gt;&amp;gt; the display of the transaction in helpful (to the attacker) ways&lt;br/&gt;&amp;gt; (typically case: output hidden as change).&lt;br/&gt;&lt;br/&gt;Since the PSBT is to be signed by one of the Signers for the PSBT, I&lt;br/&gt;don&amp;#39;t see how this is useful. If it is mutated and the signer has bugs,&lt;br/&gt;especially parsing bugs, the Signer also adding its signature won&amp;#39;t&lt;br/&gt;help. In your proposal, it is the Signer who adds the signature, so it&lt;br/&gt;will receive a PSBT without auth sigs and thus that could be mutated to&lt;br/&gt;trigger those bugs anyways.&lt;br/&gt;&lt;br/&gt;&amp;gt; There could also be bugs in the Combiner/Finalizer which the MiTM&lt;br/&gt;&amp;gt; wants to trigger. Legimate files, signed by the PSBT Signer, will not&lt;br/&gt;&amp;gt; contain those attacks, so are &amp;#34;safer&amp;#34; to process, even if your&lt;br/&gt;&amp;gt; Combiner&amp;#39;s PSBT parser has bugs or is tragically dumb.&lt;br/&gt;&lt;br/&gt;The job of Combiners is fairly limited and is really just related to&lt;br/&gt;parsing the PSBT into some internal object then shuffling those fields&lt;br/&gt;around. In that case, any bugs an attacker would want to exploit have to&lt;br/&gt;be deserialization bugs, in which case, your auth sigs don&amp;#39;t help. The&lt;br/&gt;Combiner still has to deserialize the PSBT to get the signature, then it&lt;br/&gt;needs to re-serialize the PSBT to check that signature. An attacker&lt;br/&gt;could insert bad bytes into the PSBT which causes problems during&lt;br/&gt;deserialization, before the Combiner is able to check the signature.&lt;br/&gt;&lt;br/&gt;For Finalizers, since its job is to construct the final&lt;br/&gt;scriptSig/scriptWitness, at worst, all it can do is produce an invalid&lt;br/&gt;transaction. Finalizers don&amp;#39;t have access to the private keys so there&amp;#39;s&lt;br/&gt;no bug possible that can result in a Finalizer producing a transaction&lt;br/&gt;that reveals the private key.&lt;br/&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; That&amp;#39;s just it, when we receive a signed PSBT, at present we don&amp;#39;t&lt;br/&gt;&amp;gt; know *what* was signed without a complete understanding of the&lt;br/&gt;&amp;gt; transaction, the input UTXO (at least syntactially), and PSBT file&lt;br/&gt;&amp;gt; contents.  If there are bugs in that understanding (ie. checks we&lt;br/&gt;&amp;gt; all know are needed, but no-one actually implemented) then we might&lt;br/&gt;&amp;gt; transmit an harmful transaction, or continue to process a file&lt;br/&gt;&amp;gt; that has been corrupted-with-intent by a MiTM.&lt;br/&gt;&lt;br/&gt;ISTM the same is true of your proposal. You need to deserialize the PSBT&lt;br/&gt;and then figure out which fields were &amp;#34;original&amp;#34; and in what order. If&lt;br/&gt;there is a bug in your deserialization, an attacker can still exploit&lt;br/&gt;that. And if there is a bug in your reconstruction of &amp;#34;original&amp;#34;, you&amp;#39;ll&lt;br/&gt;have false positives.&lt;br/&gt;&lt;br/&gt;&amp;gt; It&amp;#39;s fine to say that, but in an embedded environment, with very&lt;br/&gt;&amp;gt; limited memory like the Coldcard, PGP isn&amp;#39;t an option (signing vs.&lt;br/&gt;&amp;gt; signature verification). I want to leverage the existing crypto and&lt;br/&gt;&amp;gt; PKI that we already have in play.&lt;br/&gt;&lt;br/&gt;My point was that you can achieve your MiTM protection by having the&lt;br/&gt;signature separate from the PSBT. You can still make your ECDSA&lt;br/&gt;signature and send it along with the PSBT, and you can do it with fixed&lt;br/&gt;or exchanged keys, no need for parsing the PSBT itself. It can be part&lt;br/&gt;of the transport protocol, not part of the data that is being transferred.&lt;br/&gt;&lt;br/&gt;Andrew&lt;br/&gt;&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; On 1/11/20 3:17 PM, Dmitry Petukhov via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; ... [many valid points, repeated by Andrew] ...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If there is MitM, checking something at Finalizer is likely too&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; late - the party that can intercept PSBTs can finalize before the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; legitimate Finalizer and broadcast the transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Yes, that is a problem which is proposal does not address. If the&lt;br/&gt;&amp;gt; MitM has control over both directions, in and out, then whatever&lt;br/&gt;&amp;gt; he or she was trying to do will still happen. Personally, I&amp;#39;m okay&lt;br/&gt;&amp;gt; with that as a limition, but using the same signatures features,&lt;br/&gt;&amp;gt; and a pre-shared public key between the PSBT Creator and the Signer,&lt;br/&gt;&amp;gt; we could block the Signer from looking at MitM&amp;#39;ed files. (The Signer&lt;br/&gt;&amp;gt; would require and verify incoming unsigned PSBT to contain the&lt;br/&gt;&amp;gt; last-output-section-signature thing.) I&amp;#39;m not planning on supporting&lt;br/&gt;&amp;gt; that on the Coldcard (at least not yet), but with the proposed&lt;br/&gt;&amp;gt; additions, it is possible to do without further changes to the PSBT&lt;br/&gt;&amp;gt; spec.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Participants can work from the same PSBT ...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; either pass two files (original and updated), or work out which fields&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (key-value blobs) to remove to get the &amp;#39;source&amp;#39; PSBT (which might not be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; trivial with presense of proprietary and unknown fields). Even if you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; know which key-value pairs to remove, there is no requirement for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ordering of the fields, and some signer can serialize them in different&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; order after dserialize/sign/add-signatures/re-serialize operation.&lt;br/&gt;&amp;gt; ...&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Introducing additional ordering or other structure requirements over&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; simple key-value structure will add complexity to PSBT processing, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; adding complexity on such a basic level should have really serious&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; reasons, because that increases effort required for even basic&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implementations and increases chance of bugs.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I want these signatures to protect against PSBT parsing bugs. That&amp;#39;s&lt;br/&gt;&amp;gt; why they are byte-level on the whole file contents, and not based&lt;br/&gt;&amp;gt; on sub-sections of the file or various fields inside the file. Yes,&lt;br/&gt;&amp;gt; there are non-linear PSBT paths that will be difficult or impossible&lt;br/&gt;&amp;gt; to support with this approach. I would not expect implementations to&lt;br/&gt;&amp;gt; do anything fancy to reconstruct PSBT contents, I think they would&lt;br/&gt;&amp;gt; just track the complete file. In most setups today the Creator,&lt;br/&gt;&amp;gt; Combiner and Finalizer are the same device, and they are desktop&lt;br/&gt;&amp;gt; systems with gigs of memory.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If there is some authority on the &amp;#39;correctness&amp;#39; of &amp;#39;original&amp;#39; PSBT&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (all particpants receive same PSBT at the start), particpants should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; check the signature by that authority. That authority might use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the key used only for authentication, and not in the tx signing.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Yes, this can be acheived by pre-sharing a public key with the&lt;br/&gt;&amp;gt; Signer (described above). Only signed incoming PSBT&amp;#39;s would be&lt;br/&gt;&amp;gt; accepted. That key doesn&amp;#39;t have anything to do with the blockchain&lt;br/&gt;&amp;gt; or value transfer.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I think you do not need to wait for officially-assigned key numbers,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and can just implement the scheme you envision with proprietary keys,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; document and promote it. Then if it shows its usefulness, it will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; either become de-facto standard with your proprietary keys...&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Yes, 100% ... but I value the list&amp;#39;s feedback, and I would prefer to&lt;br/&gt;&amp;gt; start with a legitimate key number which I don&amp;#39;t need to change later. It&amp;#39;s&lt;br/&gt;&amp;gt; a non-breaking change and I wouldn&amp;#39;t propose it otherwise.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; ---&lt;br/&gt;&amp;gt; Peter D. Gray  ||  Founder, Coinkite  ||  Twitter: @dochex  ||  GPG: A3A31BAD 5A2A5B10&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; On Mon, Jan 13, 2020 at 06:39:28AM &#43;0000, Andrew Chow wrote:&lt;br/&gt;&amp;gt;&amp;gt; I agree with Dimitry. I don&amp;#39;t see the point of having the MiTM&lt;br/&gt;&amp;gt;&amp;gt; protection within the PSBT structure itself, in addition to the fact&lt;br/&gt;&amp;gt;&amp;gt; that adding new fields is largely unnecessary. In fact, I&amp;#39;m not quite&lt;br/&gt;&amp;gt;&amp;gt; sure what kind of attack you are trying to defend against with this&lt;br/&gt;&amp;gt;&amp;gt; proposal.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If there is a MiTM who can modify your PSBT, then they can just modify&lt;br/&gt;&amp;gt;&amp;gt; the result the signed PSBT to drop the auth signatures. Furthermore, any&lt;br/&gt;&amp;gt;&amp;gt; modifications to scripts or UTXOs would just result in an invalid&lt;br/&gt;&amp;gt;&amp;gt; signature, so only time is wasted. But you&amp;#39;ll just waste time anyways&lt;br/&gt;&amp;gt;&amp;gt; when you see a failed auth sig.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Additionally, when a signer processes a PSBT, it will either accept the&lt;br/&gt;&amp;gt;&amp;gt; PSBT and add a signature for its inputs, or reject it and do nothing.&lt;br/&gt;&amp;gt;&amp;gt; Given this behavior (and I assume you aren&amp;#39;t going to add auth sigs for&lt;br/&gt;&amp;gt;&amp;gt; rejected PSBTs because that doesn&amp;#39;t make any sense), then you already&lt;br/&gt;&amp;gt;&amp;gt; have a signature there that covers everything your auth signature would&lt;br/&gt;&amp;gt;&amp;gt; cover. So just verify those signatures instead; for any inputs with&lt;br/&gt;&amp;gt;&amp;gt; signatures, everything you need to verify them are already there.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Lastly, IMO, if you want MiTM protection, then you should do your&lt;br/&gt;&amp;gt;&amp;gt; protection with out of band communication. Just PGP sign the PSBT (or&lt;br/&gt;&amp;gt;&amp;gt; something similar) and send the signature along separately.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Andrew&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On 1/11/20 3:17 PM, Dmitry Petukhov via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I am not sure that this particular task should be done with data&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; embedded in PSBT itself, and not with some sort of container that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; includes PSBT and the authentication information.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The benefit seems to be in reusing PSBT structure for compatibilty, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this might be a valid way, although I do not agree with some of your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; points. I elaborate below:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 1) In the PSBT globals section, a signature over the &amp;#34;source&amp;#34; PSBT&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; file. It would cover all the bytes of the original PSBT file, as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; it was received by the Signer.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The problem of authenticating the contents of PSBT is independent of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the signing action. PSBT might be altered on the path from Creator to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Signer. Therefore you cannot always say that Signer will be an&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; authority over &amp;#39;correctness&amp;#39; of PSBT.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; - At the end of the signing process, the Finalizer should check all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the Signers have worked from the same PSBT file (assuming that&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the flow expected)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If there is MitM, checking something at Finalizer is likely too&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; late - the party that can intercept PSBTs can finalize before the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; legitimate Finalizer and broadcast the transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Participants can work from the same PSBT file if they all receive the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; same PSBT, and not working in chain where next particpant receives&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; updated PSBT from the previous participant. Otherwise they will need to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; either pass two files (original and updated), or work out which fields&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (key-value blobs) to remove to get the &amp;#39;source&amp;#39; PSBT (which might not be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; trivial with presense of proprietary and unknown fields). Even if you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; know which key-value pairs to remove, there is no requirement for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; ordering of the fields, and some signer can serialize them in different&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; order after dserialize/sign/add-signatures/re-serialize operation.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Introducing additional ordering or other structure requirements over&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; simple key-value structure will add complexity to PSBT processing, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; adding complexity on such a basic level should have really serious&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; reasons, because that increases effort required for even basic&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; implementations and increases chance of bugs.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If there is some authority on the &amp;#39;correctness&amp;#39; of &amp;#39;original&amp;#39; PSBT&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (all particpants receive same PSBT at the start), particpants should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; check the signature by that authority. That authority might use&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the key used only for authentication, and not in the tx signing.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; If particpants send PSBT in chain after adding their signatures, then&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; each participant can add their signature to say &amp;#39;the contents&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; of PSBT after my updates should match this hash&amp;#39;.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The signatures of previous participants in the chain most likely do not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; matter because of difficulty of restoring the contents of PSBT as it&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; was before the previous particpant, if you do not pass _all_ the PSBTs&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; (which is excessive).&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 2) In the output section, specifically, the last key/value pair of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the last output of the transaction, I want to add a similar signature,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; again signed by one of the keys used in the signing process. This&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; signature will cover all the bytes of the resulting (signed) PSBT&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; up to that point. Because it is the last output of the output&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; section, that signature will be the last few bytes of the PSBT file.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; By &amp;#34;appending&amp;#34; the signature in this way, it&amp;#39;s easier to validate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and create the signature, without blanking the signature area during&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; digest step.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; This will introduce unnecessary higher-level structure to PSBT for the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; reasons that I do not find strong enough for the amount of complexity&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; added.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Also, as I said above, you likely do not need more than one&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; signature - if this is &amp;#39;fan-out&amp;#39; scheme, then participants need do&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; check the sig of authority that created PSBT; if this is piggy-back&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; chain, then only previous particpant&amp;#39;s signature is easily verifiable.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ## Next Steps&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;d like to get two officially-assigned BIP-174 key numbers assigned&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; for these two signatures, and then I will see that it gets added&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; into Coldcard&amp;#39;s firmware immediately. In time, other tools are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; welcome to take advantage of these checks. I will also write a BIP&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; for this, and/or make an addition to BIP-174.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I think you do not need to wait for officially-assigned key numbers,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; and can just implement the scheme you envision with proprietary keys,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; document and promote it. Then if it shows its usefulness, it will&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; either become de-facto standard with your proprietary keys (and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; everyone will want to support &amp;#39;Coldard PSBT auth&amp;#39; or whatever the name),&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; or the scheme will have serious grounds to be converted to standard and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have non-proprietary keys assigned.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; // Dmitry.&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;
    </content>
    <updated>2023-06-07T20:22:22&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdakgkc3nr26jvlkwlq2cdjqxahpwrjlvkmgeft762xff2snf0njszyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqxnvvdk</id>
    
      <title type="html">📅 Original date posted:2020-01-13 📝 Original message:I ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdakgkc3nr26jvlkwlq2cdjqxahpwrjlvkmgeft762xff2snf0njszyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqxnvvdk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst8drsal3x00lxrz7tf3hpg0vq7snq6ye09hw88aht2p4xlnyhm0qzn3hxp&#39;&gt;nevent1q…3hxp&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2020-01-13&lt;br/&gt;📝 Original message:I agree with Dimitry. I don&amp;#39;t see the point of having the MiTM&lt;br/&gt;protection within the PSBT structure itself, in addition to the fact&lt;br/&gt;that adding new fields is largely unnecessary. In fact, I&amp;#39;m not quite&lt;br/&gt;sure what kind of attack you are trying to defend against with this&lt;br/&gt;proposal.&lt;br/&gt;&lt;br/&gt;If there is a MiTM who can modify your PSBT, then they can just modify&lt;br/&gt;the result the signed PSBT to drop the auth signatures. Furthermore, any&lt;br/&gt;modifications to scripts or UTXOs would just result in an invalid&lt;br/&gt;signature, so only time is wasted. But you&amp;#39;ll just waste time anyways&lt;br/&gt;when you see a failed auth sig.&lt;br/&gt;&lt;br/&gt;Additionally, when a signer processes a PSBT, it will either accept the&lt;br/&gt;PSBT and add a signature for its inputs, or reject it and do nothing.&lt;br/&gt;Given this behavior (and I assume you aren&amp;#39;t going to add auth sigs for&lt;br/&gt;rejected PSBTs because that doesn&amp;#39;t make any sense), then you already&lt;br/&gt;have a signature there that covers everything your auth signature would&lt;br/&gt;cover. So just verify those signatures instead; for any inputs with&lt;br/&gt;signatures, everything you need to verify them are already there.&lt;br/&gt;&lt;br/&gt;Lastly, IMO, if you want MiTM protection, then you should do your&lt;br/&gt;protection with out of band communication. Just PGP sign the PSBT (or&lt;br/&gt;something similar) and send the signature along separately.&lt;br/&gt;&lt;br/&gt;Andrew&lt;br/&gt;&lt;br/&gt;On 1/11/20 3:17 PM, Dmitry Petukhov via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I am not sure that this particular task should be done with data&lt;br/&gt;&amp;gt; embedded in PSBT itself, and not with some sort of container that&lt;br/&gt;&amp;gt; includes PSBT and the authentication information.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The benefit seems to be in reusing PSBT structure for compatibilty, and&lt;br/&gt;&amp;gt; this might be a valid way, although I do not agree with some of your&lt;br/&gt;&amp;gt; points. I elaborate below:&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; 1) In the PSBT globals section, a signature over the &amp;#34;source&amp;#34; PSBT&lt;br/&gt;&amp;gt;&amp;gt; file. It would cover all the bytes of the original PSBT file, as&lt;br/&gt;&amp;gt;&amp;gt; it was received by the Signer.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The problem of authenticating the contents of PSBT is independent of&lt;br/&gt;&amp;gt; the signing action. PSBT might be altered on the path from Creator to&lt;br/&gt;&amp;gt; Signer. Therefore you cannot always say that Signer will be an&lt;br/&gt;&amp;gt; authority over &amp;#39;correctness&amp;#39; of PSBT.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; - At the end of the signing process, the Finalizer should check all&lt;br/&gt;&amp;gt;&amp;gt; the Signers have worked from the same PSBT file (assuming that&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; the flow expected)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If there is MitM, checking something at Finalizer is likely too&lt;br/&gt;&amp;gt; late - the party that can intercept PSBTs can finalize before the&lt;br/&gt;&amp;gt; legitimate Finalizer and broadcast the transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Participants can work from the same PSBT file if they all receive the&lt;br/&gt;&amp;gt; same PSBT, and not working in chain where next particpant receives&lt;br/&gt;&amp;gt; updated PSBT from the previous participant. Otherwise they will need to&lt;br/&gt;&amp;gt; either pass two files (original and updated), or work out which fields&lt;br/&gt;&amp;gt; (key-value blobs) to remove to get the &amp;#39;source&amp;#39; PSBT (which might not be&lt;br/&gt;&amp;gt; trivial with presense of proprietary and unknown fields). Even if you&lt;br/&gt;&amp;gt; know which key-value pairs to remove, there is no requirement for&lt;br/&gt;&amp;gt; ordering of the fields, and some signer can serialize them in different&lt;br/&gt;&amp;gt; order after dserialize/sign/add-signatures/re-serialize operation.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Introducing additional ordering or other structure requirements over&lt;br/&gt;&amp;gt; simple key-value structure will add complexity to PSBT processing, and&lt;br/&gt;&amp;gt; adding complexity on such a basic level should have really serious&lt;br/&gt;&amp;gt; reasons, because that increases effort required for even basic&lt;br/&gt;&amp;gt; implementations and increases chance of bugs.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If there is some authority on the &amp;#39;correctness&amp;#39; of &amp;#39;original&amp;#39; PSBT&lt;br/&gt;&amp;gt; (all particpants receive same PSBT at the start), particpants should&lt;br/&gt;&amp;gt; check the signature by that authority. That authority might use&lt;br/&gt;&amp;gt; the key used only for authentication, and not in the tx signing.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; If particpants send PSBT in chain after adding their signatures, then&lt;br/&gt;&amp;gt; each participant can add their signature to say &amp;#39;the contents&lt;br/&gt;&amp;gt; of PSBT after my updates should match this hash&amp;#39;.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The signatures of previous participants in the chain most likely do not&lt;br/&gt;&amp;gt; matter because of difficulty of restoring the contents of PSBT as it&lt;br/&gt;&amp;gt; was before the previous particpant, if you do not pass _all_ the PSBTs&lt;br/&gt;&amp;gt; (which is excessive).&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; 2) In the output section, specifically, the last key/value pair of&lt;br/&gt;&amp;gt;&amp;gt; the last output of the transaction, I want to add a similar signature,&lt;br/&gt;&amp;gt;&amp;gt; again signed by one of the keys used in the signing process. This&lt;br/&gt;&amp;gt;&amp;gt; signature will cover all the bytes of the resulting (signed) PSBT&lt;br/&gt;&amp;gt;&amp;gt; up to that point. Because it is the last output of the output&lt;br/&gt;&amp;gt;&amp;gt; section, that signature will be the last few bytes of the PSBT file.&lt;br/&gt;&amp;gt;&amp;gt; By &amp;#34;appending&amp;#34; the signature in this way, it&amp;#39;s easier to validate&lt;br/&gt;&amp;gt;&amp;gt; and create the signature, without blanking the signature area during&lt;br/&gt;&amp;gt;&amp;gt; digest step.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This will introduce unnecessary higher-level structure to PSBT for the&lt;br/&gt;&amp;gt; reasons that I do not find strong enough for the amount of complexity&lt;br/&gt;&amp;gt; added.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Also, as I said above, you likely do not need more than one&lt;br/&gt;&amp;gt; signature - if this is &amp;#39;fan-out&amp;#39; scheme, then participants need do&lt;br/&gt;&amp;gt; check the sig of authority that created PSBT; if this is piggy-back&lt;br/&gt;&amp;gt; chain, then only previous particpant&amp;#39;s signature is easily verifiable.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt;&amp;gt; ## Next Steps&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;d like to get two officially-assigned BIP-174 key numbers assigned&lt;br/&gt;&amp;gt;&amp;gt; for these two signatures, and then I will see that it gets added&lt;br/&gt;&amp;gt;&amp;gt; into Coldcard&amp;#39;s firmware immediately. In time, other tools are&lt;br/&gt;&amp;gt;&amp;gt; welcome to take advantage of these checks. I will also write a BIP&lt;br/&gt;&amp;gt;&amp;gt; for this, and/or make an addition to BIP-174.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; I think you do not need to wait for officially-assigned key numbers,&lt;br/&gt;&amp;gt; and can just implement the scheme you envision with proprietary keys,&lt;br/&gt;&amp;gt; document and promote it. Then if it shows its usefulness, it will&lt;br/&gt;&amp;gt; either become de-facto standard with your proprietary keys (and&lt;br/&gt;&amp;gt; everyone will want to support &amp;#39;Coldard PSBT auth&amp;#39; or whatever the name),&lt;br/&gt;&amp;gt; or the scheme will have serious grounds to be converted to standard and&lt;br/&gt;&amp;gt; have non-proprietary keys assigned.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; // Dmitry.&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;
    </content>
    <updated>2023-06-07T20:22:21&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsr4yqhph2svnsxrg2jat29nv4ugn6cauc0f34azn05w2e7wk56a7szyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dq3jslz4</id>
    
      <title type="html">📅 Original date posted:2019-07-09 📝 Original message:This ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsr4yqhph2svnsxrg2jat29nv4ugn6cauc0f34azn05w2e7wk56a7szyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dq3jslz4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs94h6d37j5083jshs504dk324cqjp6c9wjx05kld3ry6e9kg4nfjgprpg2e&#39;&gt;nevent1q…pg2e&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-07-09&lt;br/&gt;📝 Original message:This was the original intent of the sighash field. Either the sighash is acceptable to the signer and the signer signs with it, or they do not sign at all.&lt;br/&gt;&lt;br/&gt;On 7/9/19 11:58 AM, Jonathan Underwood via bitcoin-dev wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Just to be brief, I&amp;#39;ll kick off with an attack scenario.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. I am a signer, I get a PSBT that is ready to sign. I parse. I sign according to the PSBT as-is.&lt;br/&gt;&amp;gt; 2. I notice my UTXO was stolen by a hacker because they changed my PSBT input&amp;#39;s sighashtype to SIGHASH_ANYONECANPAY | SIGHASH_NONE and after the fact they changed the outputs to send to themselves, and added an input they signed with SIGHASH_ALL.&lt;br/&gt;&amp;gt; 3. I lose the BTC in my UTXO.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; So we should definitely add to the signer checks &amp;#34;ensure the sighash type given is the type of sighash you want to sign.&amp;#34; etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My proposal for a wording change would be addition to the bullet list:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - If a sighash type is provided, the signer MUST check that the sighash type is acceptable to them, and fail signing if unacceptable.&lt;br/&gt;&amp;gt; - If a sighash type is not provided, the signer SHOULD sign using SIGHASH_ALL, but may sign with any sighash type they wish.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Any thoughts?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks,&lt;br/&gt;&amp;gt; Jon&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; Jonathan Underwood&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;&lt;br/&gt;&amp;gt; 指紋: 0xCE5EA9476DE7D3E45EBC3FDAD998682F3590FEA3&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/20190709/c75ad156/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20190709/c75ad156/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T20:19:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdz56vyyd6k6wa5sya5zht4wsrs28lr9zj9j5d7dhcllx9zv5es9czyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqtr6uh2</id>
    
      <title type="html">📅 Original date posted:2019-05-01 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdz56vyyd6k6wa5sya5zht4wsrs28lr9zj9j5d7dhcllx9zv5es9czyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqtr6uh2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw3n9cjnggdjpu859c34rlvl8fce2wnl6hfxznjz48gjk0wsp0j8sp4ktqt&#39;&gt;nevent1q…ktqt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-05-01&lt;br/&gt;📝 Original message:Hi Stepan,&lt;br/&gt;&lt;br/&gt;I think that this would be a good extension.&lt;br/&gt;&lt;br/&gt;Just for clairty, by xpub, do you mean the extended serialization format &lt;br/&gt;defined in BIP 32 or the Base58 check encoded string of that serialization?&lt;br/&gt;&lt;br/&gt;Andrew&lt;br/&gt;&lt;br/&gt;On 4/26/19 11:21 AM, Stepan Snigirev via bitcoin-dev wrote:&lt;br/&gt;&amp;gt; Hi list,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I was looking at the bip174 PSBT specs, in particular for &lt;br/&gt;&amp;gt; multisignature setup, and I think with current spec there is a way to &lt;br/&gt;&amp;gt; steal user funds in M of N setup with M ≤ N/2.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I made a small write-up on this: &lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/stepansnigirev/random_notes/blob/master/psbt_multisig.md&#34;&gt;https://github.com/stepansnigirev/random_notes/blob/master/psbt_multisig.md&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; To compress:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Currently in PSBT there is no way to reliably say if the output uses &lt;br/&gt;&amp;gt; the keys derived from the same root keys as the inputs aside from the &lt;br/&gt;&amp;gt; key owned by the signer =&amp;gt; there is no way to verify that the output &lt;br/&gt;&amp;gt; is a change output in multisig setup.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Therefore an attacker can replace half of the keys in the change &lt;br/&gt;&amp;gt; address by his own keys and still get the transaction signed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suggest to add an xpub field to the inputs and outputs metadata, &lt;br/&gt;&amp;gt; then signers can verify that the same xpubs are used for public keys &lt;br/&gt;&amp;gt; in inputs and outputs =&amp;gt; output is indeed a change.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Normally change and receiving addresses are derived from the same xpub &lt;br/&gt;&amp;gt; with non-hardened derivation pathes, so providing xpub after the last &lt;br/&gt;&amp;gt; hardened index should be enough to see that public keys of inputs and &lt;br/&gt;&amp;gt; change output are derived from the same xpub.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suggest to add the following key-value pairs to PSBT:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Type: BIP 32 public key `PSBT_IN_BIP32_XPUB = 0x10`&lt;br/&gt;&amp;gt; - Key: derivation path for xpub&lt;br/&gt;&amp;gt;   `{0x10}|{master key fingerprint}|{32-bit int}|...|{32-bit int}`&lt;br/&gt;&amp;gt; - Value: 78-byte xpub value&lt;br/&gt;&amp;gt;   `{xpub}`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Type: BIP 32 public key `PSBT_OUT_BIP32_XPUB = 0x03`&lt;br/&gt;&amp;gt; - Key: derivation path for xpub&lt;br/&gt;&amp;gt;   `{0x03}|{master key fingerprint}|{32-bit int}|...|{32-bit int}`&lt;br/&gt;&amp;gt; - Value: 78-byte xpub value&lt;br/&gt;&amp;gt;   `{xpub}`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Derivation paths are in the key of the key-value pair as they are used &lt;br/&gt;&amp;gt; for lookup, and xpub itself is the actual value being looked up.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I also want to mention that Trezor for example doesn&amp;#39;t suffer from &lt;br/&gt;&amp;gt; this problem as they use xpubs to verify change outputs. So it may &lt;br/&gt;&amp;gt; make sense to go through the communication protocols of existing &lt;br/&gt;&amp;gt; hardware / multisignature wallets and see if there is something else &lt;br/&gt;&amp;gt; we are missing.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; If everyone is happy about the proposal I would prepare a pull request &lt;br/&gt;&amp;gt; to the bip.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Best regards,&lt;br/&gt;&amp;gt; Stepan Snigirev.&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T20:17:52&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsvd6yqlwkmju7u077998akd6fneqla6x2dwjk8vh6pm2weyxtwhdczyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqnkgnuu</id>
    
      <title type="html">📅 Original date posted:2017-03-23 📝 Original message:The ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvd6yqlwkmju7u077998akd6fneqla6x2dwjk8vh6pm2weyxtwhdczyp9zw0drex4ctsyklpv7djsxd5halemzgpk2msh56k92w4rg4j5dqnkgnuu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfrlfjvauqqvc49575dnsyl5zq9xuh0ezyj4p5vr6qdru0cxspc2qkd777c&#39;&gt;nevent1q…777c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-03-23&lt;br/&gt;📝 Original message:The issue is due to Segwit blocks since Testnet has already activated&lt;br/&gt;Segwit. 0.12.x- nodes will receive a Segwit block with all of the&lt;br/&gt;witnesses stripped. When they relay this block to a 0.13.0&#43; node, the&lt;br/&gt;block will be rejected because those have Segwit functionality and&lt;br/&gt;require the witnesses to be in the block. Given that Testnet has a&lt;br/&gt;smaller number of nodes and less difficulty, this could result in some&lt;br/&gt;miners using 0.13.0&#43; mining blocks which do not propagate well and thus&lt;br/&gt;causing multiple chain splits and reorgs as other miners find blocks for&lt;br/&gt;the same height before receiving a block for that height.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On 3/23/2017 6:37 PM, Juan Garavaglia via bitcoin-dev wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We notice some reorgs in Bitcoin testnet, while reorgs in testnet are&lt;br/&gt;&amp;gt; common and may be part of different tests and experiments, it seems&lt;br/&gt;&amp;gt; the forks are not created by a single user and multiple blocks were&lt;br/&gt;&amp;gt; mined by different users in each chain.  My first impression was that&lt;br/&gt;&amp;gt; the problem was related to network issues but some Bitcoin explorers&lt;br/&gt;&amp;gt; were following one chain while others follow the other one. &lt;br/&gt;&amp;gt; Nonetheless, well established explorers like blocktrail.com or&lt;br/&gt;&amp;gt; blockr.io were following different chains at different heights which&lt;br/&gt;&amp;gt; led to me to believe that it was not a network issue. After some time,&lt;br/&gt;&amp;gt; a reorg occurs and it all comes to normal state as a single chain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; We started investigating more and we identified that the fork occurs&lt;br/&gt;&amp;gt; with nodes 0.12; in some situations, nodes 0.12 has longer/different&lt;br/&gt;&amp;gt; chains. The blocks in both chains are valid so something must be&lt;br/&gt;&amp;gt; occurring in the communication between nodes but not related with the&lt;br/&gt;&amp;gt; network itself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Long story short, when nodes 0.13&#43; receive blocks from 0.13&#43; nodes all&lt;br/&gt;&amp;gt; is ok, and those blocks propagate to older nodes with no issues. But&lt;br/&gt;&amp;gt; when a block tries to be propagated from bitcoind 0.12.&#43; to newer ones&lt;br/&gt;&amp;gt; those blocks are NOT being propagated to the peers with newer versions&lt;br/&gt;&amp;gt; while these newer blocks are being propagated to peers with older&lt;br/&gt;&amp;gt; versions with no issues.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; My conclusion is that we have a backward compatibility issue between&lt;br/&gt;&amp;gt; 0.13.X&#43; and older versions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The issue is simple to replicate, first, get latest version of&lt;br/&gt;&amp;gt; bitcoind, complete the IBD after is at current height, then force it&lt;br/&gt;&amp;gt; to use exclusively one or more peers of versions 0.12.X and older, and&lt;br/&gt;&amp;gt; you will notice that the latest version node will never receive a new&lt;br/&gt;&amp;gt; block.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Probably some alternative bitcoin implementations act as bridges&lt;br/&gt;&amp;gt; between these two versions and facilitate the chain reorgs.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I have not yet found any way where/how it can be used in a malicious&lt;br/&gt;&amp;gt; way or be exploited by a miner but in theory Bitcoin 0.13.X&#43; should&lt;br/&gt;&amp;gt; remain compatible with older ones, but a 0.13&#43; node may become&lt;br/&gt;&amp;gt; isolated by 0.12 peers, and there is not notice for the node owner.&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;&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;&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/20170323/a54eedc6/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170323/a54eedc6/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T19:57:42&#43;02:00</updated>
  </entry>

</feed>