From 84bee2f7b06a7bd1f435aaad18fa76a15188326e Mon Sep 17 00:00:00 2001 From: Martin Habovstiak Date: Sun, 23 Mar 2025 21:00:47 +0100 Subject: [PATCH] Simplify `Witness` construction in tests The `Witness`-related tests were constructing `Witness` in over-complicated way by serializing `Vec>` and then deserializing `Witness` even though they were not supposed to test serialization but Taproot accessor methods. This was difficult to understand and maintain. This change simplifies them to just construct the `Witness` from array of `Vec`s using the recently-added constructors. Note that we already have serialization tests written separately so we're not losing meaningful coverage here. --- bitcoin/src/blockdata/witness.rs | 65 +++++++------------------------- 1 file changed, 13 insertions(+), 52 deletions(-) diff --git a/bitcoin/src/blockdata/witness.rs b/bitcoin/src/blockdata/witness.rs index fd57da387..f8e8abe5b 100644 --- a/bitcoin/src/blockdata/witness.rs +++ b/bitcoin/src/blockdata/witness.rs @@ -387,14 +387,8 @@ mod test { // annex starting with 0x50 causes the branching logic. let annex = hex!("50"); - let witness_vec = vec![tapscript.clone(), control_block.clone()]; - let witness_vec_annex = vec![tapscript.clone(), control_block, annex]; - - let witness_serialized: Vec = serialize(&witness_vec); - let witness_serialized_annex: Vec = serialize(&witness_vec_annex); - - let witness = deserialize::(&witness_serialized[..]).unwrap(); - let witness_annex = deserialize::(&witness_serialized_annex[..]).unwrap(); + let witness = Witness::from([&*tapscript, &control_block]); + let witness_annex = Witness::from([&*tapscript, &control_block, &annex]); // With or without annex, the tapscript should be returned. assert_eq!(witness.tapscript(), Some(Script::from_bytes(&tapscript[..]))); @@ -409,14 +403,8 @@ mod test { // annex starting with 0x50 causes the branching logic. let annex = hex!("50"); - let witness_vec = vec![tapscript.clone(), control_block.clone()]; - let witness_vec_annex = vec![tapscript.clone(), control_block, annex]; - - let witness_serialized: Vec = serialize(&witness_vec); - let witness_serialized_annex: Vec = serialize(&witness_vec_annex); - - let witness = deserialize::(&witness_serialized[..]).unwrap(); - let witness_annex = deserialize::(&witness_serialized_annex[..]).unwrap(); + let witness = Witness::from([&*tapscript, &control_block]); + let witness_annex = Witness::from([&*tapscript, &control_block, &annex]); let expected_leaf_script = LeafScript { version: LeafVersion::TapScript, script: Script::from_bytes(&tapscript) }; @@ -432,14 +420,8 @@ mod test { // annex starting with 0x50 causes the branching logic. let annex = hex!("50"); - let witness_vec = vec![signature.clone()]; - let witness_vec_annex = vec![signature.clone(), annex]; - - let witness_serialized: Vec = serialize(&witness_vec); - let witness_serialized_annex: Vec = serialize(&witness_vec_annex); - - let witness = deserialize::(&witness_serialized[..]).unwrap(); - let witness_annex = deserialize::(&witness_serialized_annex[..]).unwrap(); + let witness = Witness::from([&*signature]); + let witness_annex = Witness::from([&*signature, &annex]); // With or without annex, no tapscript should be returned. assert_eq!(witness.tapscript(), None); @@ -454,18 +436,9 @@ mod test { let annex = hex!("50"); let signature = vec![0xff; 64]; - let witness_vec = vec![tapscript.clone(), control_block.clone()]; - let witness_vec_annex = vec![tapscript.clone(), control_block.clone(), annex.clone()]; - let witness_vec_key_spend_annex = vec![signature, annex]; - - let witness_serialized: Vec = serialize(&witness_vec); - let witness_serialized_annex: Vec = serialize(&witness_vec_annex); - let witness_serialized_key_spend_annex: Vec = serialize(&witness_vec_key_spend_annex); - - let witness = deserialize::(&witness_serialized[..]).unwrap(); - let witness_annex = deserialize::(&witness_serialized_annex[..]).unwrap(); - let witness_key_spend_annex = - deserialize::(&witness_serialized_key_spend_annex[..]).unwrap(); + let witness = Witness::from([&*tapscript, &control_block]); + let witness_annex = Witness::from([&*tapscript, &control_block, &annex]); + let witness_key_spend_annex = Witness::from([&*signature, &annex]); // With or without annex, the tapscript should be returned. assert_eq!(witness.taproot_control_block(), Some(&control_block[..])); @@ -480,14 +453,8 @@ mod test { // annex starting with 0x50 causes the branching logic. let annex = hex!("50"); - let witness_vec = vec![tapscript.clone(), control_block.clone()]; - let witness_vec_annex = vec![tapscript.clone(), control_block.clone(), annex.clone()]; - - let witness_serialized: Vec = serialize(&witness_vec); - let witness_serialized_annex: Vec = serialize(&witness_vec_annex); - - let witness = deserialize::(&witness_serialized[..]).unwrap(); - let witness_annex = deserialize::(&witness_serialized_annex[..]).unwrap(); + let witness = Witness::from([&*tapscript, &control_block]); + let witness_annex = Witness::from([&*tapscript, &control_block, &annex]); // With or without annex, the tapscript should be returned. assert_eq!(witness.taproot_annex(), None); @@ -498,14 +465,8 @@ mod test { // annex starting with 0x50 causes the branching logic. let annex = hex!("50"); - let witness_vec = vec![signature.clone()]; - let witness_vec_annex = vec![signature.clone(), annex.clone()]; - - let witness_serialized: Vec = serialize(&witness_vec); - let witness_serialized_annex: Vec = serialize(&witness_vec_annex); - - let witness = deserialize::(&witness_serialized[..]).unwrap(); - let witness_annex = deserialize::(&witness_serialized_annex[..]).unwrap(); + let witness = Witness::from([&*signature]); + let witness_annex = Witness::from([&*signature, &annex]); // With or without annex, the tapscript should be returned. assert_eq!(witness.taproot_annex(), None);