diff --git a/packages/wasm-utxo/Cargo.lock b/packages/wasm-utxo/Cargo.lock index b77c885..4edb027 100644 --- a/packages/wasm-utxo/Cargo.lock +++ b/packages/wasm-utxo/Cargo.lock @@ -14,6 +14,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -410,6 +419,49 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "generic-array" version = "0.14.9" @@ -431,6 +483,12 @@ dependencies = [ "wasi", ] +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "hashbrown" version = "0.14.5" @@ -728,12 +786,33 @@ dependencies = [ "indexmap", ] +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "portable-atomic" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +[[package]] +name = "proc-macro-crate" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +dependencies = [ + "toml_edit 0.23.7", +] + [[package]] name = "proc-macro2" version = "1.0.86" @@ -778,6 +857,41 @@ dependencies = [ "thiserror", ] +[[package]] +name = "regex" +version = "1.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" + +[[package]] +name = "relative-path" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" + [[package]] name = "ron" version = "0.8.1" @@ -790,6 +904,35 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "rstest" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" +dependencies = [ + "futures-timer", + "futures-util", + "rstest_macros", +] + +[[package]] +name = "rstest_macros" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn", + "unicode-ident", +] + [[package]] name = "rust-ini" version = "0.20.0" @@ -800,6 +943,15 @@ dependencies = [ "ordered-multimap", ] +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -840,6 +992,12 @@ dependencies = [ "cc", ] +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + [[package]] name = "serde" version = "1.0.228" @@ -918,6 +1076,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + [[package]] name = "strsim" version = "0.11.1" @@ -981,8 +1145,8 @@ checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", - "toml_datetime", - "toml_edit", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -994,6 +1158,15 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" @@ -1003,11 +1176,32 @@ dependencies = [ "indexmap", "serde", "serde_spanned", - "toml_datetime", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_edit" +version = "0.23.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +dependencies = [ + "indexmap", + "toml_datetime 0.7.3", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" @@ -1171,6 +1365,7 @@ dependencies = [ "hex", "js-sys", "miniscript", + "rstest", "serde", "serde_json", "wasm-bindgen", diff --git a/packages/wasm-utxo/Cargo.toml b/packages/wasm-utxo/Cargo.toml index 0be6d45..36a6ab7 100644 --- a/packages/wasm-utxo/Cargo.toml +++ b/packages/wasm-utxo/Cargo.toml @@ -25,6 +25,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" hex = "0.4" wasm-bindgen-test = "0.3" +rstest = "0.26.1" [profile.release] # this is required to make webpack happy diff --git a/packages/wasm-utxo/src/bitgo_psbt/mod.rs b/packages/wasm-utxo/src/bitgo_psbt/mod.rs new file mode 100644 index 0000000..a8abb8c --- /dev/null +++ b/packages/wasm-utxo/src/bitgo_psbt/mod.rs @@ -0,0 +1,577 @@ +//! BitGo-specific PSBT parsing that handles multiple network formats +//! +//! This module provides PSBT deserialization that works across different +//! bitcoin-like networks, including those with non-standard transaction formats. + +mod sighash; +mod zcash_psbt; + +pub use sighash::validate_sighash_type; + +use crate::{bitgo_psbt::zcash_psbt::ZcashPsbt, networks::Network}; +use miniscript::bitcoin::psbt::Psbt; + +#[derive(Debug)] +pub enum DeserializeError { + /// Standard bitcoin consensus decoding error + Consensus(miniscript::bitcoin::consensus::encode::Error), + /// PSBT-specific error + Psbt(miniscript::bitcoin::psbt::Error), + /// Network-specific error message + Network(String), +} + +impl std::fmt::Display for DeserializeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + DeserializeError::Consensus(e) => write!(f, "{}", e), + DeserializeError::Psbt(e) => write!(f, "{}", e), + DeserializeError::Network(msg) => write!(f, "{}", msg), + } + } +} + +impl std::error::Error for DeserializeError {} + +impl From for DeserializeError { + fn from(e: miniscript::bitcoin::consensus::encode::Error) -> Self { + DeserializeError::Consensus(e) + } +} + +impl From for DeserializeError { + fn from(e: miniscript::bitcoin::psbt::Error) -> Self { + DeserializeError::Psbt(e) + } +} + +#[derive(Debug)] +pub enum SerializeError { + /// Standard bitcoin consensus encoding error + Consensus(std::io::Error), + /// Network-specific error message + Network(String), +} + +impl std::fmt::Display for SerializeError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SerializeError::Consensus(e) => write!(f, "{}", e), + SerializeError::Network(msg) => write!(f, "{}", msg), + } + } +} + +impl std::error::Error for SerializeError {} + +impl From for SerializeError { + fn from(e: std::io::Error) -> Self { + SerializeError::Consensus(e) + } +} + +impl From for SerializeError { + fn from(e: DeserializeError) -> Self { + match e { + DeserializeError::Consensus(ce) => { + // Convert consensus encode error to io error + SerializeError::Network(format!("Consensus error: {}", ce)) + } + DeserializeError::Psbt(pe) => SerializeError::Network(format!("PSBT error: {}", pe)), + DeserializeError::Network(msg) => SerializeError::Network(msg), + } + } +} + +#[derive(Debug, Clone)] +pub enum BitGoPsbt { + BitcoinLike(Psbt, Network), + Zcash(ZcashPsbt, Network), +} + +impl BitGoPsbt { + /// Deserialize a PSBT from bytes, using network-specific logic + pub fn deserialize(psbt_bytes: &[u8], network: Network) -> Result { + match network { + Network::Zcash | Network::ZcashTestnet => { + // Zcash uses overwintered transaction format which is not compatible + // with standard Bitcoin transaction deserialization + let zcash_psbt = ZcashPsbt::deserialize(psbt_bytes)?; + Ok(BitGoPsbt::Zcash(zcash_psbt, network)) + } + + // All other networks use standard Bitcoin transaction format + Network::Bitcoin + | Network::BitcoinTestnet3 + | Network::BitcoinTestnet4 + | Network::BitcoinPublicSignet + | Network::BitcoinBitGoSignet + | Network::BitcoinCash + | Network::BitcoinCashTestnet + | Network::Ecash + | Network::EcashTestnet + | Network::BitcoinGold + | Network::BitcoinGoldTestnet + | Network::BitcoinSV + | Network::BitcoinSVTestnet + | Network::Dash + | Network::DashTestnet + | Network::Dogecoin + | Network::DogecoinTestnet + | Network::Litecoin + | Network::LitecoinTestnet => Ok(BitGoPsbt::BitcoinLike( + Psbt::deserialize(psbt_bytes)?, + network, + )), + } + } + + /// Serialize the PSBT to bytes, using network-specific logic + pub fn serialize(&self) -> Result, SerializeError> { + match self { + BitGoPsbt::BitcoinLike(psbt, _network) => Ok(psbt.serialize()), + BitGoPsbt::Zcash(zcash_psbt, _network) => Ok(zcash_psbt.serialize()?), + } + } + + pub fn into_psbt(self) -> Psbt { + match self { + BitGoPsbt::BitcoinLike(psbt, _network) => psbt, + BitGoPsbt::Zcash(zcash_psbt, _network) => zcash_psbt.into_bitcoin_psbt(), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::fixed_script_wallet::Chain; + use crate::fixed_script_wallet::{RootWalletKeys, WalletScripts}; + use crate::test_utils::fixtures; + use base64::engine::{general_purpose::STANDARD as BASE64_STANDARD, Engine}; + use miniscript::bitcoin::bip32::Xpub; + use miniscript::bitcoin::consensus::Decodable; + use miniscript::bitcoin::Transaction; + + use std::str::FromStr; + + crate::test_all_networks!(test_deserialize_invalid_bytes, network, { + // Invalid PSBT bytes should fail with either consensus, PSBT, or network error + let result = BitGoPsbt::deserialize(&[0x00], network); + assert!( + matches!( + result, + Err(DeserializeError::Consensus(_) + | DeserializeError::Psbt(_) + | DeserializeError::Network(_)) + ), + "Expected error for network {:?}, got {:?}", + network, + result + ); + }); + + fn test_parse_with_format(format: fixtures::TxFormat, network: Network) { + let fixture = fixtures::load_psbt_fixture_with_format( + network.to_utxolib_name(), + fixtures::SignatureState::Unsigned, + format, + ) + .unwrap(); + match fixture.to_bitgo_psbt(network) { + Ok(_) => {} + Err(e) => panic!("Failed on network: {:?} with error: {:?}", network, e), + } + } + + crate::test_psbt_fixtures!(test_parse_network_mainnet_only, network, { + test_parse_with_format(fixtures::TxFormat::Psbt, network); + test_parse_with_format(fixtures::TxFormat::PsbtLite, network); + }); + + #[test] + fn test_zcash_deserialize_error() { + // Invalid bytes should return an error (not panic) + let result = BitGoPsbt::deserialize(&[0x00], Network::Zcash); + assert!(result.is_err()); + } + + #[test] + fn test_zcash_testnet_deserialize_error() { + // Invalid bytes should return an error (not panic) + let result = BitGoPsbt::deserialize(&[0x00], Network::ZcashTestnet); + assert!(result.is_err()); + } + + fn test_round_trip_with_format(format: fixtures::TxFormat, network: Network) { + let fixture = fixtures::load_psbt_fixture_with_format( + network.to_utxolib_name(), + fixtures::SignatureState::Unsigned, + format, + ) + .unwrap(); + + // Deserialize from fixture + let original_bytes = BASE64_STANDARD + .decode(&fixture.psbt_base64) + .expect("Failed to decode base64"); + let psbt = + BitGoPsbt::deserialize(&original_bytes, network).expect("Failed to deserialize PSBT"); + + // Serialize back + let serialized = psbt.serialize().expect("Failed to serialize PSBT"); + + // Deserialize again + let round_trip = + BitGoPsbt::deserialize(&serialized, network).expect("Failed to deserialize round-trip"); + + // Verify the data matches by comparing the underlying PSBTs + match (&psbt, &round_trip) { + (BitGoPsbt::BitcoinLike(psbt1, net1), BitGoPsbt::BitcoinLike(psbt2, net2)) => { + assert_eq!(net1, net2, "Networks should match"); + assert_eq!(psbt1, psbt2); + } + (BitGoPsbt::Zcash(zpsbt1, net1), BitGoPsbt::Zcash(zpsbt2, net2)) => { + assert_eq!(net1, net2, "Networks should match"); + assert_eq!(zpsbt1, zpsbt2); + } + _ => panic!( + "PSBT type mismatch after round-trip: {:?} vs {:?}", + psbt, round_trip + ), + } + } + + crate::test_psbt_fixtures!(test_round_trip_mainnet_only, network, { + test_round_trip_with_format(fixtures::TxFormat::Psbt, network); + test_round_trip_with_format(fixtures::TxFormat::PsbtLite, network); + }); + + 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 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( + fixture: &fixtures::PsbtFixture, + script_type: fixtures::ScriptType, + ) -> Result<(usize, &fixtures::PsbtInputFixture), String> { + let result = fixture + .psbt_inputs + .iter() + .enumerate() + .filter(|(_, input)| script_type.matches_fixture(input)) + .collect::>(); + if result.len() != 1 { + return Err(format!( + "Expected 1 input with script type {}, got {}", + script_type.as_str(), + 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 + .as_ref() + .expect("expected non-witness utxo for legacy inputs"), + ) + .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: fixtures::ScriptType, + network: Network, + tx_format: fixtures::TxFormat, + ) -> Result<(), String> { + let fixture = fixtures::load_psbt_fixture_with_format( + network.to_utxolib_name(), + fixtures::SignatureState::Fullsigned, + tx_format, + ) + .expect("Failed to load fixture"); + let xprvs = fixtures::parse_wallet_keys(&fixture).expect("Failed to parse wallet keys"); + let secp = crate::bitcoin::secp256k1::Secp256k1::new(); + let wallet_keys = RootWalletKeys::new( + xprvs + .iter() + .map(|x| Xpub::from_priv(&secp, x)) + .collect::>() + .try_into() + .expect("Failed to convert to XpubTriple"), + ); + + // Check if the script type is supported by the network + let output_script_support = network.output_script_support(); + let input_fixture = find_input_with_script_type(&fixture, script_type); + if !script_type.is_supported_by(&output_script_support) { + // Script type not supported by network - skip test (no fixture expected) + assert!( + input_fixture.is_err(), + "Expected error for unsupported script type" + ); + return Ok(()); + } + + let (input_index, input_fixture) = input_fixture.unwrap(); + + let (chain, index) = + parse_fixture_paths(input_fixture).expect("Failed to parse fixture paths"); + let scripts = WalletScripts::from_wallet_keys( + &wallet_keys, + chain, + index, + &network.output_script_support(), + ) + .expect("Failed to create wallet scripts"); + + // 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 = + if tx_format == fixtures::TxFormat::PsbtLite || network == Network::Zcash { + // Zcash only supports PSBT-lite + fixture_input + .witness_utxo + .as_ref() + .expect("expected witness utxo for zcash") + .script + .clone() + } else { + get_output_script_from_non_witness_utxo(fixture_input, vout) + }; + fixture_input + .assert_matches_wallet_scripts(&scripts, &output_script, network) + .expect("P2sh validation failed"); + } + ( + WalletScripts::P2shP2wsh(scripts), + fixtures::PsbtInputFixture::P2shP2wsh(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts( + &scripts, + &fixture_input.witness_utxo.script, + network, + ) + .expect("P2shP2wsh validation failed"); + } + (WalletScripts::P2wsh(scripts), fixtures::PsbtInputFixture::P2wsh(fixture_input)) => { + fixture_input + .assert_matches_wallet_scripts( + &scripts, + &fixture_input.witness_utxo.script, + network, + ) + .expect("P2wsh validation failed"); + } + ( + WalletScripts::P2trLegacy(scripts), + fixtures::PsbtInputFixture::P2trLegacy(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts, network) + .expect("P2trLegacy validation failed"); + } + ( + WalletScripts::P2trMusig2(scripts), + fixtures::PsbtInputFixture::P2trMusig2ScriptPath(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts, network) + .expect("P2trMusig2ScriptPath validation failed"); + } + ( + WalletScripts::P2trMusig2(scripts), + fixtures::PsbtInputFixture::P2trMusig2KeyPath(fixture_input), + ) => { + fixture_input + .assert_matches_wallet_scripts(&scripts, network) + .expect("P2trMusig2KeyPath validation failed"); + } + (scripts, input_fixture) => { + return Err(format!( + "Mismatched input and scripts: {:?} and {:?}", + scripts, input_fixture + )); + } + } + + Ok(()) + } + + crate::test_psbt_fixtures!(test_p2sh_script_generation_from_fixture, network, { + test_wallet_script_type( + fixtures::ScriptType::P2sh, + network, + fixtures::TxFormat::Psbt, + ) + .unwrap(); + test_wallet_script_type( + fixtures::ScriptType::P2sh, + network, + fixtures::TxFormat::PsbtLite, + ) + .unwrap(); + }); + + crate::test_psbt_fixtures!(test_p2sh_p2wsh_script_generation_from_fixture, network, { + test_wallet_script_type( + fixtures::ScriptType::P2shP2wsh, + network, + fixtures::TxFormat::Psbt, + ) + .unwrap(); + test_wallet_script_type( + fixtures::ScriptType::P2shP2wsh, + network, + fixtures::TxFormat::PsbtLite, + ) + .unwrap(); + }); + + crate::test_psbt_fixtures!(test_p2wsh_script_generation_from_fixture, network, { + test_wallet_script_type( + fixtures::ScriptType::P2wsh, + network, + fixtures::TxFormat::Psbt, + ) + .unwrap(); + test_wallet_script_type( + fixtures::ScriptType::P2wsh, + network, + fixtures::TxFormat::PsbtLite, + ) + .unwrap(); + }); + + crate::test_psbt_fixtures!(test_p2tr_script_generation_from_fixture, network, { + test_wallet_script_type( + fixtures::ScriptType::P2tr, + network, + fixtures::TxFormat::Psbt, + ) + .unwrap(); + test_wallet_script_type( + fixtures::ScriptType::P2tr, + network, + fixtures::TxFormat::PsbtLite, + ) + .unwrap(); + }); + + crate::test_psbt_fixtures!( + test_p2tr_musig2_script_path_generation_from_fixture, + network, + { + test_wallet_script_type( + fixtures::ScriptType::P2trMusig2, + network, + fixtures::TxFormat::Psbt, + ) + .unwrap(); + test_wallet_script_type( + fixtures::ScriptType::P2trMusig2, + network, + fixtures::TxFormat::PsbtLite, + ) + .unwrap(); + } + ); + + crate::test_psbt_fixtures!( + test_p2tr_musig2_key_path_spend_script_generation_from_fixture, + network, + { + test_wallet_script_type( + fixtures::ScriptType::TaprootKeypath, + network, + fixtures::TxFormat::Psbt, + ) + .unwrap(); + test_wallet_script_type( + fixtures::ScriptType::TaprootKeypath, + network, + fixtures::TxFormat::PsbtLite, + ) + .unwrap(); + } + ); + + #[test] + fn test_serialize_bitcoin_psbt() { + // Test that Bitcoin-like PSBTs can be serialized + let fixture = fixtures::load_psbt_fixture_with_network( + Network::Bitcoin, + fixtures::SignatureState::Unsigned, + ) + .unwrap(); + let psbt = fixture + .to_bitgo_psbt(Network::Bitcoin) + .expect("Failed to convert to BitGo PSBT"); + + // Serialize should succeed + let serialized = psbt.serialize(); + assert!(serialized.is_ok(), "Serialization should succeed"); + } + + #[test] + fn test_serialize_zcash_psbt() { + // Test that Zcash PSBTs can be serialized + let fixture = fixtures::load_psbt_fixture_with_network( + Network::Zcash, + fixtures::SignatureState::Unsigned, + ) + .unwrap(); + let original_bytes = BASE64_STANDARD + .decode(&fixture.psbt_base64) + .expect("Failed to decode base64"); + let psbt = BitGoPsbt::deserialize(&original_bytes, Network::Zcash) + .expect("Failed to deserialize PSBT"); + + // Serialize should succeed + let serialized = psbt.serialize(); + assert!(serialized.is_ok(), "Serialization should succeed"); + } +} diff --git a/packages/wasm-utxo/src/bitgo_psbt/sighash.rs b/packages/wasm-utxo/src/bitgo_psbt/sighash.rs new file mode 100644 index 0000000..6d5f6f6 --- /dev/null +++ b/packages/wasm-utxo/src/bitgo_psbt/sighash.rs @@ -0,0 +1,199 @@ +//! BitGo transaction utilities for handling network-specific transaction variants +//! +//! This module provides utilities for working with transactions across different +//! bitcoin-like networks, including those with non-standard sighash types and +//! transaction formats. + +use crate::networks::Network; + +/// Bitcoin Cash and related forks use SIGHASH_FORKID flag +const SIGHASH_FORKID: u32 = 0x40; + +/// Standard sighash type values +const SIGHASH_ALL: u32 = 0x01; +const SIGHASH_NONE: u32 = 0x02; +const SIGHASH_SINGLE: u32 = 0x03; +const SIGHASH_ANYONECANPAY: u32 = 0x80; + +/// Validates a sighash type for a given network +/// +/// Different networks have different valid sighash types: +/// - Bitcoin and most networks: 0, 1, 2, 3, and combinations with ANYONECANPAY (0x80) +/// - Bitcoin Cash/BSV/Ecash: Same as above, but also with SIGHASH_FORKID (0x40) +/// +/// # Arguments +/// +/// * `sighash_type` - The sighash type value to validate +/// * `network` - The network context for validation +/// +/// # Returns +/// +/// `Ok(())` if the sighash type is valid for the network, otherwise `Err` with a description +pub fn validate_sighash_type(sighash_type: u32, network: Network) -> Result<(), String> { + // Handle the special case of 0 (no sighash type specified) + if sighash_type == 0 { + return Ok(()); + } + + // Determine if this network uses SIGHASH_FORKID + // Bitcoin Cash, Bitcoin Gold, Bitcoin SV, and Ecash all use SIGHASH_FORKID + let uses_forkid = matches!( + network.mainnet(), + Network::BitcoinCash | Network::BitcoinGold | Network::BitcoinSV | Network::Ecash + ); + + // Extract the base sighash type (without flags) + let has_forkid = (sighash_type & SIGHASH_FORKID) != 0; + let has_anyonecanpay = (sighash_type & SIGHASH_ANYONECANPAY) != 0; + let base_type = sighash_type & 0x1F; // Mask off flags to get base type + + // Validate FORKID usage + if has_forkid && !uses_forkid { + return Err(format!( + "SIGHASH_FORKID (0x40) is not valid for network {:?}. Sighash type: 0x{:02x}", + network, sighash_type + )); + } + + // For Bitcoin Cash and forks, FORKID is required + if uses_forkid && !has_forkid { + return Err(format!( + "SIGHASH_FORKID (0x40) is required for network {:?}. Sighash type: 0x{:02x}", + network, sighash_type + )); + } + + // Validate the base sighash type + match base_type { + SIGHASH_ALL | SIGHASH_NONE | SIGHASH_SINGLE => Ok(()), + _ => Err(format!( + "Invalid base sighash type: 0x{:02x}. Expected SIGHASH_ALL (0x01), SIGHASH_NONE (0x02), or SIGHASH_SINGLE (0x03). Full sighash type: 0x{:02x}{}{}", + base_type, + sighash_type, + if has_anyonecanpay { " (with ANYONECANPAY)" } else { "" }, + if has_forkid { " (with FORKID)" } else { "" } + )), + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_bitcoin_sighash_types() { + // Bitcoin accepts standard types without FORKID + assert!(validate_sighash_type(0, Network::Bitcoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_ALL, Network::Bitcoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_NONE, Network::Bitcoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_SINGLE, Network::Bitcoin).is_ok()); + assert!( + validate_sighash_type(SIGHASH_ALL | SIGHASH_ANYONECANPAY, Network::Bitcoin).is_ok() + ); + + // Bitcoin does not accept FORKID + assert!(validate_sighash_type(SIGHASH_ALL | SIGHASH_FORKID, Network::Bitcoin).is_err()); + assert!(validate_sighash_type(0x41, Network::Bitcoin).is_err()); + } + + #[test] + fn test_bitcoin_cash_sighash_types() { + // Bitcoin Cash requires FORKID + assert!(validate_sighash_type(0, Network::BitcoinCash).is_ok()); // Special case: 0 is allowed + assert!(validate_sighash_type(0x41, Network::BitcoinCash).is_ok()); // ALL | FORKID + assert!(validate_sighash_type(0x42, Network::BitcoinCash).is_ok()); // NONE | FORKID + assert!(validate_sighash_type(0x43, Network::BitcoinCash).is_ok()); // SINGLE | FORKID + assert!(validate_sighash_type(0xC1, Network::BitcoinCash).is_ok()); // ALL | FORKID | ANYONECANPAY + + // Bitcoin Cash does not accept types without FORKID (except 0) + assert!(validate_sighash_type(SIGHASH_ALL, Network::BitcoinCash).is_err()); + assert!(validate_sighash_type(SIGHASH_NONE, Network::BitcoinCash).is_err()); + assert!(validate_sighash_type(SIGHASH_SINGLE, Network::BitcoinCash).is_err()); + } + + #[test] + fn test_ecash_sighash_types() { + // Ecash also uses FORKID (Bitcoin Cash fork) + assert!(validate_sighash_type(0, Network::Ecash).is_ok()); + assert!(validate_sighash_type(0x41, Network::Ecash).is_ok()); // ALL | FORKID + assert!(validate_sighash_type(SIGHASH_ALL, Network::Ecash).is_err()); // Missing FORKID + } + + #[test] + fn test_bitcoin_gold_sighash_types() { + // Bitcoin Gold uses FORKID (Bitcoin Cash fork) + assert!(validate_sighash_type(0, Network::BitcoinGold).is_ok()); + assert!(validate_sighash_type(0x41, Network::BitcoinGold).is_ok()); // ALL | FORKID + assert!(validate_sighash_type(SIGHASH_ALL, Network::BitcoinGold).is_err()); + // Missing FORKID + } + + #[test] + fn test_bitcoin_sv_sighash_types() { + // Bitcoin SV also uses FORKID (Bitcoin Cash fork) + assert!(validate_sighash_type(0, Network::BitcoinSV).is_ok()); + assert!(validate_sighash_type(0x41, Network::BitcoinSV).is_ok()); // ALL | FORKID + assert!(validate_sighash_type(SIGHASH_ALL, Network::BitcoinSV).is_err()); + // Missing FORKID + } + + #[test] + fn test_invalid_base_types() { + // Invalid base type + assert!(validate_sighash_type(0x04, Network::Bitcoin).is_err()); + assert!(validate_sighash_type(0x44, Network::BitcoinCash).is_err()); // Invalid base with FORKID + } + + #[test] + fn test_litecoin_sighash_types() { + // Litecoin uses standard Bitcoin sighash types + assert!(validate_sighash_type(0, Network::Litecoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_ALL, Network::Litecoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_ALL | SIGHASH_FORKID, Network::Litecoin).is_err()); + } + + #[test] + fn test_dogecoin_sighash_types() { + // Dogecoin uses standard Bitcoin sighash types + assert!(validate_sighash_type(0, Network::Dogecoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_ALL, Network::Dogecoin).is_ok()); + assert!(validate_sighash_type(SIGHASH_ALL | SIGHASH_FORKID, Network::Dogecoin).is_err()); + } + + #[test] + fn test_sighash_anyonecanpay_combinations() { + // Test ANYONECANPAY flag combinations for Bitcoin + assert!( + validate_sighash_type(SIGHASH_ALL | SIGHASH_ANYONECANPAY, Network::Bitcoin).is_ok() + ); + assert!( + validate_sighash_type(SIGHASH_NONE | SIGHASH_ANYONECANPAY, Network::Bitcoin).is_ok() + ); + assert!( + validate_sighash_type(SIGHASH_SINGLE | SIGHASH_ANYONECANPAY, Network::Bitcoin).is_ok() + ); + + // Test ANYONECANPAY flag combinations for Bitcoin Cash (must include FORKID) + assert!(validate_sighash_type( + SIGHASH_ALL | SIGHASH_FORKID | SIGHASH_ANYONECANPAY, + Network::BitcoinCash + ) + .is_ok()); + assert!(validate_sighash_type( + SIGHASH_NONE | SIGHASH_FORKID | SIGHASH_ANYONECANPAY, + Network::BitcoinCash + ) + .is_ok()); + assert!(validate_sighash_type( + SIGHASH_SINGLE | SIGHASH_FORKID | SIGHASH_ANYONECANPAY, + Network::BitcoinCash + ) + .is_ok()); + + // Without FORKID should fail for Bitcoin Cash + assert!( + validate_sighash_type(SIGHASH_ALL | SIGHASH_ANYONECANPAY, Network::BitcoinCash) + .is_err() + ); + } +} diff --git a/packages/wasm-utxo/src/bitgo_psbt/zcash_psbt.rs b/packages/wasm-utxo/src/bitgo_psbt/zcash_psbt.rs new file mode 100644 index 0000000..2d9fe67 --- /dev/null +++ b/packages/wasm-utxo/src/bitgo_psbt/zcash_psbt.rs @@ -0,0 +1,531 @@ +//! Zcash PSBT deserialization +//! +//! Zcash uses an "overwintered transaction format" that includes additional fields +//! not present in standard Bitcoin transactions. + +use miniscript::bitcoin::consensus::{Decodable, Encodable}; +use miniscript::bitcoin::psbt::Psbt; +use miniscript::bitcoin::{Transaction, TxIn, TxOut, VarInt}; +use std::io::Read; + +/// Zcash version group IDs +#[allow(dead_code)] +const ZCASH_OVERWINTER_VERSION_GROUP_ID: u32 = 0x03C48270; +const ZCASH_SAPLING_VERSION_GROUP_ID: u32 = 0x892F2085; + +/// Decoded Zcash transaction with extracted Zcash-specific fields +#[derive(Debug, Clone)] +struct DecodedZcashTransaction { + /// The transaction in Bitcoin-compatible format + transaction: Transaction, + /// Zcash-specific: Version group ID for overwintered transactions + version_group_id: Option, + /// Zcash-specific: Expiry height + expiry_height: Option, + /// Zcash-specific: Additional Sapling fields (valueBalance, nShieldedSpend, nShieldedOutput, etc.) + /// These are preserved as-is to maintain exact serialization + sapling_fields: Vec, +} + +/// A Zcash-compatible PSBT that can handle overwintered transactions +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct ZcashPsbt { + /// The underlying Bitcoin-compatible PSBT + pub psbt: Psbt, + /// Zcash-specific: Version group ID for overwintered transactions + pub version_group_id: Option, + /// Zcash-specific: Expiry height + pub expiry_height: Option, + /// Zcash-specific: Additional Sapling fields (valueBalance, nShieldedSpend, nShieldedOutput, etc.) + /// These are preserved as-is to maintain exact serialization + pub sapling_fields: Vec, +} + +/// Decode a Zcash transaction from bytes, extracting Zcash-specific fields +fn decode_zcash_transaction( + bytes: &[u8], +) -> Result { + let mut slice = bytes; + + // Read version + let version = u32::consensus_decode(&mut slice)?; + + let is_overwintered = (version & 0x80000000) != 0; + + let version_group_id = if is_overwintered { + Some(u32::consensus_decode(&mut slice)?) + } else { + None + }; + + // Read inputs + let inputs: Vec = Vec::consensus_decode(&mut slice)?; + + // Read outputs + let outputs: Vec = Vec::consensus_decode(&mut slice)?; + + // Read lock_time + let lock_time = + miniscript::bitcoin::locktime::absolute::LockTime::consensus_decode(&mut slice)?; + + // Read expiry height if overwintered + let expiry_height = if is_overwintered { + Some(u32::consensus_decode(&mut slice)?) + } else { + None + }; + + // Capture any remaining bytes (Sapling fields: valueBalance, nShieldedSpend, nShieldedOutput, etc.) + let sapling_fields = slice.to_vec(); + + // Create transaction with standard version (without overwintered bit) + let transaction = Transaction { + version: miniscript::bitcoin::transaction::Version::non_standard( + (version & 0x7FFFFFFF) as i32, + ), + input: inputs, + output: outputs, + lock_time, + }; + + Ok(DecodedZcashTransaction { + transaction, + version_group_id, + expiry_height, + sapling_fields, + }) +} + +impl ZcashPsbt { + /// Reconstruct the Zcash transaction bytes from the Bitcoin transaction + fn reconstruct_zcash_transaction(&self) -> Result, super::DeserializeError> { + let mut tx_bytes = Vec::new(); + + // Get the standard version and add overwintered bit back + let version = self.psbt.unsigned_tx.version.0; + let zcash_version = (version as u32) | 0x80000000; + + // Write version + zcash_version.consensus_encode(&mut tx_bytes).map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode Zcash version: {}", e)) + })?; + + // Write version group ID + self.version_group_id + .unwrap_or(ZCASH_SAPLING_VERSION_GROUP_ID) + .consensus_encode(&mut tx_bytes) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode version group ID: {}", + e + )) + })?; + + // Write inputs + self.psbt + .unsigned_tx + .input + .consensus_encode(&mut tx_bytes) + .map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode inputs: {}", e)) + })?; + + // Write outputs + self.psbt + .unsigned_tx + .output + .consensus_encode(&mut tx_bytes) + .map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode outputs: {}", e)) + })?; + + // Write lock_time + self.psbt + .unsigned_tx + .lock_time + .consensus_encode(&mut tx_bytes) + .map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode lock_time: {}", e)) + })?; + + // Write expiry height + self.expiry_height + .unwrap_or(0) + .consensus_encode(&mut tx_bytes) + .map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode expiry height: {}", e)) + })?; + + // Append Sapling fields (valueBalance, nShieldedSpend, nShieldedOutput, etc.) + tx_bytes.extend_from_slice(&self.sapling_fields); + + Ok(tx_bytes) + } + + /// Deserialize the PSBT by converting the Zcash transaction to Bitcoin format first + fn decode_with_zcash_tx(bytes: &[u8]) -> Result { + let mut r = bytes; + + // Read magic bytes + let magic: [u8; 4] = Decodable::consensus_decode(&mut r)?; + if &magic != b"psbt" { + return Err(super::DeserializeError::Network( + "Invalid PSBT magic".to_string(), + )); + } + + // Read separator + let separator: u8 = Decodable::consensus_decode(&mut r)?; + if separator != 0xff { + return Err(super::DeserializeError::Network( + "Invalid PSBT separator".to_string(), + )); + } + + // Find and replace the transaction in the PSBT + let mut modified_psbt = Vec::new(); + modified_psbt.extend_from_slice(b"psbt\xff"); + + let mut version_group_id = None; + let mut expiry_height = None; + let mut sapling_fields = Vec::new(); + let mut found_tx = false; + + // Decode global map - we'll copy everything byte-by-byte while transforming the TX + loop { + // Read key length + let key_len: VarInt = Decodable::consensus_decode(&mut r)?; + if key_len.0 == 0 { + // End of global map + 0u8.consensus_encode(&mut modified_psbt).map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode separator: {}", e)) + })?; + break; + } + + // Read key + let mut key_data = vec![0u8; key_len.0 as usize]; + r.read_exact(&mut key_data) + .map_err(|_| super::DeserializeError::Network("Failed to read key".to_string()))?; + + // Read value length + let val_len: VarInt = Decodable::consensus_decode(&mut r)?; + + // Read value + let mut val_data = vec![0u8; val_len.0 as usize]; + r.read_exact(&mut val_data).map_err(|_| { + super::DeserializeError::Network("Failed to read value".to_string()) + })?; + + // Check if this is the unsigned transaction (key type 0x00 with empty key) + if !key_data.is_empty() && key_data[0] == 0x00 && key_data.len() == 1 { + // This is the unsigned transaction + found_tx = true; + let decoded = decode_zcash_transaction(&val_data)?; + version_group_id = decoded.version_group_id; + expiry_height = decoded.expiry_height; + sapling_fields = decoded.sapling_fields; + + // Serialize the modified transaction + let mut tx_bytes = Vec::new(); + decoded + .transaction + .consensus_encode(&mut tx_bytes) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode transaction: {}", + e + )) + })?; + + // Write key + VarInt(key_data.len() as u64) + .consensus_encode(&mut modified_psbt) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode key length: {}", + e + )) + })?; + modified_psbt.extend_from_slice(&key_data); + + // Write new value + VarInt(tx_bytes.len() as u64) + .consensus_encode(&mut modified_psbt) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode value length: {}", + e + )) + })?; + modified_psbt.extend_from_slice(&tx_bytes); + } else { + // Copy key-value pair as-is + VarInt(key_data.len() as u64) + .consensus_encode(&mut modified_psbt) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode key length: {}", + e + )) + })?; + modified_psbt.extend_from_slice(&key_data); + + VarInt(val_data.len() as u64) + .consensus_encode(&mut modified_psbt) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode value length: {}", + e + )) + })?; + modified_psbt.extend_from_slice(&val_data); + } + } + + if !found_tx { + return Err(super::DeserializeError::Network( + "Missing unsigned transaction".to_string(), + )); + } + + // Append the rest of the PSBT (inputs and outputs) + modified_psbt.extend_from_slice(r); + + // Now deserialize as a standard PSBT + let psbt = Psbt::deserialize(&modified_psbt)?; + + Ok(ZcashPsbt { + psbt, + version_group_id, + expiry_height, + sapling_fields, + }) + } + + fn consensus_decode(bytes: &[u8]) -> Result { + Self::decode_with_zcash_tx(bytes) + } + + /// Deserialize a Zcash PSBT from bytes + pub fn deserialize(bytes: &[u8]) -> Result { + Self::consensus_decode(bytes) + } + + /// Convert to a standard Bitcoin PSBT (losing Zcash-specific fields) + pub fn into_bitcoin_psbt(self) -> Psbt { + self.psbt + } + + /// Serialize the Zcash PSBT back to bytes, including Zcash-specific fields + pub fn serialize(&self) -> Result, super::DeserializeError> { + // First serialize as standard Bitcoin PSBT + let bitcoin_psbt_bytes = self.psbt.serialize(); + + // Now we need to replace the transaction in the serialized PSBT + // Parse the Bitcoin PSBT to find where the transaction is + let mut result = Vec::new(); + let mut r = bitcoin_psbt_bytes.as_slice(); + + // Copy magic and separator + result.extend_from_slice(&bitcoin_psbt_bytes[0..5]); // "psbt\xff" + r = &r[5..]; + + // Now process the global map, replacing the transaction + let zcash_tx_bytes = self.reconstruct_zcash_transaction()?; + let mut found_tx = false; + + loop { + // Read key length + let key_len: VarInt = Decodable::consensus_decode(&mut r)?; + if key_len.0 == 0 { + // End of global map + 0u8.consensus_encode(&mut result).map_err(|e| { + super::DeserializeError::Network(format!("Failed to encode separator: {}", e)) + })?; + break; + } + + // Read key + let mut key_data = vec![0u8; key_len.0 as usize]; + r.read_exact(&mut key_data) + .map_err(|_| super::DeserializeError::Network("Failed to read key".to_string()))?; + + // Read value length + let val_len: VarInt = Decodable::consensus_decode(&mut r)?; + + // Read value + let mut val_data = vec![0u8; val_len.0 as usize]; + r.read_exact(&mut val_data).map_err(|_| { + super::DeserializeError::Network("Failed to read value".to_string()) + })?; + + // Check if this is the unsigned transaction + if !key_data.is_empty() && key_data[0] == 0x00 && key_data.len() == 1 { + found_tx = true; + // Write key + VarInt(key_data.len() as u64) + .consensus_encode(&mut result) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode key length: {}", + e + )) + })?; + result.extend_from_slice(&key_data); + + // Write Zcash transaction instead + VarInt(zcash_tx_bytes.len() as u64) + .consensus_encode(&mut result) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode value length: {}", + e + )) + })?; + result.extend_from_slice(&zcash_tx_bytes); + } else { + // Copy key-value pair as-is + VarInt(key_data.len() as u64) + .consensus_encode(&mut result) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode key length: {}", + e + )) + })?; + result.extend_from_slice(&key_data); + + VarInt(val_data.len() as u64) + .consensus_encode(&mut result) + .map_err(|e| { + super::DeserializeError::Network(format!( + "Failed to encode value length: {}", + e + )) + })?; + result.extend_from_slice(&val_data); + } + } + + if !found_tx { + return Err(super::DeserializeError::Network( + "Missing unsigned transaction in PSBT".to_string(), + )); + } + + // Copy the rest (inputs and outputs) + result.extend_from_slice(r); + + Ok(result) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use base64::engine::{general_purpose::STANDARD as BASE64_STANDARD, Engine}; + + #[test] + fn test_decode_zcash_transaction() { + // Version with overwintered bit + let version = 0x80000004u32; + let mut tx_bytes = Vec::new(); + + // Version + version.consensus_encode(&mut tx_bytes).unwrap(); + + // Version group ID + ZCASH_SAPLING_VERSION_GROUP_ID + .consensus_encode(&mut tx_bytes) + .unwrap(); + + // Empty inputs + 0u8.consensus_encode(&mut tx_bytes).unwrap(); + + // Empty outputs + 0u8.consensus_encode(&mut tx_bytes).unwrap(); + + // Lock time + 0u32.consensus_encode(&mut tx_bytes).unwrap(); + + // Expiry height + 0u32.consensus_encode(&mut tx_bytes).unwrap(); + + let decoded = decode_zcash_transaction(&tx_bytes).unwrap(); + + assert_eq!( + decoded.version_group_id, + Some(ZCASH_SAPLING_VERSION_GROUP_ID) + ); + assert_eq!(decoded.expiry_height, Some(0)); + assert_eq!(decoded.transaction.input.len(), 0); + assert_eq!(decoded.transaction.output.len(), 0); + // Should be empty for this simple test tx + assert!(decoded.sapling_fields.is_empty()); + } + + #[test] + fn test_round_trip_zcash_psbt() { + use crate::fixed_script_wallet::test_utils::fixtures::{ + load_psbt_fixture_with_network, SignatureState, + }; + use crate::networks::Network; + + // Load the Zcash fixture + let fixture = load_psbt_fixture_with_network(Network::Zcash, SignatureState::Unsigned) + .expect("Failed to load Zcash fixture"); + + // Deserialize from fixture + let original_bytes = BASE64_STANDARD.decode(&fixture.psbt_base64).unwrap(); + let zcash_psbt = ZcashPsbt::deserialize(&original_bytes).unwrap(); + + // Verify Zcash-specific fields were extracted + assert!(zcash_psbt.version_group_id.is_some()); + assert!(zcash_psbt.expiry_height.is_some()); + + // Verify transaction was parsed + assert_eq!(zcash_psbt.psbt.unsigned_tx.input.len(), 2); + assert_eq!(zcash_psbt.psbt.unsigned_tx.output.len(), 1); + + // Serialize back + let serialized = zcash_psbt.serialize().unwrap(); + + // Note: We don't assert byte-for-byte equality because PSBT serialization may reorder + // global map entries. Instead, we verify that deserializing the serialized PSBT + // produces the same data. + + // Deserialize again + let round_trip = ZcashPsbt::deserialize(&serialized).unwrap(); + + // Verify the data matches + assert_eq!( + zcash_psbt.version_group_id, round_trip.version_group_id, + "Version group ID should match" + ); + assert_eq!( + zcash_psbt.expiry_height, round_trip.expiry_height, + "Expiry height should match" + ); + assert_eq!( + zcash_psbt.psbt.unsigned_tx.input.len(), + round_trip.psbt.unsigned_tx.input.len(), + "Input count should match" + ); + assert_eq!( + zcash_psbt.psbt.unsigned_tx.output.len(), + round_trip.psbt.unsigned_tx.output.len(), + "Output count should match" + ); + assert_eq!( + zcash_psbt.psbt.inputs.len(), + round_trip.psbt.inputs.len(), + "PSBT input count should match" + ); + assert_eq!( + zcash_psbt.psbt.outputs.len(), + round_trip.psbt.outputs.len(), + "PSBT output count should match" + ); + } +} 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 index 2da51b2..2e546c2 100644 --- a/packages/wasm-utxo/src/fixed_script_wallet/test_utils/fixtures.rs +++ b/packages/wasm-utxo/src/fixed_script_wallet/test_utils/fixtures.rs @@ -40,6 +40,8 @@ use serde::{Deserialize, Serialize}; +use crate::Network; + // Basic helper types (no dependencies on other types in this file) #[derive(Debug, Clone, Deserialize, Serialize)] @@ -59,7 +61,7 @@ pub struct TxInput { pub struct TxOutput { pub script: String, pub value: String, - pub address: String, + pub address: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] @@ -126,8 +128,11 @@ pub struct TapTree { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct P2shInput { - pub unknown_key_vals: Vec, - pub non_witness_utxo: String, + pub unknown_key_vals: Option>, + /// Absent for PSBT-LITE format + pub non_witness_utxo: Option, + /// Present for PSBT-LITE format + pub witness_utxo: Option, pub sighash_type: u32, pub bip32_derivation: Vec, pub redeem_script: String, @@ -138,7 +143,7 @@ pub struct P2shInput { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct P2shP2wshInput { - pub unknown_key_vals: Vec, + pub unknown_key_vals: Option>, pub witness_utxo: WitnessUtxo, pub sighash_type: u32, pub bip32_derivation: Vec, @@ -151,7 +156,7 @@ pub struct P2shP2wshInput { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct P2wshInput { - pub unknown_key_vals: Vec, + pub unknown_key_vals: Option>, pub witness_utxo: WitnessUtxo, pub sighash_type: u32, pub bip32_derivation: Vec, @@ -163,7 +168,7 @@ pub struct P2wshInput { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct P2trScriptPathInput { - pub unknown_key_vals: Vec, + pub unknown_key_vals: Option>, pub witness_utxo: WitnessUtxo, pub sighash_type: u32, pub tap_leaf_script: Vec, @@ -175,7 +180,7 @@ pub struct P2trScriptPathInput { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct P2trMusig2KeyPathInput { - pub unknown_key_vals: Vec, + pub unknown_key_vals: Option>, pub witness_utxo: WitnessUtxo, pub sighash_type: u32, pub tap_internal_key: String, @@ -186,9 +191,12 @@ pub struct P2trMusig2KeyPathInput { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct P2shP2pkInput { - pub unknown_key_vals: Vec, + pub unknown_key_vals: Option>, pub redeem_script: String, - pub non_witness_utxo: String, + /// Skipped for PSBT-LITE format + pub non_witness_utxo: Option, + /// Present for PSBT-LITE format + pub witness_utxo: Option, pub sighash_type: u32, #[serde(default, skip_serializing_if = "Vec::is_empty")] pub partial_sig: Vec, @@ -220,7 +228,7 @@ pub enum PsbtInputFixture { #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct PsbtOutputFixture { - pub unknown_key_vals: Vec, + pub unknown_key_vals: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub bip32_derivation: Option>, #[serde(skip_serializing_if = "Option::is_none")] @@ -246,10 +254,24 @@ pub struct PsbtFixture { pub psbt_inputs: Vec, pub outputs: Vec, pub psbt_outputs: Vec, + pub extracted_transaction: Option, } -// Output script fixture types +impl PsbtFixture { + pub fn to_bitgo_psbt( + &self, + network: Network, + ) -> Result> { + use base64::engine::{general_purpose::STANDARD as BASE64_STANDARD, Engine}; + let psbt = crate::bitgo_psbt::BitGoPsbt::deserialize( + &BASE64_STANDARD.decode(&self.psbt_base64)?, + network, + )?; + Ok(psbt) + } +} +// Output script fixture types #[derive(Debug, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct ControlBlockEntry { @@ -307,6 +329,21 @@ impl SignatureState { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum TxFormat { + Psbt, + PsbtLite, +} + +impl TxFormat { + fn as_str(&self) -> &'static str { + match self { + TxFormat::Psbt => "psbt", + TxFormat::PsbtLite => "psbt-lite", + } + } +} + /// Load a PSBT fixture from a JSON file /// /// # Arguments @@ -320,17 +357,45 @@ impl SignatureState { /// let fixture = load_psbt_fixture("bitcoin", SignatureState::Fullsigned) /// .expect("Failed to load fixture"); /// ``` -pub fn load_psbt_fixture( +pub fn load_psbt_fixture_with_format( network_name: &str, signature_state: SignatureState, + tx_format: TxFormat, ) -> Result> { - let filename = format!("psbt.{}.{}.json", network_name, signature_state.as_str()); + let filename = format!( + "{}.{}.{}.json", + tx_format.as_str(), + network_name, + signature_state.as_str() + ); let path = format!("fixed-script/{}", filename); - let contents = load_fixture(&path)?; + let contents = + load_fixture(&path).unwrap_or_else(|_| panic!("Failed to load fixture: {}", filename)); let fixture: PsbtFixture = serde_json::from_str(&contents)?; Ok(fixture) } +pub fn load_psbt_fixture( + network_name: &str, + signature_state: SignatureState, +) -> Result> { + load_psbt_fixture_with_format(network_name, signature_state, TxFormat::Psbt) +} + +pub fn load_psbt_lite_fixture( + network_name: &str, + signature_state: SignatureState, +) -> Result> { + load_psbt_fixture_with_format(network_name, signature_state, TxFormat::PsbtLite) +} + +pub fn load_psbt_fixture_with_network( + network: Network, + signature_state: SignatureState, +) -> Result> { + load_psbt_fixture(network.to_utxolib_name(), signature_state) +} + /// Load a PSBT fixture from JSON string pub(crate) fn parse_psbt_fixture_json( json: &str, @@ -398,13 +463,9 @@ fn assert_hex_eq(generated: &str, expected: &str, field_name: &str) -> Result<() } } -/// 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 sighash type for the given network +fn validate_sighash_type(sighash_type: u32, network: Network) -> Result<(), String> { + crate::bitgo_psbt::validate_sighash_type(sighash_type, network) } /// Validates output script from witness UTXO against generated script @@ -439,6 +500,7 @@ impl P2shInput { &self, scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2sh, output_script: &str, + network: Network, ) -> Result<(), String> { // Compare output script let generated_output = scripts.redeem_script.to_p2sh().to_hex_string(); @@ -448,7 +510,7 @@ impl P2shInput { 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) + validate_sighash_type(self.sighash_type, network) } } @@ -458,6 +520,7 @@ impl P2shP2wshInput { &self, scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2shP2wsh, output_script: &str, + network: Network, ) -> Result<(), String> { // Compare output script let generated_output = scripts.redeem_script.to_p2sh().to_hex_string(); @@ -471,7 +534,7 @@ impl P2shP2wshInput { 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) + validate_sighash_type(self.sighash_type, network) } } @@ -481,6 +544,7 @@ impl P2wshInput { &self, scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2wsh, output_script: &str, + network: Network, ) -> Result<(), String> { // Compare output script let generated_output = scripts.witness_script.to_p2wsh().to_hex_string(); @@ -490,7 +554,7 @@ impl P2wshInput { 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) + validate_sighash_type(self.sighash_type, network) } } @@ -499,6 +563,7 @@ impl P2trScriptPathInput { pub fn assert_matches_spend_info( &self, spend_info: &crate::bitcoin::taproot::TaprootSpendInfo, + network: Network, ) -> Result<(), String> { use crate::bitcoin::hashes::hex::FromHex; use crate::bitcoin::ScriptBuf; @@ -536,7 +601,7 @@ impl P2trScriptPathInput { } } - validate_sighash_type(self.sighash_type) + validate_sighash_type(self.sighash_type, network) } /// Validates that the generated WalletScripts matches this fixture @@ -544,9 +609,10 @@ impl P2trScriptPathInput { pub fn assert_matches_wallet_scripts( &self, scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2tr, + network: Network, ) -> Result<(), String> { validate_p2tr_wallet_scripts(&self.witness_utxo.script, scripts, |spend_info| { - self.assert_matches_spend_info(spend_info) + self.assert_matches_spend_info(spend_info, network) }) } } @@ -556,6 +622,7 @@ impl P2trMusig2KeyPathInput { pub fn assert_matches_spend_info( &self, spend_info: &crate::bitcoin::taproot::TaprootSpendInfo, + network: Network, ) -> Result<(), String> { // Compare internal key let internal_key_hex = hex::encode(spend_info.internal_key().serialize()); @@ -569,7 +636,7 @@ impl P2trMusig2KeyPathInput { 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) + validate_sighash_type(self.sighash_type, network) } /// Validates that the generated WalletScripts matches this fixture @@ -577,13 +644,118 @@ impl P2trMusig2KeyPathInput { pub fn assert_matches_wallet_scripts( &self, scripts: &crate::fixed_script_wallet::wallet_scripts::ScriptP2tr, + network: Network, ) -> Result<(), String> { validate_p2tr_wallet_scripts(&self.witness_utxo.script, scripts, |spend_info| { - self.assert_matches_spend_info(spend_info) + self.assert_matches_spend_info(spend_info, network) }) } } +/// Script type for PSBT input validation +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ScriptType { + P2sh, + P2shP2wsh, + P2wsh, + P2tr, + P2trMusig2, + TaprootKeypath, +} + +impl ScriptType { + /// Returns the string representation used in fixtures + pub fn as_str(&self) -> &'static str { + match self { + ScriptType::P2sh => "p2sh", + ScriptType::P2shP2wsh => "p2shP2wsh", + ScriptType::P2wsh => "p2wsh", + ScriptType::P2tr => "p2tr", + ScriptType::P2trMusig2 => "p2trMusig2", + ScriptType::TaprootKeypath => "taprootKeypath", + } + } + + /// Checks if the given fixture input matches this script type + pub fn matches_fixture(&self, fixture: &PsbtInputFixture) -> bool { + matches!( + (self, fixture), + (ScriptType::P2sh, PsbtInputFixture::P2sh(_)) + | (ScriptType::P2shP2wsh, PsbtInputFixture::P2shP2wsh(_)) + | (ScriptType::P2wsh, PsbtInputFixture::P2wsh(_)) + | (ScriptType::P2tr, PsbtInputFixture::P2trLegacy(_)) + | ( + ScriptType::P2trMusig2, + PsbtInputFixture::P2trMusig2ScriptPath(_) + ) + | ( + ScriptType::TaprootKeypath, + PsbtInputFixture::P2trMusig2KeyPath(_) + ) + ) + } + + pub fn is_segwit(&self) -> bool { + matches!(self, ScriptType::P2shP2wsh | ScriptType::P2wsh) + } + + pub fn is_taproot(&self) -> bool { + matches!( + self, + ScriptType::P2tr | ScriptType::P2trMusig2 | ScriptType::TaprootKeypath + ) + } + + /// Checks if this script type is supported by the given network's output script support + pub fn is_supported_by(&self, support: &crate::address::networks::OutputScriptSupport) -> bool { + // P2sh is always supported (legacy) + if matches!(self, ScriptType::P2sh) { + return true; + } + + // SegWit scripts require segwit support + if self.is_segwit() { + return support.segwit; + } + + // Taproot scripts require taproot support (which implies segwit) + if self.is_taproot() { + return support.taproot; + } + + // Default to supported for any other types + true + } +} + +/// Macro for testing PSBT fixtures across all mainnet networks (excluding testnets and BSV) +/// +/// This macro generates test cases for mainnet networks only: Bitcoin, BitcoinCash, Ecash, +/// BitcoinGold, Dash, Dogecoin, Litecoin, and Zcash. +/// +/// # Example +/// ```rust,no_run +/// test_psbt_fixtures!(test_my_feature, network, { +/// let fixture = load_psbt_fixture_with_network(network, SignatureState::Fullsigned).unwrap(); +/// // ... test logic here +/// }); +/// ``` +#[macro_export] +macro_rules! test_psbt_fixtures { + ($test_name:ident, $network:ident, $body:block) => { + #[rstest::rstest] + #[case::bitcoin($crate::Network::Bitcoin)] + #[case::bitcoin_cash($crate::Network::BitcoinCash)] + #[case::ecash($crate::Network::Ecash)] + #[case::bitcoin_gold($crate::Network::BitcoinGold)] + #[case::dash($crate::Network::Dash)] + #[case::dogecoin($crate::Network::Dogecoin)] + #[case::litecoin($crate::Network::Litecoin)] + #[case::zcash($crate::Network::Zcash)] + fn $test_name(#[case] $network: $crate::Network) $body + }; +} + // Tests #[cfg(test)] 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 index f1670f7..1f1839c 100644 --- a/packages/wasm-utxo/src/fixed_script_wallet/test_utils/mod.rs +++ b/packages/wasm-utxo/src/fixed_script_wallet/test_utils/mod.rs @@ -7,7 +7,7 @@ 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 crate::{Network, RootWalletKeys}; +use crate::{fixed_script_wallet::RootWalletKeys, Network}; use std::collections::BTreeMap; use std::str::FromStr; diff --git a/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs b/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs index 4fbd245..ba7660a 100644 --- a/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_keys.rs @@ -94,7 +94,7 @@ impl RootWalletKeys { pub mod tests { use crate::bitcoin::bip32::{Xpriv, Xpub}; use crate::bitcoin::hashes::{sha256, Hash}; - use crate::RootWalletKeys; + use crate::fixed_script_wallet::RootWalletKeys; pub type XprivTriple = [Xpriv; 3]; 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 432d496..dbe8e4f 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 @@ -16,8 +16,9 @@ use crate::address::networks::OutputScriptSupport; use crate::bitcoin::bip32::{ChildNumber, DerivationPath}; use crate::bitcoin::ScriptBuf; use crate::error::WasmUtxoError; -use crate::fixed_script_wallet::wallet_keys::{to_pub_triple, PubTriple, XpubTriple}; -use crate::RootWalletKeys; +use crate::fixed_script_wallet::wallet_keys::{ + to_pub_triple, PubTriple, RootWalletKeys, XpubTriple, +}; use std::convert::TryFrom; use std::str::FromStr; @@ -204,12 +205,7 @@ pub fn derive_xpubs( #[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::Network; @@ -308,194 +304,6 @@ mod tests { } } - 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 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 secp = crate::bitcoin::secp256k1::Secp256k1::new(); - let wallet_keys = RootWalletKeys::new( - xprvs - .iter() - .map(|x| Xpub::from_priv(&secp, x)) - .collect::>() - .try_into() - .expect("Failed to convert to XpubTriple"), - ); - - 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_wallet_keys( - &wallet_keys, - chain, - index, - &Network::Bitcoin.output_script_support(), - ) - .expect("Failed to create wallet scripts"); - - // 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(); - } - #[test] fn test_script_support_rejects_unsupported_script_types() { let keys = get_test_wallet_keys("test"); 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 index 21b8f04..95cc802 100644 --- a/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/singlesig.rs +++ b/packages/wasm-utxo/src/fixed_script_wallet/wallet_scripts/singlesig.rs @@ -111,7 +111,13 @@ mod tests { .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 tx_bytes = hex::decode( + p2shp2pk_input + .non_witness_utxo + .as_ref() + .expect("expected non-witness utxo for legacy inputs"), + ) + .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(); diff --git a/packages/wasm-utxo/src/lib.rs b/packages/wasm-utxo/src/lib.rs index c10bfb2..07e7dbe 100644 --- a/packages/wasm-utxo/src/lib.rs +++ b/packages/wasm-utxo/src/lib.rs @@ -1,8 +1,10 @@ mod address; +pub mod bitgo_psbt; mod error; pub mod fixed_script_wallet; mod networks; -pub mod wasm; +#[cfg(test)] +mod test_utils; // re-export bitcoin from the miniscript crate // this package is transitioning to a all-purpose bitcoin package, so we want easy access @@ -14,6 +16,5 @@ pub use address::{ }; pub use networks::Network; +pub mod wasm; pub use wasm::{WrapDescriptor, WrapMiniscript, WrapPsbt}; - -pub use crate::fixed_script_wallet::*; diff --git a/packages/wasm-utxo/src/networks.rs b/packages/wasm-utxo/src/networks.rs index 059c47c..f6cd35f 100644 --- a/packages/wasm-utxo/src/networks.rs +++ b/packages/wasm-utxo/src/networks.rs @@ -174,6 +174,32 @@ impl Network { } } + pub fn to_utxolib_name(&self) -> &'static str { + match self { + Network::Bitcoin => "bitcoin", + Network::BitcoinTestnet3 => "testnet", + Network::BitcoinTestnet4 => "bitcoinTestnet4", + Network::BitcoinPublicSignet => "bitcoinPublicSignet", + Network::BitcoinBitGoSignet => "bitcoinBitGoSignet", + Network::BitcoinCash => "bitcoincash", + Network::BitcoinCashTestnet => "bitcoincashTestnet", + Network::Ecash => "ecash", + Network::EcashTestnet => "ecashTest", + Network::BitcoinGold => "bitcoingold", + Network::BitcoinGoldTestnet => "bitcoingoldTestnet", + Network::BitcoinSV => "bitcoinsv", + Network::BitcoinSVTestnet => "bitcoinsvTestnet", + Network::Dash => "dash", + Network::DashTestnet => "dashTest", + Network::Dogecoin => "dogecoin", + Network::DogecoinTestnet => "dogecoinTest", + Network::Litecoin => "litecoin", + Network::LitecoinTestnet => "litecoinTest", + Network::Zcash => "zcash", + Network::ZcashTestnet => "zcashTest", + } + } + /// Convert from a bitgo coin name to a Network enum value. pub fn from_coin_name(name: &str) -> Option { match name { @@ -323,6 +349,12 @@ mod tests { "Failed for name: {}", name ); + assert_eq!( + network.to_utxolib_name(), + name, + "Failed for network: {}", + network + ); } } diff --git a/packages/wasm-utxo/src/test_utils.rs b/packages/wasm-utxo/src/test_utils.rs new file mode 100644 index 0000000..e5697ee --- /dev/null +++ b/packages/wasm-utxo/src/test_utils.rs @@ -0,0 +1,35 @@ +//! Test utilities for wasm-utxo + +// Re-export fixtures from fixed_script_wallet test_utils +pub use crate::fixed_script_wallet::test_utils::fixtures; + +/// Macro to generate rstest test function with #[case] for all networks in Network::ALL +/// This ensures the test cases stay in sync with Network::ALL +#[macro_export] +macro_rules! test_all_networks { + ($test_name:ident, $network:ident, $body:block) => { + #[rstest::rstest] + #[case::bitcoin($crate::Network::Bitcoin)] + #[case::bitcoin_testnet3($crate::Network::BitcoinTestnet3)] + #[case::bitcoin_testnet4($crate::Network::BitcoinTestnet4)] + #[case::bitcoin_public_signet($crate::Network::BitcoinPublicSignet)] + #[case::bitcoin_bitgo_signet($crate::Network::BitcoinBitGoSignet)] + #[case::bitcoin_cash($crate::Network::BitcoinCash)] + #[case::bitcoin_cash_testnet($crate::Network::BitcoinCashTestnet)] + #[case::ecash($crate::Network::Ecash)] + #[case::ecash_testnet($crate::Network::EcashTestnet)] + #[case::bitcoin_gold($crate::Network::BitcoinGold)] + #[case::bitcoin_gold_testnet($crate::Network::BitcoinGoldTestnet)] + #[case::bitcoin_sv($crate::Network::BitcoinSV)] + #[case::bitcoin_sv_testnet($crate::Network::BitcoinSVTestnet)] + #[case::dash($crate::Network::Dash)] + #[case::dash_testnet($crate::Network::DashTestnet)] + #[case::dogecoin($crate::Network::Dogecoin)] + #[case::dogecoin_testnet($crate::Network::DogecoinTestnet)] + #[case::litecoin($crate::Network::Litecoin)] + #[case::litecoin_testnet($crate::Network::LitecoinTestnet)] + #[case::zcash($crate::Network::Zcash)] + #[case::zcash_testnet($crate::Network::ZcashTestnet)] + fn $test_name(#[case] $network: $crate::Network) $body + }; +} diff --git a/packages/wasm-utxo/src/wasm/psbt.rs b/packages/wasm-utxo/src/wasm/psbt.rs index 96cdf98..d1806b0 100644 --- a/packages/wasm-utxo/src/wasm/psbt.rs +++ b/packages/wasm-utxo/src/wasm/psbt.rs @@ -173,7 +173,9 @@ impl Clone for WrapPsbt { #[cfg(test)] mod tests { + use crate::error::WasmUtxoError; use crate::wasm::psbt::SingleKeySigner; + use crate::Network; use base64::prelude::*; use miniscript::bitcoin::bip32::{DerivationPath, Fingerprint, KeySource}; use miniscript::bitcoin::psbt::{SigningKeys, SigningKeysMap}; @@ -183,9 +185,11 @@ mod tests { use miniscript::{DefiniteDescriptorKey, Descriptor, DescriptorPublicKey, ToPublicKey}; use std::str::FromStr; - fn psbt_from_base64(s: &str) -> Psbt { - let psbt = BASE64_STANDARD.decode(s.as_bytes()).unwrap(); - Psbt::deserialize(&psbt).unwrap() + fn psbt_from_base64(s: &str) -> Result { + let psbt = BASE64_STANDARD + .decode(s.as_bytes()) + .map_err(|_| WasmUtxoError::new("Invalid base64"))?; + Psbt::deserialize(&psbt).map_err(|e| WasmUtxoError::new(&format!("Invalid PSBT: {}", e))) } #[test] @@ -193,7 +197,7 @@ mod tests { let desc = "tr(039ab0771c5f88913208a26f81ab8223e98d25176e4648a5a2bb8ff79cf1c5198b,pk(039ab0771c5f88913208a26f81ab8223e98d25176e4648a5a2bb8ff79cf1c5198b))"; let desc = Descriptor::::from_str(desc).unwrap(); let psbt = "cHNidP8BAKYCAAAAAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAD9////AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAP3///8CgBoGAAAAAAAWABRTtvjcap+5t7odMosMnHl97YJClYAaBgAAAAAAIlEg1S2GuUvFU+Ve4XFLV65ffhuYsGeDkpaER6lQFjONAmEAAAAAAAEBK0BCDwAAAAAAIlEg1S2GuUvFU+Ve4XFLV65ffhuYsGeDkpaER6lQFjONAmEAAQErQEIPAAAAAAAiUSDVLYa5S8VT5V7hcUtXrl9+G5iwZ4OSloRHqVAWM40CYQAAAA=="; - let mut psbt = psbt_from_base64(psbt); + let mut psbt = psbt_from_base64(psbt).unwrap(); psbt.update_input_with_descriptor(0, &desc).unwrap(); println!("{:?}", psbt.inputs[0].tap_key_origins); let prv = @@ -223,8 +227,17 @@ mod tests { let d = "tr(xpub661MyMwAqRbcEv1i36otFUwWZRcQBJHjdCoQvqykteW4sMHP3m4h9TzvPhK9q7rtkkWMMTJB4jFxCgVki9GwB9GvfHf366dpXDAaHHHdad2/*,{pk(xpub661MyMwAqRbcFod8uqcC3G2jub4McRVKZsZrvWZXAUFBjeuyMT2UqDFkw3TAUebQRAE7XQKFFhvLRW2mWvmKC2KzNuCkzVkFucWapGqnkXj/*),pk(xpub661MyMwAqRbcFVAMsxk7PkfGh66U9K9qWh2dvS5s4kL4JaDHdZdBbb4CbzQxZMC2MAUcKZudSk86RxeaTQctKa6tpSCPEkKGYfMEFDKWJu9/*)})"; let desc = Descriptor::::from_str(d).unwrap(); let psbt = "cHNidP8BAKYCAAAAAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAD9////AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAP3///8CgBoGAAAAAAAWABRTtvjcap+5t7odMosMnHl97YJClYAaBgAAAAAAIlEgBBlsh6bt3RStSy0egEjFHML8bVhqFYO8knG5OLcA/zcAAAAAAAEBK0BCDwAAAAAAIlEgBBlsh6bt3RStSy0egEjFHML8bVhqFYO8knG5OLcA/zcAAQErQEIPAAAAAAAiUSDFpFC16pT0pXIHKzV7teFiXul3DtlyYj9DdCpF1CHVQAAAAA=="; - let mut psbt = psbt_from_base64(psbt); + let mut psbt = psbt_from_base64(psbt).unwrap(); psbt.update_input_with_descriptor(0, &desc.at_derivation_index(0).unwrap()) .unwrap(); } + + // Compile-time check to ensure the macro stays in sync with Network::ALL + #[test] + fn test_all_networks_macro_is_complete() { + const _: () = assert!( + Network::ALL.len() == 21, + "test_all_networks! macro is out of sync with Network::ALL" + ); + } } diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.fullsigned.json new file mode 100644 index 0000000..eced793 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.fullsigned.json @@ -0,0 +1,493 @@ +{ + "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", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100dd31a25d0ebea90e67910168ef7c2b383ca26192cd5c8709f02980b7ca90472802203795c65ee0f073b80644d0c8ffa1d428457ae2af3df5b5d8117949781d10c46201" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304402201e79545c011e34b1b872b4b057e66262d86881da6a7f853e7e57a9a4d12c6dc102201a538b2175c7b7161c76da18394220f354ae2729fcc1c902b74c59cd79e0153101" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "signature": "3045022100df41fbcbf3c7f77182627bcb7cd17973b8ca58c16b81de98e94c0293dcf33ac202206017171914fdfbc80f933ab3b5aae4e3d36e968757e6c0788ffbeaaebc68e21e01" + }, + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402205f760c27e7598a9e80a2adaf1d925c67d2e6c24aec773e5cce56d234159ab1e502201ce97d5659681ab881e10acc9c8021587f843a15336c3a8b6fb2efc053928b8501" + } + ], + "sighashType": 1, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "signature": "304402206441089c8c71a4926b49a5ab12bfaa86c4b64abbc519b3d217d68fe71bc43bee02203e17d0752c0b411e9477c22c2f4556a62da39e60095c6e0774bf42aa8f491b4d01" + }, + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100d3b03fb77553144e14171c7b1b517a3bf33df87370b65e337f0a50844562261e0220585bc0913b56ad968161d343f321d77f5f94ff3cf62545932f1509239a15a38e01" + } + ], + "sighashType": 1, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2tr", + "witnessUtxo": { + "script": "5120394b94d061d7b778fed8a204ce05ed0b44954ec1622f934f84114e1173f33027", + "value": "1000" + }, + "sighashType": 0, + "tapScriptSig": [ + { + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "leafHash": "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30", + "signature": "83b1bb7c6ce5868c8a723c4d350591894809b1335586f60cbfccc6dd4e28b8630a74637b1b242e5a389540db94f23bcbedee9c783830cb2afaff1f2763dbdb7b" + }, + { + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "leafHash": "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30", + "signature": "e7dab0d277ce7c41933136b44dcabef400f1d0e622a2255f9867d807bc8e0008cfd30766d36d736c8df7aa32917de59d0832b481c499f0917876134532306d45" + } + ], + "tapLeafScript": [ + { + "controlBlock": "c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d83", + "script": "207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "path": "0/0/31/3", + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "path": "0/0/31/3", + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ] + } + ] + }, + { + "type": "p2trMusig2", + "witnessUtxo": { + "script": "512029bbfaf4385b10dc2bbe7ab4d50e89cebe8f507968727b19689e2638083cc55b", + "value": "1000" + }, + "sighashType": 0, + "tapScriptSig": [ + { + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "leafHash": "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb", + "signature": "4d8e50128b5c61dd449b352a6d6f3d611e163b0794c8c2d057d25401957bb07a70420e336e18f6b255d5b869570c087091c30c1a33f0cac0a40d90d0514c69a4" + }, + { + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "leafHash": "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb", + "signature": "0a1e013f6d57fb8b248b2b19b08b34c1a3cd5ff6de4acdf19dd4ce0e02d42154856dd569f4668f2abaccbb50ce81a9d2f53efdfb627c2cb14cf92c4189a35da7" + } + ], + "tapLeafScript": [ + { + "controlBlock": "c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c976", + "script": "20643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "path": "0/0/41/4", + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "path": "0/0/41/4", + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ] + } + ] + }, + { + "type": "taprootKeyPathSpend", + "witnessUtxo": { + "script": "512015c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1000" + }, + "sighashType": 0, + "tapBip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171", + "path": "0/0/41/5", + "leafHashes": [] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "1d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953", + "path": "0/0/41/5", + "leafHashes": [] + } + ], + "tapInternalKey": "eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "tapMerkleRoot": "b2a497ea4d0b52f5011ae135d0bbe0d9ebd777bb28e733cbcc13134b73106a1a", + "unknownKeyVals": [ + { + "key": "fc05424954474f0115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "value": "021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171" + }, + { + "key": "fc05424954474f02020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e77817115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "02826949740dff45d408b1f19d94c720f53411e02c525b28ab3c593b6b530fe0370374b8a0ffcaaaee6b772dac5f7c23ef33670b32ec77c6d41efb3c36df2165a094" + }, + { + "key": "fc05424954474f02021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "03a4aaf46f3a0bc39a73855fa875b2f2f04bdb06235afbaedf857b593dddc63cb402cdb7f1a93ec526282198d834423371757e8f43932d03b9f43c3f7378300ae508" + }, + { + "key": "fc05424954474f03020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e77817115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "fbdc39c3b8ffca4e6caf3298fa1a4be546b99163c2f21bd374d2254ec5b3c0f4" + }, + { + "key": "fc05424954474f03021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1cd8a0c0598b0d88f889fdf9a3140f8f088e2187803a2faaee3f13c0163eb76c" + } + ] + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d2a7abb6c0563c3000e37412a9b97f6352d17e40960456fe830d264f0474f8b6022038d5cdbe88a319de5d7b7db8f57d0a92524beb242729b46a617adb530f2fa0d001" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "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": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + }, + { + "tapInternalKey": "8ea58016ecabe3cf8490ec65d779141571fb9e5c12eac905d180f0e102943394", + "tapTree": { + "leaves": [ + { + "depth": 1, + "leafVersion": 192, + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac" + }, + { + "depth": 2, + "leafVersion": 192, + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbac" + }, + { + "depth": 2, + "leafVersion": 192, + "script": "203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac" + } + ] + }, + "tapBip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "3a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbb", + "path": "0/0/30/3", + "leafHashes": [ + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "99e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40", + "path": "0/0/30/3", + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9add", + "path": "0/0/30/3", + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ] + } + ] + }, + { + "tapInternalKey": "31b5af14121c7a997e1f58dc7178f8b2589e330fe5a9dc8c16549f90cbbe9ec5", + "tapTree": { + "leaves": [ + { + "depth": 1, + "leafVersion": 192, + "script": "204e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6ad20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ac" + }, + { + "depth": 1, + "leafVersion": 192, + "script": "20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ad20683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2cac" + } + ] + }, + "tapBip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "4e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6", + "path": "0/0/40/4", + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2c", + "path": "0/0/40/4", + "leafHashes": [ + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ] + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499", + "path": "0/0/40/4", + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0", + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ] + } + ] + } + ], + "extractedTransaction": "01000000000107d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfd000047304402201e79545c011e34b1b872b4b057e66262d86881da6a7f853e7e57a9a4d12c6dc102201a538b2175c7b7161c76da18394220f354ae2729fcc1c902b74c59cd79e0153101483045022100dd31a25d0ebea90e67910168ef7c2b383ca26192cd5c8709f02980b7ca90472802203795c65ee0f073b80644d0c8ffa1d428457ae2af3df5b5d8117949781d10c462014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78010000002322002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600ffffffffbb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b0200000000ffffffffa662a5ffebf58bf3e65e53456c67c029cc154a2409740d8cd37fdee7559c5efd0300000000ffffffffd394375cee23b3b9951488c0403529157a85b058edc0351546d9eb4807e8a1d30400000000ffffffff0d2f7f3486edaefc6ab92c21f7caf90085c4de4adac491106fd8a0e4f563dea30500000000ffffffff97441d99a8d66f124ab3c9de26b87bd00aeb1547051c842a88165c1b089ee902060000006d483045022100d2a7abb6c0563c3000e37412a9b97f6352d17e40960456fe830d264f0474f8b6022038d5cdbe88a319de5d7b7db8f57d0a92524beb242729b46a617adb530f2fa0d00123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff05840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87840300000000000017a914054127121d37f32266cd967c485404976a67adf0878403000000000000220020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f8403000000000000225120b27227f5cadc056afea4b02b4b97b9a0151786234c26ad588dccf134e78931c684030000000000002251204f73b5561399eb397b5ab413e090cc0c48ff703a61afe47cf7d47a23d43b978b00040047304402205f760c27e7598a9e80a2adaf1d925c67d2e6c24aec773e5cce56d234159ab1e502201ce97d5659681ab881e10acc9c8021587f843a15336c3a8b6fb2efc053928b8501483045022100df41fbcbf3c7f77182627bcb7cd17973b8ca58c16b81de98e94c0293dcf33ac202206017171914fdfbc80f933ab3b5aae4e3d36e968757e6c0788ffbeaaebc68e21e0169522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae0400483045022100d3b03fb77553144e14171c7b1b517a3bf33df87370b65e337f0a50844562261e0220585bc0913b56ad968161d343f321d77f5f94ff3cf62545932f1509239a15a38e0147304402206441089c8c71a4926b49a5ab12bfaa86c4b64abbc519b3d217d68fe71bc43bee02203e17d0752c0b411e9477c22c2f4556a62da39e60095c6e0774bf42aa8f491b4d0169522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae0440e7dab0d277ce7c41933136b44dcabef400f1d0e622a2255f9867d807bc8e0008cfd30766d36d736c8df7aa32917de59d0832b481c499f0917876134532306d454083b1bb7c6ce5868c8a723c4d350591894809b1335586f60cbfccc6dd4e28b8630a74637b1b242e5a389540db94f23bcbedee9c783830cb2afaff1f2763dbdb7b44207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac41c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d8304404d8e50128b5c61dd449b352a6d6f3d611e163b0794c8c2d057d25401957bb07a70420e336e18f6b255d5b869570c087091c30c1a33f0cac0a40d90d0514c69a4400a1e013f6d57fb8b248b2b19b08b34c1a3cd5ff6de4acdf19dd4ce0e02d42154856dd569f4668f2abaccbb50ce81a9d2f53efdfb627c2cb14cf92c4189a35da74420643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac41c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c97601402ea4aeeef7c10765ed7bdce7ac429b7395e08cf55083df38384781054b0880e244fe8a2d847a8c334431322d0eeba4e34872ef6052e2044fff7fa8763ce0c20b0000000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.halfsigned.json new file mode 100644 index 0000000..6547b2c --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.halfsigned.json @@ -0,0 +1,467 @@ +{ + "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", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304402201e79545c011e34b1b872b4b057e66262d86881da6a7f853e7e57a9a4d12c6dc102201a538b2175c7b7161c76da18394220f354ae2729fcc1c902b74c59cd79e0153101" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402205f760c27e7598a9e80a2adaf1d925c67d2e6c24aec773e5cce56d234159ab1e502201ce97d5659681ab881e10acc9c8021587f843a15336c3a8b6fb2efc053928b8501" + } + ], + "sighashType": 1, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100d3b03fb77553144e14171c7b1b517a3bf33df87370b65e337f0a50844562261e0220585bc0913b56ad968161d343f321d77f5f94ff3cf62545932f1509239a15a38e01" + } + ], + "sighashType": 1, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2tr", + "witnessUtxo": { + "script": "5120394b94d061d7b778fed8a204ce05ed0b44954ec1622f934f84114e1173f33027", + "value": "1000" + }, + "sighashType": 0, + "tapScriptSig": [ + { + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "leafHash": "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30", + "signature": "83b1bb7c6ce5868c8a723c4d350591894809b1335586f60cbfccc6dd4e28b8630a74637b1b242e5a389540db94f23bcbedee9c783830cb2afaff1f2763dbdb7b" + } + ], + "tapLeafScript": [ + { + "controlBlock": "c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d83", + "script": "207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "path": "0/0/31/3", + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "path": "0/0/31/3", + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ] + } + ] + }, + { + "type": "p2trMusig2", + "witnessUtxo": { + "script": "512029bbfaf4385b10dc2bbe7ab4d50e89cebe8f507968727b19689e2638083cc55b", + "value": "1000" + }, + "sighashType": 0, + "tapScriptSig": [ + { + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "leafHash": "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb", + "signature": "0a1e013f6d57fb8b248b2b19b08b34c1a3cd5ff6de4acdf19dd4ce0e02d42154856dd569f4668f2abaccbb50ce81a9d2f53efdfb627c2cb14cf92c4189a35da7" + } + ], + "tapLeafScript": [ + { + "controlBlock": "c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c976", + "script": "20643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "path": "0/0/41/4", + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "path": "0/0/41/4", + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ] + } + ] + }, + { + "type": "taprootKeyPathSpend", + "witnessUtxo": { + "script": "512015c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1000" + }, + "sighashType": 0, + "tapBip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171", + "path": "0/0/41/5", + "leafHashes": [] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "1d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953", + "path": "0/0/41/5", + "leafHashes": [] + } + ], + "tapInternalKey": "eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "tapMerkleRoot": "b2a497ea4d0b52f5011ae135d0bbe0d9ebd777bb28e733cbcc13134b73106a1a", + "unknownKeyVals": [ + { + "key": "fc05424954474f0115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "value": "021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171" + }, + { + "key": "fc05424954474f02020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e77817115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "02826949740dff45d408b1f19d94c720f53411e02c525b28ab3c593b6b530fe0370374b8a0ffcaaaee6b772dac5f7c23ef33670b32ec77c6d41efb3c36df2165a094" + }, + { + "key": "fc05424954474f02021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "03a4aaf46f3a0bc39a73855fa875b2f2f04bdb06235afbaedf857b593dddc63cb402cdb7f1a93ec526282198d834423371757e8f43932d03b9f43c3f7378300ae508" + }, + { + "key": "fc05424954474f03021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c5395315c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1cd8a0c0598b0d88f889fdf9a3140f8f088e2187803a2faaee3f13c0163eb76c" + } + ] + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d2a7abb6c0563c3000e37412a9b97f6352d17e40960456fe830d264f0474f8b6022038d5cdbe88a319de5d7b7db8f57d0a92524beb242729b46a617adb530f2fa0d001" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "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": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + }, + { + "tapInternalKey": "8ea58016ecabe3cf8490ec65d779141571fb9e5c12eac905d180f0e102943394", + "tapTree": { + "leaves": [ + { + "depth": 1, + "leafVersion": 192, + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac" + }, + { + "depth": 2, + "leafVersion": 192, + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbac" + }, + { + "depth": 2, + "leafVersion": 192, + "script": "203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac" + } + ] + }, + "tapBip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "3a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbb", + "path": "0/0/30/3", + "leafHashes": [ + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "99e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40", + "path": "0/0/30/3", + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9add", + "path": "0/0/30/3", + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ] + } + ] + }, + { + "tapInternalKey": "31b5af14121c7a997e1f58dc7178f8b2589e330fe5a9dc8c16549f90cbbe9ec5", + "tapTree": { + "leaves": [ + { + "depth": 1, + "leafVersion": 192, + "script": "204e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6ad20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ac" + }, + { + "depth": 1, + "leafVersion": 192, + "script": "20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ad20683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2cac" + } + ] + }, + "tapBip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "4e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6", + "path": "0/0/40/4", + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2c", + "path": "0/0/40/4", + "leafHashes": [ + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ] + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499", + "path": "0/0/40/4", + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0", + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ] + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.unsigned.json new file mode 100644 index 0000000..dd10435 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoin.unsigned.json @@ -0,0 +1,417 @@ +{ + "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", + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2tr", + "witnessUtxo": { + "script": "5120394b94d061d7b778fed8a204ce05ed0b44954ec1622f934f84114e1173f33027", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d83", + "script": "207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "7373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496", + "path": "0/0/31/3", + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5a", + "path": "0/0/31/3", + "leafHashes": [ + "83d7f98e9ef0f7336a06f4a0115183a9f996cbac1228e9aa7638f447f0249f30" + ] + } + ] + }, + { + "type": "p2trMusig2", + "witnessUtxo": { + "script": "512029bbfaf4385b10dc2bbe7ab4d50e89cebe8f507968727b19689e2638083cc55b", + "value": "1000" + }, + "sighashType": 0, + "tapLeafScript": [ + { + "controlBlock": "c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c976", + "script": "20643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac", + "leafVersion": 192 + } + ], + "tapBip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64d", + "path": "0/0/41/4", + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478b", + "path": "0/0/41/4", + "leafHashes": [ + "429069c8320ff5f1c8ac2a0b1047ff1450b8c0d325e1d12f1c52684d91a3b9fb" + ] + } + ] + }, + { + "type": "taprootKeyPathSpend", + "witnessUtxo": { + "script": "512015c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16", + "value": "1000" + }, + "sighashType": 0, + "tapBip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171", + "path": "0/0/41/5", + "leafHashes": [] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "1d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953", + "path": "0/0/41/5", + "leafHashes": [] + } + ], + "tapInternalKey": "eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "tapMerkleRoot": "b2a497ea4d0b52f5011ae135d0bbe0d9ebd777bb28e733cbcc13134b73106a1a", + "unknownKeyVals": [ + { + "key": "fc05424954474f0115c5815026f6a54b10194fc6980f1866a02d9ec128533c7997cdb4289bf3ef16eb5ad29a85aed24de2880e774caaf624f9cb1be09c67ed4aefbb9b7bc12ddf1a", + "value": "021d978a17486ff9e47c82990269e531fc63981419d4ce73ee8bd2c99661c53953020fdea69e40a3adef3cdc7fa6f3af02f4c9d9e3254503c96a6a2b4aa66e778171" + } + ] + }, + { + "type": "p2shP2pk", + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "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": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + }, + { + "tapInternalKey": "8ea58016ecabe3cf8490ec65d779141571fb9e5c12eac905d180f0e102943394", + "tapTree": { + "leaves": [ + { + "depth": 1, + "leafVersion": 192, + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac" + }, + { + "depth": 2, + "leafVersion": 192, + "script": "2099e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40ad203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbac" + }, + { + "depth": 2, + "leafVersion": 192, + "script": "203a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbbad20a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9addac" + } + ] + }, + "tapBip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "3a093530ea159d73c8ff93099ee0a9bb9e9aa39e0b2b84642d47b4f80d487cbb", + "path": "0/0/30/3", + "leafHashes": [ + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ] + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "99e43655c2cf3d950362bb6a3a446380e80b7a1f70e52884eb576b1356dc6e40", + "path": "0/0/30/3", + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "cf9605caec3824347bd70ad56e776095fa63f3bc6804d0430cecffe4e253d8ce" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "a86d7fe67f6994113143cc16344cb1e997b8cc8e1dee23651b97c79c09af9add", + "path": "0/0/30/3", + "leafHashes": [ + "8d6609b2543534810e1219c57c1ba1fb1cc2b1a742726c0aa7f37d03d023401a", + "bc0e3b7d952ad956bb7759de2173582c7500d8f29fe4c1ade6711b39d793581a" + ] + } + ] + }, + { + "tapInternalKey": "31b5af14121c7a997e1f58dc7178f8b2589e330fe5a9dc8c16549f90cbbe9ec5", + "tapTree": { + "leaves": [ + { + "depth": 1, + "leafVersion": 192, + "script": "204e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6ad20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ac" + }, + { + "depth": 1, + "leafVersion": 192, + "script": "20c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499ad20683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2cac" + } + ] + }, + "tapBip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "4e8d0e8341fe95733afca3dbf1852de77695e287959797c6d8159fbfb02b48b6", + "path": "0/0/40/4", + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0" + ] + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "683608908c8bfe95e38f099068a170140332129eeb03480b1e4806d4f4f43c2c", + "path": "0/0/40/4", + "leafHashes": [ + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ] + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "c160c27afcc4888c593f18dee2d7985657508c03705ab6f0f635d352cbaf6499", + "path": "0/0/40/4", + "leafHashes": [ + "0f39500a54520faeefe84e5a4f9595943523307ef253a7ddc713189a6f5a32f0", + "d7a356fb77b18e43bc861580e45c0044c0857e31b1bde76083d9080c33d3ffcf" + ] + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.fullsigned.json new file mode 100644 index 0000000..f46604f --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.fullsigned.json @@ -0,0 +1,103 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tIMEUCIQDMd8sdfMIe+G7YRSF4GmNZVJul5tc25GtI44GB4E4R7wIgRIA+PNMfb31715EeqQe9CGFZjoJL3L6147AxFKr7LHRBIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCHYx9Uvql7pvsTWvwOaqUAD0BfjH9AdftEYk/LEAEQ8QIgPzwmpjLu8TGzLCNVN+jQjwBEsuz89HY7vO5Aqe4E4QxBAQMEQQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAhk4utvMvq1+A5rMhVJ0LLSozXeZVvnxzS8L4m8HxCFoCIHt0jbPPC6nNTOVkyB2iD6nD4B95ds3AWjcEAEzmDpISQQEDBEEAAAABBCMhAzbvIo/+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", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c7441" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + } + ], + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ], + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": "02000000025c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af00000000fdfe000048304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41483045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c74414c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f010000006d483045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e92124123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.halfsigned.json new file mode 100644 index 0000000..4ca118a --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.halfsigned.json @@ -0,0 +1,99 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCHYx9Uvql7pvsTWvwOaqUAD0BfjH9AdftEYk/LEAEQ8QIgPzwmpjLu8TGzLCNVN+jQjwBEsuz89HY7vO5Aqe4E4QxBAQMEQQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAhk4utvMvq1+A5rMhVJ0LLSozXeZVvnxzS8L4m8HxCFoCIHt0jbPPC6nNTOVkyB2iD6nD4B95ds3AWjcEAEzmDpISQQEDBEEAAAABBCMhAzbvIo/+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", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + } + ], + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ], + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.unsigned.json new file mode 100644 index 0000000..484ec70 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoincash.unsigned.json @@ -0,0 +1,87 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHAQMEQQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwEDBEEAAAABBCMhAzbvIo/+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", + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoingold.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoingold.fullsigned.json new file mode 100644 index 0000000..f0ade96 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.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", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100dd4c0b374aca63840594e44c995835b3630eae3f6111d3eea5faecb49f2e40540220384f3653dce80d9dc2879d508dce3f1ccc8d19b19153737bb23a274941c422d441" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e0e1ba72052b3f3c4b193b1f21aff66e8bfb821131f9b7680bea781ca6d637430220285ca143f06cd4e32aeac9bff16ef92abb95df0b08649709266686ad4b180d7641" + } + ], + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "signature": "3045022100c3ae94dbb976bcd38566308b4d9350da86ebe044c610b36b913f6476524568cd022044dfd32108f0afe46a63384f42a4990ba73b9ebaddd88801daf3e3ebd83e223c41" + }, + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402206eb6a084505d7badc1afef554e859c65df31ad5b7bdbc62a14943d5b4f95307102200cba48e9c5676562ab30d73094448a0eb35eee73bfac5311140cd944332dca9b41" + } + ], + "sighashType": 65, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "signature": "3044022071c4e85d66d2ea91d771458924e674b4ca40f6dc804a31db86d80d51eefc46c5022029bb9741909af81f3205edf62c51342ba3c4444907b78f56fac41155ead0cf3b41" + }, + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100f8cc6761ff5f70b95b4bb6e50f087be6e3899794b93048f08078c7bce89d5834022011cbeb43e5bd55fc96b39be2bc46112ecd6080fd6f148153dea1dc9cb8dcc5ea41" + } + ], + "sighashType": 65, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d9fc432b5d223325c038441974d75517582a9f0e8ba10d3188b2092e97c7624e0220028e3307eb02b1916c1a0089ea6ff1a255e6d2bd0eab2c994dfb433d6eea439641" + } + ], + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "AbZTPoHNRTTSjDZ9bE8J9D874VkRavLrwz" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "AGFf5Lj1EGacxeRPBeC3f78XBojSo3ZAJj" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "btg1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848swaqfkk" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + } + ], + "extractedTransaction": "020000000001045c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af00000000fdfe0000483045022100e0e1ba72052b3f3c4b193b1f21aff66e8bfb821131f9b7680bea781ca6d637430220285ca143f06cd4e32aeac9bff16ef92abb95df0b08649709266686ad4b180d7641483045022100dd4c0b374aca63840594e44c995835b3630eae3f6111d3eea5faecb49f2e40540220384f3653dce80d9dc2879d508dce3f1ccc8d19b19153737bb23a274941c422d4414c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff30e7b080f3ea1343910e2fa15f59bece2554cf30a923d33bc28f1ebfba0b6b49010000002322002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600ffffffffd401d0f1eea15d1052175ba6b0023dec9ed3d5d4e3cb5adcaa546fe7cffacc890200000000ffffffff144c6838538031957589d9ab76deae92b01fe63568dabf1a64293e69f25a7941030000006d483045022100d9fc432b5d223325c038441974d75517582a9f0e8ba10d3188b2092e97c7624e0220028e3307eb02b1916c1a0089ea6ff1a255e6d2bd0eab2c994dfb433d6eea43964123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff03840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87840300000000000017a914054127121d37f32266cd967c485404976a67adf0878403000000000000220020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f00040047304402206eb6a084505d7badc1afef554e859c65df31ad5b7bdbc62a14943d5b4f95307102200cba48e9c5676562ab30d73094448a0eb35eee73bfac5311140cd944332dca9b41483045022100c3ae94dbb976bcd38566308b4d9350da86ebe044c610b36b913f6476524568cd022044dfd32108f0afe46a63384f42a4990ba73b9ebaddd88801daf3e3ebd83e223c4169522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae0400483045022100f8cc6761ff5f70b95b4bb6e50f087be6e3899794b93048f08078c7bce89d5834022011cbeb43e5bd55fc96b39be2bc46112ecd6080fd6f148153dea1dc9cb8dcc5ea41473044022071c4e85d66d2ea91d771458924e674b4ca40f6dc804a31db86d80d51eefc46c5022029bb9741909af81f3205edf62c51342ba3c4444907b78f56fac41155ead0cf3b4169522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae0000000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoingold.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoingold.halfsigned.json new file mode 100644 index 0000000..e01baca --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.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", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e0e1ba72052b3f3c4b193b1f21aff66e8bfb821131f9b7680bea781ca6d637430220285ca143f06cd4e32aeac9bff16ef92abb95df0b08649709266686ad4b180d7641" + } + ], + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "304402206eb6a084505d7badc1afef554e859c65df31ad5b7bdbc62a14943d5b4f95307102200cba48e9c5676562ab30d73094448a0eb35eee73bfac5311140cd944332dca9b41" + } + ], + "sighashType": 65, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "3045022100f8cc6761ff5f70b95b4bb6e50f087be6e3899794b93048f08078c7bce89d5834022011cbeb43e5bd55fc96b39be2bc46112ecd6080fd6f148153dea1dc9cb8dcc5ea41" + } + ], + "sighashType": 65, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100d9fc432b5d223325c038441974d75517582a9f0e8ba10d3188b2092e97c7624e0220028e3307eb02b1916c1a0089ea6ff1a255e6d2bd0eab2c994dfb433d6eea439641" + } + ], + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "AbZTPoHNRTTSjDZ9bE8J9D874VkRavLrwz" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "AGFf5Lj1EGacxeRPBeC3f78XBojSo3ZAJj" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "btg1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848swaqfkk" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoingold.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.bitcoingold.unsigned.json new file mode 100644 index 0000000..7637b18 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.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", + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 65, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 65, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2shP2pk", + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "AbZTPoHNRTTSjDZ9bE8J9D874VkRavLrwz" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "AGFf5Lj1EGacxeRPBeC3f78XBojSo3ZAJj" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "btg1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848swaqfkk" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.fullsigned.json new file mode 100644 index 0000000..98f2204 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.fullsigned.json @@ -0,0 +1,103 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tIMEUCIQC/se210An1bN0YjFZUzdyN3cyPRdA8inPCCOgQ+XGx4AIgBOijMLzWLH5NNIcd40FBUfqcYr5nhFPzXxTa24LTXeoBIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCO+pZccFVYiTnBW8PmM2utiw08zGgEKH7ltvty0Av+/AIgfGhafXFFx0LOicYnmLq/P4tBT+sNYKdVMfHkPpsp6NEBAQMEAQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAuxRF10PbPIRrkm3EeuPBiryAEPe6VfOFx81wlLbSvbICIBn6uLAtSgEArC7ZpvPlaRL6pLZg1SYY+TzNKih6bltoAQEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea01" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "7nCEW3CMTCDK1BaYRHo4kLDbexwpb8uDVT" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": "0100000002d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfe00004830450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101483045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6010000006d483045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b680123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.halfsigned.json new file mode 100644 index 0000000..9db71f3 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.halfsigned.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+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCO+pZccFVYiTnBW8PmM2utiw08zGgEKH7ltvty0Av+/AIgfGhafXFFx0LOicYnmLq/P4tBT+sNYKdVMfHkPpsp6NEBAQMEAQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAuxRF10PbPIRrkm3EeuPBiryAEPe6VfOFx81wlLbSvbICIBn6uLAtSgEArC7ZpvPlaRL6pLZg1SYY+TzNKih6bltoAQEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "7nCEW3CMTCDK1BaYRHo4kLDbexwpb8uDVT" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.unsigned.json new file mode 100644 index 0000000..4eaa152 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dash.unsigned.json @@ -0,0 +1,87 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHAQMEAQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "7nCEW3CMTCDK1BaYRHo4kLDbexwpb8uDVT" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.fullsigned.json new file mode 100644 index 0000000..e18d143 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.fullsigned.json @@ -0,0 +1,103 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tIMEUCIQC/se210An1bN0YjFZUzdyN3cyPRdA8inPCCOgQ+XGx4AIgBOijMLzWLH5NNIcd40FBUfqcYr5nhFPzXxTa24LTXeoBIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCO+pZccFVYiTnBW8PmM2utiw08zGgEKH7ltvty0Av+/AIgfGhafXFFx0LOicYnmLq/P4tBT+sNYKdVMfHkPpsp6NEBAQMEAQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAuxRF10PbPIRrkm3EeuPBiryAEPe6VfOFx81wlLbSvbICIBn6uLAtSgEArC7ZpvPlaRL6pLZg1SYY+TzNKih6bltoAQEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea01" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "ACDrQgz5iGzZunR4Zonyf5rKRzVUsTTgbE" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": "0100000002d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfe00004830450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101483045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6010000006d483045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b680123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.halfsigned.json new file mode 100644 index 0000000..5a16239 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.halfsigned.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+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCO+pZccFVYiTnBW8PmM2utiw08zGgEKH7ltvty0Av+/AIgfGhafXFFx0LOicYnmLq/P4tBT+sNYKdVMfHkPpsp6NEBAQMEAQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAuxRF10PbPIRrkm3EeuPBiryAEPe6VfOFx81wlLbSvbICIBn6uLAtSgEArC7ZpvPlaRL6pLZg1SYY+TzNKih6bltoAQEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b6801" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "ACDrQgz5iGzZunR4Zonyf5rKRzVUsTTgbE" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.unsigned.json new file mode 100644 index 0000000..47af686 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.dogecoin.unsigned.json @@ -0,0 +1,87 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwBAAAAAtme+uGZ/E1U5YJajjNoo5Xp6zKZFc+12I3DEVB9GEg2AAAAAAD/////J50715OdJjBhFagFjUqI0QUVoLZ1/IpfiTEcLoYp/sYBAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHAQMEAQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwEDBAEAAAABBCMhAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVrAABAGlSIQLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCSEC1y/Q0NkCk0NK1fyhYPJ44DxhRJeqTkJc9FTiwTMPlqshA0TYhBNt9VAgKGX/vGIYx/nIj+bOOclFeYGQuts4p1LxU64iAgLMTQ+kEcrCREhvjrLAjgNf90EPRgo1nKf4gQmRvTtCCRTy7wOJAAAAAAAAAAAAAAAAAAAAACICAtcv0NDZApNDStX8oWDyeOA8YUSXqk5CXPRU4sEzD5arFMwYrggAAAAAAAAAAAAAAAAAAAAAIgIDRNiEE231UCAoZf+8YhjH+ciP5s45yUV5gZC62zinUvEU9lzYaQAAAAAAAAAAAAAAAAAAAAAA", + "inputs": [ + { + "hash": "d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d184836", + "index": 0, + "sequence": 4294967295 + }, + { + "hash": "279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6", + "index": 1, + "sequence": 4294967295 + } + ], + "psbtInputs": [ + { + "type": "p2sh", + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "ACDrQgz5iGzZunR4Zonyf5rKRzVUsTTgbE" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.fullsigned.json new file mode 100644 index 0000000..f46604f --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.fullsigned.json @@ -0,0 +1,103 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tIMEUCIQDMd8sdfMIe+G7YRSF4GmNZVJul5tc25GtI44GB4E4R7wIgRIA+PNMfb31715EeqQe9CGFZjoJL3L6147AxFKr7LHRBIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCHYx9Uvql7pvsTWvwOaqUAD0BfjH9AdftEYk/LEAEQ8QIgPzwmpjLu8TGzLCNVN+jQjwBEsuz89HY7vO5Aqe4E4QxBAQMEQQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAhk4utvMvq1+A5rMhVJ0LLSozXeZVvnxzS8L4m8HxCFoCIHt0jbPPC6nNTOVkyB2iD6nD4B95ds3AWjcEAEzmDpISQQEDBEEAAAABBCMhAzbvIo/+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", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c7441" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + } + ], + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ], + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": "02000000025c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af00000000fdfe000048304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41483045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c74414c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f010000006d483045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e92124123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.halfsigned.json new file mode 100644 index 0000000..4ca118a --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.halfsigned.json @@ -0,0 +1,99 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHIgID9vQHZL1dY/IAoneIg6z3XpbxUJXJmCY8CHJw0Ml+fn9IMEUCIQCHYx9Uvql7pvsTWvwOaqUAD0BfjH9AdftEYk/LEAEQ8QIgPzwmpjLu8TGzLCNVN+jQjwBEsuz89HY7vO5Aqe4E4QxBAQMEQQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhyICAzbvIo/+m47/+6BSwy0zRmDdH4Nmz4/kSuWqZytrYpCVSDBFAiEAhk4utvMvq1+A5rMhVJ0LLSozXeZVvnxzS8L4m8HxCFoCIHt0jbPPC6nNTOVkyB2iD6nD4B95ds3AWjcEAEzmDpISQQEDBEEAAAABBCMhAzbvIo/+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", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41" + } + ], + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e921241" + } + ], + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.unsigned.json new file mode 100644 index 0000000..484ec70 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.ecash.unsigned.json @@ -0,0 +1,87 @@ +{ + "walletKeys": [ + "xprv9s21ZrQH143K45bDYc9c3aEaGiTK9aPtjgtHg6wBdkryBjix1KKXRCszxPcFPejLT9tdLgNe8E8AuQXK2fy8KhNPeLAZsGoX8w9KS2PkacL", + "xprv9s21ZrQH143K2eBLSVNk4zhjDzqzqM29aS9cjr4CcoNrKLYwLHtwgTURSk7RPV3cH9zNZQeR1zGw3MEwSjvARSfWEGpxfaBmduhW3TKsH5g", + "xprv9s21ZrQH143K39N9shF9hAsTwh1FvQuBk8UVsZVwr4XtpqF7stCu2LH358NLuqkkK6pu1Af7TJHr5FZERQoLLtnC7wkoM9sdFo1HuP7dWuv" + ], + "psbtBase64": "cHNidP8BAHwCAAAAAlx5eyWbgnIrhOwGKs52BsAJLUxtcR60t3VnvhO0cMavAAAAAAD/////f7uvM8nANwD38dz5OjQDmJdlZkbCQouPqoi39X0dPZ8BAAAAAP////8BhAMAAAAAAAAXqRTZCUdEBMEko9BMP7/2H6pJz0PFi4cAAAAATwEEiLIeAAAAAAAAAAAAOpIuKfDI6w2ypgSEy9y2MfaxB8nKrj/9zz59LsH2vNADEhSHFfNh2raFpmnUJDHl1tP5c0BNq5yf0blQsnmtdjQEzBiuCE8BBIiyHgAAAAAAAAAAAG0dZW093ZHBlMBFZaNgNwKiEBbO0UomXziYLWJ15ntkA9O6wjE6fGshy7EbFLDRA0H5IsCkA6i9jIfw3IIPNa9uBPZc2GlPAQSIsh4AAAAAAAAAAADLBP1jqzTZD+ZGa4gOKgLM+KhjN0MSmRr4kRsaqrRDNAM27yKP/puO//ugUsMtM0Zg3R+DZs+P5Erlqmcra2KQlQTy7wOJAAEBIOgDAAAAAAAAF6kUVnzXtE+fOgfDE483v5hLYPu68kOHAQMEQQAAAAEEaVIhA/b0B2S9XWPyAKJ3iIOs916W8VCVyZgmPAhycNDJfn5/IQNf+3q8cBWeBGn0uYmm1eF4WikEFp/wULL0aP5dPV278iED4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1tTriIGA1/7erxwFZ4EafS5iabV4XhaKQQWn/BQsvRo/l09XbvyFMwYrggAAAAAAAAAAAEAAAAAAAAAIgYD4VJNf2/FerPqy7ZZt4cQZ4CkddHbSDlSwjELfpo4l1sU9lzYaQAAAAAAAAAAAQAAAAAAAAAiBgP29AdkvV1j8gCid4iDrPdelvFQlcmYJjwIcnDQyX5+fxTy7wOJAAAAAAAAAAABAAAAAAAAAAABASDoAwAAAAAAABepFCCzcJTYKlE0Uf8MzZ2yOroFvF7zhwEDBEEAAAABBCMhAzbvIo/+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", + "sighashType": 65, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2pk", + "sighashType": 65, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "3MUbfqvBeD7g1R3b9g8ZQxDwjR7SjQWciv" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.fullsigned.json new file mode 100644 index 0000000..c1a51a2 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.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", + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3044022025cd881a29cca29960c0361d18f741681bdb0d8c0f55c1f8d78daf03757ce8af02205d93f55191a736ab373b05cfeb099440234d99a2720188c3ac13150cb6e0ac4c01" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e9f193db9830d516af5598045b9404d096e89c7a192f77ad220fa3a487308b0002205dea2fd75f700b3beec6e77a4bdd21a6ac9b9a355c1ea958a6864305e203d9fe01" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "signature": "3044022050f1e19eaec828c7856135b98b6e1af9c600229241ec8507d50dae85ff71823902207c084363fe89081b49d929851b62fa9b9d44c70ec3931e8bb473c8d84e35b2e401" + }, + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "3045022100a4bfba654b915a5ca895c5339ce5edab81bd67b65c805997cad9762840d3c7060220021f8ffb89ebea032cb339ecbd8494c84f955ed894963992b4f31e91e8df0a7401" + } + ], + "sighashType": 1, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "signature": "3044022021df7a10ad4a6838c6553897cd6779fa232e89a600058f946a0c4e86a871bb21022049919108dcbda4b4318fb87d5b1c5f929bd9a82f9ef49fadd7b3445a9cf3207001" + }, + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "304402204db56669993c9644b84a54892958b7c15d4897829d19a673f7a337bdfab834c202203c6aca862b8ab1a2a3b570689836f09a191b97bcee9ddd8e19271e7a53f6a80401" + } + ], + "sighashType": 1, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100e5bcb83e8f66f30bf6ea886184ef607557cb166ca1d3de3253c293e1865c775202205577e3e2acd1fd7ea93b1e624169db1d52e97030680bc062095cf7ac667d4eca01" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "MTgjyjL9bKy6ovKVFZ7uEbUM47htkbjGDc" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "M8NwfGmnQ96H3MBiqyBekVUmBRguvnNQEi" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "ltc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sre2yue" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + } + ], + "extractedTransaction": "01000000000104d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfd0000483045022100e9f193db9830d516af5598045b9404d096e89c7a192f77ad220fa3a487308b0002205dea2fd75f700b3beec6e77a4bdd21a6ac9b9a355c1ea958a6864305e203d9fe01473044022025cd881a29cca29960c0361d18f741681bdb0d8c0f55c1f8d78daf03757ce8af02205d93f55191a736ab373b05cfeb099440234d99a2720188c3ac13150cb6e0ac4c014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78010000002322002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600ffffffffbb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b0200000000ffffffff4f20e1daf9158414abb3891bb7ae087d14f17b59e5c167d9e53365a1337fb579030000006d483045022100e5bcb83e8f66f30bf6ea886184ef607557cb166ca1d3de3253c293e1865c775202205577e3e2acd1fd7ea93b1e624169db1d52e97030680bc062095cf7ac667d4eca0123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff03840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87840300000000000017a914054127121d37f32266cd967c485404976a67adf0878403000000000000220020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f000400483045022100a4bfba654b915a5ca895c5339ce5edab81bd67b65c805997cad9762840d3c7060220021f8ffb89ebea032cb339ecbd8494c84f955ed894963992b4f31e91e8df0a7401473044022050f1e19eaec828c7856135b98b6e1af9c600229241ec8507d50dae85ff71823902207c084363fe89081b49d929851b62fa9b9d44c70ec3931e8bb473c8d84e35b2e40169522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae040047304402204db56669993c9644b84a54892958b7c15d4897829d19a673f7a337bdfab834c202203c6aca862b8ab1a2a3b570689836f09a191b97bcee9ddd8e19271e7a53f6a80401473044022021df7a10ad4a6838c6553897cd6779fa232e89a600058f946a0c4e86a871bb21022049919108dcbda4b4318fb87d5b1c5f929bd9a82f9ef49fadd7b3445a9cf320700169522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae0000000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.halfsigned.json new file mode 100644 index 0000000..733773f --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.halfsigned.json @@ -0,0 +1,225 @@ +{ + "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", + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "3045022100e9f193db9830d516af5598045b9404d096e89c7a192f77ad220fa3a487308b0002205dea2fd75f700b3beec6e77a4bdd21a6ac9b9a355c1ea958a6864305e203d9fe01" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "signature": "3045022100a4bfba654b915a5ca895c5339ce5edab81bd67b65c805997cad9762840d3c7060220021f8ffb89ebea032cb339ecbd8494c84f955ed894963992b4f31e91e8df0a7401" + } + ], + "sighashType": 1, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "signature": "304402204db56669993c9644b84a54892958b7c15d4897829d19a673f7a337bdfab834c202203c6aca862b8ab1a2a3b570689836f09a191b97bcee9ddd8e19271e7a53f6a80401" + } + ], + "sighashType": 1, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2shP2pk", + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3045022100e5bcb83e8f66f30bf6ea886184ef607557cb166ca1d3de3253c293e1865c775202205577e3e2acd1fd7ea93b1e624169db1d52e97030680bc062095cf7ac667d4eca01" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "MTgjyjL9bKy6ovKVFZ7uEbUM47htkbjGDc" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "M8NwfGmnQ96H3MBiqyBekVUmBRguvnNQEi" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "ltc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sre2yue" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.litecoin.unsigned.json new file mode 100644 index 0000000..54d6d05 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.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", + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ], + "witnessUtxo": { + "value": "1000", + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387" + } + }, + { + "type": "p2shP2wsh", + "witnessUtxo": { + "script": "a9140e26b25d0ceae6f9cff3edaccaa0d1a70da7600f87", + "value": "1000" + }, + "sighashType": 1, + "redeemScript": "002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600", + "witnessScript": "522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a99", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f035", + "path": "0/0/11/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b", + "path": "0/0/11/1" + } + ] + }, + { + "type": "p2wsh", + "witnessUtxo": { + "script": "0020db0427f1822b4777670e6673c28af02f6da1d5afe71a71f5c9064470b229fafd", + "value": "1000" + }, + "sighashType": 1, + "witnessScript": "522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb418", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce3", + "path": "0/0/21/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a7911", + "path": "0/0/21/2" + } + ] + }, + { + "type": "p2shP2pk", + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac", + "witnessUtxo": { + "value": "1000", + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387" + } + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900", + "address": "MTgjyjL9bKy6ovKVFZ7uEbUM47htkbjGDc" + }, + { + "script": "a914054127121d37f32266cd967c485404976a67adf087", + "value": "900", + "address": "M8NwfGmnQ96H3MBiqyBekVUmBRguvnNQEi" + }, + { + "script": "0020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f", + "value": "900", + "address": "ltc1qhfyw87v8g33eg0usry4ytudw39dh0ymz5a3f4aadd2wh4q67848sre2yue" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + }, + { + "redeemScript": "0020292b052351a3c6f80d51bae642cc8821182893dbeedabc8f5d0e9677476026c1", + "witnessScript": "5221032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c02103545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec82102a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb965429755453ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "02a3cfb6665fe44f7520b6a1b4de1a4d46643b385eb1fd1e0ab70efb9654297554", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "032e11f98552685fe907f31f9e7260c906e8de700f0c3c9f2f1410623dcdfd19c0", + "path": "0/0/10/1" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03545757ce35cf1edfb13b9e2c4a2f9ce00ab8c36bee12bca2337ce583fd28aec8", + "path": "0/0/10/1" + } + ] + }, + { + "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae", + "bip32Derivation": [ + { + "masterFingerprint": "f65cd869", + "pubkey": "0295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "02d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e686900", + "path": "0/0/20/2" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "03b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7", + "path": "0/0/20/2" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.fullsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.fullsigned.json new file mode 100644 index 0000000..287ec70 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.fullsigned.json @@ -0,0 +1,102 @@ +{ + "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", + "witnessUtxo": { + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "signature": "3045022100f25d095fb7c5217a619eaee7d2378c6a89eaefe21a0a49161b25d970c97597e402206c2f9e6d6c2f7fc05f6d5beaffc3fd4a5a1b4d0049fd702551ef5019c7ddf69a01" + }, + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221009165ef9fcf15c598dda0ae03b00cc6580ba180f1cdb71a07dc1f54a8334c2e4f022013397fbf0b91e9d9ff9d167f15ae45a4e3436e149e87aafe3281eb651e77b43601" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ] + }, + { + "type": "p2shP2pk", + "witnessUtxo": { + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3044022059ecb13a8b486269d03205924da1e1df994f8c17c7254eeeb9191327edcdc32002200941fdca39ceb065543f2d86adc98b3e7d48867332091ff920be1cc020e3d2f501" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac" + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": "0400008085202f89020107dccd08317475f5163bc429410f73dd9fcb666fc8af26b40ede0a6fd8135a00000000fdfe00004830450221009165ef9fcf15c598dda0ae03b00cc6580ba180f1cdb71a07dc1f54a8334c2e4f022013397fbf0b91e9d9ff9d167f15ae45a4e3436e149e87aafe3281eb651e77b43601483045022100f25d095fb7c5217a619eaee7d2378c6a89eaefe21a0a49161b25d970c97597e402206c2f9e6d6c2f7fc05f6d5beaffc3fd4a5a1b4d0049fd702551ef5019c7ddf69a014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffffdcc6ff967ba5f3f6cb24d62b0b603bd2bd0a799ea98a932e702e2a828c76803f010000006c473044022059ecb13a8b486269d03205924da1e1df994f8c17c7254eeeb9191327edcdc32002200941fdca39ceb065543f2d86adc98b3e7d48867332091ff920be1cc020e3d2f50123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000000000000000000000000000000000" +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.halfsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.halfsigned.json new file mode 100644 index 0000000..fa0261a --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.halfsigned.json @@ -0,0 +1,98 @@ +{ + "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", + "witnessUtxo": { + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "signature": "30450221009165ef9fcf15c598dda0ae03b00cc6580ba180f1cdb71a07dc1f54a8334c2e4f022013397fbf0b91e9d9ff9d167f15ae45a4e3436e149e87aafe3281eb651e77b43601" + } + ], + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ] + }, + { + "type": "p2shP2pk", + "witnessUtxo": { + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387", + "value": "1000" + }, + "partialSig": [ + { + "pubkey": "0336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095", + "signature": "3044022059ecb13a8b486269d03205924da1e1df994f8c17c7254eeeb9191327edcdc32002200941fdca39ceb065543f2d86adc98b3e7d48867332091ff920be1cc020e3d2f501" + } + ], + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac" + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} diff --git a/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.unsigned.json b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.unsigned.json new file mode 100644 index 0000000..a28e283 --- /dev/null +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt-lite.zcash.unsigned.json @@ -0,0 +1,86 @@ +{ + "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", + "witnessUtxo": { + "script": "a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387", + "value": "1000" + }, + "sighashType": 1, + "redeemScript": "522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae", + "bip32Derivation": [ + { + "masterFingerprint": "cc18ae08", + "pubkey": "035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf2", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "03e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b", + "path": "0/0/1/0" + }, + { + "masterFingerprint": "f2ef0389", + "pubkey": "03f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f", + "path": "0/0/1/0" + } + ] + }, + { + "type": "p2shP2pk", + "witnessUtxo": { + "script": "a91420b37094d82a513451ff0ccd9db23aba05bc5ef387", + "value": "1000" + }, + "sighashType": 1, + "redeemScript": "210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095ac" + } + ], + "outputs": [ + { + "script": "a914d909474404c124a3d04c3fbff61faa49cf43c58b87", + "value": "900" + } + ], + "psbtOutputs": [ + { + "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae", + "bip32Derivation": [ + { + "masterFingerprint": "f2ef0389", + "pubkey": "02cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b4209", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "cc18ae08", + "pubkey": "02d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab", + "path": "0/0/0/0" + }, + { + "masterFingerprint": "f65cd869", + "pubkey": "0344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f1", + "path": "0/0/0/0" + } + ] + } + ], + "extractedTransaction": null +} 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 index 49693f9..b000185 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.fullsigned.json @@ -493,5 +493,6 @@ } ] } - ] + ], + "extractedTransaction": "01000000000107d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfd000047304402201e79545c011e34b1b872b4b057e66262d86881da6a7f853e7e57a9a4d12c6dc102201a538b2175c7b7161c76da18394220f354ae2729fcc1c902b74c59cd79e0153101483045022100dd31a25d0ebea90e67910168ef7c2b383ca26192cd5c8709f02980b7ca90472802203795c65ee0f073b80644d0c8ffa1d428457ae2af3df5b5d8117949781d10c462014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78010000002322002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600ffffffffbb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b0200000000ffffffffa662a5ffebf58bf3e65e53456c67c029cc154a2409740d8cd37fdee7559c5efd0300000000ffffffffd394375cee23b3b9951488c0403529157a85b058edc0351546d9eb4807e8a1d30400000000ffffffff0d2f7f3486edaefc6ab92c21f7caf90085c4de4adac491106fd8a0e4f563dea30500000000ffffffff97441d99a8d66f124ab3c9de26b87bd00aeb1547051c842a88165c1b089ee902060000006d483045022100d2a7abb6c0563c3000e37412a9b97f6352d17e40960456fe830d264f0474f8b6022038d5cdbe88a319de5d7b7db8f57d0a92524beb242729b46a617adb530f2fa0d00123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff05840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87840300000000000017a914054127121d37f32266cd967c485404976a67adf0878403000000000000220020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f8403000000000000225120b27227f5cadc056afea4b02b4b97b9a0151786234c26ad588dccf134e78931c684030000000000002251204f73b5561399eb397b5ab413e090cc0c48ff703a61afe47cf7d47a23d43b978b00040047304402205f760c27e7598a9e80a2adaf1d925c67d2e6c24aec773e5cce56d234159ab1e502201ce97d5659681ab881e10acc9c8021587f843a15336c3a8b6fb2efc053928b8501483045022100df41fbcbf3c7f77182627bcb7cd17973b8ca58c16b81de98e94c0293dcf33ac202206017171914fdfbc80f933ab3b5aae4e3d36e968757e6c0788ffbeaaebc68e21e0169522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae0400483045022100d3b03fb77553144e14171c7b1b517a3bf33df87370b65e337f0a50844562261e0220585bc0913b56ad968161d343f321d77f5f94ff3cf62545932f1509239a15a38e0147304402206441089c8c71a4926b49a5ab12bfaa86c4b64abbc519b3d217d68fe71bc43bee02203e17d0752c0b411e9477c22c2f4556a62da39e60095c6e0774bf42aa8f491b4d0169522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae0440e7dab0d277ce7c41933136b44dcabef400f1d0e622a2255f9867d807bc8e0008cfd30766d36d736c8df7aa32917de59d0832b481c499f0917876134532306d454083b1bb7c6ce5868c8a723c4d350591894809b1335586f60cbfccc6dd4e28b8630a74637b1b242e5a389540db94f23bcbedee9c783830cb2afaff1f2763dbdb7b44207373d723ce0a87f8fdd66843be12dae9d51939f68188d5ad96920bef5f51f496ad20aa88ca194fda43486504b86ac9b71f10fc41de7b1713874839427f74e78c2d5aac41c0bc17ea2bbf6ff46bd5c0c3780be2a63880eb7bb782b39ed86f29b99f4882994e1b178b1b55d3c6aac7b039e3422dfdb9c9d75d4d6fc908e9743e88b651e48d8304404d8e50128b5c61dd449b352a6d6f3d611e163b0794c8c2d057d25401957bb07a70420e336e18f6b255d5b869570c087091c30c1a33f0cac0a40d90d0514c69a4400a1e013f6d57fb8b248b2b19b08b34c1a3cd5ff6de4acdf19dd4ce0e02d42154856dd569f4668f2abaccbb50ce81a9d2f53efdfb627c2cb14cf92c4189a35da74420643151ab03f3a97bb86d3592f12f8d25a8026d89cd47342fc1b49c5e2e63478bad20035c9d632db2ddb8f90cf3ccfc931822bcb1f24562b23ae041abf12e54bca64dac41c1a107a403f7a207e7b1f552d3fd3f55f64ae40e149d0d26f4868ad7faec949eb7637e37cac6e5f22347ab68e876b559117d9597ee7b37fb983c2ab9e51023c97601402ea4aeeef7c10765ed7bdce7ac429b7395e08cf55083df38384781054b0880e244fe8a2d847a8c334431322d0eeba4e34872ef6052e2044fff7fa8763ce0c20b0000000000" } 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 index 58f62e9..4a1666d 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.halfsigned.json @@ -467,5 +467,6 @@ } ] } - ] + ], + "extractedTransaction": null } 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 index 66a3adf..237b0c9 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoin.unsigned.json @@ -417,5 +417,6 @@ } ] } - ] + ], + "extractedTransaction": null } 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 index 286eccf..3bbcb84 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.fullsigned.json @@ -95,5 +95,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": "02000000025c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af00000000fdfe000048304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41483045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c74414c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f010000006d483045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e92124123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" } 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 index ff2ae87..fe6edf2 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.halfsigned.json @@ -91,5 +91,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index 7daf7ba..b63209e 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoincash.unsigned.json @@ -79,5 +79,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index 1a97d66..4ec2e1e 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.fullsigned.json @@ -233,5 +233,6 @@ ], "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" } - ] + ], + "extractedTransaction": "020000000001045c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af00000000fdfe0000483045022100e0e1ba72052b3f3c4b193b1f21aff66e8bfb821131f9b7680bea781ca6d637430220285ca143f06cd4e32aeac9bff16ef92abb95df0b08649709266686ad4b180d7641483045022100dd4c0b374aca63840594e44c995835b3630eae3f6111d3eea5faecb49f2e40540220384f3653dce80d9dc2879d508dce3f1ccc8d19b19153737bb23a274941c422d4414c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff30e7b080f3ea1343910e2fa15f59bece2554cf30a923d33bc28f1ebfba0b6b49010000002322002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600ffffffffd401d0f1eea15d1052175ba6b0023dec9ed3d5d4e3cb5adcaa546fe7cffacc890200000000ffffffff144c6838538031957589d9ab76deae92b01fe63568dabf1a64293e69f25a7941030000006d483045022100d9fc432b5d223325c038441974d75517582a9f0e8ba10d3188b2092e97c7624e0220028e3307eb02b1916c1a0089ea6ff1a255e6d2bd0eab2c994dfb433d6eea43964123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff03840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87840300000000000017a914054127121d37f32266cd967c485404976a67adf0878403000000000000220020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f00040047304402206eb6a084505d7badc1afef554e859c65df31ad5b7bdbc62a14943d5b4f95307102200cba48e9c5676562ab30d73094448a0eb35eee73bfac5311140cd944332dca9b41483045022100c3ae94dbb976bcd38566308b4d9350da86ebe044c610b36b913f6476524568cd022044dfd32108f0afe46a63384f42a4990ba73b9ebaddd88801daf3e3ebd83e223c4169522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae0400483045022100f8cc6761ff5f70b95b4bb6e50f087be6e3899794b93048f08078c7bce89d5834022011cbeb43e5bd55fc96b39be2bc46112ecd6080fd6f148153dea1dc9cb8dcc5ea41473044022071c4e85d66d2ea91d771458924e674b4ca40f6dc804a31db86d80d51eefc46c5022029bb9741909af81f3205edf62c51342ba3c4444907b78f56fac41155ead0cf3b4169522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae0000000000" } 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 index f7216b0..8727a99 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.halfsigned.json @@ -221,5 +221,6 @@ ], "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" } - ] + ], + "extractedTransaction": null } 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 index 28226e9..6a3236e 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.bitcoingold.unsigned.json @@ -197,5 +197,6 @@ ], "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" } - ] + ], + "extractedTransaction": null } 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 index 7ad2079..0a6086c 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.fullsigned.json @@ -95,5 +95,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": "0100000002d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfe00004830450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101483045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6010000006d483045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b680123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" } 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 index 5ea61cc..a536163 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.halfsigned.json @@ -91,5 +91,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index abb2706..ed91507 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dash.unsigned.json @@ -79,5 +79,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index d8ca663..259a93b 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.fullsigned.json @@ -95,5 +95,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": "0100000002d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfe00004830450221008efa965c7055588939c15bc3e6336bad8b0d3ccc6804287ee5b6fb72d00bfefc02207c685a7d7145c742ce89c62798babf3f8b414feb0d60a75531f1e43e9b29e8d101483045022100bfb1edb5d009f56cdd188c5654cddc8dddcc8f45d03c8a73c208e810f971b1e0022004e8a330bcd62c7e4d34871de3414151fa9c62be678453f35f14dadb82d35dea014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff279d3bd7939d26306115a8058d4a88d10515a0b675fc8a5f89311c2e8629fec6010000006d483045022100bb1445d743db3c846b926dc47ae3c18abc8010f7ba55f385c7cd7094b6d2bdb2022019fab8b02d4a0100ac2ed9a6f3e56912faa4b660d52618f93ccd2a287a6e5b680123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" } 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 index dd78082..33342ca 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.halfsigned.json @@ -91,5 +91,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index bed3070..8e3d61b 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.dogecoin.unsigned.json @@ -79,5 +79,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index 286eccf..3bbcb84 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.fullsigned.json @@ -95,5 +95,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": "02000000025c797b259b82722b84ec062ace7606c0092d4c6d711eb4b77567be13b470c6af00000000fdfe000048304502210087631f54bea97ba6fb135afc0e6aa5000f405f8c7f4075fb44624fcb100110f102203f3c26a632eef131b32c235537e8d08f0044b2ecfcf4763bbcee40a9ee04e10c41483045022100cc77cb1d7cc21ef86ed84521781a6359549ba5e6d736e46b48e38181e04e11ef022044803e3cd31f6f7d7bd7911ea907bd0861598e824bdcbeb5e3b03114aafb2c74414c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff7fbbaf33c9c03700f7f1dcf93a34039897656646c2428b8faa88b7f57d1d3d9f010000006d483045022100864e2eb6f32fab5f80e6b321549d0b2d2a335de655be7c734bc2f89bc1f1085a02207b748db3cf0ba9cd4ce564c81da20fa9c3e01f7976cdc05a3704004ce60e92124123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000" } 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 index ff2ae87..fe6edf2 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.halfsigned.json @@ -91,5 +91,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index 7daf7ba..b63209e 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.ecash.unsigned.json @@ -79,5 +79,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index c28ba6a..3011a0e 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.fullsigned.json @@ -233,5 +233,6 @@ ], "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" } - ] + ], + "extractedTransaction": "01000000000104d99efae199fc4d54e5825a8e3368a395e9eb329915cfb5d88dc311507d18483600000000fdfd0000483045022100e9f193db9830d516af5598045b9404d096e89c7a192f77ad220fa3a487308b0002205dea2fd75f700b3beec6e77a4bdd21a6ac9b9a355c1ea958a6864305e203d9fe01473044022025cd881a29cca29960c0361d18f741681bdb0d8c0f55c1f8d78daf03757ce8af02205d93f55191a736ab373b05cfeb099440234d99a2720188c3ac13150cb6e0ac4c014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffff1ec9729a1b25373a30f0fe6e0879b31136a54f2f8c98618c46862748a08c5e78010000002322002046d4800a1393330196085399ed4a1700b4c2fd38c52188c3a3a91f721f3c9600ffffffffbb0dfbeba59bba69e3ce07a54346f804c543fa46d828ed539d11231adbaa8b7b0200000000ffffffff4f20e1daf9158414abb3891bb7ae087d14f17b59e5c167d9e53365a1337fb579030000006d483045022100e5bcb83e8f66f30bf6ea886184ef607557cb166ca1d3de3253c293e1865c775202205577e3e2acd1fd7ea93b1e624169db1d52e97030680bc062095cf7ac667d4eca0123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff03840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87840300000000000017a914054127121d37f32266cd967c485404976a67adf0878403000000000000220020ba48e3f9874463943f90192a45f1ae895b779362a7629af7ad6a9d7a835e3d4f000400483045022100a4bfba654b915a5ca895c5339ce5edab81bd67b65c805997cad9762840d3c7060220021f8ffb89ebea032cb339ecbd8494c84f955ed894963992b4f31e91e8df0a7401473044022050f1e19eaec828c7856135b98b6e1af9c600229241ec8507d50dae85ff71823902207c084363fe89081b49d929851b62fa9b9d44c70ec3931e8bb473c8d84e35b2e40169522102a585f3fab49b5ef95346d932221a221bd55ec191f15533e0f270b3582574f0352102c4f7866cfd5996bc1068a96313ca15e9ccb5e984583a07340dddae7af014605b2102234531bc9119a36a7946e95aeb74915dd087c7b44f517b8eeeb73f89a0ff1a9953ae040047304402204db56669993c9644b84a54892958b7c15d4897829d19a673f7a337bdfab834c202203c6aca862b8ab1a2a3b570689836f09a191b97bcee9ddd8e19271e7a53f6a80401473044022021df7a10ad4a6838c6553897cd6779fa232e89a600058f946a0c4e86a871bb21022049919108dcbda4b4318fb87d5b1c5f929bd9a82f9ef49fadd7b3445a9cf320700169522103519e572ab468560d1f8d0f87699d098308e166905f5dcae4390f060faa8f1ce32103a05bc26391221d685e18daaff36a1e95c34f99451253c16cd42650db278a79112102e80a08885c353676b820cdc290e6d81a0ac95a03e8abbf4bb7aeebfb70feb41853ae0000000000" } 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 index 0f55f83..cd94d64 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.halfsigned.json @@ -221,5 +221,6 @@ ], "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" } - ] + ], + "extractedTransaction": null } 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 index 8cbb379..dedeeaa 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.litecoin.unsigned.json @@ -197,5 +197,6 @@ ], "witnessScript": "522102d6d1140bd2c0f914cb30c992aa2fcd283f471a9281ceec9ec6c5bc448e6869002103b855a8758eda6863648445a9d3cfb95388aca174621ad98f099a1c4f9326fec7210295f7b527d2ea537a4d42830410abf4340731bf9b20e54972001933b9aa23536c53ae" } - ] + ], + "extractedTransaction": null } 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 index df2d451..1873395 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.fullsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.fullsigned.json @@ -100,5 +100,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": "0400008085202f89020107dccd08317475f5163bc429410f73dd9fcb666fc8af26b40ede0a6fd8135a00000000fdfe00004830450221009165ef9fcf15c598dda0ae03b00cc6580ba180f1cdb71a07dc1f54a8334c2e4f022013397fbf0b91e9d9ff9d167f15ae45a4e3436e149e87aafe3281eb651e77b43601483045022100f25d095fb7c5217a619eaee7d2378c6a89eaefe21a0a49161b25d970c97597e402206c2f9e6d6c2f7fc05f6d5beaffc3fd4a5a1b4d0049fd702551ef5019c7ddf69a014c69522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53aeffffffffdcc6ff967ba5f3f6cb24d62b0b603bd2bd0a799ea98a932e702e2a828c76803f010000006c473044022059ecb13a8b486269d03205924da1e1df994f8c17c7254eeeb9191327edcdc32002200941fdca39ceb065543f2d86adc98b3e7d48867332091ff920be1cc020e3d2f50123210336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b629095acffffffff01840300000000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b8700000000000000000000000000000000000000" } 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 index d054d1a..ddebc6c 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.halfsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.halfsigned.json @@ -96,5 +96,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null } 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 index 25b0203..55b3def 100644 --- a/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.unsigned.json +++ b/packages/wasm-utxo/test/fixtures/fixed-script/psbt.zcash.unsigned.json @@ -84,5 +84,6 @@ ], "redeemScript": "522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae" } - ] + ], + "extractedTransaction": null }