From 9551bf2a19eeec34ac70231d16360413980b65f8 Mon Sep 17 00:00:00 2001 From: Otto Allmendinger Date: Tue, 21 Oct 2025 13:08:41 +0200 Subject: [PATCH 1/2] feat(wasm-utxo): add comprehensive test fixture set These fixtures were generated with the utxolib test suite `SignVerifyPsbtAndTx.ts` Issue: BTC-2651, BTC-2652 --- .../fixed-script/output-scripts/p2tr.json | 90 ++++ .../output-scripts/p2trMusig2.json | 72 +++ .../fixed-script/psbt.bitcoin.fullsigned.json | 497 ++++++++++++++++++ .../fixed-script/psbt.bitcoin.halfsigned.json | 471 +++++++++++++++++ .../fixed-script/psbt.bitcoin.unsigned.json | 421 +++++++++++++++ .../psbt.bitcoincash.fullsigned.json | 99 ++++ .../psbt.bitcoincash.halfsigned.json | 95 ++++ .../psbt.bitcoincash.unsigned.json | 83 +++ .../psbt.bitcoingold.fullsigned.json | 237 +++++++++ .../psbt.bitcoingold.halfsigned.json | 225 ++++++++ .../psbt.bitcoingold.unsigned.json | 201 +++++++ .../fixed-script/psbt.dash.fullsigned.json | 99 ++++ .../fixed-script/psbt.dash.halfsigned.json | 95 ++++ .../fixed-script/psbt.dash.unsigned.json | 83 +++ .../psbt.dogecoin.fullsigned.json | 99 ++++ .../psbt.dogecoin.halfsigned.json | 95 ++++ .../fixed-script/psbt.dogecoin.unsigned.json | 83 +++ .../fixed-script/psbt.ecash.fullsigned.json | 99 ++++ .../fixed-script/psbt.ecash.halfsigned.json | 95 ++++ .../fixed-script/psbt.ecash.unsigned.json | 83 +++ .../psbt.litecoin.fullsigned.json | 237 +++++++++ .../psbt.litecoin.halfsigned.json | 225 ++++++++ .../fixed-script/psbt.litecoin.unsigned.json | 201 +++++++ .../fixed-script/psbt.zcash.fullsigned.json | 104 ++++ .../fixed-script/psbt.zcash.halfsigned.json | 100 ++++ .../fixed-script/psbt.zcash.unsigned.json | 88 ++++ 26 files changed, 4277 insertions(+) create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2tr.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2trMusig2.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.unsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.fullsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.halfsigned.json create mode 100644 packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.unsigned.json diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2tr.json b/packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2tr.json new file mode 100644 index 0000000..8ce271b --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2tr.json @@ -0,0 +1,90 @@ +[ + { + "scriptType": "p2tr", + "pubkeys": [ + "02d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7", + "028714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2", + "03203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64" + ], + "internalPubkey": "cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aa", + "controlBlocks": [ + { + "redeemIndex": 0, + "controlBlock": "c0cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aad88b89f6f10f490bb6e1e61585cb3e78f8b4993e574b4031cacc6859c5adbc45" + }, + { + "redeemIndex": 1, + "controlBlock": "c0cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aab33e39fb32e503897e9cdc949597dac7b156017bf55a4f9802b619db07d3070a62959ac7472a3cd0ea894b23888341247d3c890c711fff8ac9b02177609e3e27" + }, + { + "redeemIndex": 2, + "controlBlock": "c0cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aa0e87e7b2bddc1e2f2cde702b5cbe51119df98538b35fa91c40a7c74fa9f5d39862959ac7472a3cd0ea894b23888341247d3c890c711fff8ac9b02177609e3e27" + } + ], + "tapTree": { + "leaves": [ + { + "script": "20d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7ad20203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "20d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7ad208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ac", + "leafVersion": 192, + "depth": 2 + }, + { + "script": "208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ad20203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64ac", + "leafVersion": 192, + "depth": 2 + } + ] + }, + "taptreeRoot": "b69e64804422cb6cac96df1d742055b41aca27017dfcf79ef68482fad348b5c3", + "output": "5120ef88931a66e09d2777276f13fc99305aa51d38642fd1c01efe461a4c84c8915a" + }, + { + "scriptType": "p2tr", + "pubkeys": [ + "03203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64", + "028714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2", + "02d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7" + ], + "internalPubkey": "cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aa", + "controlBlocks": [ + { + "redeemIndex": 0, + "controlBlock": "c0cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aa154989ec963f9639848d336c522641b38bf5540ca0934318ac824e623ffd9e14" + }, + { + "redeemIndex": 1, + "controlBlock": "c0cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aa9f8d752c1becee80ffd87719934911d9c8aef659fc3ab512ba67f920ffc47545c3a4b27e58190225770a6cf2fb7ee0d9c536951637b3b0cea693d8ba9528853d" + }, + { + "redeemIndex": 2, + "controlBlock": "c0cc899cac29f6243ef481be86f0d39e173c075cd57193d46332b1ec0b42c439aa45fc694de6d51e7c6fcd37c35377b99e4e6e9a19adb600256a20dc0dd34561bcc3a4b27e58190225770a6cf2fb7ee0d9c536951637b3b0cea693d8ba9528853d" + } + ], + "tapTree": { + "leaves": [ + { + "script": "20203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64ad20d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "20203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64ad208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ac", + "leafVersion": 192, + "depth": 2 + }, + { + "script": "208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ad20d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7ac", + "leafVersion": 192, + "depth": 2 + } + ] + }, + "taptreeRoot": "e4ca158ee6f82dec51f1ecec71665f0735c170bf89c1fe9f9e568ad6257fabc0", + "output": "51209e609b5cbf529784691f5cb92dd2cf0ceb3c13d8b9539d7ba765f62e5e036379" + } +] \ No newline at end of file diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2trMusig2.json b/packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2trMusig2.json new file mode 100644 index 0000000..f782ce8 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/output-scripts/p2trMusig2.json @@ -0,0 +1,72 @@ +[ + { + "scriptType": "p2trMusig2", + "pubkeys": [ + "02d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7", + "028714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2", + "03203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64" + ], + "internalPubkey": "c0e255b4510e041ab81151091d875687a618de314344dff4b73b1bcd366cdbd8", + "controlBlocks": [ + { + "redeemIndex": 0, + "controlBlock": "c0c0e255b4510e041ab81151091d875687a618de314344dff4b73b1bcd366cdbd8b33e39fb32e503897e9cdc949597dac7b156017bf55a4f9802b619db07d3070a" + }, + { + "redeemIndex": 1, + "controlBlock": "c0c0e255b4510e041ab81151091d875687a618de314344dff4b73b1bcd366cdbd80e87e7b2bddc1e2f2cde702b5cbe51119df98538b35fa91c40a7c74fa9f5d398" + } + ], + "tapTree": { + "leaves": [ + { + "script": "20d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7ad208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ad20203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64ac", + "leafVersion": 192, + "depth": 1 + } + ] + }, + "taptreeRoot": "d88b89f6f10f490bb6e1e61585cb3e78f8b4993e574b4031cacc6859c5adbc45", + "output": "5120b1b559f099d5480951944bb9e5560b1485c51f7d15c9bb2864b2354de739beaf" + }, + { + "scriptType": "p2trMusig2", + "pubkeys": [ + "03203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64", + "028714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2", + "02d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7" + ], + "internalPubkey": "e48d309b535811eb0b148c4b0600a10e82e289899429e40aee05577504eca356", + "controlBlocks": [ + { + "redeemIndex": 0, + "controlBlock": "c0e48d309b535811eb0b148c4b0600a10e82e289899429e40aee05577504eca3569f8d752c1becee80ffd87719934911d9c8aef659fc3ab512ba67f920ffc47545" + }, + { + "redeemIndex": 1, + "controlBlock": "c0e48d309b535811eb0b148c4b0600a10e82e289899429e40aee05577504eca35645fc694de6d51e7c6fcd37c35377b99e4e6e9a19adb600256a20dc0dd34561bc" + } + ], + "tapTree": { + "leaves": [ + { + "script": "20203ab799ce28e2cca044f594c69275050af4bb0854ad730a8f74622342300e64ad208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "208714039c6866c27eb6885ffbb4085964a603140e5a39b0fa29b1d9839212f9a2ad20d20a62701c54f6eb3abb9f964b0e29ff90ffa3b4e3fcb73e7c67d4950fa6e3c7ac", + "leafVersion": 192, + "depth": 1 + } + ] + }, + "taptreeRoot": "154989ec963f9639848d336c522641b38bf5540ca0934318ac824e623ffd9e14", + "output": "5120b402ebe79e4563cbc4619a7b2af7e1f9ff124edca871f688987221a09f17c4a7" + } +] \ No newline at end of file diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.fullsigned.json new file mode 100644 index 0000000..49693f9 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.fullsigned.json @@ -0,0 +1,497 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "bb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "a662a5ffebf58bf3e65e53456c67c029cc154a2409740d8cd37fdee7559c5efd", + "index": 3, + "sequence": 4294967295 + }, + { + "hash": "d394375cee23b3b9951488c0403529157a85b058edc0351546d9eb4807e8a1d3", + "index": 4, + "sequence": 4294967295 + }, + { + "hash": "0d2f7f3486edaefc6ab92c21f7caf90085c4de4adac491106fd8a0e4f563dea3", + "index": 5, + "sequence": 4294967295 + }, + { + "hash": "97441d99a8d66f124ab3c9de26b87bd00aeb1547051c842a88165c1b089ee902", + "index": 6, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304402201e79545c011e34b1b872b4b057e66262d86881da6a7f853e7e57a9a4d12c6dc102201a538b2175c7b7161c76da18394220f354ae2729fcc1c902b74c59cd79e0153101" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100dd31a25d0ebea90e67910168ef7c2b383ca26192cd5c8709f02980b7ca90472802203795c65ee0f073b80644d0c8ffa1d428457ae2af3df5b5d8117949781d10c46201" + } + ] + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402205f760c27e7598a9e80a2adaf1d925c67d2e6c24aec773e5cce56d234159ab1e502201ce97d5659681ab881e10acc9c8021587f843a15336c3a8b6fb2efc053928b8501" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "signature": "3045022100df41fbcbf3c7f77182627bcb7cd17973b8ca58c16b81de98e94c0293dcf33ac202206017171914fdfbc80f933ab3b5aae4e3d36e968757e6c0788ffbeaaebc68e21e01" + } + ] + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100d3b03fb77553144e14171c7b1b517a3bf33df87370b65e337f0a50844562261e0220585bc0913b56ad968161d343f321d77f5f94ff3cf62545932f1509239a15a38e01" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "signature": "304402206441089c8c71a4926b49a5ab12bfaa86c4b64abbc519b3d217d68fe71bc43bee02203e17d0752c0b411e9477c22c2f4556a62da39e60095c6e0774bf42aa8f491b4d01" + } + ] + }, + { + "type": "p2tr", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "5120394b94d061d7b778fed8a204ce05ed0b44954ec1622f934f84114e1173f33027", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d83", + "script": "207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ], + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "path": "0/0/31/3", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ], + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "path": "0/0/31/3", + "masterFingerprint": "f65cd869" + } + ], + "tapScriptSig": [ + { + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "signature": "83b1bb7c6ce5868c8a723c4d350591894809b1335586f60cbfccc6dd4e28b8630a74637b1b242e5a389540db94f23bcbedee9c783830cb2afaff1f2763dbdb7b", + "leafHash": "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + }, + { + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "signature": "e7dab0d277ce7c41933136b44dcabef400f1d0e622a2255f9867d807bc8e0008cfd30766d36d736c8df7aa32917de59d0832b481c499f0917876134532306d45", + "leafHash": "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + } + ] + }, + { + "type": "p2trMusig2", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "512029bbfaf4385b10dc2bbe7ab4d50e89cebe8f507968727b19689e2638083cc55b", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c976", + "script": "20643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ], + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "path": "0/0/41/4", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ], + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "path": "0/0/41/4", + "masterFingerprint": "cc18ae08" + } + ], + "tapScriptSig": [ + { + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "signature": "0a1e013f6d57fb8b248b2b19b08b34c1a3cd5ff6de4acdf19dd4ce0e02d42154856dd569f4668f2abaccbb50ce81a9d2f53efdfb627c2cb14cf92c4189a35da7", + "leafHash": "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + }, + { + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "signature": "4d8e50128b5c61dd449b352a6d6f3d611e163b0794c8c2d057d25401957bb07a70420e336e18f6b255d5b869570c087091c30c1a33f0cac0a40d90d0514c69a4", + "leafHash": "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + } + ] + }, + { + "type": "taprootKeyPathSpend", + "unknownKeyVals": [ + { + "key": "fc05424954474f0115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "value": "021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171" + }, + { + "key": "fc05424954474f02021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "03a4aaf46f3a0bc39a73855fa875b2f2f04bdb06235afbaedf857b593dddc63cb402cdb7f1a93ec526282198d834423371757e8f43932d03b9f43c3f7378300ae508" + }, + { + "key": "fc05424954474f02020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e77817115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "02826949740dff45d408b1f19d94c720f53411e02c525b28ab3c593b6b530fe0370374b8a0ffcaaaee6b772dac5f7c23ef33670b32ec77c6d41efb3c36df2165a094" + }, + { + "key": "fc05424954474f03021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1cd8a0c0598b0d88f889fdf9a3140f8f088e2187803a2faaee3f13c0163eb76c" + }, + { + "key": "fc05424954474f03020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e77817115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "fbdc39c3b8ffca4e6caf3298fa1a4be546b99163c2f21bd374d2254ec5b3c0f4" + } + ], + "witnessUtxo": { + "script": "512015c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1000" + }, + "sighashType": 0, + "tapInternalKey": "eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "tapMerkleRoot": "b2a497ea4d0b52f5011ae135d0bbe0d9ebd777bb28e733cbcc13134b73106a1a", + "tapBip32Derivation": [ + { + "leafHashes": [], + "pubkey": "1d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953", + "path": "0/0/41/5", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [], + "pubkey": "0fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171", + "path": "0/0/41/5", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402202a91bae6d5c543ab51ccd0409f54469b539dd2e569f90949b8be637eabd3902802206d38f3d87b598275bef6d910e4614e4452573320ca3ddea150e4901aa3781f7c012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff07e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d2a7abb6c0563c3000e37412a9b97f6352d17e40960456fe830d264f0474f8b6022038d5cdbe88a319de5d7b7db8f57d0a92524beb242729b46a617adb530f2fa0d001" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "32AoMPMpT2ErEqupk6CJvrEMrj6TzmZu8V" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "bc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sqay5xu" + }, + { + "script": "5120b27227f5cadc056afea4b02b4b97b9a0151786234c26ad588dccf134e78931c6", + "value": "900", + "address": "bc1pkfez0aw2mszk4l4ykq45h9ae5q230p3rfsn26kydencnfeufx8rq23ty2z" + }, + { + "script": "51204f73b5561399eb397b5ab413e090cc0c48ff703a61afe47cf7d47a23d43b978b", + "value": "900", + "address": "bc1pfaem24snn84nj766ksf7pyxvp3y07up6vxh7gl8h63az84pmj79sehcc5d" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + }, + { + "unknownKeyVals": [], + "tapTree": { + "leaves": [ + { + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbac", + "leafVersion": 192, + "depth": 2 + }, + { + "script": "203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac", + "leafVersion": 192, + "depth": 2 + } + ] + }, + "tapInternalKey": "8ea58016ecabe3cf8490ec65d779141571fb9e5c12eac905d180f0e102943394", + "tapBip32Derivation": [ + { + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce" + ], + "pubkey": "99e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40", + "path": "0/0/30/3", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ], + "pubkey": "3a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbb", + "path": "0/0/30/3", + "masterFingerprint": "cc18ae08" + }, + { + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ], + "pubkey": "a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9add", + "path": "0/0/30/3", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "unknownKeyVals": [], + "tapTree": { + "leaves": [ + { + "script": "204e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6ad20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ad20683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2cac", + "leafVersion": 192, + "depth": 1 + } + ] + }, + "tapInternalKey": "31b5af14121c7a997e1f58dc7178f8b2589e330fe5a9dc8c16549f90cbbe9ec5", + "tapBip32Derivation": [ + { + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0" + ], + "pubkey": "4e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6", + "path": "0/0/40/4", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0", + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ], + "pubkey": "c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499", + "path": "0/0/40/4", + "masterFingerprint": "cc18ae08" + }, + { + "leafHashes": [ + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ], + "pubkey": "683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2c", + "path": "0/0/40/4", + "masterFingerprint": "f65cd869" + } + ] + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.halfsigned.json new file mode 100644 index 0000000..58f62e9 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.halfsigned.json @@ -0,0 +1,471 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "bb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "a662a5ffebf58bf3e65e53456c67c029cc154a2409740d8cd37fdee7559c5efd", + "index": 3, + "sequence": 4294967295 + }, + { + "hash": "d394375cee23b3b9951488c0403529157a85b058edc0351546d9eb4807e8a1d3", + "index": 4, + "sequence": 4294967295 + }, + { + "hash": "0d2f7f3486edaefc6ab92c21f7caf90085c4de4adac491106fd8a0e4f563dea3", + "index": 5, + "sequence": 4294967295 + }, + { + "hash": "97441d99a8d66f124ab3c9de26b87bd00aeb1547051c842a88165c1b089ee902", + "index": 6, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304402201e79545c011e34b1b872b4b057e66262d86881da6a7f853e7e57a9a4d12c6dc102201a538b2175c7b7161c76da18394220f354ae2729fcc1c902b74c59cd79e0153101" + } + ] + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402205f760c27e7598a9e80a2adaf1d925c67d2e6c24aec773e5cce56d234159ab1e502201ce97d5659681ab881e10acc9c8021587f843a15336c3a8b6fb2efc053928b8501" + } + ] + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100d3b03fb77553144e14171c7b1b517a3bf33df87370b65e337f0a50844562261e0220585bc0913b56ad968161d343f321d77f5f94ff3cf62545932f1509239a15a38e01" + } + ] + }, + { + "type": "p2tr", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "5120394b94d061d7b778fed8a204ce05ed0b44954ec1622f934f84114e1173f33027", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d83", + "script": "207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ], + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "path": "0/0/31/3", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ], + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "path": "0/0/31/3", + "masterFingerprint": "f65cd869" + } + ], + "tapScriptSig": [ + { + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "signature": "83b1bb7c6ce5868c8a723c4d350591894809b1335586f60cbfccc6dd4e28b8630a74637b1b242e5a389540db94f23bcbedee9c783830cb2afaff1f2763dbdb7b", + "leafHash": "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + } + ] + }, + { + "type": "p2trMusig2", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "512029bbfaf4385b10dc2bbe7ab4d50e89cebe8f507968727b19689e2638083cc55b", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c976", + "script": "20643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ], + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "path": "0/0/41/4", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ], + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "path": "0/0/41/4", + "masterFingerprint": "cc18ae08" + } + ], + "tapScriptSig": [ + { + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "signature": "0a1e013f6d57fb8b248b2b19b08b34c1a3cd5ff6de4acdf19dd4ce0e02d42154856dd569f4668f2abaccbb50ce81a9d2f53efdfb627c2cb14cf92c4189a35da7", + "leafHash": "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + } + ] + }, + { + "type": "taprootKeyPathSpend", + "unknownKeyVals": [ + { + "key": "fc05424954474f0115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "value": "021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171" + }, + { + "key": "fc05424954474f02021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "03a4aaf46f3a0bc39a73855fa875b2f2f04bdb06235afbaedf857b593dddc63cb402cdb7f1a93ec526282198d834423371757e8f43932d03b9f43c3f7378300ae508" + }, + { + "key": "fc05424954474f02020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e77817115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "02826949740dff45d408b1f19d94c720f53411e02c525b28ab3c593b6b530fe0370374b8a0ffcaaaee6b772dac5f7c23ef33670b32ec77c6d41efb3c36df2165a094" + }, + { + "key": "fc05424954474f03021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1cd8a0c0598b0d88f889fdf9a3140f8f088e2187803a2faaee3f13c0163eb76c" + } + ], + "witnessUtxo": { + "script": "512015c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1000" + }, + "sighashType": 0, + "tapInternalKey": "eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "tapMerkleRoot": "b2a497ea4d0b52f5011ae135d0bbe0d9ebd777bb28e733cbcc13134b73106a1a", + "tapBip32Derivation": [ + { + "leafHashes": [], + "pubkey": "1d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953", + "path": "0/0/41/5", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [], + "pubkey": "0fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171", + "path": "0/0/41/5", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402202a91bae6d5c543ab51ccd0409f54469b539dd2e569f90949b8be637eabd3902802206d38f3d87b598275bef6d910e4614e4452573320ca3ddea150e4901aa3781f7c012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff07e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d2a7abb6c0563c3000e37412a9b97f6352d17e40960456fe830d264f0474f8b6022038d5cdbe88a319de5d7b7db8f57d0a92524beb242729b46a617adb530f2fa0d001" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "32AoMPMpT2ErEqupk6CJvrEMrj6TzmZu8V" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "bc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sqay5xu" + }, + { + "script": "5120b27227f5cadc056afea4b02b4b97b9a0151786234c26ad588dccf134e78931c6", + "value": "900", + "address": "bc1pkfez0aw2mszk4l4ykq45h9ae5q230p3rfsn26kydencnfeufx8rq23ty2z" + }, + { + "script": "51204f73b5561399eb397b5ab413e090cc0c48ff703a61afe47cf7d47a23d43b978b", + "value": "900", + "address": "bc1pfaem24snn84nj766ksf7pyxvp3y07up6vxh7gl8h63az84pmj79sehcc5d" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + }, + { + "unknownKeyVals": [], + "tapTree": { + "leaves": [ + { + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbac", + "leafVersion": 192, + "depth": 2 + }, + { + "script": "203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac", + "leafVersion": 192, + "depth": 2 + } + ] + }, + "tapInternalKey": "8ea58016ecabe3cf8490ec65d779141571fb9e5c12eac905d180f0e102943394", + "tapBip32Derivation": [ + { + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce" + ], + "pubkey": "99e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40", + "path": "0/0/30/3", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ], + "pubkey": "3a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbb", + "path": "0/0/30/3", + "masterFingerprint": "cc18ae08" + }, + { + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ], + "pubkey": "a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9add", + "path": "0/0/30/3", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "unknownKeyVals": [], + "tapTree": { + "leaves": [ + { + "script": "204e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6ad20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ad20683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2cac", + "leafVersion": 192, + "depth": 1 + } + ] + }, + "tapInternalKey": "31b5af14121c7a997e1f58dc7178f8b2589e330fe5a9dc8c16549f90cbbe9ec5", + "tapBip32Derivation": [ + { + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0" + ], + "pubkey": "4e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6", + "path": "0/0/40/4", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0", + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ], + "pubkey": "c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499", + "path": "0/0/40/4", + "masterFingerprint": "cc18ae08" + }, + { + "leafHashes": [ + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ], + "pubkey": "683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2c", + "path": "0/0/40/4", + "masterFingerprint": "f65cd869" + } + ] + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.unsigned.json new file mode 100644 index 0000000..66a3adf --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.unsigned.json @@ -0,0 +1,421 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "bb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "a662a5ffebf58bf3e65e53456c67c029cc154a2409740d8cd37fdee7559c5efd", + "index": 3, + "sequence": 4294967295 + }, + { + "hash": "d394375cee23b3b9951488c0403529157a85b058edc0351546d9eb4807e8a1d3", + "index": 4, + "sequence": 4294967295 + }, + { + "hash": "0d2f7f3486edaefc6ab92c21f7caf90085c4de4adac491106fd8a0e4f563dea3", + "index": 5, + "sequence": 4294967295 + }, + { + "hash": "97441d99a8d66f124ab3c9de26b87bd00aeb1547051c842a88165c1b089ee902", + "index": 6, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600" + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae" + }, + { + "type": "p2tr", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "5120394b94d061d7b778fed8a204ce05ed0b44954ec1622f934f84114e1173f33027", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d83", + "script": "207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ], + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "path": "0/0/31/3", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ], + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "path": "0/0/31/3", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "type": "p2trMusig2", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "512029bbfaf4385b10dc2bbe7ab4d50e89cebe8f507968727b19689e2638083cc55b", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c976", + "script": "20643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ], + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "path": "0/0/41/4", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ], + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "path": "0/0/41/4", + "masterFingerprint": "cc18ae08" + } + ] + }, + { + "type": "taprootKeyPathSpend", + "unknownKeyVals": [ + { + "key": "fc05424954474f0115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "value": "021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171" + } + ], + "witnessUtxo": { + "script": "512015c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1000" + }, + "sighashType": 0, + "tapInternalKey": "eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "tapMerkleRoot": "b2a497ea4d0b52f5011ae135d0bbe0d9ebd777bb28e733cbcc13134b73106a1a", + "tapBip32Derivation": [ + { + "leafHashes": [], + "pubkey": "1d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953", + "path": "0/0/41/5", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [], + "pubkey": "0fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171", + "path": "0/0/41/5", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402202a91bae6d5c543ab51ccd0409f54469b539dd2e569f90949b8be637eabd3902802206d38f3d87b598275bef6d910e4614e4452573320ca3ddea150e4901aa3781f7c012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff07e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "32AoMPMpT2ErEqupk6CJvrEMrj6TzmZu8V" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "bc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sqay5xu" + }, + { + "script": "5120b27227f5cadc056afea4b02b4b97b9a0151786234c26ad588dccf134e78931c6", + "value": "900", + "address": "bc1pkfez0aw2mszk4l4ykq45h9ae5q230p3rfsn26kydencnfeufx8rq23ty2z" + }, + { + "script": "51204f73b5561399eb397b5ab413e090cc0c48ff703a61afe47cf7d47a23d43b978b", + "value": "900", + "address": "bc1pfaem24snn84nj766ksf7pyxvp3y07up6vxh7gl8h63az84pmj79sehcc5d" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + }, + { + "unknownKeyVals": [], + "tapTree": { + "leaves": [ + { + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbac", + "leafVersion": 192, + "depth": 2 + }, + { + "script": "203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac", + "leafVersion": 192, + "depth": 2 + } + ] + }, + "tapInternalKey": "8ea58016ecabe3cf8490ec65d779141571fb9e5c12eac905d180f0e102943394", + "tapBip32Derivation": [ + { + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce" + ], + "pubkey": "99e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40", + "path": "0/0/30/3", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ], + "pubkey": "3a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbb", + "path": "0/0/30/3", + "masterFingerprint": "cc18ae08" + }, + { + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ], + "pubkey": "a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9add", + "path": "0/0/30/3", + "masterFingerprint": "f65cd869" + } + ] + }, + { + "unknownKeyVals": [], + "tapTree": { + "leaves": [ + { + "script": "204e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6ad20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ac", + "leafVersion": 192, + "depth": 1 + }, + { + "script": "20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ad20683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2cac", + "leafVersion": 192, + "depth": 1 + } + ] + }, + "tapInternalKey": "31b5af14121c7a997e1f58dc7178f8b2589e330fe5a9dc8c16549f90cbbe9ec5", + "tapBip32Derivation": [ + { + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0" + ], + "pubkey": "4e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6", + "path": "0/0/40/4", + "masterFingerprint": "f2ef0389" + }, + { + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0", + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ], + "pubkey": "c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499", + "path": "0/0/40/4", + "masterFingerprint": "cc18ae08" + }, + { + "leafHashes": [ + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ], + "pubkey": "683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2c", + "path": "0/0/40/4", + "masterFingerprint": "f65cd869" + } + ] + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.fullsigned.json new file mode 100644 index 0000000..286eccf --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.fullsigned.json @@ -0,0 +1,99 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c7441" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a473044022014b73c08c0183770986da34a9757eaed867e62d118188a649ce11356da7f10c102202d91e5a60cf22dc2736f4fa52333a276f60ed6d6a332fb6e8ffc94deddbba444012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.halfsigned.json new file mode 100644 index 0000000..ff2ae87 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.halfsigned.json @@ -0,0 +1,95 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a473044022014b73c08c0183770986da34a9757eaed867e62d118188a649ce11356da7f10c102202d91e5a60cf22dc2736f4fa52333a276f60ed6d6a332fb6e8ffc94deddbba444012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.unsigned.json new file mode 100644 index 0000000..7daf7ba --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.unsigned.json @@ -0,0 +1,83 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEAvQIAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAakcwRAIgHqWF/NB4uNG9Cdr663PVIIerF2/RZ//WCD58UnE55r4CIBonxwq68xAfzVMswOmRbYP+EmLi2xJYvm2WYaYWqmWDASEDvQw0sjc+OHV1zdsQPsA5FsMQRPJQjiYf41l6JoDsvR//////AegDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHAAAAAAEDBEEAAAABBGlSIQP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fyEDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IhA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbU64iBgNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278hTMGK4IAAAAAAAAAAABAAAAAAAAACIGA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbFPZc2GkAAAAAAAAAAAEAAAAAAAAAIgYD9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8U8u8DiQAAAAAAAAAAAQAAAAAAAAAAAQDfAgAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAABqRzBEAiAUtzwIwBg3cJhto0qXV+rthn5i0RgYimSc4RNW2n8QwQIgLZHlpgzyLcJzb0+lIzOidvYO1tajMvtuj/yU3t27pEQBIQO9DDSyNz44dXXN2xA+wDkWwxBE8lCOJh/jWXomgOy9H/////8C6AMAAAAAAAAZdqkUiDrY0a/9+Kc8va9yN7XFq57CwyaIrOgDAAAAAAAAF6kUILNwlNgqUTRR/wzNnbI6ugW8XvOHAAAAAAEDBEEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a473044022014b73c08c0183770986da34a9757eaed867e62d118188a649ce11356da7f10c102202d91e5a60cf22dc2736f4fa52333a276f60ed6d6a332fb6e8ffc94deddbba444012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.fullsigned.json new file mode 100644 index 0000000..1a97d66 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.fullsigned.json @@ -0,0 +1,237 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "30e7b080f3ea1343910e2fa15f59bece2554cf30a923d33bc28f1ebfba0b6b49", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "d401d0f1eea15d1052175ba6b0023dec9ed3d5d4e3cb5adcaa546fe7cffacc89", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "144c6838538031957589d9ab76deae92b01fe63568dabf1a64293e69f25a7941", + "index": 3, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e0e1ba72052b3f3c4b193b1f21aff66e8bfb821131f9b7680bea781ca6d637430220285ca143f06cd4e32aeac9bff16ef92abb95df0b08649709266686ad4b180d7641" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100dd4c0b374aca63840594e44c995835b3630eae3f6111d3eea5faecb49f2e40540220384f3653dce80d9dc2879d508dce3f1ccc8d19b19153737bb23a274941c422d441" + } + ] + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402206eb6a084505d7badc1afef554e859c65df31ad5b7bdbc62a14943d5b4f95307102200cba48e9c5676562ab30d73094448a0eb35eee73bfac5311140cd944332dca9b41" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "signature": "3045022100c3ae94dbb976bcd38566308b4d9350da86ebe044c610b36b913f6476524568cd022044dfd32108f0afe46a63384f42a4990ba73b9ebaddd88801daf3e3ebd83e223c41" + } + ] + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100f8cc6761ff5f70b95b4bb6e50f087be6e3899794b93048f08078c7bce89d5834022011cbeb43e5bd55fc96b39be2bc46112ecd6080fd6f148153dea1dc9cb8dcc5ea41" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "signature": "3044022071c4e85d66d2ea91d771458924e674b4ca40f6dc804a31db86d80d51eefc46c5022029bb9741909af81f3205edf62c51342ba3c4444907b78f56fac41155ead0cf3b41" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220522ac04b6830004156683ec4912e0c1517f1eb80337ca6475a1425f80f248c1002200ef79b195b8f1b37ac42a89a67111e1470eba98db566f9018dd2ca0199bfd1c1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff04e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d9fc432b5d223325c038441974d75517582a9f0e8ba10d3188b2092e97c7624e0220028e3307eb02b1916c1a0089ea6ff1a255e6d2bd0eab2c994dfb433d6eea439641" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "AbZTPoHNRTTSjDZ9bE8J9D874VkRavLrwz" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "AGFf5Lj1EGacxeRPBeC3f78XBojSo3ZAJj" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "btg1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848swaqfkk" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.halfsigned.json new file mode 100644 index 0000000..f7216b0 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.halfsigned.json @@ -0,0 +1,225 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "30e7b080f3ea1343910e2fa15f59bece2554cf30a923d33bc28f1ebfba0b6b49", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "d401d0f1eea15d1052175ba6b0023dec9ed3d5d4e3cb5adcaa546fe7cffacc89", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "144c6838538031957589d9ab76deae92b01fe63568dabf1a64293e69f25a7941", + "index": 3, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e0e1ba72052b3f3c4b193b1f21aff66e8bfb821131f9b7680bea781ca6d637430220285ca143f06cd4e32aeac9bff16ef92abb95df0b08649709266686ad4b180d7641" + } + ] + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402206eb6a084505d7badc1afef554e859c65df31ad5b7bdbc62a14943d5b4f95307102200cba48e9c5676562ab30d73094448a0eb35eee73bfac5311140cd944332dca9b41" + } + ] + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100f8cc6761ff5f70b95b4bb6e50f087be6e3899794b93048f08078c7bce89d5834022011cbeb43e5bd55fc96b39be2bc46112ecd6080fd6f148153dea1dc9cb8dcc5ea41" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220522ac04b6830004156683ec4912e0c1517f1eb80337ca6475a1425f80f248c1002200ef79b195b8f1b37ac42a89a67111e1470eba98db566f9018dd2ca0199bfd1c1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff04e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d9fc432b5d223325c038441974d75517582a9f0e8ba10d3188b2092e97c7624e0220028e3307eb02b1916c1a0089ea6ff1a255e6d2bd0eab2c994dfb433d6eea439641" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "AbZTPoHNRTTSjDZ9bE8J9D874VkRavLrwz" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "AGFf5Lj1EGacxeRPBeC3f78XBojSo3ZAJj" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "btg1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848swaqfkk" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.unsigned.json new file mode 100644 index 0000000..28226e9 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.unsigned.json @@ -0,0 +1,201 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "30e7b080f3ea1343910e2fa15f59bece2554cf30a923d33bc28f1ebfba0b6b49", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "d401d0f1eea15d1052175ba6b0023dec9ed3d5d4e3cb5adcaa546fe7cffacc89", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "144c6838538031957589d9ab76deae92b01fe63568dabf1a64293e69f25a7941", + "index": 3, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600" + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220522ac04b6830004156683ec4912e0c1517f1eb80337ca6475a1425f80f248c1002200ef79b195b8f1b37ac42a89a67111e1470eba98db566f9018dd2ca0199bfd1c1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff04e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "AbZTPoHNRTTSjDZ9bE8J9D874VkRavLrwz" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "AGFf5Lj1EGacxeRPBeC3f78XBojSo3ZAJj" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "btg1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848swaqfkk" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.fullsigned.json new file mode 100644 index 0000000..7ad2079 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.fullsigned.json @@ -0,0 +1,99 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea01" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220691753a27fe3a3baff26ddc6b3c9cdb2046909cab0e220463f9a0a58d5e1d23e02200c3d4ac45187c47deea2ac437eb415d6543bbbe8870e4a52f2b4c671f14d8317012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "7nCEW3CMTCDK1BaYRHo4kLDbexwpb8uDVT" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.halfsigned.json new file mode 100644 index 0000000..5ea61cc --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.halfsigned.json @@ -0,0 +1,95 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220691753a27fe3a3baff26ddc6b3c9cdb2046909cab0e220463f9a0a58d5e1d23e02200c3d4ac45187c47deea2ac437eb415d6543bbbe8870e4a52f2b4c671f14d8317012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "7nCEW3CMTCDK1BaYRHo4kLDbexwpb8uDVT" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.unsigned.json new file mode 100644 index 0000000..abb2706 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.unsigned.json @@ -0,0 +1,83 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEAvgEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAa0gwRQIhAI16Jw55P9M2/KELZhKcZMAIFd2dPEVGsS1pmrM1IAcwAiB9bF3Ub1ycZcCP0pXptOfbRTd5kox2USgDljSwjtRnoQEhA70MNLI3Pjh1dc3bED7AORbDEETyUI4mH+NZeiaA7L0f/////wHoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhwAAAAABAwQBAAAAAQRpUiED9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8hA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyIQPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXW1OuIgYDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IUzBiuCAAAAAAAAAAAAQAAAAAAAAAiBgPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXWxT2XNhpAAAAAAAAAAABAAAAAAAAACIGA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/FPLvA4kAAAAAAAAAAAEAAAAAAAAAAAEA3wEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAakcwRAIgaRdTon/jo7r/Jt3Gs8nNsgRpCcqw4iBGP5oKWNXh0j4CIAw9SsRRh8R97qKsQ360FdZUO7vohw5KUvK0xnHxTYMXASEDvQw0sjc+OHV1zdsQPsA5FsMQRPJQjiYf41l6JoDsvR//////AugDAAAAAAAAGXapFIg62NGv/finPL2vcje1xauewsMmiKzoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwAAAAABAwQBAAAAAQQjIQM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlawAAQBpUiECzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkhAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arIQNE2IQTbfVQIChl/7xiGMf5yI/mzjnJRXmBkLrbOKdS8VOuIgICzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkU8u8DiQAAAAAAAAAAAAAAAAAAAAAiAgLXL9DQ2QKTQ0rV/KFg8njgPGFEl6pOQlz0VOLBMw+WqxTMGK4IAAAAAAAAAAAAAAAAAAAAACICA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxFPZc2GkAAAAAAAAAAAAAAAAAAAAAAA==", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220691753a27fe3a3baff26ddc6b3c9cdb2046909cab0e220463f9a0a58d5e1d23e02200c3d4ac45187c47deea2ac437eb415d6543bbbe8870e4a52f2b4c671f14d8317012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "7nCEW3CMTCDK1BaYRHo4kLDbexwpb8uDVT" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.fullsigned.json new file mode 100644 index 0000000..d8ca663 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.fullsigned.json @@ -0,0 +1,99 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEAvgEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAa0gwRQIhAI16Jw55P9M2/KELZhKcZMAIFd2dPEVGsS1pmrM1IAcwAiB9bF3Ub1ycZcCP0pXptOfbRTd5kox2USgDljSwjtRnoQEhA70MNLI3Pjh1dc3bED7AORbDEETyUI4mH+NZeiaA7L0f/////wHoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhwAAAAAiAgPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXW0gwRQIhAL+x7bXQCfVs3RiMVlTN3I3dzI9F0DyKc8II6BD5cbHgAiAE6KMwvNYsfk00hx3jQUFR+pxivmeEU/NfFNrbgtNd6gEiAgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+f0gwRQIhAI76llxwVViJOcFbw+Yza62LDTzMaAQofuW2+3LQC/78AiB8aFp9cUXHQs6JxieYur8/i0FP6w1gp1Ux8eQ+myno0QEBAwQBAAAAAQRpUiED9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8hA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyIQPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXW1OuIgYDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IUzBiuCAAAAAAAAAAAAQAAAAAAAAAiBgPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXWxT2XNhpAAAAAAAAAAABAAAAAAAAACIGA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/FPLvA4kAAAAAAAAAAAEAAAAAAAAAAAEA3wEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAakcwRAIgaRdTon/jo7r/Jt3Gs8nNsgRpCcqw4iBGP5oKWNXh0j4CIAw9SsRRh8R97qKsQ360FdZUO7vohw5KUvK0xnHxTYMXASEDvQw0sjc+OHV1zdsQPsA5FsMQRPJQjiYf41l6JoDsvR//////AugDAAAAAAAAGXapFIg62NGv/finPL2vcje1xauewsMmiKzoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwAAAAAiAgM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlUgwRQIhALsURddD2zyEa5JtxHrjwYq8gBD3ulXzhcfNcJS20r2yAiAZ+riwLUoBAKwu2abz5WkS+qS2YNUmGPk8zSooem5baAEBAwQBAAAAAQQjIQM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlawAAQBpUiECzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkhAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arIQNE2IQTbfVQIChl/7xiGMf5yI/mzjnJRXmBkLrbOKdS8VOuIgICzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkU8u8DiQAAAAAAAAAAAAAAAAAAAAAiAgLXL9DQ2QKTQ0rV/KFg8njgPGFEl6pOQlz0VOLBMw+WqxTMGK4IAAAAAAAAAAAAAAAAAAAAACICA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxFPZc2GkAAAAAAAAAAAAAAAAAAAAAAA==", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea01" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220691753a27fe3a3baff26ddc6b3c9cdb2046909cab0e220463f9a0a58d5e1d23e02200c3d4ac45187c47deea2ac437eb415d6543bbbe8870e4a52f2b4c671f14d8317012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "ACDrQgz5iGzZunR4Zonyf5rKRzVUsTTgbE" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.halfsigned.json new file mode 100644 index 0000000..dd78082 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.halfsigned.json @@ -0,0 +1,95 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220691753a27fe3a3baff26ddc6b3c9cdb2046909cab0e220463f9a0a58d5e1d23e02200c3d4ac45187c47deea2ac437eb415d6543bbbe8870e4a52f2b4c671f14d8317012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "ACDrQgz5iGzZunR4Zonyf5rKRzVUsTTgbE" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.unsigned.json new file mode 100644 index 0000000..bed3070 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.unsigned.json @@ -0,0 +1,83 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEAvgEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAa0gwRQIhAI16Jw55P9M2/KELZhKcZMAIFd2dPEVGsS1pmrM1IAcwAiB9bF3Ub1ycZcCP0pXptOfbRTd5kox2USgDljSwjtRnoQEhA70MNLI3Pjh1dc3bED7AORbDEETyUI4mH+NZeiaA7L0f/////wHoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhwAAAAABAwQBAAAAAQRpUiED9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8hA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyIQPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXW1OuIgYDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IUzBiuCAAAAAAAAAAAAQAAAAAAAAAiBgPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXWxT2XNhpAAAAAAAAAAABAAAAAAAAACIGA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/FPLvA4kAAAAAAAAAAAEAAAAAAAAAAAEA3wEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAakcwRAIgaRdTon/jo7r/Jt3Gs8nNsgRpCcqw4iBGP5oKWNXh0j4CIAw9SsRRh8R97qKsQ360FdZUO7vohw5KUvK0xnHxTYMXASEDvQw0sjc+OHV1zdsQPsA5FsMQRPJQjiYf41l6JoDsvR//////AugDAAAAAAAAGXapFIg62NGv/finPL2vcje1xauewsMmiKzoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwAAAAABAwQBAAAAAQQjIQM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlawAAQBpUiECzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkhAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arIQNE2IQTbfVQIChl/7xiGMf5yI/mzjnJRXmBkLrbOKdS8VOuIgICzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkU8u8DiQAAAAAAAAAAAAAAAAAAAAAiAgLXL9DQ2QKTQ0rV/KFg8njgPGFEl6pOQlz0VOLBMw+WqxTMGK4IAAAAAAAAAAAAAAAAAAAAACICA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxFPZc2GkAAAAAAAAAAAAAAAAAAAAAAA==", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006a4730440220691753a27fe3a3baff26ddc6b3c9cdb2046909cab0e220463f9a0a58d5e1d23e02200c3d4ac45187c47deea2ac437eb415d6543bbbe8870e4a52f2b4c671f14d8317012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "ACDrQgz5iGzZunR4Zonyf5rKRzVUsTTgbE" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.fullsigned.json new file mode 100644 index 0000000..286eccf --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.fullsigned.json @@ -0,0 +1,99 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c7441" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a473044022014b73c08c0183770986da34a9757eaed867e62d118188a649ce11356da7f10c102202d91e5a60cf22dc2736f4fa52333a276f60ed6d6a332fb6e8ffc94deddbba444012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.halfsigned.json new file mode 100644 index 0000000..ff2ae87 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.halfsigned.json @@ -0,0 +1,95 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a473044022014b73c08c0183770986da34a9757eaed867e62d118188a649ce11356da7f10c102202d91e5a60cf22dc2736f4fa52333a276f60ed6d6a332fb6e8ffc94deddbba444012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.unsigned.json new file mode 100644 index 0000000..7daf7ba --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.unsigned.json @@ -0,0 +1,83 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEAvQIAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAakcwRAIgHqWF/NB4uNG9Cdr663PVIIerF2/RZ//WCD58UnE55r4CIBonxwq68xAfzVMswOmRbYP+EmLi2xJYvm2WYaYWqmWDASEDvQw0sjc+OHV1zdsQPsA5FsMQRPJQjiYf41l6JoDsvR//////AegDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHAAAAAAEDBEEAAAABBGlSIQP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fyEDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IhA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbU64iBgNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278hTMGK4IAAAAAAAAAAABAAAAAAAAACIGA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbFPZc2GkAAAAAAAAAAAEAAAAAAAAAIgYD9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8U8u8DiQAAAAAAAAAAAQAAAAAAAAAAAQDfAgAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAABqRzBEAiAUtzwIwBg3cJhto0qXV+rthn5i0RgYimSc4RNW2n8QwQIgLZHlpgzyLcJzb0+lIzOidvYO1tajMvtuj/yU3t27pEQBIQO9DDSyNz44dXXN2xA+wDkWwxBE8lCOJh/jWXomgOy9H/////8C6AMAAAAAAAAZdqkUiDrY0a/9+Kc8va9yN7XFq57CwyaIrOgDAAAAAAAAF6kUILNwlNgqUTRR/wzNnbI6ugW8XvOHAAAAAAEDBEEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "5c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a47304402201ea585fcd078b8d1bd09dafaeb73d52087ab176fd167ffd6083e7c527139e6be02201a27c70abaf3101fcd532cc0e9916d83fe1262e2db1258be6d9661a616aa6583012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 65, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "02000000010101010101010101010101010101010101010101010101010101010101010101000000006a473044022014b73c08c0183770986da34a9757eaed867e62d118188a649ce11356da7f10c102202d91e5a60cf22dc2736f4fa52333a276f60ed6d6a332fb6e8ffc94deddbba444012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff02e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 65 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.fullsigned.json new file mode 100644 index 0000000..c28ba6a --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.fullsigned.json @@ -0,0 +1,237 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "bb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "4f20e1daf9158414abb3891bb7ae087d14f17b59e5c167d9e53365a1337fb579", + "index": 3, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e9f193db9830d516af5598045b9404d096e89c7a192f77ad220fa3a487308b0002205dea2fd75f700b3beec6e77a4bdd21a6ac9b9a355c1ea958a6864305e203d9fe01" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3044022025cd881a29cca29960c0361d18f741681bdb0d8c0f55c1f8d78daf03757ce8af02205d93f55191a736ab373b05cfeb099440234d99a2720188c3ac13150cb6e0ac4c01" + } + ] + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "3045022100a4bfba654b915a5ca895c5339ce5edab81bd67b65c805997cad9762840d3c7060220021f8ffb89ebea032cb339ecbd8494c84f955ed894963992b4f31e91e8df0a7401" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "signature": "3044022050f1e19eaec828c7856135b98b6e1af9c600229241ec8507d50dae85ff71823902207c084363fe89081b49d929851b62fa9b9d44c70ec3931e8bb473c8d84e35b2e401" + } + ] + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "304402204db56669993c9644b84a54892958b7c15d4897829d19a673f7a337bdfab834c202203c6aca862b8ab1a2a3b570689836f09a191b97bcee9ddd8e19271e7a53f6a80401" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "signature": "3044022021df7a10ad4a6838c6553897cd6779fa232e89a600058f946a0c4e86a871bb21022049919108dcbda4b4318fb87d5b1c5f929bd9a82f9ef49fadd7b3445a9cf3207001" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b483045022100ae347b03f4709e3d255f6dbfde83db5ffecd51574db382e366ad1c5357465025022050bad0e6959c77bebaa90e298de536f401278064dbc0f14c2dea64281e82ee12012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff04e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100e5bcb83e8f66f30bf6ea886184ef607557cb166ca1d3de3253c293e1865c775202205577e3e2acd1fd7ea93b1e624169db1d52e97030680bc062095cf7ac667d4eca01" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "MTgjyjL9bKy6ovKVFZ7uEbUM47htkbjGDc" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "M8NwfGmnQ96H3MBiqyBekVUmBRguvnNQEi" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "ltc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sre2yue" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.halfsigned.json new file mode 100644 index 0000000..0f55f83 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.halfsigned.json @@ -0,0 +1,225 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAP0ZAQEAAAAE2Z764Zn8TVTlglqOM2ijlenrMpkVz7XYjcMRUH0YSDYAAAAAAP////8eyXKaGyU3OjDw/m4IebMRNqVPL4yYYYxGhidIoIxeeAEAAAAA/////7sN++ulm7pp484HpUNG+ATFQ/pG2CjtU50RIxrbqot7AgAAAAD/////TyDh2vkVhBSrs4kbt64IfRTxe1nlwWfZ5TNloTN/tXkDAAAAAP////8DhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4eEAwAAAAAAABepFAVBJxIdN/MiZs2WfEhUBJdqZ63wh4QDAAAAAAAAIgAgukjj+YdEY5Q/kBkqRfGuiVt3k2KnYpr3rWqdeoNePU8AAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEAvgEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAa0gwRQIhAI16Jw55P9M2/KELZhKcZMAIFd2dPEVGsS1pmrM1IAcwAiB9bF3Ub1ycZcCP0pXptOfbRTd5kox2USgDljSwjtRnoQEhA70MNLI3Pjh1dc3bED7AORbDEETyUI4mH+NZeiaA7L0f/////wHoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhwAAAAAiAgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+f0gwRQIhAOnxk9uYMNUWr1WYBFuUBNCW6Jx6GS93rSIPo6SHMIsAAiBd6i/XX3ALO+7G53pL3SGmrJuaNVweqVimhkMF4gPZ/gEBAwQBAAAAAQRpUiED9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8hA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyIQPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXW1OuIgYDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IUzBiuCAAAAAAAAAAAAQAAAAAAAAAiBgPhUk1/b8V6s+rLtlm3hxBngKR10dtIOVLCMQt+mjiXWxT2XNhpAAAAAAAAAAABAAAAAAAAACIGA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/FPLvA4kAAAAAAAAAAAEAAAAAAAAAAAEBIOgDAAAAAAAAF6kUDiayXQzq5vnP8+2syqDRpw2nYA+HIgICpYXz+rSbXvlTRtkyIhoiG9VewZHxVTPg8nCzWCV08DVIMEUCIQCkv7plS5FaXKiVxTOc5e2rgb1ntlyAWZfK2XYoQNPHBgIgAh+P+4nr6gMssznsvYSUyE+VXtiUljmStPMekejfCnQBAQMEAQAAAAEEIgAgRtSAChOTMwGWCFOZ7UoXALTC/TjFIYjDo6kfch88lgABBWlSIQKlhfP6tJte+VNG2TIiGiIb1V7BkfFVM+DycLNYJXTwNSECxPeGbP1ZlrwQaKljE8oV6cy16YRYOgc0Dd2uevAUYFshAiNFMbyRGaNqeUbpWut0kV3Qh8e0T1F7ju63P4mg/xqZU64iBgIjRTG8kRmjanlG6VrrdJFd0IfHtE9Re47utz+JoP8amRT2XNhpAAAAAAAAAAALAAAAAQAAACIGAqWF8/q0m175U0bZMiIaIhvVXsGR8VUz4PJws1gldPA1FPLvA4kAAAAAAAAAAAsAAAABAAAAIgYCxPeGbP1ZlrwQaKljE8oV6cy16YRYOgc0Dd2uevAUYFsUzBiuCAAAAAAAAAAACwAAAAEAAAAAAQEr6AMAAAAAAAAiACDbBCfxgitHd2cOZnPCivAvbaHVr+cacfXJBkRwsin6/SICA1GeVyq0aFYNH40Ph2mdCYMI4WaQX13K5DkPBg+qjxzjRzBEAiBNtWZpmTyWRLhKVIkpWLfBXUiXgp0ZpnP3oze9+rg0wgIgPGrKhiuKsaKjtXBomDbwmhkbl7zund2OGSceelP2qAQBAQMEAQAAAAEFaVIhA1GeVyq0aFYNH40Ph2mdCYMI4WaQX13K5DkPBg+qjxzjIQOgW8JjkSIdaF4Y2q/zah6Vw0+ZRRJTwWzUJlDbJ4p5ESEC6AoIiFw1Nna4IM3CkObYGgrJWgPoq79Lt67r+3D+tBhTriIGAugKCIhcNTZ2uCDNwpDm2BoKyVoD6Ku/S7eu6/tw/rQYFPZc2GkAAAAAAAAAABUAAAACAAAAIgYDUZ5XKrRoVg0fjQ+HaZ0JgwjhZpBfXcrkOQ8GD6qPHOMU8u8DiQAAAAAAAAAAFQAAAAIAAAAiBgOgW8JjkSIdaF4Y2q/zah6Vw0+ZRRJTwWzUJlDbJ4p5ERTMGK4IAAAAAAAAAAAVAAAAAgAAAAABAP0kAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAa0gwRQIhAK40ewP0cJ49JV9tv96D21/+zVFXTbOC42atHFNXRlAlAiBQutDmlZx3vrqpDimN5Tb0ASeAZNvA8Uwt6mQoHoLuEgEhA70MNLI3Pjh1dc3bED7AORbDEETyUI4mH+NZeiaA7L0f/////wToAwAAAAAAABl2qRSIOtjRr/34pzy9r3I3tcWrnsLDJois6AMAAAAAAAAZdqkUiDrY0a/9+Kc8va9yN7XFq57CwyaIrOgDAAAAAAAAGXapFIg62NGv/finPL2vcje1xauewsMmiKzoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwAAAAAiAgM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlUgwRQIhAOW8uD6PZvML9uqIYYTvYHVXyxZsodPeMlPCk+GGXHdSAiBVd+PirNH9fqk7HmJBadsdUulwMGgLwGIJXPesZn1OygEBAwQBAAAAAQQjIQM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlawAAQBpUiECzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkhAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arIQNE2IQTbfVQIChl/7xiGMf5yI/mzjnJRXmBkLrbOKdS8VOuIgICzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkU8u8DiQAAAAAAAAAAAAAAAAAAAAAiAgLXL9DQ2QKTQ0rV/KFg8njgPGFEl6pOQlz0VOLBMw+WqxTMGK4IAAAAAAAAAAAAAAAAAAAAACICA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxFPZc2GkAAAAAAAAAAAAAAAAAAAAAAAEAIgAgKSsFI1GjxvgNUbrmQsyIIRgok9vu2ryPXQ6Wd0dgJsEBAWlSIQMuEfmFUmhf6QfzH55yYMkG6N5wDww8ny8UEGI9zf0ZwCEDVFdXzjXPHt+xO54sSi+c4Aq4w2vuEryiM3zlg/0orsghAqPPtmZf5E91ILahtN4aTUZkOzhesf0eCrcO+5ZUKXVUU64iAgKjz7ZmX+RPdSC2obTeGk1GZDs4XrH9Hgq3DvuWVCl1VBT2XNhpAAAAAAAAAAAKAAAAAQAAACICAy4R+YVSaF/pB/MfnnJgyQbo3nAPDDyfLxQQYj3N/RnAFPLvA4kAAAAAAAAAAAoAAAABAAAAIgIDVFdXzjXPHt+xO54sSi+c4Aq4w2vuEryiM3zlg/0orsgUzBiuCAAAAAAAAAAACgAAAAEAAAAAAQFpUiEC1tEUC9LA+RTLMMmSqi/NKD9HGpKBzuyexsW8RI5oaQAhA7hVqHWO2mhjZIRFqdPPuVOIrKF0YhrZjwmaHE+TJv7HIQKV97Un0upTek1CgwQQq/Q0BzG/myDlSXIAGTO5qiNTbFOuIgIClfe1J9LqU3pNQoMEEKv0NAcxv5sg5UlyABkzuaojU2wU9lzYaQAAAAAAAAAAFAAAAAIAAAAiAgLW0RQL0sD5FMswyZKqL80oP0cakoHO7J7GxbxEjmhpABTy7wOJAAAAAAAAAAAUAAAAAgAAACICA7hVqHWO2mhjZIRFqdPPuVOIrKF0YhrZjwmaHE+TJv7HFMwYrggAAAAAAAAAABQAAAACAAAAAA==", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "bb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "4f20e1daf9158414abb3891bb7ae087d14f17b59e5c167d9e53365a1337fb579", + "index": 3, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e9f193db9830d516af5598045b9404d096e89c7a192f77ad220fa3a487308b0002205dea2fd75f700b3beec6e77a4bdd21a6ac9b9a355c1ea958a6864305e203d9fe01" + } + ] + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "3045022100a4bfba654b915a5ca895c5339ce5edab81bd67b65c805997cad9762840d3c7060220021f8ffb89ebea032cb339ecbd8494c84f955ed894963992b4f31e91e8df0a7401" + } + ] + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "304402204db56669993c9644b84a54892958b7c15d4897829d19a673f7a337bdfab834c202203c6aca862b8ab1a2a3b570689836f09a191b97bcee9ddd8e19271e7a53f6a80401" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b483045022100ae347b03f4709e3d255f6dbfde83db5ffecd51574db382e366ad1c5357465025022050bad0e6959c77bebaa90e298de536f401278064dbc0f14c2dea64281e82ee12012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff04e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100e5bcb83e8f66f30bf6ea886184ef607557cb166ca1d3de3253c293e1865c775202205577e3e2acd1fd7ea93b1e624169db1d52e97030680bc062095cf7ac667d4eca01" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "MTgjyjL9bKy6ovKVFZ7uEbUM47htkbjGDc" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "M8NwfGmnQ96H3MBiqyBekVUmBRguvnNQEi" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "ltc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sre2yue" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.unsigned.json new file mode 100644 index 0000000..8cbb379 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.unsigned.json @@ -0,0 +1,201 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "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", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78", + "index": 1, + "sequence": 4294967295 + }, + { + "hash": "bb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b", + "index": 2, + "sequence": 4294967295 + }, + { + "hash": "4f20e1daf9158414abb3891bb7ae087d14f17b59e5c167d9e53365a1337fb579", + "index": 3, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b4830450221008d7a270e793fd336fca10b66129c64c00815dd9d3c4546b12d699ab33520073002207d6c5dd46f5c9c65c08fd295e9b4e7db453779928c765128039634b08ed467a1012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff01e80300000000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf2438700000000", + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600" + }, + { + "type": "p2wsh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "nonWitnessUtxo": "01000000010101010101010101010101010101010101010101010101010101010101010101000000006b483045022100ae347b03f4709e3d255f6dbfde83db5ffecd51574db382e366ad1c5357465025022050bad0e6959c77bebaa90e298de536f401278064dbc0f14c2dea64281e82ee12012103bd0c34b2373e387575cddb103ec03916c31044f2508e261fe3597a2680ecbd1fffffffff04e8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace8030000000000001976a914883ad8d1affdf8a73cbdaf7237b5c5ab9ec2c32688ace80300000000000017a91420b37094d82a513451ff0ccd9db23aba05bc5ef38700000000", + "sighashType": 1 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "MTgjyjL9bKy6ovKVFZ7uEbUM47htkbjGDc" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "M8NwfGmnQ96H3MBiqyBekVUmBRguvnNQEi" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "ltc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sre2yue" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1" + }, + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2", + "masterFingerprint": "f65cd869" + } + ], + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.fullsigned.json new file mode 100644 index 0000000..df2d451 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.fullsigned.json @@ -0,0 +1,104 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAI8EAACAhSAviQIBB9zNCDF0dfUWO8QpQQ9z3Z/LZm/Irya0Dt4Kb9gTWgAAAAAA/////9zG/5Z7pfP2yyTWKwtgO9K9CnmeqYqTLnAuKoKMdoA/AQAAAAD/////AYQDAAAAAAAAF6kU2QlHRATBJKPQTD+/9h+qSc9DxYuHAAAAAAAAAAAAAAAAAAAAAAAAAE8BBIiyHgAAAAAAAAAAADqSLinwyOsNsqYEhMvctjH2sQfJyq4//c8+fS7B9rzQAxIUhxXzYdq2haZp1CQx5dbT+XNATaucn9G5ULJ5rXY0BMwYrghPAQSIsh4AAAAAAAAAAABtHWVtPd2RwZTARWWjYDcCohAWztFKJl84mC1ideZ7ZAPTusIxOnxrIcuxGxSw0QNB+SLApAOovYyH8NyCDzWvbgT2XNhpTwEEiLIeAAAAAAAAAAAAywT9Y6s02Q/mRmuIDioCzPioYzdDEpka+JEbGqq0QzQDNu8ij/6bjv/7oFLDLTNGYN0fg2bPj+RK5apnK2tikJUE8u8DiQABASDoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhyICA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbSDBFAiEA8l0JX7fFIXphnq7n0jeMaonq7+IaCkkWGyXZcMl1l+QCIGwvnm1sL3/AX21b6v/D/UpaG00ASf1wJVHvUBnH3faaASICA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/SDBFAiEAkWXvn88VxZjdoK4DsAzGWAuhgPHNtxoH3B9UqDNMLk8CIBM5f78LkenZ/50WfxWuRaTjQ24Unoeq/jKB62Ued7Q2AQEDBAEAAAABBGlSIQP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fyEDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IhA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbU64iBgNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278hTMGK4IAAAAAAAAAAABAAAAAAAAACIGA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbFPZc2GkAAAAAAAAAAAEAAAAAAAAAIgYD9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8U8u8DiQAAAAAAAAAAAQAAAAAAAAAAAQEg6AMAAAAAAAAXqRQgs3CU2CpRNFH/DM2dsjq6Bbxe84ciAgM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlUcwRAIgWeyxOotIYmnQMgWSTaHh35lPjBfHJU7uuRkTJ+3NwyACIAlB/co5zrBlVD8thq3Jiz59SIZzMgkf+SC+HMAg49L1AQEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "0107dccd08317475f5163bc429410f73dd9fcb666fc8af26b40ede0a6fd8135a", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "dcc6ff967ba5f3f6cb24d62b0b603bd2bd0a799ea98a932e702e2a828c76803f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221009165ef9fcf15c598dda0ae03b00cc6580ba180f1cdb71a07dc1f54a8334c2e4f022013397fbf0b91e9d9ff9d167f15ae45a4e3436e149e87aafe3281eb651e77b43601" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100f25d095fb7c5217a619eaee7d2378c6a89eaefe21a0a49161b25d970c97597e402206c2f9e6d6c2f7fc05f6d5beaffc3fd4a5a1b4d0049fd702551ef5019c7ddf69a01" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387", + "value": "1000" + }, + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3044022059ecb13a8b486269d03205924da1e1df994f8c17c7254eeeb9191327edcdc32002200941fdca39ceb065543f2d86adc98b3e7d48867332091ff920be1cc020e3d2f501" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.halfsigned.json new file mode 100644 index 0000000..d054d1a --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.halfsigned.json @@ -0,0 +1,100 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAI8EAACAhSAviQIBB9zNCDF0dfUWO8QpQQ9z3Z/LZm/Irya0Dt4Kb9gTWgAAAAAA/////9zG/5Z7pfP2yyTWKwtgO9K9CnmeqYqTLnAuKoKMdoA/AQAAAAD/////AYQDAAAAAAAAF6kU2QlHRATBJKPQTD+/9h+qSc9DxYuHAAAAAAAAAAAAAAAAAAAAAAAAAE8BBIiyHgAAAAAAAAAAADqSLinwyOsNsqYEhMvctjH2sQfJyq4//c8+fS7B9rzQAxIUhxXzYdq2haZp1CQx5dbT+XNATaucn9G5ULJ5rXY0BMwYrghPAQSIsh4AAAAAAAAAAABtHWVtPd2RwZTARWWjYDcCohAWztFKJl84mC1ideZ7ZAPTusIxOnxrIcuxGxSw0QNB+SLApAOovYyH8NyCDzWvbgT2XNhpTwEEiLIeAAAAAAAAAAAAywT9Y6s02Q/mRmuIDioCzPioYzdDEpka+JEbGqq0QzQDNu8ij/6bjv/7oFLDLTNGYN0fg2bPj+RK5apnK2tikJUE8u8DiQABASDoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhyICA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/SDBFAiEAkWXvn88VxZjdoK4DsAzGWAuhgPHNtxoH3B9UqDNMLk8CIBM5f78LkenZ/50WfxWuRaTjQ24Unoeq/jKB62Ued7Q2AQEDBAEAAAABBGlSIQP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fyEDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IhA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbU64iBgNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278hTMGK4IAAAAAAAAAAABAAAAAAAAACIGA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbFPZc2GkAAAAAAAAAAAEAAAAAAAAAIgYD9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8U8u8DiQAAAAAAAAAAAQAAAAAAAAAAAQEg6AMAAAAAAAAXqRQgs3CU2CpRNFH/DM2dsjq6Bbxe84ciAgM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlUcwRAIgWeyxOotIYmnQMgWSTaHh35lPjBfHJU7uuRkTJ+3NwyACIAlB/co5zrBlVD8thq3Jiz59SIZzMgkf+SC+HMAg49L1AQEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "0107dccd08317475f5163bc429410f73dd9fcb666fc8af26b40ede0a6fd8135a", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "dcc6ff967ba5f3f6cb24d62b0b603bd2bd0a799ea98a932e702e2a828c76803f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221009165ef9fcf15c598dda0ae03b00cc6580ba180f1cdb71a07dc1f54a8334c2e4f022013397fbf0b91e9d9ff9d167f15ae45a4e3436e149e87aafe3281eb651e77b43601" + } + ] + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387", + "value": "1000" + }, + "sighashType": 1, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3044022059ecb13a8b486269d03205924da1e1df994f8c17c7254eeeb9191327edcdc32002200941fdca39ceb065543f2d86adc98b3e7d48867332091ff920be1cc020e3d2f501" + } + ] + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.unsigned.json new file mode 100644 index 0000000..25b0203 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.unsigned.json @@ -0,0 +1,88 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAI8EAACAhSAviQIBB9zNCDF0dfUWO8QpQQ9z3Z/LZm/Irya0Dt4Kb9gTWgAAAAAA/////9zG/5Z7pfP2yyTWKwtgO9K9CnmeqYqTLnAuKoKMdoA/AQAAAAD/////AYQDAAAAAAAAF6kU2QlHRATBJKPQTD+/9h+qSc9DxYuHAAAAAAAAAAAAAAAAAAAAAAAAAE8BBIiyHgAAAAAAAAAAADqSLinwyOsNsqYEhMvctjH2sQfJyq4//c8+fS7B9rzQAxIUhxXzYdq2haZp1CQx5dbT+XNATaucn9G5ULJ5rXY0BMwYrghPAQSIsh4AAAAAAAAAAABtHWVtPd2RwZTARWWjYDcCohAWztFKJl84mC1ideZ7ZAPTusIxOnxrIcuxGxSw0QNB+SLApAOovYyH8NyCDzWvbgT2XNhpTwEEiLIeAAAAAAAAAAAAywT9Y6s02Q/mRmuIDioCzPioYzdDEpka+JEbGqq0QzQDNu8ij/6bjv/7oFLDLTNGYN0fg2bPj+RK5apnK2tikJUE8u8DiQABASDoAwAAAAAAABepFFZ817RPnzoHwxOPN7+YS2D7uvJDhwEDBAEAAAABBGlSIQP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fyEDX/t6vHAVngRp9LmJptXheFopBBaf8FCy9Gj+XT1du/IhA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbU64iBgNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278hTMGK4IAAAAAAAAAAABAAAAAAAAACIGA+FSTX9vxXqz6su2WbeHEGeApHXR20g5UsIxC36aOJdbFPZc2GkAAAAAAAAAAAEAAAAAAAAAIgYD9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn8U8u8DiQAAAAAAAAAAAQAAAAAAAAAAAQEg6AMAAAAAAAAXqRQgs3CU2CpRNFH/DM2dsjq6Bbxe84cBAwQBAAAAAQQjIQM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlawAAQBpUiECzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkhAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arIQNE2IQTbfVQIChl/7xiGMf5yI/mzjnJRXmBkLrbOKdS8VOuIgICzE0PpBHKwkRIb46ywI4DX/dBD0YKNZyn+IEJkb07QgkU8u8DiQAAAAAAAAAAAAAAAAAAAAAiAgLXL9DQ2QKTQ0rV/KFg8njgPGFEl6pOQlz0VOLBMw+WqxTMGK4IAAAAAAAAAAAAAAAAAAAAACICA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxFPZc2GkAAAAAAAAAAAAAAAAAAAAAAA==", + "inputs": [ + { + "hash": "0107dccd08317475f5163bc429410f73dd9fcb666fc8af26b40ede0a6fd8135a", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "dcc6ff967ba5f3f6cb24d62b0b603bd2bd0a799ea98a932e702e2a828c76803f", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "unknownKeyVals": [], + "witnessUtxo": { + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387", + "value": "1000" + }, + "sighashType": 1, + "bip32Derivation": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae" + }, + { + "type": "p2shP2pk", + "unknownKeyVals": [], + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387", + "value": "1000" + }, + "sighashType": 1 + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900" + } + ], + "psbtOutputs": [ + { + "unknownKeyVals": [], + "bip32Derivation": [ + { + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0", + "masterFingerprint": "f2ef0389" + }, + { + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0", + "masterFingerprint": "cc18ae08" + }, + { + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0", + "masterFingerprint": "f65cd869" + } + ], + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" + } + ] +} From 61c158b70a7bcafd5720f732d2375232b9b1e6b8 Mon Sep 17 00:00:00 2001 From: Otto Allmendinger Date: Fri, 24 Oct 2025 12:55:33 +0200 Subject: [PATCH 2/2] feat(wasm-utxo): add fixed script wallet outputs implementation This PR implements the BitGo Fixed Script wallet outputs functionality, which allows generating BitGo 2-of-3 wallet output scripts for various script types including P2SH, P2WSH, and Taproot. The code includes: - Core wallet script generation code - Modular organization by script type - Support for traditional and MuSig2 key path spending - Comprehensive test fixtures and validation - Utilities for handling public key derivation Issue: BTC-2652 Co-authored-by: llm-git --- .../wasm-utxo/src/fixed_script_wallet/mod.rs | 10 + .../test_utils/fixtures.rs | 701 ++++++++++++++++++ .../src/fixed_script_wallet/test_utils/mod.rs | 75 ++ .../src/fixed_script_wallet/wallet_keys.rs | 55 ++ .../wallet_scripts/checkmultisig.rs | 277 +++++++ .../wallet_scripts/checksigverify.rs | 159 ++++ .../fixed_script_wallet/wallet_scripts/mod.rs | 476 +++++++++++- .../wallet_scripts/singlesig.rs | 144 ++++ packages/wasm-utxo/src/lib.rs | 2 + 9 files changed, 1898 insertions(+), 1 deletion(-) create mode 100644 packages/wasm-utxo/src/fixed_script_wallet/test_utils/fixtures.rs create mode 100644 packages/wasm-utxo/src/fixed_script_wallet/test_utils/mod.rs create mode 100644 packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs create mode 100644 packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checkmultisig.rs create mode 100644 packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checksigverify.rs create mode 100644 packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/singlesig.rs diff --git a/packages/wasm-utxo/src/fixed_script_wallet/mod.rs b/packages/wasm-utxo/src/fixed_script_wallet/mod.rs index da619fc..0c1c665 100644 --- a/packages/wasm-utxo/src/fixed_script_wallet/mod.rs +++ b/packages/wasm-utxo/src/fixed_script_wallet/mod.rs @@ -1 +1,11 @@ +/// This module contains code for the BitGo Fixed Script Wallets. +/// These are not based on descriptors. +mod wallet_keys; + pub mod wallet_scripts; + +#[cfg(test)] +pub mod test_utils; + +pub use wallet_keys::*; +pub use wallet_scripts::*; diff --git a/packages/wasm-utxo/src/fixed_script_wallet/test_utils/fixtures.rs b/packages/wasm-utxo/src/fixed_script_wallet/test_utils/fixtures.rs new file mode 100644 index 0000000..2da51b2 --- /dev/null +++ b/packages/wasm-utxo/src/fixed_script_wallet/test_utils/fixtures.rs @@ -0,0 +1,701 @@ +//! Fixture parsing utilities for fixed script wallet tests +//! +//! This module provides utilities for parsing JSON fixture files containing PSBT test data. +//! +//! # Example Usage +//! +//! ```rust,no_run +//! use wasm_miniscript::fixed_script_wallet::test_utils::fixtures::*; +//! +//! // Load a fixture by network and signature state +//! let fixture = load_psbt_fixture("bitcoin", SignatureState::Fullsigned) +//! .expect("Failed to load fixture"); +//! +//! // Parse the PSBT from base64 +//! let psbt = decode_psbt_from_fixture(&fixture) +//! .expect("Failed to decode PSBT"); +//! +//! // Parse wallet keys (xprv) +//! let xprvs = parse_wallet_keys(&fixture) +//! .expect("Failed to parse wallet keys"); +//! +//! // Access fixture data +//! assert_eq!(fixture.wallet_keys.len(), 3); +//! assert_eq!(fixture.inputs.len(), 7); +//! assert_eq!(fixture.psbt_inputs.len(), 7); +//! assert_eq!(fixture.outputs.len(), 5); +//! assert_eq!(fixture.psbt_outputs.len(), 5); +//! +//! // Check input types +//! match &fixture.psbt_inputs[0] { +//! PsbtInputFixture::P2sh(input) => { +//! println!("P2SH input with {} derivations", input.bip32_derivation.len()); +//! } +//! PsbtInputFixture::P2trLegacy(input) => { +//! println!("P2TR input with {} tap leaf scripts", input.tap_leaf_script.len()); +//! } +//! _ => {} +//! } +//! ``` + +use serde::{Deserialize, Serialize}; + +// Basic helper types (no dependencies on other types in this file) + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct UnknownKeyVal { + pub key: String, + pub value: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct TxInput { + pub hash: String, + pub index: u32, + pub sequence: u32, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct TxOutput { + pub script: String, + pub value: String, + pub address: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct WitnessUtxo { + pub script: String, + pub value: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Bip32Derivation { + pub pubkey: String, + pub path: String, + pub master_fingerprint: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct PartialSig { + pub pubkey: String, + pub signature: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct TapLeafScript { + pub control_block: String, + pub script: String, + pub leaf_version: u8, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct TapBip32Derivation { + pub leaf_hashes: Vec, + pub pubkey: String, + pub path: String, + pub master_fingerprint: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct TapScriptSig { + pub pubkey: String, + pub signature: String, + pub leaf_hash: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct TapTreeLeaf { + pub script: String, + pub leaf_version: u8, + pub depth: u8, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct TapTree { + pub leaves: Vec, +} + +// Input type structs (depend on helper types above) + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct P2shInput { + pub unknown_key_vals: Vec, + pub non_witness_utxo: String, + pub sighash_type: u32, + pub bip32_derivation: Vec, + pub redeem_script: String, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub partial_sig: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct P2shP2wshInput { + pub unknown_key_vals: Vec, + pub witness_utxo: WitnessUtxo, + pub sighash_type: u32, + pub bip32_derivation: Vec, + pub witness_script: String, + pub redeem_script: String, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub partial_sig: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct P2wshInput { + pub unknown_key_vals: Vec, + pub witness_utxo: WitnessUtxo, + pub sighash_type: u32, + pub bip32_derivation: Vec, + pub witness_script: String, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub partial_sig: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct P2trScriptPathInput { + pub unknown_key_vals: Vec, + pub witness_utxo: WitnessUtxo, + pub sighash_type: u32, + pub tap_leaf_script: Vec, + pub tap_bip32_derivation: Vec, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub tap_script_sig: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct P2trMusig2KeyPathInput { + pub unknown_key_vals: Vec, + pub witness_utxo: WitnessUtxo, + pub sighash_type: u32, + pub tap_internal_key: String, + pub tap_merkle_root: String, + pub tap_bip32_derivation: Vec, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct P2shP2pkInput { + pub unknown_key_vals: Vec, + pub redeem_script: String, + pub non_witness_utxo: String, + pub sighash_type: u32, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub partial_sig: Vec, +} + +// Input enum (depends on input type structs) + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(tag = "type")] +pub enum PsbtInputFixture { + #[serde(rename = "p2sh")] + P2sh(P2shInput), + #[serde(rename = "p2shP2wsh")] + P2shP2wsh(P2shP2wshInput), + #[serde(rename = "p2wsh")] + P2wsh(P2wshInput), + #[serde(rename = "p2tr")] + P2trLegacy(P2trScriptPathInput), + #[serde(rename = "p2trMusig2")] + P2trMusig2ScriptPath(P2trScriptPathInput), + #[serde(rename = "taprootKeyPathSpend")] + P2trMusig2KeyPath(P2trMusig2KeyPathInput), + #[serde(rename = "p2shP2pk")] + P2shP2pk(P2shP2pkInput), +} + +// Output types (depend on helper types) + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct PsbtOutputFixture { + pub unknown_key_vals: Vec, + #[serde(skip_serializing_if = "Option::is_none")] + pub bip32_derivation: Option>, + #[serde(skip_serializing_if = "Option::is_none")] + pub redeem_script: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub witness_script: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tap_tree: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tap_internal_key: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub tap_bip32_derivation: Option>, +} + +// Top-level fixture type (depends on input and output types) + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct PsbtFixture { + pub wallet_keys: Vec, + pub psbt_base64: String, + pub inputs: Vec, + pub psbt_inputs: Vec, + pub outputs: Vec, + pub psbt_outputs: Vec, +} + +// Output script fixture types + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ControlBlockEntry { + pub redeem_index: u32, + pub control_block: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct OutputScriptFixture { + pub script_type: String, + pub pubkeys: Vec, + pub internal_pubkey: String, + pub control_blocks: Vec, + pub tap_tree: TapTree, + pub taptree_root: String, + pub output: String, +} + +// Functions (depend on types above) + +/// Load a fixture file from the test/fixtures directory and return its contents as a String +/// +/// # Arguments +/// * `path` - Path relative to test/fixtures/ (e.g., "fixed-script/psbt.bitcoin.fullsigned.json") +/// +/// # Example +/// ```rust,no_run +/// use wasm_miniscript::fixed_script_wallet::test_utils::fixtures::*; +/// +/// let contents = load_fixture("fixed-script/psbt.bitcoin.fullsigned.json") +/// .expect("Failed to load fixture"); +/// ``` +pub fn load_fixture(path: &str) -> Result> { + let full_path = format!("{}/test/fixtures/{}", env!("CARGO_MANIFEST_DIR"), path); + let contents = std::fs::read_to_string(&full_path)?; + Ok(contents) +} + +/// Signature state for PSBT fixtures +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum SignatureState { + Unsigned, + Halfsigned, + Fullsigned, +} + +impl SignatureState { + fn as_str(&self) -> &'static str { + match self { + SignatureState::Unsigned => "unsigned", + SignatureState::Halfsigned => "halfsigned", + SignatureState::Fullsigned => "fullsigned", + } + } +} + +/// Load a PSBT fixture from a JSON file +/// +/// # Arguments +/// * `network_name` - The network name (e.g., "bitcoin", "litecoin", "dogecoin") +/// * `signature_state` - The signature state of the PSBT +/// +/// # Example +/// ```rust,no_run +/// use wasm_miniscript::fixed_script_wallet::test_utils::fixtures::*; +/// +/// let fixture = load_psbt_fixture("bitcoin", SignatureState::Fullsigned) +/// .expect("Failed to load fixture"); +/// ``` +pub fn load_psbt_fixture( + network_name: &str, + signature_state: SignatureState, +) -> Result> { + let filename = format!("psbt.{}.{}.json", network_name, signature_state.as_str()); + let path = format!("fixed-script/{}", filename); + let contents = load_fixture(&path)?; + let fixture: PsbtFixture = serde_json::from_str(&contents)?; + Ok(fixture) +} + +/// Load a PSBT fixture from JSON string +pub(crate) fn parse_psbt_fixture_json( + json: &str, +) -> Result> { + let fixture: PsbtFixture = serde_json::from_str(json)?; + Ok(fixture) +} + +/// Load output script fixtures for P2TR or P2TR-MuSig2 scripts +/// +/// # Arguments +/// * `script_type` - The script type ("p2tr" or "p2trMusig2") +/// +/// # Example +/// ```rust,no_run +/// use wasm_miniscript::fixed_script_wallet::test_utils::fixtures::*; +/// +/// let fixtures = load_fixture_p2tr_output_scripts("p2tr") +/// .expect("Failed to load p2tr fixtures"); +/// ``` +pub fn load_fixture_p2tr_output_scripts( + script_type: &str, +) -> Result, Box> { + let path = format!("fixed-script/output-scripts/{}.json", script_type); + let contents = load_fixture(&path)?; + let fixtures: Vec = serde_json::from_str(&contents)?; + Ok(fixtures) +} + +/// Decode the PSBT from base64 +pub fn decode_psbt_from_fixture( + fixture: &PsbtFixture, +) -> Result> { + use base64::Engine; + + let psbt_bytes = base64::prelude::BASE64_STANDARD.decode(&fixture.psbt_base64)?; + let psbt = crate::bitcoin::psbt::Psbt::deserialize(&psbt_bytes)?; + Ok(psbt) +} + +/// Parse wallet keys from fixture (xprv strings) +pub fn parse_wallet_keys( + fixture: &PsbtFixture, +) -> Result, Box> { + use std::str::FromStr; + + fixture + .wallet_keys + .iter() + .map(|key_str| crate::bitcoin::bip32::Xpriv::from_str(key_str).map_err(|e| e.into())) + .collect() +} + +// Helper functions for validation + +/// Compares a generated hex string with an expected hex string +fn assert_hex_eq(generated: &str, expected: &str, field_name: &str) -> Result<(), String> { + if generated != expected { + Err(format!( + "{} mismatch\nExpected: {}\nGot: {}", + field_name, expected, generated + )) + } else { + Ok(()) + } +} + +/// Validates sighash type (should be 0 or 1) +fn validate_sighash_type(sighash_type: u32) -> Result<(), String> { + if sighash_type != 0 && sighash_type != 1 { + Err(format!("Unexpected sighash type: {}", sighash_type)) + } else { + Ok(()) + } +} + +/// Validates output script from witness UTXO against generated script +fn validate_witness_output_script( + witness_utxo_script: &str, + generated_script: &str, +) -> Result<(), String> { + assert_hex_eq(generated_script, witness_utxo_script, "Output script") +} + +/// Common validation for P2TR variants that includes output script and delegates to spend_info validation +fn validate_p2tr_wallet_scripts( + witness_utxo_script: &str, + scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2tr, + validate_spend_info: F, +) -> Result<(), String> +where + F: FnOnce(&crate::bitcoin::taproot::TaprootSpendInfo) -> Result<(), String>, +{ + validate_witness_output_script( + witness_utxo_script, + &scripts.output_script().to_hex_string(), + )?; + validate_spend_info(&scripts.spend_info) +} + +// Implementation methods for validation + +impl P2shInput { + /// Validates that the generated WalletScripts matches this fixture + pub fn assert_matches_wallet_scripts( + &self, + scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2sh, + output_script: &str, + ) -> Result<(), String> { + // Compare output script + let generated_output = scripts.redeem_script.to_p2sh().to_hex_string(); + assert_hex_eq(&generated_output, output_script, "Output script")?; + + // Compare redeem script + let redeem_script_hex = scripts.redeem_script.to_hex_string(); + assert_hex_eq(&redeem_script_hex, &self.redeem_script, "Redeem script")?; + + validate_sighash_type(self.sighash_type) + } +} + +impl P2shP2wshInput { + /// Validates that the generated WalletScripts matches this fixture + pub fn assert_matches_wallet_scripts( + &self, + scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2shP2wsh, + output_script: &str, + ) -> Result<(), String> { + // Compare output script + let generated_output = scripts.redeem_script.to_p2sh().to_hex_string(); + assert_hex_eq(&generated_output, output_script, "Output script")?; + + // Compare redeem script + let redeem_script_hex = scripts.redeem_script.to_hex_string(); + assert_hex_eq(&redeem_script_hex, &self.redeem_script, "Redeem script")?; + + // Compare witness script + let witness_script_hex = scripts.witness_script.to_hex_string(); + assert_hex_eq(&witness_script_hex, &self.witness_script, "Witness script")?; + + validate_sighash_type(self.sighash_type) + } +} + +impl P2wshInput { + /// Validates that the generated WalletScripts matches this fixture + pub fn assert_matches_wallet_scripts( + &self, + scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2wsh, + output_script: &str, + ) -> Result<(), String> { + // Compare output script + let generated_output = scripts.witness_script.to_p2wsh().to_hex_string(); + assert_hex_eq(&generated_output, output_script, "Output script")?; + + // Compare witness script + let witness_script_hex = scripts.witness_script.to_hex_string(); + assert_hex_eq(&witness_script_hex, &self.witness_script, "Witness script")?; + + validate_sighash_type(self.sighash_type) + } +} + +impl P2trScriptPathInput { + /// Validates that the generated TaprootSpendInfo matches this fixture + pub fn assert_matches_spend_info( + &self, + spend_info: &crate::bitcoin::taproot::TaprootSpendInfo, + ) -> Result<(), String> { + use crate::bitcoin::hashes::hex::FromHex; + use crate::bitcoin::ScriptBuf; + + // Compare tap leaf scripts and control blocks + for fixture_leaf in &self.tap_leaf_script { + let script_bytes = Vec::::from_hex(&fixture_leaf.script) + .map_err(|e| format!("Failed to decode leaf script hex: {}", e))?; + let script = ScriptBuf::from_bytes(script_bytes); + + let control_block = spend_info + .control_block(&( + script.clone(), + crate::bitcoin::taproot::LeafVersion::TapScript, + )) + .ok_or_else(|| { + format!( + "Failed to generate control block for script: {}", + fixture_leaf.script + ) + })?; + + let control_block_hex = hex::encode(control_block.serialize()); + assert_hex_eq( + &control_block_hex, + &fixture_leaf.control_block, + &format!("Control block for script {}", fixture_leaf.script), + )?; + + if fixture_leaf.leaf_version != 0xc0 { + return Err(format!( + "Expected leaf version 0xc0, got: {}", + fixture_leaf.leaf_version + )); + } + } + + validate_sighash_type(self.sighash_type) + } + + /// Validates that the generated WalletScripts matches this fixture + /// This is a higher-level method that includes output script validation + pub fn assert_matches_wallet_scripts( + &self, + scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2tr, + ) -> Result<(), String> { + validate_p2tr_wallet_scripts(&self.witness_utxo.script, scripts, |spend_info| { + self.assert_matches_spend_info(spend_info) + }) + } +} + +impl P2trMusig2KeyPathInput { + /// Validates that the generated TaprootSpendInfo matches this fixture + pub fn assert_matches_spend_info( + &self, + spend_info: &crate::bitcoin::taproot::TaprootSpendInfo, + ) -> Result<(), String> { + // Compare internal key + let internal_key_hex = hex::encode(spend_info.internal_key().serialize()); + assert_hex_eq(&internal_key_hex, &self.tap_internal_key, "Internal key")?; + + // Compare merkle root + let merkle_root = spend_info + .merkle_root() + .ok_or_else(|| "Expected merkle root to exist".to_string())?; + let merkle_root_bytes: &[u8] = merkle_root.as_ref(); + let merkle_root_hex = hex::encode(merkle_root_bytes); + assert_hex_eq(&merkle_root_hex, &self.tap_merkle_root, "Merkle root")?; + + validate_sighash_type(self.sighash_type) + } + + /// Validates that the generated WalletScripts matches this fixture + /// This is a higher-level method that includes output script validation + pub fn assert_matches_wallet_scripts( + &self, + scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2tr, + ) -> Result<(), String> { + validate_p2tr_wallet_scripts(&self.witness_utxo.script, scripts, |spend_info| { + self.assert_matches_spend_info(spend_info) + }) + } +} + +// Tests + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_load_fixture_helper() { + // Test loading a fixture file + let contents = load_fixture("fixed-script/psbt.bitcoin.fullsigned.json") + .expect("Failed to load fixture"); + assert!(!contents.is_empty()); + assert!(contents.contains("walletKeys")); + assert!(contents.contains("psbtBase64")); + } + + #[test] + fn test_parse_fixture() { + let json = r#"{ + "walletKeys": ["xprv..."], + "psbtBase64": "cHNidP8BAP3q...", + "inputs": [], + "psbtInputs": [], + "outputs": [], + "psbtOutputs": [] + }"#; + + let result = parse_psbt_fixture_json(json); + assert!(result.is_ok()); + } + + #[test] + fn test_load_bitcoin_fullsigned_fixture() { + // Example of loading a fixture file + let fixture = load_psbt_fixture("bitcoin", SignatureState::Fullsigned) + .expect("Failed to load fixture"); + + // Verify structure + assert_eq!(fixture.wallet_keys.len(), 3); + assert!(!fixture.psbt_base64.is_empty()); + assert_eq!(fixture.inputs.len(), 7); + assert_eq!(fixture.psbt_inputs.len(), 7); + assert_eq!(fixture.outputs.len(), 5); + assert_eq!(fixture.psbt_outputs.len(), 5); + + // Decode PSBT + let psbt = decode_psbt_from_fixture(&fixture).expect("Failed to decode PSBT"); + assert_eq!(psbt.inputs.len(), 7); + assert_eq!(psbt.outputs.len(), 5); + + // Parse wallet keys + let xprvs = parse_wallet_keys(&fixture).expect("Failed to parse wallet keys"); + assert_eq!(xprvs.len(), 3); + } + + #[test] + fn test_load_different_signature_states() { + // Test unsigned + let unsigned = load_psbt_fixture("bitcoin", SignatureState::Unsigned) + .expect("Failed to load unsigned fixture"); + assert_eq!(unsigned.inputs.len(), 7); + assert_eq!(unsigned.psbt_inputs.len(), 7); + + // Test halfsigned + let halfsigned = load_psbt_fixture("bitcoin", SignatureState::Halfsigned) + .expect("Failed to load halfsigned fixture"); + assert_eq!(halfsigned.inputs.len(), 7); + assert_eq!(halfsigned.psbt_inputs.len(), 7); + + // Test fullsigned + let fullsigned = load_psbt_fixture("bitcoin", SignatureState::Fullsigned) + .expect("Failed to load fullsigned fixture"); + assert_eq!(fullsigned.inputs.len(), 7); + assert_eq!(fullsigned.psbt_inputs.len(), 7); + } + + #[test] + fn test_load_different_networks() { + // Test various networks + for network in &[ + "bitcoin", + "litecoin", + "dogecoin", + "bitcoincash", + "ecash", + "dash", + "bitcoingold", + ] { + let fixture = load_psbt_fixture(network, SignatureState::Fullsigned) + .unwrap_or_else(|_| panic!("Failed to load {} fixture", network)); + assert_eq!(fixture.wallet_keys.len(), 3); + } + } + + #[test] + fn test_load_p2tr_output_scripts() { + // Test p2tr + let p2tr_fixtures = + load_fixture_p2tr_output_scripts("p2tr").expect("Failed to load p2tr output scripts"); + assert_eq!(p2tr_fixtures.len(), 2); + assert_eq!(p2tr_fixtures[0].script_type, "p2tr"); + assert_eq!(p2tr_fixtures[0].pubkeys.len(), 3); + assert_eq!(p2tr_fixtures[0].control_blocks.len(), 3); + assert_eq!(p2tr_fixtures[0].tap_tree.leaves.len(), 3); + + // Test p2trMusig2 + let p2tr_musig2_fixtures = load_fixture_p2tr_output_scripts("p2trMusig2") + .expect("Failed to load p2trMusig2 output scripts"); + assert_eq!(p2tr_musig2_fixtures.len(), 2); + assert_eq!(p2tr_musig2_fixtures[0].script_type, "p2trMusig2"); + assert_eq!(p2tr_musig2_fixtures[0].pubkeys.len(), 3); + assert_eq!(p2tr_musig2_fixtures[0].control_blocks.len(), 2); + assert_eq!(p2tr_musig2_fixtures[0].tap_tree.leaves.len(), 2); + } +} diff --git a/packages/wasm-utxo/src/fixed_script_wallet/test_utils/mod.rs b/packages/wasm-utxo/src/fixed_script_wallet/test_utils/mod.rs new file mode 100644 index 0000000..0e2f23f --- /dev/null +++ b/packages/wasm-utxo/src/fixed_script_wallet/test_utils/mod.rs @@ -0,0 +1,75 @@ +//! Test utilities for fixed_script_wallet module + +pub mod fixtures; + +use super::wallet_keys::XpubTriple; +use super::wallet_scripts::{Chain, WalletScripts}; +use crate::bitcoin::bip32::{DerivationPath, Fingerprint, Xpriv, Xpub}; +use crate::bitcoin::psbt::{Input as PsbtInput, Output as PsbtOutput, Psbt}; +use crate::bitcoin::{Transaction, TxIn, TxOut}; +use std::collections::BTreeMap; +use std::str::FromStr; + +/// Get test wallet xpubs from a seed string +pub fn get_test_wallet_keys(seed: &str) -> XpubTriple { + use crate::bitcoin::hashes::{sha256, Hash}; + use crate::bitcoin::Network; + + fn get_xpriv_from_seed(seed: &str) -> Xpriv { + let seed_hash = sha256::Hash::hash(seed.as_bytes()).to_byte_array(); + Xpriv::new_master(Network::Testnet, &seed_hash).expect("could not create xpriv from seed") + } + + let a = get_xpriv_from_seed(&format!("{}/0", seed)); + let b = get_xpriv_from_seed(&format!("{}/1", seed)); + let c = get_xpriv_from_seed(&format!("{}/2", seed)); + + let secp = crate::bitcoin::secp256k1::Secp256k1::new(); + [a, b, c].map(|x| Xpub::from_priv(&secp, &x)) +} + +/// Create a PSBT output for an external wallet (different keys) +pub fn create_external_output(seed: &str) -> PsbtOutput { + let xpubs = get_test_wallet_keys(seed); + let _scripts = WalletScripts::from_xpubs(&xpubs, Chain::P2wshExternal, 0); + PsbtOutput { + bip32_derivation: BTreeMap::new(), + // witness_script: scripts.witness_script, + // redeem_script: scripts.redeem_script, + ..Default::default() + } +} + +/// Composable function to create a test PSBT from inputs and outputs +pub fn create_test_psbt( + xpubs: &XpubTriple, + inputs: Vec, + tx_inputs: Vec, + outputs: Vec, + tx_outputs: Vec, +) -> Psbt { + let tx = Transaction { + version: crate::bitcoin::transaction::Version::TWO, + lock_time: crate::bitcoin::locktime::absolute::LockTime::ZERO, + input: tx_inputs, + output: tx_outputs, + }; + + Psbt { + unsigned_tx: tx, + version: 0, + xpub: { + let mut map = BTreeMap::new(); + for (i, xpub) in xpubs.iter().enumerate() { + let path = DerivationPath::from_str(&format!("m/999'/0'/{}'", i)) + .expect("invalid derivation path"); + map.insert(*xpub, (Fingerprint::default(), path)); + } + map + }, + proprietary: BTreeMap::new(), + unknown: BTreeMap::new(), + inputs, + outputs, + } +} diff --git a/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs b/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs new file mode 100644 index 0000000..813e44c --- /dev/null +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs @@ -0,0 +1,55 @@ +use std::convert::TryInto; + +use crate::bitcoin::{bip32::Xpub, CompressedPublicKey}; + +pub type XpubTriple = [Xpub; 3]; + +pub type PubTriple = [CompressedPublicKey; 3]; + +pub fn to_pub_triple(xpubs: &XpubTriple) -> PubTriple { + xpubs + .iter() + .map(|x| x.to_pub()) + .collect::>() + .try_into() + .expect("could not convert vec to array") +} + +#[cfg(test)] +pub mod tests { + use crate::bitcoin::bip32::{Xpriv, Xpub}; + use crate::bitcoin::hashes::{sha256, Hash}; + use crate::fixed_script_wallet::wallet_keys::XpubTriple; + + pub type XprivTriple = [Xpriv; 3]; + + pub fn get_xpriv_from_seed(seed: &str) -> Xpriv { + use crate::bitcoin::bip32::Xpriv; + use crate::bitcoin::Network; + + // hash seed into 32 bytes + let seed_hash = sha256::Hash::hash(seed.as_bytes()).to_byte_array(); + + Xpriv::new_master(Network::Testnet, &seed_hash).expect("could not create xpriv from seed") + } + + pub fn get_test_wallet_xprvs(seed: &str) -> XprivTriple { + let a = get_xpriv_from_seed(&format!("{}/0", seed)); + let b = get_xpriv_from_seed(&format!("{}/1", seed)); + let c = get_xpriv_from_seed(&format!("{}/2", seed)); + [a, b, c] + } + + pub fn get_test_wallet_keys(seed: &str) -> XpubTriple { + let xprvs = get_test_wallet_xprvs(seed); + let secp = crate::bitcoin::secp256k1::Secp256k1::new(); + let xpubs: XpubTriple = xprvs.map(|x| Xpub::from_priv(&secp, &x)); + xpubs + } + + #[test] + fn it_works() { + let keys = get_test_wallet_keys("test"); + assert_eq!(keys[0].to_string(), "tpubD6NzVbkrYhZ4XUs2skvAi3vaZPKQ2oebm4FNyzbHwo8cWoZ81e2Gt1w836KdQWNtf7AgsPBtZ4t4KuoTuaKdzAbgeoygoKqgU6L2GnisU9a"); + } +} diff --git a/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checkmultisig.rs b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checkmultisig.rs new file mode 100644 index 0000000..e65aee8 --- /dev/null +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checkmultisig.rs @@ -0,0 +1,277 @@ +use crate::bitcoin::blockdata::opcodes::all::OP_CHECKMULTISIG; +use crate::bitcoin::blockdata::script::Builder; +use crate::bitcoin::{CompressedPublicKey, ScriptBuf}; +use crate::fixed_script_wallet::wallet_keys::PubTriple; + +/// Build bare multisig script. Needs to wrapped to be useful as an output script. +pub fn build_multisig_script_2_of_3(keys: &PubTriple) -> ScriptBuf { + let quorum = 2; + let total_count = 3; + let mut builder = Builder::default().push_int(quorum as i64); + for key in keys { + builder = builder.push_slice(&key.to_bytes()) + } + builder + .push_int(total_count as i64) + .push_opcode(OP_CHECKMULTISIG) + .into_script() +} + +pub fn parse_multisig_script_2_of_3(script: &ScriptBuf) -> Result { + use crate::bitcoin::blockdata::opcodes::all::{OP_PUSHNUM_2, OP_PUSHNUM_3}; + use crate::bitcoin::blockdata::script::Instruction; + + let instructions: Vec<_> = script + .instructions() + .collect::, _>>() + .map_err(|e| format!("Failed to parse script instructions: {}", e))?; + + // Expected format: OP_2 OP_3 OP_CHECKMULTISIG + if instructions.len() != 6 { + return Err(format!( + "Invalid multisig script length: expected 6 instructions, got {}", + instructions.len() + )); + } + + // Check OP_2 (quorum) + if instructions[0] != Instruction::Op(OP_PUSHNUM_2) { + return Err("First instruction should be OP_2".to_string()); + } + + // Check OP_3 (total keys) + if instructions[4] != Instruction::Op(OP_PUSHNUM_3) { + return Err("Fifth instruction should be OP_3".to_string()); + } + + // Check OP_CHECKMULTISIG + if instructions[5] != Instruction::Op(OP_CHECKMULTISIG) { + return Err("Last instruction should be OP_CHECKMULTISIG".to_string()); + } + + // Extract the three public keys + let mut keys = Vec::new(); + for i in 1..4 { + match &instructions[i] { + Instruction::PushBytes(bytes) => { + let key = CompressedPublicKey::from_slice(bytes.as_bytes()).map_err(|e| { + format!( + "Failed to parse compressed public key at position {}: {}", + i, e + ) + })?; + keys.push(key); + } + _ => { + return Err(format!( + "Instruction at position {} should be a push bytes instruction", + i + )); + } + } + } + + keys.try_into() + .map_err(|_| "Failed to convert vec to array of 3 keys".to_string()) +} + +#[derive(Debug)] +pub struct ScriptP2sh { + pub redeem_script: ScriptBuf, +} + +#[derive(Debug)] +pub struct ScriptP2shP2wsh { + pub redeem_script: ScriptBuf, + pub witness_script: ScriptBuf, +} + +#[derive(Debug)] +pub struct ScriptP2wsh { + pub witness_script: ScriptBuf, +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::bitcoin::blockdata::opcodes::all::{ + OP_CHECKMULTISIG, OP_PUSHNUM_1, OP_PUSHNUM_2, OP_PUSHNUM_3, OP_PUSHNUM_4, + }; + use crate::bitcoin::blockdata::script::Builder; + use crate::fixed_script_wallet::wallet_keys::tests::get_test_wallet_keys; + use crate::fixed_script_wallet::wallet_keys::to_pub_triple; + use crate::fixed_script_wallet::wallet_scripts::{derive_xpubs, Chain}; + + #[test] + fn test_parse_multisig_script_2_of_3_valid() { + // Get test keys + let wallet_keys = get_test_wallet_keys("test_parse"); + let ctx = crate::bitcoin::secp256k1::Secp256k1::new(); + let derived_keys = derive_xpubs(&wallet_keys, &ctx, Chain::P2shExternal, 0); + let pub_triple = to_pub_triple(&derived_keys); + + // Build a valid 2-of-3 multisig script + let script = build_multisig_script_2_of_3(&pub_triple); + + // Parse it back + let parsed_keys = parse_multisig_script_2_of_3(&script).expect("Should parse valid script"); + + // Verify the keys match + assert_eq!(parsed_keys, pub_triple); + } + + #[test] + fn test_parse_multisig_script_2_of_3_roundtrip() { + // Test multiple different key sets + for seed in ["seed1", "seed2", "seed3"] { + let wallet_keys = get_test_wallet_keys(seed); + let ctx = crate::bitcoin::secp256k1::Secp256k1::new(); + let derived_keys = derive_xpubs(&wallet_keys, &ctx, Chain::P2shExternal, 42); + let original_keys = to_pub_triple(&derived_keys); + + // Build script from keys + let script = build_multisig_script_2_of_3(&original_keys); + + // Parse script back to keys + let parsed_keys = + parse_multisig_script_2_of_3(&script).expect("Should parse valid script"); + + // Verify roundtrip + assert_eq!( + parsed_keys, original_keys, + "Roundtrip failed for seed: {}", + seed + ); + } + } + + #[test] + fn test_parse_multisig_script_2_of_3_invalid_length() { + // Test script with wrong number of instructions + let script = Builder::new() + .push_opcode(OP_PUSHNUM_2) + .push_slice(&[0x02; 33]) // Only one key instead of three + .push_opcode(OP_PUSHNUM_3) + .push_opcode(OP_CHECKMULTISIG) + .into_script(); + + let result = parse_multisig_script_2_of_3(&script); + assert!(result.is_err()); + assert!(result + .unwrap_err() + .contains("Invalid multisig script length")); + } + + #[test] + fn test_parse_multisig_script_2_of_3_wrong_quorum() { + // Create a valid key for testing + let wallet_keys = get_test_wallet_keys("test_wrong_quorum"); + let ctx = crate::bitcoin::secp256k1::Secp256k1::new(); + let derived_keys = derive_xpubs(&wallet_keys, &ctx, Chain::P2shExternal, 0); + let pub_triple = to_pub_triple(&derived_keys); + + // Build script with wrong quorum (OP_1 instead of OP_2) + let script = Builder::new() + .push_opcode(OP_PUSHNUM_1) + .push_slice(&pub_triple[0].to_bytes()) + .push_slice(&pub_triple[1].to_bytes()) + .push_slice(&pub_triple[2].to_bytes()) + .push_opcode(OP_PUSHNUM_3) + .push_opcode(OP_CHECKMULTISIG) + .into_script(); + + let result = parse_multisig_script_2_of_3(&script); + assert!(result.is_err()); + assert!(result + .unwrap_err() + .contains("First instruction should be OP_2")); + } + + #[test] + fn test_parse_multisig_script_2_of_3_wrong_total() { + // Create a valid key for testing + let wallet_keys = get_test_wallet_keys("test_wrong_total"); + let ctx = crate::bitcoin::secp256k1::Secp256k1::new(); + let derived_keys = derive_xpubs(&wallet_keys, &ctx, Chain::P2shExternal, 0); + let pub_triple = to_pub_triple(&derived_keys); + + // Build script with wrong total (OP_4 instead of OP_3) + let script = Builder::new() + .push_opcode(OP_PUSHNUM_2) + .push_slice(&pub_triple[0].to_bytes()) + .push_slice(&pub_triple[1].to_bytes()) + .push_slice(&pub_triple[2].to_bytes()) + .push_opcode(OP_PUSHNUM_4) + .push_opcode(OP_CHECKMULTISIG) + .into_script(); + + let result = parse_multisig_script_2_of_3(&script); + assert!(result.is_err()); + assert!(result + .unwrap_err() + .contains("Fifth instruction should be OP_3")); + } + + #[test] + fn test_parse_multisig_script_2_of_3_missing_checkmultisig() { + // Create a valid key for testing + let wallet_keys = get_test_wallet_keys("test_missing_checkmultisig"); + let ctx = crate::bitcoin::secp256k1::Secp256k1::new(); + let derived_keys = derive_xpubs(&wallet_keys, &ctx, Chain::P2shExternal, 0); + let pub_triple = to_pub_triple(&derived_keys); + + // Build script without OP_CHECKMULTISIG + let script = Builder::new() + .push_opcode(OP_PUSHNUM_2) + .push_slice(&pub_triple[0].to_bytes()) + .push_slice(&pub_triple[1].to_bytes()) + .push_slice(&pub_triple[2].to_bytes()) + .push_opcode(OP_PUSHNUM_3) + .push_opcode(OP_PUSHNUM_1) // Wrong opcode instead of OP_CHECKMULTISIG + .into_script(); + + let result = parse_multisig_script_2_of_3(&script); + assert!(result.is_err()); + assert!(result + .unwrap_err() + .contains("Last instruction should be OP_CHECKMULTISIG")); + } + + #[test] + fn test_parse_multisig_script_2_of_3_invalid_pubkey() { + // Build script with invalid public key data + let script = Builder::new() + .push_opcode(OP_PUSHNUM_2) + .push_slice(&[0x00; 10]) // Invalid public key (too short) + .push_slice(&[0x02; 33]) // Valid compressed pubkey format + .push_slice(&[0x03; 33]) // Valid compressed pubkey format + .push_opcode(OP_PUSHNUM_3) + .push_opcode(OP_CHECKMULTISIG) + .into_script(); + + let result = parse_multisig_script_2_of_3(&script); + assert!(result.is_err()); + assert!(result + .unwrap_err() + .contains("Failed to parse compressed public key at position 1")); + } + + #[test] + fn test_parse_multisig_script_2_of_3_non_pushbytes_instruction() { + // Build script with non-pushbytes instruction where pubkey should be + let script = Builder::new() + .push_opcode(OP_PUSHNUM_2) + .push_opcode(OP_PUSHNUM_1) // Wrong: should be pubkey bytes + .push_slice(&[0x02; 33]) + .push_slice(&[0x03; 33]) + .push_opcode(OP_PUSHNUM_3) + .push_opcode(OP_CHECKMULTISIG) + .into_script(); + + let result = parse_multisig_script_2_of_3(&script); + assert!(result.is_err()); + assert!(result + .unwrap_err() + .contains("Instruction at position 1 should be a push bytes instruction")); + } +} diff --git a/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checksigverify.rs b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checksigverify.rs new file mode 100644 index 0000000..3bf81cd --- /dev/null +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/checksigverify.rs @@ -0,0 +1,159 @@ +use miniscript::bitcoin::taproot::{TaprootBuilder, TaprootSpendInfo}; + +use crate::bitcoin::blockdata::opcodes::all::{OP_CHECKSIG, OP_CHECKSIGVERIFY}; +use crate::bitcoin::blockdata::script::Builder; +use crate::bitcoin::{CompressedPublicKey, ScriptBuf}; +use crate::fixed_script_wallet::wallet_keys::PubTriple; + +/// Helper to convert CompressedPublicKey to x-only (32 bytes) +fn to_xonly_pubkey(key: CompressedPublicKey) -> [u8; 32] { + let bytes = key.to_bytes(); + assert_eq!(bytes.len(), 33); + let mut xonly = [0u8; 32]; + xonly.copy_from_slice(&bytes[1..]); + xonly +} + +/// Helper to build p2tr_ns script (n-of-n checksig chain) +pub fn build_p2tr_ns_script(keys: &[CompressedPublicKey]) -> ScriptBuf { + let mut builder = Builder::default(); + for (i, key) in keys.iter().enumerate() { + // convert to xonly key + let key_bytes = to_xonly_pubkey(*key); + builder = builder.push_slice(&key_bytes); + if i == keys.len() - 1 { + builder = builder.push_opcode(OP_CHECKSIG); + } else { + builder = builder.push_opcode(OP_CHECKSIGVERIFY); + } + } + builder.into_script() +} + +fn build_p2tr_spend_info(keys: &PubTriple, p2tr_musig2: bool) -> TaprootSpendInfo { + use super::bitgo_musig::key_agg_bitgo_p2tr_legacy; + use super::bitgo_musig::key_agg_p2tr_musig2; + use crate::bitcoin::secp256k1::Secp256k1; + use crate::bitcoin::XOnlyPublicKey; + + let secp = Secp256k1::new(); + let user = keys[0]; + let backup = keys[1]; + let bitgo = keys[2]; + + let agg_key_bytes = if p2tr_musig2 { + key_agg_p2tr_musig2(&[user, bitgo]).expect("valid aggregation") + } else { + key_agg_bitgo_p2tr_legacy(&[user, bitgo]).expect("valid aggregation") + }; + let internal_key = XOnlyPublicKey::from_slice(&agg_key_bytes).expect("valid xonly key"); + + if p2tr_musig2 { + // Build taptree with 2 script paths: + // - user+backup (depth 1) + // - backup+bitgo (depth 1) + TaprootBuilder::new() + .add_leaf(1, build_p2tr_ns_script(&[user, backup])) + .expect("valid leaf") + .add_leaf(1, build_p2tr_ns_script(&[backup, bitgo])) + .expect("valid leaf") + .finalize(&secp, internal_key) + .expect("valid taptree") + } else { + // Build taptree with 3 script paths: + // - user+bitgo (depth 1) + // - user+backup (depth 2) + // - backup+bitgo (depth 2) + TaprootBuilder::new() + .add_leaf(1, build_p2tr_ns_script(&[user, bitgo])) + .expect("valid leaf") + .add_leaf(2, build_p2tr_ns_script(&[user, backup])) + .expect("valid leaf") + .add_leaf(2, build_p2tr_ns_script(&[backup, bitgo])) + .expect("valid leaf") + .finalize(&secp, internal_key) + .expect("valid taptree") + } +} + +#[derive(Debug)] +pub struct ScriptP2tr { + pub spend_info: TaprootSpendInfo, +} + +impl ScriptP2tr { + pub fn new(keys: &PubTriple, p2tr_musig2: bool) -> ScriptP2tr { + let spend_info = build_p2tr_spend_info(keys, p2tr_musig2); + ScriptP2tr { spend_info } + } + + pub fn output_script(&self) -> ScriptBuf { + let output_key = self.spend_info.output_key().to_inner(); + let output_script = Builder::new() + .push_int(1) + .push_slice(output_key.serialize()) + .into_script(); + output_script + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::bitcoin::CompressedPublicKey; + use crate::fixed_script_wallet::test_utils::fixtures::load_fixture_p2tr_output_scripts; + + fn test_p2tr_output_scripts_helper(script_type: &str, use_musig2: bool) { + let fixtures = load_fixture_p2tr_output_scripts(script_type) + .unwrap_or_else(|_| panic!("Failed to load {} output script fixtures", script_type)); + + for (idx, fixture) in fixtures.iter().enumerate() { + // Parse pubkeys from hex strings + let pubkeys: Vec = fixture + .pubkeys + .iter() + .map(|hex| { + let bytes = hex::decode(hex).expect("Invalid hex pubkey"); + CompressedPublicKey::from_slice(&bytes).expect("Invalid compressed pubkey") + }) + .collect(); + + assert_eq!(pubkeys.len(), 3, "Expected 3 pubkeys in fixture {}", idx); + + let pub_triple: [CompressedPublicKey; 3] = + pubkeys.try_into().expect("Failed to convert to array"); + + // Generate scripts using the from_p2tr method + let spend_info = ScriptP2tr::new(&pub_triple, use_musig2); + + let internal_key = spend_info.spend_info.internal_key().serialize(); + assert_eq!( + hex::encode(internal_key), + fixture.internal_pubkey, + "Internal key mismatch for {} fixture {}", + idx, + script_type + ); + + let output_script = spend_info.output_script(); + assert_eq!( + output_script.to_hex_string(), + fixture.output, + "Output script mismatch for {} fixture {} (pubkeys: {:?})", + script_type, + idx, + fixture.pubkeys + ); + } + } + + #[test] + fn test_p2tr_output_scripts_from_fixture() { + test_p2tr_output_scripts_helper("p2tr", false); + } + + #[test] + fn test_p2tr_musig2_output_scripts_from_fixture() { + test_p2tr_output_scripts_helper("p2trMusig2", true); + } +} diff --git a/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/mod.rs b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/mod.rs index 82a95b2..af27b72 100644 --- a/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/mod.rs +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/mod.rs @@ -1 +1,475 @@ -pub mod bitgo_musig; +/// Code relating to script types of BitGo's 2-of-3 multisig wallets. +mod bitgo_musig; +mod checkmultisig; +mod checksigverify; +mod singlesig; + +pub use bitgo_musig::{key_agg_bitgo_p2tr_legacy, BitGoMusigError}; +pub use checkmultisig::{ + build_multisig_script_2_of_3, parse_multisig_script_2_of_3, ScriptP2sh, ScriptP2shP2wsh, + ScriptP2wsh, +}; +pub use checksigverify::{build_p2tr_ns_script, ScriptP2tr}; +pub use singlesig::{build_p2pk_script, ScriptP2shP2pk}; + +use crate::bitcoin::bip32::{ChildNumber, DerivationPath}; +use crate::bitcoin::ScriptBuf; +use crate::fixed_script_wallet::wallet_keys::{to_pub_triple, PubTriple, XpubTriple}; +use std::convert::TryFrom; +use std::str::FromStr; + +/// Scripts that belong to fixed-script BitGo wallets. +#[derive(Debug)] +pub enum WalletScripts { + /// Chains 0 and 1. Legacy Pay-To-Script-Hash. + P2sh(ScriptP2sh), + /// Chains 10 and 11. Legacy Wrapped-Segwit Pay-To-Script-Hash. + P2shP2wsh(ScriptP2shP2wsh), + /// Chains 20 and 21. Native Wrapped-Segwit Pay-To-Script-Hash. + P2wsh(ScriptP2wsh), + /// Chains 30 and 31. Legacy Taproot, only supporting script-path spend. + P2trLegacy(ScriptP2tr), + /// Chains 40 and 41. Taproot with Musig2 key-path spend support. + P2trMusig2(ScriptP2tr), +} + +impl std::fmt::Display for WalletScripts { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + WalletScripts::P2sh(_) => format!("P2sh"), + WalletScripts::P2shP2wsh(_) => format!("P2shP2wsh"), + WalletScripts::P2wsh(_) => format!("P2wsh"), + WalletScripts::P2trLegacy(_) => format!("P2trLegacy"), + WalletScripts::P2trMusig2(_) => format!("P2trMusig2"), + } + ) + } +} + +impl WalletScripts { + pub fn new(keys: &PubTriple, chain: Chain) -> WalletScripts { + match chain { + Chain::P2shExternal | Chain::P2shInternal => { + let script = build_multisig_script_2_of_3(keys); + WalletScripts::P2sh(ScriptP2sh { + redeem_script: script, + }) + } + Chain::P2shP2wshExternal | Chain::P2shP2wshInternal => { + let script = build_multisig_script_2_of_3(keys); + WalletScripts::P2shP2wsh(ScriptP2shP2wsh { + redeem_script: script.clone().to_p2wsh(), + witness_script: script, + }) + } + Chain::P2wshExternal | Chain::P2wshInternal => { + let script = build_multisig_script_2_of_3(keys); + WalletScripts::P2wsh(ScriptP2wsh { + witness_script: script, + }) + } + Chain::P2trInternal | Chain::P2trExternal => { + WalletScripts::P2trLegacy(ScriptP2tr::new(keys, false)) + } + Chain::P2trMusig2Internal | Chain::P2trMusig2External => { + WalletScripts::P2trMusig2(ScriptP2tr::new(keys, true)) + } + } + } + + pub fn from_xpubs(xpubs: &XpubTriple, chain: Chain, index: u32) -> WalletScripts { + let ctx = crate::bitcoin::secp256k1::Secp256k1::new(); + let derived_keys = derive_xpubs(xpubs, &ctx, chain, index); + let pub_triple = to_pub_triple(&derived_keys); + WalletScripts::new(&pub_triple, chain) + } + + pub fn output_script(&self) -> ScriptBuf { + match self { + WalletScripts::P2sh(script) => script.redeem_script.to_p2sh(), + WalletScripts::P2shP2wsh(script) => script.redeem_script.to_p2sh(), + WalletScripts::P2wsh(script) => script.witness_script.to_p2wsh(), + WalletScripts::P2trLegacy(script) => script.output_script(), + WalletScripts::P2trMusig2(script) => script.output_script(), + } + } +} + +/// BitGo-Defined mappings between derivation path component and script type +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] +pub enum Chain { + P2shExternal = 0, + P2shInternal = 1, + P2shP2wshExternal = 10, + P2shP2wshInternal = 11, + P2wshExternal = 20, + P2wshInternal = 21, + P2trInternal = 30, + P2trExternal = 31, + P2trMusig2Internal = 40, + P2trMusig2External = 41, +} + +/// Useful for iterating over enum values +const ALL_CHAINS: [Chain; 10] = [ + Chain::P2shExternal, + Chain::P2shInternal, + Chain::P2shP2wshExternal, + Chain::P2shP2wshInternal, + Chain::P2wshExternal, + Chain::P2wshInternal, + Chain::P2trInternal, + Chain::P2trExternal, + Chain::P2trMusig2Internal, + Chain::P2trMusig2External, +]; + +impl Chain { + #[allow(dead_code)] + pub fn all() -> &'static [Chain; 10] { + &ALL_CHAINS + } +} + +impl TryFrom for Chain { + type Error = String; + + fn try_from(value: u32) -> Result { + for chain in &ALL_CHAINS { + if *chain as u32 == value { + return Ok(*chain); + } + } + Err(format!("no chain for {}", value)) + } +} + +impl FromStr for Chain { + type Err = String; + + fn from_str(s: &str) -> Result { + let chain: u32 = u32::from_str(s).map_err(|v| v.to_string())?; + Chain::try_from(chain) + } +} + +/// Return derived WalletKeys. All keys are derived with the same path. +#[allow(dead_code)] +pub fn derive_xpubs_with_path( + xpubs: &XpubTriple, + ctx: &crate::bitcoin::secp256k1::Secp256k1, + p: DerivationPath, +) -> XpubTriple { + let derived = xpubs + .iter() + .map(|k| k.derive_pub(&ctx, &p).unwrap()) + .collect::>(); + derived.try_into().expect("could not convert vec to array") +} + +pub fn derive_xpubs( + xpubs: &XpubTriple, + ctx: &crate::bitcoin::secp256k1::Secp256k1, + chain: Chain, + index: u32, +) -> XpubTriple { + let p = DerivationPath::from_str("m/0/0") + .unwrap() + .child(ChildNumber::Normal { + index: chain as u32, + }) + .child(ChildNumber::Normal { index }); + derive_xpubs_with_path(&xpubs, ctx, p) +} + +#[cfg(test)] +mod tests { + use miniscript::bitcoin::bip32::Xpub; + use miniscript::bitcoin::consensus::Decodable; + use miniscript::bitcoin::Transaction; + + use super::*; + use crate::fixed_script_wallet::test_utils::fixtures; + use crate::fixed_script_wallet::wallet_keys::tests::get_test_wallet_keys; + use crate::fixed_script_wallet::wallet_keys::XpubTriple; + + fn assert_output_script(keys: &XpubTriple, chain: Chain, expected_script: &str) { + let scripts = WalletScripts::from_xpubs(keys, chain, 0); + let output_script = scripts.output_script(); + assert_eq!(output_script.to_hex_string(), expected_script); + } + + fn test_build_multisig_chain_with(keys: &XpubTriple, chain: Chain) { + match chain { + Chain::P2shExternal => { + assert_output_script( + keys, + chain, + "a914999a8eb861e3fabae1efe4fb16ff4752e1f5976687", + ); + } + Chain::P2shInternal => { + assert_output_script( + keys, + chain, + "a914487ca5843f23b9f3b85a00136bec647846d179ab87", + ); + } + Chain::P2shP2wshExternal => { + assert_output_script( + keys, + chain, + "a9141219b6d9430fffb8de14f14969a5c07172c4613b87", + ); + } + Chain::P2shP2wshInternal => { + assert_output_script( + keys, + chain, + "a914cbfab1a5a25afab05ff420bd9dd0958c6f1a7a2f87", + ); + } + Chain::P2wshExternal => { + assert_output_script( + keys, + chain, + "0020ce670e65fd69ef2eb1aa6087643a18ae5bff198ca20ef26da546e85962386c76", + ); + } + Chain::P2wshInternal => { + assert_output_script( + keys, + chain, + "00209cca08a252f9846a1417afbe46ed96bf09d5ec6d25f0effb7d841188d5992b7c", + ); + } + Chain::P2trInternal => { + assert_output_script( + keys, + chain, + "51203a81504b836967a69399fcf3822adfdb7d61061e42418f6aad0d473cbcc69b86", + ); + } + Chain::P2trExternal => { + assert_output_script( + keys, + chain, + "512093e5e3c8885a6f87b4449e1bffa3ba8a45a9ee634dc27408394c7d9b68f01adc", + ); + } + Chain::P2trMusig2Internal => { + assert_output_script( + keys, + chain, + "5120c7c4dd55b2bf3cd7ea5b27d3da521699ce761aa345523d8486f0336364957ef2", + ); + } + Chain::P2trMusig2External => { + assert_output_script( + keys, + chain, + "51202629eea5dbef6841160a0b752dedd4b8e206f046835ee944848679d6dea2ac2c", + ); + } + } + } + + #[test] + fn test_build_multisig_chain() { + let keys = get_test_wallet_keys("lol"); + for chain in Chain::all() { + test_build_multisig_chain_with(&keys, *chain); + } + } + + fn parse_derivation_path(path: &str) -> Result<(u32, u32), String> { + let parts: Vec<&str> = path.split('/').collect(); + if parts.len() != 4 { + return Err(format!("Invalid path length: {}", path)); + } + let chain = u32::from_str(parts[2]).map_err(|e| e.to_string())?; + let index = u32::from_str(parts[3]).map_err(|e| e.to_string())?; + Ok((chain, index)) + } + + fn xprvs_to_xpubs(xprvs: &[crate::bitcoin::bip32::Xpriv]) -> Result { + if xprvs.len() != 3 { + return Err(format!("Expected 3 xprvs, got {}", xprvs.len())); + } + let secp = crate::bitcoin::secp256k1::Secp256k1::new(); + let xpubs: Vec = xprvs + .iter() + .map(|xprv| Xpub::from_priv(&secp, xprv)) + .collect(); + xpubs + .try_into() + .map_err(|_| "Failed to convert to XpubTriple".to_string()) + } + + fn parse_fixture_paths( + fixture_input: &fixtures::PsbtInputFixture, + ) -> Result<(Chain, u32), String> { + let bip32_path = match fixture_input { + fixtures::PsbtInputFixture::P2sh(i) => i.bip32_derivation[0].path.to_string(), + fixtures::PsbtInputFixture::P2shP2pk(_) => { + // P2shP2pk doesn't have derivation paths in the fixture, use a dummy path + return Err("P2shP2pk does not use chain-based derivation".to_string()); + } + fixtures::PsbtInputFixture::P2shP2wsh(i) => i.bip32_derivation[0].path.to_string(), + fixtures::PsbtInputFixture::P2wsh(i) => i.bip32_derivation[0].path.to_string(), + fixtures::PsbtInputFixture::P2trLegacy(i) => i.tap_bip32_derivation[0].path.to_string(), + fixtures::PsbtInputFixture::P2trMusig2ScriptPath(i) => { + i.tap_bip32_derivation[0].path.to_string() + } + fixtures::PsbtInputFixture::P2trMusig2KeyPath(i) => { + i.tap_bip32_derivation[0].path.to_string() + } + }; + let (chain_num, index) = parse_derivation_path(&bip32_path).expect("Failed to parse path"); + let chain = Chain::try_from(chain_num).expect("Invalid chain"); + Ok((chain, index)) + } + + fn find_input_with_script_type<'a>( + fixture: &'a fixtures::PsbtFixture, + script_type: &str, + ) -> Result<(usize, &'a fixtures::PsbtInputFixture), String> { + let result = fixture + .psbt_inputs + .iter() + .enumerate() + .filter(|(_, input)| match input { + fixtures::PsbtInputFixture::P2shP2pk(_) => script_type == "p2shP2pk", + fixtures::PsbtInputFixture::P2sh(_) => script_type == "p2sh", + fixtures::PsbtInputFixture::P2shP2wsh(_) => script_type == "p2shP2wsh", + fixtures::PsbtInputFixture::P2wsh(_) => script_type == "p2wsh", + fixtures::PsbtInputFixture::P2trLegacy(_) => script_type == "p2tr", + fixtures::PsbtInputFixture::P2trMusig2ScriptPath(_) => script_type == "p2trMusig2", + fixtures::PsbtInputFixture::P2trMusig2KeyPath(_) => script_type == "taprootKeypath", + }) + .collect::>(); + if result.len() != 1 { + return Err(format!( + "Expected 1 input with script type {}, got {}", + script_type, + result.len() + )); + } + Ok(result[0]) + } + + fn get_output_script_from_non_witness_utxo( + input: &fixtures::P2shInput, + index: usize, + ) -> String { + use miniscript::bitcoin::hashes::hex::FromHex; + let tx_bytes = Vec::::from_hex(&input.non_witness_utxo).expect("Failed to decode hex"); + let prev_tx: Transaction = Decodable::consensus_decode(&mut tx_bytes.as_slice()) + .expect("Failed to decode non-witness utxo"); + let output = &prev_tx.output[index]; + output.script_pubkey.to_hex_string() + } + + fn test_wallet_script_type(script_type: &str) -> Result<(), String> { + let fixture = fixtures::load_psbt_fixture("bitcoin", fixtures::SignatureState::Fullsigned) + .expect("Failed to load fixture"); + let xprvs = fixtures::parse_wallet_keys(&fixture).expect("Failed to parse wallet keys"); + let xpubs = xprvs_to_xpubs(&xprvs).expect("Failed to convert to xpubs"); + + let (input_index, input_fixture) = find_input_with_script_type(&fixture, script_type) + .expect("Failed to find input with script type"); + + let (chain, index) = + parse_fixture_paths(&input_fixture).expect("Failed to parse fixture paths"); + let scripts = WalletScripts::from_xpubs(&xpubs, chain, index); + + // Use the new helper methods for validation + match (scripts, input_fixture) { + (WalletScripts::P2sh(scripts), fixtures::PsbtInputFixture::P2sh(fixture_input)) => { + let vout = fixture.inputs[input_index].index as usize; + let output_script = get_output_script_from_non_witness_utxo(&fixture_input, vout); + fixture_input + .assert_matches_wallet_scripts(&scripts, &output_script) + .expect("P2sh validation failed"); + } + ( + WalletScripts::P2shP2wsh(scripts), + fixtures::PsbtInputFixture::P2shP2wsh(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts, &fixture_input.witness_utxo.script) + .expect("P2shP2wsh validation failed"); + } + (WalletScripts::P2wsh(scripts), fixtures::PsbtInputFixture::P2wsh(fixture_input)) => { + fixture_input + .assert_matches_wallet_scripts(&scripts, &fixture_input.witness_utxo.script) + .expect("P2wsh validation failed"); + } + ( + WalletScripts::P2trLegacy(scripts), + fixtures::PsbtInputFixture::P2trLegacy(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts) + .expect("P2trLegacy validation failed"); + } + ( + WalletScripts::P2trMusig2(scripts), + fixtures::PsbtInputFixture::P2trMusig2ScriptPath(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts) + .expect("P2trMusig2ScriptPath validation failed"); + } + ( + WalletScripts::P2trMusig2(scripts), + fixtures::PsbtInputFixture::P2trMusig2KeyPath(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts) + .expect("P2trMusig2KeyPath validation failed"); + } + (scripts, input_fixture) => { + return Err(format!( + "Mismatched input and scripts: {:?} and {:?}", + scripts, input_fixture + )); + } + } + + Ok(()) + } + + #[test] + fn test_p2sh_script_generation_from_fixture() { + test_wallet_script_type("p2sh").unwrap() + } + + #[test] + fn test_p2sh_p2wsh_script_generation_from_fixture() { + test_wallet_script_type("p2shP2wsh").unwrap(); + } + + #[test] + fn test_p2wsh_script_generation_from_fixture() { + test_wallet_script_type("p2wsh").unwrap(); + } + + #[test] + fn test_p2tr_script_generation_from_fixture() { + test_wallet_script_type("p2tr").unwrap(); + } + + #[test] + fn test_p2tr_musig2_script_path_generation_from_fixture() { + test_wallet_script_type("p2trMusig2").unwrap(); + } + + #[test] + fn test_p2tr_musig2_key_path_spend_script_generation_from_fixture() { + test_wallet_script_type("taprootKeypath").unwrap(); + } +} diff --git a/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/singlesig.rs b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/singlesig.rs new file mode 100644 index 0000000..062e249 --- /dev/null +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/singlesig.rs @@ -0,0 +1,144 @@ +/// This contains code relating to bitcoin cash replay protection inputs. +/// Unlike WalletScripts, these are single-signature where the key is with BitGo. +use crate::bitcoin::blockdata::opcodes::all::OP_CHECKSIG; +use crate::bitcoin::blockdata::script::Builder; +use crate::bitcoin::{CompressedPublicKey, ScriptBuf}; + +/// Build bare p2pk script (used for p2sh-p2pk replay protection) +pub fn build_p2pk_script(key: CompressedPublicKey) -> ScriptBuf { + Builder::default() + .push_slice(&key.to_bytes()) + .push_opcode(OP_CHECKSIG) + .into_script() +} + +#[derive(Debug)] +pub struct ScriptP2shP2pk { + pub redeem_script: ScriptBuf, +} + +impl ScriptP2shP2pk { + pub fn new(key: CompressedPublicKey) -> Self { + ScriptP2shP2pk { + redeem_script: build_p2pk_script(key), + } + } + + pub fn output_script(&self) -> ScriptBuf { + self.redeem_script.to_p2sh() + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::bitcoin::secp256k1::Secp256k1; + use crate::fixed_script_wallet::test_utils::fixtures::{ + load_psbt_fixture, parse_wallet_keys, SignatureState, + }; + + #[test] + fn test_p2sh_p2pk_script_generation_from_fixture() { + let fixture = load_psbt_fixture("bitcoin", SignatureState::Fullsigned) + .expect("Failed to load fixture"); + + // Find the p2shP2pk input in the fixture + let p2shp2pk_input = fixture + .psbt_inputs + .iter() + .find_map(|input| match input { + crate::fixed_script_wallet::test_utils::fixtures::PsbtInputFixture::P2shP2pk(i) => { + Some(i) + } + _ => None, + }) + .expect("Failed to find p2shP2pk input in fixture"); + + // Get the expected values from the fixture + let expected_redeem_script = &p2shp2pk_input.redeem_script; + let expected_pubkey = p2shp2pk_input + .partial_sig + .get(0) + .map(|sig| &sig.pubkey) + .expect("No partial signature found"); + + // Parse the wallet keys + let xprvs = parse_wallet_keys(&fixture).expect("Failed to parse wallet keys"); + let secp = Secp256k1::new(); + + // Find which key matches the expected pubkey + let mut matching_key = None; + for xprv in &xprvs { + let xpub = crate::bitcoin::bip32::Xpub::from_priv(&secp, xprv); + // Convert secp256k1::PublicKey to bitcoin::PublicKey + let bitcoin_pubkey = crate::bitcoin::PublicKey::new(xpub.public_key); + let compressed_pubkey = CompressedPublicKey::try_from(bitcoin_pubkey) + .expect("Failed to convert to compressed pubkey"); + let pubkey_hex = hex::encode(compressed_pubkey.to_bytes()); + + if pubkey_hex == *expected_pubkey { + matching_key = Some(compressed_pubkey); + break; + } + } + + let pubkey = matching_key.expect("Could not find matching pubkey in wallet keys"); + + // Build the p2sh-p2pk script + let script = ScriptP2shP2pk::new(pubkey); + + // Verify the redeem script matches + assert_eq!( + script.redeem_script.to_hex_string(), + *expected_redeem_script, + "Redeem script mismatch" + ); + + // Verify the output script (p2sh wrapped) matches the fixture + // Get the output script from the non-witness UTXO + use crate::bitcoin::consensus::Decodable; + use crate::bitcoin::Transaction; + + let input_index = fixture + .psbt_inputs + .iter() + .position(|input| { + matches!( + input, + crate::fixed_script_wallet::test_utils::fixtures::PsbtInputFixture::P2shP2pk(_) + ) + }) + .expect("Failed to find p2shP2pk input index"); + let vout = fixture.inputs[input_index].index as usize; + + let tx_bytes = hex::decode(&p2shp2pk_input.non_witness_utxo).expect("Failed to decode hex"); + let prev_tx: Transaction = Decodable::consensus_decode(&mut tx_bytes.as_slice()) + .expect("Failed to decode non-witness utxo"); + let expected_output_script = prev_tx.output[vout].script_pubkey.to_hex_string(); + + assert_eq!( + script.output_script().to_hex_string(), + expected_output_script, + "Output script (p2sh) mismatch" + ); + } + + #[test] + fn test_build_p2pk_script() { + // Test with a known public key + let pubkey_hex = "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095"; + let pubkey_bytes = hex::decode(pubkey_hex).expect("Failed to decode pubkey hex"); + let pubkey = + CompressedPublicKey::from_slice(&pubkey_bytes).expect("Failed to parse pubkey"); + + let script = build_p2pk_script(pubkey); + + // Expected: 21 (push 33 bytes) + pubkey + ac (OP_CHECKSIG) + let expected = format!("21{}ac", pubkey_hex); + assert_eq!( + script.to_hex_string(), + expected, + "P2PK script format mismatch" + ); + } +} diff --git a/packages/wasm-utxo/src/lib.rs b/packages/wasm-utxo/src/lib.rs index 9b10354..dd4d610 100644 --- a/packages/wasm-utxo/src/lib.rs +++ b/packages/wasm-utxo/src/lib.rs @@ -15,3 +15,5 @@ pub use address::utxolib_compat; pub use descriptor::WrapDescriptor; pub use miniscript::WrapMiniscript; pub use psbt::WrapPsbt; + +pub use crate::fixed_script_wallet::*;