BIP Draft: Disallow 64 byte transactions #1760

pull Christewart wants to merge 28 commits into bitcoin:master from Christewart:2024-12-20-64bytetxs changing 4 files +173 −0
  1. Christewart commented at 9:29 pm on February 10, 2025: contributor

    This BIP makes 64 byte bitcoin transactions serialized without the witness consensus invalid

    Mailing list post: https://groups.google.com/g/bitcoindev/c/rf3QOlzg230/m/eOOC8pkOAgAJ

    Delving discussion: https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710

    Side note, wasn’t sure how to best handle the 2-Bitcoin-Merkle.pdf as it isn’t hosted anywhere easily accessible AFAICT? For now I just added it into the git repo. Lmk if you have other suggestions

  2. jonatack added the label New BIP on Feb 10, 2025
  3. murchandamus commented at 7:36 pm on February 11, 2025: contributor
    I am a little surprised at this pull request, given the frequent coverage of Antoine’s ongoing research on reviving the Great Consensus Cleanup that includes a similar fix. It seems better to me to package all four fixes in one soft fork. Was it overlooked that this work is being duplicated, or are you disagreeing with the direction of Antoine’s work and want to put forward an alternative? Could you elaborate why you decided to submit this?
  4. Christewart commented at 8:11 pm on February 11, 2025: contributor

    I am a little surprised at this pull request, given the frequent coverage of Antoine’s ongoing research on reviving the Great Consensus Cleanup that includes a similar fix. It seems better to me to package all four fixes in one soft fork. Was it overlooked that this work is being duplicated, or are you disagreeing with the direction of Antoine’s work and want to put forward an alternative? Could you elaborate why you decided to submit this?

    HI Murch!

    Great Consensus Cleanup

    While the GCC is a great name for a disjoint set of bitcoin protocol security fixes, that doesn’t mean they all need to be bundled into one BIP and deployed at the same time.

    It seems better to me to package all four fixes in one soft fork.

    This document takes no opinion on how this enhancement is deployed.

    Previously we have deployed multiple consensus changes in a single soft fork that contained multiple BIPs. The 2017 Segwit soft fork had BIP141, BIP143. The Taproot soft fork had BIP341 and BIP342.

    Was it overlooked that this work is being duplicated,

    I was recommended that this was a piece of work that was easily to peel off from the rest of GCC and propose a fix for. Its relatively simple and straight forward, and has been known about for a long time.

    Antoine’s on going research.

    I think Antoine’s research is great, but just because he is researching the topic doesn’t mean he gets to monopolize the vulnerabilities. The 64 byte transaction vulnerability has been known since at least 2012 - yet no one has taken the time to write up a BIP to fix it 😬 . I’ve put forth the first BIP draft in the 13 years since this vulnerability has been known. I encourage Antoine to write up his proposal (hopefully sooner rather than later) as he doesn’t seem to be interested in working with me.

    Other vulnerabilities in GCC have also been known about for a long time - such as worse case block validation time. Antoine has done a lot of novel research there and I think his work product has been excellent on delving.

    There is plenty of meat left on the GCC bone, this was a small piece I decided to carve off.

  5. in bip-XXXX.mediawiki:20 in b08c7a116a outdated
    15+We describe the weaknesses to the merkle tree included in bitcoin block headers, various exploits for those weaknesses.
    16+
    17+==Motivation==
    18+
    19+Bitcoin block headers include a commitment to the set of transactions in a given
    20+block, which is implemented by constructing a Merkle tree of transaction id’s
    


    murchandamus commented at 10:16 pm on February 11, 2025:
    0block, which is implemented by constructing a Merkle tree of transaction ids
    
  6. in bip-XXXX.mediawiki:29 in b08c7a116a outdated
    24+transaction. However, Bitcoin’s particular construction of the Merkle tree has
    25+several security weaknesses, including at least two forms of block malleability
    26+that have an impact on the consensus logic of Bitcoin Core, and an attack on
    27+light clients, where an invalid transaction could be ”proven” to appear in a block
    28+by doing substantially less work than a SHA256 hash collision would require.
    29+This has been prevented by relay policy since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR #11423 disallows 64 byte transactions in bitcoin core relay]</ref>
    


    murchandamus commented at 10:18 pm on February 11, 2025:

    Bitcoin Core is a proper noun:

    0This has been prevented by relay policy since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR [#11423](/bitcoin-bips/11423/) disallows 64-byte transactions in Bitcoin Core relay]</ref>
    
  7. in bip-XXXX.mediawiki:33 in b08c7a116a outdated
    28+by doing substantially less work than a SHA256 hash collision would require.
    29+This has been prevented by relay policy since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR #11423 disallows 64 byte transactions in bitcoin core relay]</ref>
    30+
    31+==Specification==
    32+
    33+This BIP disallows bitcoin transactions that are serialized to 64 bytes in length without it's witness.
    


    murchandamus commented at 10:18 pm on February 11, 2025:
    0This BIP disallows bitcoin transactions that are serialized to 64 bytes in length without its witness.
    

    murchandamus commented at 11:08 pm on February 11, 2025:

    Could you explain the exact semantics of how and where such transactions are disallowed?

    Do you mean e.g., that a block including a 64-byte transaction must be rejected as invalid?

  8. in bip-XXXX.mediawiki:4 in b08c7a116a outdated
    0@@ -0,0 +1,140 @@
    1+<pre>
    2+  BIP: ?
    3+  Layer: Consensus (soft fork)
    4+  Title: Disallow 64 byte transactions
    


    murchandamus commented at 10:35 pm on February 11, 2025:

    Here and in the following, when used as an adjective, “64-byte” is commonly hyphenated.

    0  Title: Disallow 64-byte transactions
    
  9. in bip-XXXX.mediawiki:9 in b08c7a116a outdated
    0@@ -0,0 +1,140 @@
    1+<pre>
    2+  BIP: ?
    3+  Layer: Consensus (soft fork)
    4+  Title: Disallow 64 byte transactions
    5+  Author: Chris Stewart <stewart.chris1234@gmail.com>
    6+  Status: Draft
    7+  Type: Specification
    8+  License: BSD-3-Clause
    9+  Created: ?
    


    murchandamus commented at 10:35 pm on February 11, 2025:
    0  Created: ?
    1  License: BSD-3-Clause
    
  10. in bip-XXXX.mediawiki:7 in b08c7a116a outdated
    0@@ -0,0 +1,140 @@
    1+<pre>
    2+  BIP: ?
    3+  Layer: Consensus (soft fork)
    4+  Title: Disallow 64 byte transactions
    5+  Author: Chris Stewart <stewart.chris1234@gmail.com>
    6+  Status: Draft
    7+  Type: Specification
    


    murchandamus commented at 10:35 pm on February 11, 2025:
    0  Type: Standards Track
    
  11. in bip-XXXX.mediawiki:5 in b08c7a116a outdated
    0@@ -0,0 +1,140 @@
    1+<pre>
    2+  BIP: ?
    3+  Layer: Consensus (soft fork)
    4+  Title: Disallow 64 byte transactions
    5+  Author: Chris Stewart <stewart.chris1234@gmail.com>
    


    murchandamus commented at 10:35 pm on February 11, 2025:

    I’m afraid that BIP 2 is still Active, and BIP 3 is not yet:

    0  Author: Chris Stewart <stewart.chris1234@gmail.com>
    1  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-?
    
  12. in bip-XXXX.mediawiki:67 in b08c7a116a outdated
    62+This attack vector was fixed in 0.6.2<ref>[https://bitcoin.org/en/alert/2012-05-14-dos#risks CVE-2012-2459]</ref>, re-introduced in 0.13.x<ref>[https://github.com/bitcoin/bitcoin/pull/7225 #7225]</ref> and patched again in
    63+0.14<ref>[https://github.com/bitcoin/bitcoin/pull/9765 #9765]</ref> of bitcoin core.
    64+
    65+==== Block malleability with consensus VALID transactions ====
    66+
    67+Producing a valid bitcoin transaction T<sub>m</sub> that adheres to network consesnsus
    


    murchandamus commented at 10:46 pm on February 11, 2025:
    0Producing a valid bitcoin transaction T<sub>m</sub> that adheres to network consensus
    
  13. in bip-XXXX.mediawiki:90 in b08c7a116a outdated
    85+with the hash of some other fake, invalid transaction F. The attacker can fool the SPV client into believing that F
    86+was included in a bitcoin block rather than T with 81 bits<ref>[https://github.com/Christewart/bips/blob/2024-12-20-64bytetxs/bip-XXXX/2-BitcoinMerkle.pdf An attacker who can do 81 bits of work (followed by another 40 bits of work, to
    87+construct the funding transaction whose coins will be spent by this one) is able
    88+to fool an SPV client in this way.]</ref> of work. This also reduces implementation complexity of SPV wallets<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/43 The steps needed to make sure a merkle proof for a transaction is secure.]</ref>.
    89+
    90+This could be mitigated by knowing the depth of the merkle tree. Requiring SPV clients to request both the coinbase transaction could mitigate this attack.
    


    murchandamus commented at 11:05 pm on February 11, 2025:
    The area around “both the coinbase transaction” seems to be missing something
  14. in bip-XXXX.mediawiki:96 in b08c7a116a outdated
    91+To produce a valid coinbase transaction at the same depth that our fake transaction F occurs at would require 224 bits of work.
    92+As mentioned above, this is computionally and financially expensive, but theoretically possible.
    93+
    94+==Backward compatibility==
    95+
    96+There have been 5 64 byte transactions that have occcurred in the bitcoin blockchain as of this
    


    murchandamus commented at 11:10 pm on February 11, 2025:
    Could you expand on how you are suggesting that implementers should mitigate this incompatibility? What about the potential existence of a pre-signed transaction that serializes to 64 bytes?
  15. in bip-XXXX.mediawiki:35 in b08c7a116a outdated
    30+
    31+==Specification==
    32+
    33+This BIP disallows bitcoin transactions that are serialized to 64 bytes in length without it's witness.
    34+
    35+==Rationale==
    


    murchandamus commented at 11:15 pm on February 11, 2025:
    A lot of the content of this section would maybe fit better under Motivation. Rationale usually explores the design decisions, alternate designs, and related work. For example you could expand on the approach of tracking the height of the Merkle branch to the coinbase transaction in the Rationale.
  16. murchandamus commented at 11:30 pm on February 11, 2025: contributor

    This does seem like a reasonable start for a BIP. A few parts of the content could perhaps be organized a bit differently, and some sections could be expanded. Especially the Specification could be a bit more precise in what an implementation should do to be compliance with this BIP. I left you a few editorial nits that you could perhaps take a look at.

    It seems likely to me that this submission may be duplicating some effort on all of our ends, assuming that the other anticipated BIP gets submitted near-term, but fair enough, we have not received another BIP on this topic. I guess I can’t fault multiple people for being interested in the same topic.

  17. murchandamus added the label PR Author action required on Feb 12, 2025
  18. jonatack removed the label PR Author action required on Feb 27, 2025
  19. Christewart force-pushed on Mar 1, 2025
  20. Christewart requested review from murchandamus on Mar 1, 2025
  21. Christewart force-pushed on Mar 1, 2025
  22. Christewart commented at 4:39 pm on March 1, 2025: contributor
    I believe the CI failure is unrelated to me?
  23. in bip-XXXX.mediawiki:16 in 8a75ee8f38 outdated
    11+</pre>
    12+
    13+==Abstract==
    14+
    15+This BIP describes the rationale for disallowing transactions that are serialized to 64 bytes without the transaction's witness. 
    16+We describe the weaknesses to the merkle tree included in bitcoin block headers, various exploits for those weaknesses.
    


    jonatack commented at 9:06 pm on March 7, 2025:
    0We describe the weaknesses to the Merkle tree included in bitcoin block headers, and various exploits for those weaknesses.
    

    (Suggest using consistent capitalization of “merkle” in this document, here and for the other instances)

  24. in bip-XXXX.mediawiki:20 in 8a75ee8f38 outdated
    15+This BIP describes the rationale for disallowing transactions that are serialized to 64 bytes without the transaction's witness. 
    16+We describe the weaknesses to the merkle tree included in bitcoin block headers, various exploits for those weaknesses.
    17+
    18+==Specification==
    19+
    20+This BIP disallows bitcoin transactions that are serialized to 64 bytes in length without its witness.
    


    jonatack commented at 9:07 pm on March 7, 2025:

    s/its/their/, or “transaction” in the singular form

    0This BIP disallows bitcoin transactions that are serialized to 64 bytes in length without their witness.
    
  25. in bip-XXXX.mediawiki:34 in 8a75ee8f38 outdated
    29+transaction. However, Bitcoin’s particular construction of the Merkle tree has
    30+several security weaknesses, including at least two forms of block malleability
    31+that have an impact on the consensus logic of Bitcoin Core, and an attack on
    32+light clients, where an invalid transaction could be ”proven” to appear in a block
    33+by doing substantially less work than a SHA256 hash collision would require.
    34+This has been prevented by relay policy and RPC interface since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR #11423 disallows 64-byte transactions in Bitcoin Core relay and RPC interface]</ref>.
    


    jonatack commented at 9:08 pm on March 7, 2025:
    0This has been prevented by relay policy and the RPC interface since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR [#11423](/bitcoin-bips/11423/) disallows 64-byte transactions in Bitcoin Core relay and RPC interface]</ref>.
    
  26. in bip-XXXX.mediawiki:52 in 8a75ee8f38 outdated
    47+==== Block malleability with consensus INVALID transactions ====
    48+
    49+The peer receiving the malicious block marks the block as invalid as T<sub>m</sub> 
    50+is not a valid transaction according to network consensus rules.
    51+Other peers on the network receive the valid block containing T<sub>0</sub> and T<sub>1</sub>
    52+add the block to their blockchain. Peers that receive the invalid block before the valid block
    


    jonatack commented at 9:11 pm on March 7, 2025:

    IIUC

    0and add the block to their blockchain. Peers that receive the invalid block before the valid block
    
  27. in bip-XXXX.mediawiki:54 in 8a75ee8f38 outdated
    49+The peer receiving the malicious block marks the block as invalid as T<sub>m</sub> 
    50+is not a valid transaction according to network consensus rules.
    51+Other peers on the network receive the valid block containing T<sub>0</sub> and T<sub>1</sub>
    52+add the block to their blockchain. Peers that receive the invalid block before the valid block
    53+will never come to consensus with their peers due to the malicious user finding a collision
    54+within the block's merkle root. Finding this collision approximately 22 bits worth of work<ref>[https://github.com/Christewart/bips/blob/2024-12-20-64bytetxs/bip-XXXX/2-BitcoinMerkle.pdf to produce a block that has a Merkle
    


    jonatack commented at 9:15 pm on March 7, 2025:
    “Finding this collision approximately 22 bits worth of work” -> looks like a verb is missing here, or the sentence seems hard to follow
  28. in bip-XXXX.mediawiki:121 in 8a75ee8f38 outdated
    116+
    117+====Segwit 64-byte transactions====
    118+
    119+This BIP disallows single-input single output segwit transactions that pay to a 2 byte witness program.<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/73#p-4382-future-segwit-versions-10 BIP141 says witness programs can be 2 bytes in size, which makes the scriptPubKey a total of 4 bytes]</ref>
    120+The only known use case<ref>[https://bitcoin.stackexchange.com/a/110664 Why do we have 2 byte witness programs? The original rationale for the lower end of the range of valid witness program lengths is that 2 bytes is enough to guarantee no ambiguity of how the program would be pushed (some 1 byte values can - and according to standardness, must - be pushed with OP_n, and dealing with those would have complicated the matter).]</ref>
    121+for this type of transaction is ephemeral anchor outputs<ref>[https://bitcoinops.org/en/topics/ephemeral-anchors/ What are ephemeral anchor outputs? This allows anyone on the network to use that output as the input to a child transaction. This allows anyone to create the fee-paying child, even if they don’t receive any of the other outputs from the parent transaction. This allows ephemeral anchors to function as fee sponsorship but without requiring any consensus changes.]</ref>
    


    jonatack commented at 9:21 pm on March 7, 2025:
    0for this type of transaction is ephemeral anchor outputs.<ref>[https://bitcoinops.org/en/topics/ephemeral-anchors/ What are ephemeral anchor outputs? This allows anyone on the network to use that output as the input to a child transaction. This allows anyone to create the fee-paying child, even if they don’t receive any of the other outputs from the parent transaction. This allows ephemeral anchors to function as fee sponsorship but without requiring any consensus changes.]</ref>
    
  29. in bip-XXXX.mediawiki:113 in 8a75ee8f38 outdated
    108+The largest scriptSig a 64-byte transaction can have is 4 bytes.<ref>[https://delvingbitcoin.org/t/great-consensus-cleanup-revival/710/73]</ref>
    109+
    110+There are 6<ref>[https://github.com/Christewart/bips/blob/2024-12-20-64bytetxs/nonstandard-hashlock-utxos.txt As of block `00000000000000000001194ae6be942619bf61aa70822b9643d01c1a441bf2b7` there exist 6 nonstandard hashlock utxos that could theoretically have a 0-3 byte pre-image. None of them have a 0-3 byte pre-image.]</ref>
    111+non standard hashlock utxos in the bitcoin blockchain. None of them have a 0-3 byte pre-image. This means they cannot be spent by a 64-byte transaction.
    112+
    113+Pre-segwit 64-byte transactions that spend a nonstandard utxo that are inherently malleable<ref>[https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#trust-free-unconfirmed-transaction-dependency-chain Details on how to malleate a pre-segwit transaction]</ref>.
    


    jonatack commented at 9:27 pm on March 7, 2025:
    0Pre-segwit 64-byte transactions that spend a nonstandard utxo that are inherently malleable.<ref>[https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#trust-free-unconfirmed-transaction-dependency-chain Details on how to malleate a pre-segwit transaction]</ref>
    
  30. in bip-XXXX.mediawiki:102 in 8a75ee8f38 outdated
     97+
     98+==Backward compatibility==
     99+
    100+There have been 5 64-byte transactions that have occcurred in the bitcoin blockchain as of this
    101+writing <ref>[https://github.com/Christewart/bips/blob/2024-12-20-64bytetxs/64byte-tx-mainnet.txt 64-byte transactions in the bitcoin blockchain]</ref>
    102+With the last transaction 7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612<ref>[https://mempool.space/tx/7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612 Last 64-byte transaction in the bitcoin blockchain]</ref>
    


    jonatack commented at 9:28 pm on March 7, 2025:
    0with the last transaction 7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612<ref>[https://mempool.space/tx/7f2efc6546011ad3227b2da678be0d30c7f4b08e2ce57b5edadd437f9e27a612 Last 64-byte transaction in the bitcoin blockchain]</ref>
    
  31. in bip-XXXX.mediawiki:129 in 8a75ee8f38 outdated
    124+
    125+<source lang="cpp">
    126+/**
    127+ * We want to enforce certain rules (specifically the 64-byte transaction check)
    128+ * before we call CheckBlock to check the merkle root. This allows us to enforce
    129+ * malleability checks which may interact with other CheckBlock checks.
    


    jonatack commented at 9:29 pm on March 7, 2025:
    0 * malleability checks that may interact with other CheckBlock checks.
    

    Christewart commented at 3:52 pm on March 10, 2025:
    I’m going to avoid changing these nits unless they change in the reference implementation unless you have a super strong opinion on this.

    jonatack commented at 6:22 pm on March 10, 2025:
    I see. It wasn’t clear to me that this is extracted from the open pull in bitcoin-inquisition.
  32. in bip-XXXX.mediawiki:132 in 8a75ee8f38 outdated
    127+ * We want to enforce certain rules (specifically the 64-byte transaction check)
    128+ * before we call CheckBlock to check the merkle root. This allows us to enforce
    129+ * malleability checks which may interact with other CheckBlock checks.
    130+ * This is currently called both in AcceptBlock prior to writing the block to
    131+ * disk and in ConnectBlock.
    132+ * Note that as this is called before merkle-tree checks so must never return a
    


    jonatack commented at 9:30 pm on March 7, 2025:
    0 * Note that this is called before merkle-tree checks and so must never return a
    

    Christewart commented at 3:52 pm on March 10, 2025:
  33. jonatack commented at 9:36 pm on March 7, 2025: member
    Looks quite good. A few minor suggestions follow. Suggest rebasing to current master for a green CI if you repush.
  34. Disallow 64 byte transactions 59e8040f19
  35. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    d613a6c39d
  36. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    4c55128226
  37. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    56fbcc7f38
  38. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    3b293e9c6c
  39. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    72d6db3f02
  40. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    c0dfb6d25a
  41. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    b35f42608f
  42. Update bip-XXXX.mediawiki
    Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>
    9e6c34373c
  43. Use hyphen ebbe441c56
  44. Add note about 64 byte transactions not being allowed by the RPC interface, fix typo ed044d76bd
  45. Move content in rationale section into motivation section 5c2d07f5ff
  46. Address more feedback df671612c9
  47. fix formatting ccd2745518
  48. fixes 1bea07e994
  49. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    3e7a4c5905
  50. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    4fa6251ad8
  51. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    969998347c
  52. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    c04753b7ae
  53. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    db292d3990
  54. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    ada44ae224
  55. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    2b8ded1bc8
  56. typo c675f66316
  57. Christewart force-pushed on Mar 10, 2025
  58. more rewording / cleanup c6bcc0019d
  59. Christewart requested review from jonatack on Mar 10, 2025
  60. in bip-XXXX.mediawiki:149 in c6bcc0019d outdated
    144+
    145+    return true;
    146+}
    147+</source>
    148+
    149+https://github.com/bitcoin-inquisition/bitcoin/pull/24/files
    


    jonatack commented at 6:21 pm on March 10, 2025:
    0+This sample implementation is currently an open pull request here:
    1+
    2https://github.com/bitcoin-inquisition/bitcoin/pull/24/files
    
  61. in bip-XXXX.mediawiki:34 in c6bcc0019d outdated
    29+transaction. However, Bitcoin’s particular construction of the Merkle tree has
    30+several security weaknesses, including at least two forms of block malleability
    31+that have an impact on the consensus logic of Bitcoin Core, and an attack on
    32+light clients, where an invalid transaction could be ”proven” to appear in a block
    33+by doing substantially less work than a SHA256 hash collision would require.
    34+This has been prevented by Bitcoin Core's relay policy and the RPC interface since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR #11423 disallows 64-byte transactions in Bitcoin Core relay and RPC interface]</ref>.
    


    jonatack commented at 6:28 pm on March 10, 2025:

    Now that “Bitcoin Core’s” was added.

    0This has been prevented by Bitcoin Core's relay policy and RPC interface since 2018<ref>[https://github.com/bitcoin/bitcoin/pull/11423/commits/7485488e907e236133a016ba7064c89bf9ab6da3 PR [#11423](/bitcoin-bips/11423/) disallows 64-byte transactions in Bitcoin Core relay and RPC interface]</ref>.
    

    jonatack commented at 6:39 pm on March 10, 2025:
  62. in bip-XXXX.mediawiki:15 in c6bcc0019d outdated
    10+  License: BSD-3-Clause
    11+</pre>
    12+
    13+==Abstract==
    14+
    15+This BIP describes the rationale for disallowing transactions that are serialized to 64 bytes without the transaction's witness. 
    


    jonatack commented at 6:40 pm on March 10, 2025:

    nit, extra space at EOL

    0This BIP describes the rationale for disallowing transactions that are serialized to 64 bytes without the transaction's witness.
    
  63. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    3ccbdade4a
  64. Update bip-XXXX.mediawiki
    Co-authored-by: Jon Atack <jon@atack.com>
    24228a9f6c
  65. Add reference to the bitcoin core commit relaxing tx standard size from 82 bytes -> 65 bytes 7dc22a9a51
  66. Fix missing </ref> tag a3d12410d3
  67. in bip-XXXX.mediawiki:49 in c6bcc0019d outdated
    44+Next the malicious user relays the block containing the malicious T<sub>m</sub> rather than the
    45+valid bitcoin transactions that correspond with T<sub>0</sub> and T<sub>1</sub>.
    46+
    47+==== Block malleability with consensus INVALID transactions ====
    48+
    49+The peer receiving the malicious block marks the block as invalid as T<sub>m</sub> 
    


    jonatack commented at 6:40 pm on March 10, 2025:

    nit, extra space at EOL

    0The peer receiving the malicious block marks the block as invalid as T<sub>m</sub>
    
  68. bitcoin deleted a comment on Mar 11, 2025
  69. jonatack commented at 9:13 pm on March 12, 2025: member
    Would be good to have some more eyes on this, otherwise seems close to ready as a draft for a number assignment.
  70. vostrnad commented at 8:31 pm on March 26, 2025: contributor

    @Christewart Antoine just opened a pull request for the Consensus Cleanup which includes the 64-byte transaction fix: #1800

    If you don’t feel too strongly about this being a separate BIP, I think it would be better to withdraw it, otherwise it’ll just be duplicating effort with no obvious benefit.

  71. Christewart commented at 10:54 am on March 28, 2025: contributor

    Hi @vostrnad,

    As of this commit, PR #1800 does not provide as much detail as this document in defining the problem with 64-byte transactions, explaining the proposed solution, and demonstrating why it does not pose a confiscatory risk.

    I hope the author of #1800 will consider expanding the BIP with more detail or breaking it into separate proposals for each consensus change. However, based on this email, it seems they believe the current content is sufficient and only requires minor edits.

    At this time, I believe my document is of higher quality. I will not be voluntarily closing my BIP until I feel #1800 reaches parity.


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bips. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2025-03-29 07:10 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me