2026-02-11 12:54:26 -08:00
{
"version" : 1 ,
"test_vectors" : [
{
"id" : "p2mr_missing_leaf_script_tree_error" ,
"objective" : "Tests P2MR with missing leaf script tree" ,
"given" : {
"script_tree" : ""
} ,
"intermediary" : {
} ,
"expected" : {
"error" : "P2MR requires a script tree with at least one leaf"
}
} ,
{
"id" : "p2mr_single_leaf_script_tree" ,
"objective" : "Tests P2MR with single leaf script tree" ,
"given" : {
"scriptTree" : {
"id" : 0 ,
"script" : "201f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f247f" ,
"asm" : "1f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f24 OP_SUBSTR" ,
"priv_key" : "3f0213a51771f25c906cd82c656175e4b2a10e85958039d6e358352a2eb62b791f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f24" ,
"leafVersion" : 192
}
} ,
"intermediary" : {
"leafHashes" : [
"3bb0db8c6adcd87330a4a8c91be0fe1b23da3c151b6f2fb4f269429c43b8d8bc"
] ,
"merkleRoot" : "3bb0db8c6adcd87330a4a8c91be0fe1b23da3c151b6f2fb4f269429c43b8d8bc"
} ,
"expected" : {
"scriptPubKey" : "52203bb0db8c6adcd87330a4a8c91be0fe1b23da3c151b6f2fb4f269429c43b8d8bc" ,
"bip350Address" : "bc1z8wcdhrr2mnv8xv9y4ry3hc87rv3a50q4rdhjld8jd9pfcsacmz7qg5szm8" ,
"scriptPathControlBlocks" : [
"c1"
]
}
} ,
{
"id" : "p2mr_different_version_leaves" ,
"objective" : "Tests P2MR with two script leaves of different versions. TO-DO: currently ignores given leaf version and over-rides. Probably better to throw error" ,
"given" : {
"scriptTree" : [
{
"id" : 0 ,
"script" : "201f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f247f" ,
"asm" : "1f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f24 OP_SUBSTR" ,
"priv_key" : "3f0213a51771f25c906cd82c656175e4b2a10e85958039d6e358352a2eb62b791f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f24" ,
"leafVersion" : 192
} ,
{
"id" : 1 ,
"script" : "06424950333431" ,
"asm" : "424950333431" ,
"description" : "just pushes the string 'BIP341' onto the stack" ,
"leafVersion" : 250
}
]
} ,
"intermediary" : {
"leafHashes" : [
"3bb0db8c6adcd87330a4a8c91be0fe1b23da3c151b6f2fb4f269429c43b8d8bc" ,
"f224a923cd0021ab202ab139cc56802ddb92dcfc172b9212261a539df79a112a"
] ,
"merkleRoot" : "1619ce6d22a46dea045c4adf7f5f33d6810d00d0e9c8a4c7ba35db37b915c604"
} ,
"expected" : {
"scriptPubKey" : "52201619ce6d22a46dea045c4adf7f5f33d6810d00d0e9c8a4c7ba35db37b915c604" ,
"bip350Address" : "bc1zzcvuumfz53k75pzuft0h7hen66qs6qxsa8y2f3a6xhdn0wg4cczq0h84sj" ,
"scriptPathControlBlocks" : [
2026-04-03 18:38:43 -06:00
"c1f224a923cd0021ab202ab139cc56802ddb92dcfc172b9212261a539df79a112a" ,
"c13bb0db8c6adcd87330a4a8c91be0fe1b23da3c151b6f2fb4f269429c43b8d8bc"
2026-02-11 12:54:26 -08:00
]
}
} ,
{
"id" : "p2mr_simple_lightning_contract" ,
"objective" : "Tests P2MR with two script leaves that simulate a simple lightning network contract. Reference: https://github.com/bitcoin-core/btcdeb/blob/master/doc/tapscript-example-with-tap.md" ,
"given" : {
"scriptTree" : [
{
"id" : 0 ,
"script" : "029000b275201f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f247f" ,
"asm" : "144 OP_CHECKSEQUENCEVERIFY OP_DROP 1f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f24 OP_SUBSTR" ,
"priv_key" : "3f0213a51771f25c906cd82c656175e4b2a10e85958039d6e358352a2eb62b791f4b1febdc7dfa77c1efacc875b43317b46155e5a564decf475fc369124c5f24" ,
"description" : "Alice takes the money after waiting 1 day" ,
"leafVersion" : 192
} ,
{
"id" : 1 ,
"script" : "a8206c60f404f8167a38fc70eaf8aa17ac351023bef86bcb9d1086a19afe95bd533388204c7f98ab73cc36abeb76d6eace6a9d8b0ff69dfe0f4a17e4f94f0898ec52fadd" ,
"asm" : "OP_SHA256 6c60f404f8167a38fc70eaf8aa17ac351023bef86bcb9d1086a19afe95bd5333 OP_EQUALVERIFY 4c7f98ab73cc36abeb76d6eace6a9d8b0ff69dfe0f4a17e4f94f0898ec52fadd OP_SUBSTR" ,
"priv_key" : "49a4214f386240d97ea68efb4268043fd5a55208dcdac18ce5bd3332b8e488944c7f98ab73cc36abeb76d6eace6a9d8b0ff69dfe0f4a17e4f94f0898ec52fadd" ,
"description" : "Bob takes the money whenever he wishes to by revealing the preimage_hash" ,
"leafVersion" : 192
}
]
} ,
"intermediary" : {
"leafHashes" : [
"cfd5fc07ac39947cba799e14f933f20e7c233dea72dc2792f5547c58cdce743e" ,
"a9745ac96d4f3702b78751f1e08f3040fbe6347e7b4f520d22d3f907730cbb7e"
] ,
"merkleRoot" : "2794771cd51f215ba3a19fbcdf08c771edb7de782a0c34457e0e9be5d0e4008f"
} ,
"expected" : {
"scriptPubKey" : "52202794771cd51f215ba3a19fbcdf08c771edb7de782a0c34457e0e9be5d0e4008f" ,
"bip350Address" : "bc1zy728w8x4rus4hgapn77d7zx8w8km0hnc9gxrg3t7p6d7t58yqz8sg0nccq" ,
"scriptPathControlBlocks" : [
2026-04-03 18:38:43 -06:00
"c1a9745ac96d4f3702b78751f1e08f3040fbe6347e7b4f520d22d3f907730cbb7e" ,
"c1cfd5fc07ac39947cba799e14f933f20e7c233dea72dc2792f5547c58cdce743e"
2026-02-11 12:54:26 -08:00
]
}
} ,
{
"id" : "p2mr_two_leaf_same_version" ,
"objective" : "Tests P2MR with two script leaves of same version" ,
"given" : {
"scriptTree" : [
{
"id" : 0 ,
"script" : "20e6b3dad32fc04095a021f5356163cfc14e15f703831e332c56f6b499801f53447f" ,
"asm" : "e6b3dad32fc04095a021f5356163cfc14e15f703831e332c56f6b499801f5344 OP_SUBSTR" ,
"priv_key" : "a695d8a1351774d59ed1b980462c2ab8d58b3b7a48f55b114c6a39980dc1c13ee6b3dad32fc04095a021f5356163cfc14e15f703831e332c56f6b499801f5344" ,
"leafVersion" : 192
} ,
{
"id" : 1 ,
"script" : "07546170726f6f74" ,
"asm" : "546170726f6f74" ,
"description" : "pushes the string 'Taproot' onto the stack" ,
"leafVersion" : 192
}
]
} ,
"intermediary" : {
"leafHashes" : [
"9de7eeded7832c28c6f80de76904dd79f98fd302747823b5bc5be440186b0c6d" ,
"2cb2b90daa543b544161530c925f285b06196940d6085ca9474d41dc3822c5cb"
] ,
"merkleRoot" : "5112b3edfd2c0b717491e9d4888ed2d5dfeaa25115143540e0a08516b68c008c"
} ,
"expected" : {
"scriptPubKey" : "52205112b3edfd2c0b717491e9d4888ed2d5dfeaa25115143540e0a08516b68c008c" ,
"bip350Address" : "bc1z2yft8m0a9s9hzay3a82g3rkj6h074gj3z52r2s8q5zz3dd5vqzxqngpk2w" ,
"scriptPathControlBlocks" : [
2026-04-03 18:38:43 -06:00
"c12cb2b90daa543b544161530c925f285b06196940d6085ca9474d41dc3822c5cb" ,
"c19de7eeded7832c28c6f80de76904dd79f98fd302747823b5bc5be440186b0c6d"
2026-02-11 12:54:26 -08:00
]
}
} ,
{
"id" : "p2mr_three_leaf_complex" ,
"objective" : "Tests P2MR with a complex three-leaf script tree structure, demonstrating nested script paths and multiple verification options" ,
"given" : {
"scriptTree" : [
{
"id" : 0 ,
"script" : "201d58016252d5a941f84574c4821b5f87e56778b2bbc3b610dfd801fc0250f6cc7f" ,
"asm" : "1d58016252d5a941f84574c4821b5f87e56778b2bbc3b610dfd801fc0250f6cc OP_SUBSTR" ,
"priv_key" : "2b339b5055fad695f0595d5581fa087455854f64c5443c03d5b4ca53549f12a41d58016252d5a941f84574c4821b5f87e56778b2bbc3b610dfd801fc0250f6cc" ,
"leafVersion" : 192
} ,
[
{
"id" : 1 ,
"script" : "20a3b0dcac08f86306ba04f5fe2a3243ef3a0347c0e2a4529720a18d3cfdce90ad7f" ,
"asm" : "a3b0dcac08f86306ba04f5fe2a3243ef3a0347c0e2a4529720a18d3cfdce90ad OP_SUBSTR" ,
"priv_key" : "ec29d60c1be9263602906499b5e3c1de9e36cc88cec31154210191a578b92e9da3b0dcac08f86306ba04f5fe2a3243ef3a0347c0e2a4529720a18d3cfdce90ad" ,
"leafVersion" : 192
} ,
{
"id" : 2 ,
"script" : "20e6ccf03593dbd07eba10403e33586c130889de6e8219da0a9ccbdd46a56a5f367f" ,
"asm" : "e6ccf03593dbd07eba10403e33586c130889de6e8219da0a9ccbdd46a56a5f36 OP_SUBSTR" ,
"priv_key" : "da04d13f706a6e0d22ac0db7c361f1aaa706a27043efca4edfecfed3125238e1e6ccf03593dbd07eba10403e33586c130889de6e8219da0a9ccbdd46a56a5f36" ,
"leafVersion" : 192
}
]
]
} ,
"intermediary" : {
"leafHashes" : [
"0840c39e59eda6c9deee687a480cb169130c2f053ed2eb3134511ec1cfd8a2c7" ,
"837ef6677aeb0df2b0de47f45024684cc6ca03bda10fa30bb5bc05a94beb8dd1" ,
"b2a5304f678cc5a2ed51feb377dd0a609bd22ec979cc608bfcf884d0f8e6f93a"
] ,
"merkleRoot" : "eaf8f557fdb9673de7bb9bad7e7452da9f44a3e65133fdadf2849c55cfb3cf5b"
} ,
"expected" : {
"scriptPubKey" : "5220eaf8f557fdb9673de7bb9bad7e7452da9f44a3e65133fdadf2849c55cfb3cf5b" ,
"bip350Address" : "bc1zatu024lah9nnmeamnwkhuazjm205fglx2yelmt0jsjw9tnaneadszq7wg7" ,
"scriptPathControlBlocks" : [
2026-04-03 18:38:43 -06:00
"c118781f42f664d67acaf0ce7c6826437e5440eb1789f232af05e9a09fdf547903" ,
2026-02-11 12:54:26 -08:00
"c10840c39e59eda6c9deee687a480cb169130c2f053ed2eb3134511ec1cfd8a2c7b2a5304f678cc5a2ed51feb377dd0a609bd22ec979cc608bfcf884d0f8e6f93a" ,
2026-04-03 18:38:43 -06:00
"c1837ef6677aeb0df2b0de47f45024684cc6ca03bda10fa30bb5bc05a94beb8dd1b2a5304f678cc5a2ed51feb377dd0a609bd22ec979cc608bfcf884d0f8e6f93a"
2026-02-11 12:54:26 -08:00
]
}
} ,
{
"id" : "p2mr_three_leaf_alternative" ,
"objective" : "Tests another variant of P2MR with three leaves arranged in a different tree structure, showing alternative script path spending options" ,
"given" : {
"scriptTree" : [
{
"id" : 0 ,
"script" : "20409f78ce0978519ff5d960c4ab595174c7efca11b1f89410a4e98b70cd423e1c7f" ,
"asm" : "409f78ce0978519ff5d960c4ab595174c7efca11b1f89410a4e98b70cd423e1c OP_SUBSTR" ,
"priv_key" : "c6ec3801b04afa40be6f77f3f7a7b3b7cb8cfe233b0263fb70e2f087b21397c1409f78ce0978519ff5d960c4ab595174c7efca11b1f89410a4e98b70cd423e1c" ,
"leafVersion" : 192
} ,
[
{
"id" : 1 ,
"script" : "209f0955dc884a5c88d1732e017d30e27e8a445889bce5aa42611b7635c5c1073a7f" ,
"asm" : "9f0955dc884a5c88d1732e017d30e27e8a445889bce5aa42611b7635c5c1073a OP_SUBSTR" ,
"priv_key" : "7524bca170d54231f1246f30fb00f9da2208b1363ba5a7bbaf11fc3b0309e9519f0955dc884a5c88d1732e017d30e27e8a445889bce5aa42611b7635c5c1073a" ,
"leafVersion" : 192
} ,
{
"id" : 2 ,
"script" : "20c60b10d57c0cdf27e5c751e131ea4301b37abe7384948059256c7f5f1f285a7f7f" ,
"asm" : "c60b10d57c0cdf27e5c751e131ea4301b37abe7384948059256c7f5f1f285a7f OP_SUBSTR" ,
"priv_key" : "d9d0f17d630b6a538e6a8a036373e7b9e5023a4c08f72dd8c3ef59288b98c079c60b10d57c0cdf27e5c751e131ea4301b37abe7384948059256c7f5f1f285a7f" ,
"leafVersion" : 192
}
]
]
} ,
"intermediary" : {
"leafHashes" : [
"52e9326c2bf04d926b7e9f6c7645dd853f3f007b870201de9b814952750c9310" ,
"dcef3ce86cc8cea78c9e00f3d9ef58360cb6ed3cb90ec62efe00b9703854ba5c" ,
"ddb521a44e33ff4974e618d8b8b7794275b7dc754d847c537404f84330454361"
] ,
"merkleRoot" : "51e3c1151ba73d9efce801837773331bf9030977242f62dfeb6756795f482409"
} ,
"expected" : {
"scriptPubKey" : "522051e3c1151ba73d9efce801837773331bf9030977242f62dfeb6756795f482409" ,
"bip350Address" : "bc1z283uz9gm5u7eal8gqxphwuenr0usxzthyshk9hltvat8jh6gysys28twnc" ,
"scriptPathControlBlocks" : [
2026-04-03 18:38:43 -06:00
"c1b45680a7821e4b9450096ab38adbc3c99225af8f6c7ec121a0a5f1ae02893ba3" ,
2026-02-11 12:54:26 -08:00
"c152e9326c2bf04d926b7e9f6c7645dd853f3f007b870201de9b814952750c9310ddb521a44e33ff4974e618d8b8b7794275b7dc754d847c537404f84330454361" ,
2026-04-03 18:38:43 -06:00
"c1dcef3ce86cc8cea78c9e00f3d9ef58360cb6ed3cb90ec62efe00b9703854ba5cddb521a44e33ff4974e618d8b8b7794275b7dc754d847c537404f84330454361"
2026-02-11 12:54:26 -08:00
]
}
}
]
}