From 1ed3fc9270c6e46f42f447bf1c63cfa64dafa5e8 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Wed, 13 Nov 2024 10:53:03 +1100 Subject: [PATCH] Add unit test for tapscript function Add a unit test that verifies we correctly remove the annex when getting the tapscript from the witness stack. Unit test written by Casey, pulled out of #3599. Co-developed-by: Casey Rodarmor --- bitcoin/src/blockdata/witness.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/bitcoin/src/blockdata/witness.rs b/bitcoin/src/blockdata/witness.rs index e0a8d298a..318baaf50 100644 --- a/bitcoin/src/blockdata/witness.rs +++ b/bitcoin/src/blockdata/witness.rs @@ -306,6 +306,26 @@ mod test { assert_eq!(witness_annex.tapscript(), Some(Script::from_bytes(&tapscript[..]))); } + #[test] + fn test_get_tapscript_from_keypath() { + let signature = hex!("deadbeef"); + // 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(); + + // With or without annex, no tapscript should be returned. + assert_eq!(witness.tapscript(), None); + assert_eq!(witness_annex.tapscript(), None); + } + #[test] fn test_get_control_block() { let tapscript = hex!("deadbeef");