Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions bip-0360.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Type: Specification
Assigned: 2024-12-18
License: BSD-3-Clause
Version: 0.12.0
Version: 0.12.1
Requires: 340, 341, 342
</pre>

Expand Down Expand Up @@ -281,7 +281,7 @@ P2MR witness for a depth-1 tree (135 bytes):
[count] (1 byte), # Number of elements in the witness
[size] signature (1 + 64 bytes = 65 bytes),
leaf script = [size] [OP_PUSHBYTES_32, 32-byte public key, OP_CHECKSIG] (1 + 1 + 32 + 1 bytes = 35 bytes),
control block = [size] [control byte] [merkle path (empty)] (1 + 1 + 32 bytes = 34 bytes)
control block = [size] [control byte] [merkle path] (1 + 1 + 32 bytes = 34 bytes)

@jonatack jonatack Jul 27, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cryptoquick @EthanHeilman can I get your feedback on this? It looks correct to me.

(Also on this, from the PR description):

"Two things I left unchanged because they affect consumers' parsers: the schema mixes given.scriptTree (most vectors) with given.script_tree (the missing-tree error vectors), and a missing tree is encoded both as null and as an empty string. Happy to normalize those too if there is a preferred spelling."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is correct, and now is the time to fix what's not ideal now, because technical debt and such like this have a tendency to compound, especially after activation.

Keep up the good work, guys.

</source>

P2TR key path spend witness (66 bytes):
Expand Down Expand Up @@ -341,11 +341,11 @@ We also imagine the possibility of introducing multiple post-quantum signatures

==Test Vectors and Reference Code==

Test vector data for creation of P2MR UTXOs can be found [https://github.com/bitcoin/bips/blob/master/bip-0360/ref-impl/common/tests/data/P2MR_construction.json here].
Test vector data for creation of P2MR UTXOs can be found [https://github.com/bitcoin/bips/blob/master/bip-0360/ref-impl/common/tests/data/p2mr_construction.json here].

These test vectors build off of the test vectors for [[bip-0341.mediawiki|BIP 341]] (Taproot). One important distinction is that the P2MR test vectors do not include keypath spend scenarios.

Also included are test vectors in [https://github.com/bitcoin/bips/tree/master/bip-0360/ref-impl/rust rust implementation] and [https://github.com/bitcoin/bips/tree/master/bip-0360/ref-impl/python python implementation]. One of these tests demonstrates a tapscript that requires a secp256k1 signature to spend the P2MR UTXO (modeled after one of the extremely valuable examples provided by [https://learnmeabitcoin.com/technical/upgrades/taproot/#example-3-script-path-spend-signature this Taproot script path spend example]. Similar to BIP 341 test vectors, all signatures are created with an all-zero (0x0000...0000) [[bip-0340.mediawiki|BIP 340]] auxiliary randomness array.
Also included is a [https://github.com/bitcoin/bips/tree/master/bip-0360/ref-impl/python python implementation]. One of its tests demonstrates a tapscript that requires a secp256k1 signature to spend the P2MR UTXO (modeled after one of the extremely valuable examples provided by [https://learnmeabitcoin.com/technical/upgrades/taproot/#example-3-script-path-spend-signature this Taproot script path spend example]. Similar to BIP 341 test vectors, all signatures are created with an all-zero (0x0000...0000) [[bip-0340.mediawiki|BIP 340]] auxiliary randomness array.

==Related Work==

Expand Down