@@ -29,6 +29,7 @@ use std::{
29
29
str:: { self , FromStr } ,
30
30
} ;
31
31
32
+ use bitcoin:: blockdata:: witness:: Witness ;
32
33
use bitcoin:: secp256k1;
33
34
use bitcoin:: { self , Script } ;
34
35
@@ -140,7 +141,7 @@ pub trait DescriptorTrait<Pk: MiniscriptKey> {
140
141
{
141
142
// easy default implementation
142
143
let ( witness, script_sig) = self . get_satisfaction ( satisfier) ?;
143
- txin. witness = witness;
144
+ txin. witness = Witness :: from_vec ( witness) ;
144
145
txin. script_sig = script_sig;
145
146
Ok ( ( ) )
146
147
}
@@ -647,7 +648,7 @@ serde_string_impl_pk!(Descriptor, "a script descriptor");
647
648
#[ cfg( test) ]
648
649
mod tests {
649
650
use super :: checksum:: desc_checksum;
650
- use super :: DescriptorTrait ;
651
+ use super :: * ;
651
652
use bitcoin:: blockdata:: opcodes:: all:: { OP_CLTV , OP_CSV } ;
652
653
use bitcoin:: blockdata:: script:: Instruction ;
653
654
use bitcoin:: blockdata:: { opcodes, script} ;
@@ -939,19 +940,19 @@ mod tests {
939
940
} ;
940
941
let msg = secp256k1:: Message :: from_slice ( & b"michael was a message, amusingly" [ ..] )
941
942
. expect ( "32 bytes" ) ;
942
- let sig = secp. sign ( & msg, & sk) ;
943
+ let sig = secp. sign_ecdsa ( & msg, & sk) ;
943
944
let mut sigser = sig. serialize_der ( ) . to_vec ( ) ;
944
945
sigser. push ( 0x01 ) ; // sighash_all
945
946
946
947
struct SimpleSat {
947
- sig : secp256k1:: Signature ,
948
+ sig : secp256k1:: ecdsa :: Signature ,
948
949
pk : bitcoin:: PublicKey ,
949
950
}
950
951
951
952
impl Satisfier < bitcoin:: PublicKey > for SimpleSat {
952
953
fn lookup_sig ( & self , pk : & bitcoin:: PublicKey ) -> Option < BitcoinSig > {
953
954
if * pk == self . pk {
954
- Some ( ( self . sig , bitcoin:: SigHashType :: All ) )
955
+ Some ( ( self . sig , bitcoin:: EcdsaSigHashType :: All ) )
955
956
} else {
956
957
None
957
958
}
@@ -965,7 +966,7 @@ mod tests {
965
966
previous_output : bitcoin:: OutPoint :: default ( ) ,
966
967
script_sig : bitcoin:: Script :: new ( ) ,
967
968
sequence : 100 ,
968
- witness : vec ! [ ] ,
969
+ witness : Witness :: default ( ) ,
969
970
} ;
970
971
let bare = Descriptor :: new_bare ( ms. clone ( ) ) . unwrap ( ) ;
971
972
@@ -976,7 +977,7 @@ mod tests {
976
977
previous_output: bitcoin:: OutPoint :: default ( ) ,
977
978
script_sig: script:: Builder :: new( ) . push_slice( & sigser[ ..] ) . into_script( ) ,
978
979
sequence: 100 ,
979
- witness: vec! [ ] ,
980
+ witness: Witness :: default ( ) ,
980
981
}
981
982
) ;
982
983
assert_eq ! ( bare. unsigned_script_sig( ) , bitcoin:: Script :: new( ) ) ;
@@ -992,7 +993,7 @@ mod tests {
992
993
. push_key( & pk)
993
994
. into_script( ) ,
994
995
sequence: 100 ,
995
- witness: vec! [ ] ,
996
+ witness: Witness :: default ( ) ,
996
997
}
997
998
) ;
998
999
assert_eq ! ( pkh. unsigned_script_sig( ) , bitcoin:: Script :: new( ) ) ;
@@ -1005,7 +1006,7 @@ mod tests {
1005
1006
previous_output: bitcoin:: OutPoint :: default ( ) ,
1006
1007
script_sig: bitcoin:: Script :: new( ) ,
1007
1008
sequence: 100 ,
1008
- witness: vec![ sigser. clone( ) , pk. to_bytes( ) , ] ,
1009
+ witness: Witness :: from_vec ( vec![ sigser. clone( ) , pk. to_bytes( ) , ] ) ,
1009
1010
}
1010
1011
) ;
1011
1012
assert_eq ! ( wpkh. unsigned_script_sig( ) , bitcoin:: Script :: new( ) ) ;
@@ -1026,7 +1027,7 @@ mod tests {
1026
1027
. push_slice( & redeem_script[ ..] )
1027
1028
. into_script( ) ,
1028
1029
sequence: 100 ,
1029
- witness: vec![ sigser. clone( ) , pk. to_bytes( ) , ] ,
1030
+ witness: Witness :: from_vec ( vec![ sigser. clone( ) , pk. to_bytes( ) , ] ) ,
1030
1031
}
1031
1032
) ;
1032
1033
assert_eq ! (
@@ -1048,7 +1049,7 @@ mod tests {
1048
1049
. push_slice( & ms. encode( ) [ ..] )
1049
1050
. into_script( ) ,
1050
1051
sequence: 100 ,
1051
- witness: vec! [ ] ,
1052
+ witness: Witness :: default ( ) ,
1052
1053
}
1053
1054
) ;
1054
1055
assert_eq ! ( sh. unsigned_script_sig( ) , bitcoin:: Script :: new( ) ) ;
@@ -1063,7 +1064,7 @@ mod tests {
1063
1064
previous_output: bitcoin:: OutPoint :: default ( ) ,
1064
1065
script_sig: bitcoin:: Script :: new( ) ,
1065
1066
sequence: 100 ,
1066
- witness: vec![ sigser. clone( ) , ms. encode( ) . into_bytes( ) , ] ,
1067
+ witness: Witness :: from_vec ( vec![ sigser. clone( ) , ms. encode( ) . into_bytes( ) , ] ) ,
1067
1068
}
1068
1069
) ;
1069
1070
assert_eq ! ( wsh. unsigned_script_sig( ) , bitcoin:: Script :: new( ) ) ;
@@ -1078,7 +1079,7 @@ mod tests {
1078
1079
. push_slice( & ms. encode( ) . to_v0_p2wsh( ) [ ..] )
1079
1080
. into_script( ) ,
1080
1081
sequence: 100 ,
1081
- witness: vec![ sigser. clone( ) , ms. encode( ) . into_bytes( ) , ] ,
1082
+ witness: Witness :: from_vec ( vec![ sigser. clone( ) , ms. encode( ) . into_bytes( ) , ] ) ,
1082
1083
}
1083
1084
) ;
1084
1085
assert_eq ! (
@@ -1136,13 +1137,13 @@ mod tests {
1136
1137
"02937402303919b3a2ee5edd5009f4236f069bf75667b8e6ecf8e5464e20116a0e" ,
1137
1138
)
1138
1139
. unwrap ( ) ;
1139
- let sig_a = secp256k1:: Signature :: from_str ( "3045022100a7acc3719e9559a59d60d7b2837f9842df30e7edcd754e63227e6168cec72c5d022066c2feba4671c3d99ea75d9976b4da6c86968dbf3bab47b1061e7a1966b1778c" ) . unwrap ( ) ;
1140
+ let sig_a = secp256k1:: ecdsa :: Signature :: from_str ( "3045022100a7acc3719e9559a59d60d7b2837f9842df30e7edcd754e63227e6168cec72c5d022066c2feba4671c3d99ea75d9976b4da6c86968dbf3bab47b1061e7a1966b1778c" ) . unwrap ( ) ;
1140
1141
1141
1142
let b = bitcoin:: PublicKey :: from_str (
1142
1143
"02eb64639a17f7334bb5a1a3aad857d6fec65faef439db3de72f85c88bc2906ad3" ,
1143
1144
)
1144
1145
. unwrap ( ) ;
1145
- let sig_b = secp256k1:: Signature :: from_str ( "3044022075b7b65a7e6cd386132c5883c9db15f9a849a0f32bc680e9986398879a57c276022056d94d12255a4424f51c700ac75122cb354895c9f2f88f0cbb47ba05c9c589ba" ) . unwrap ( ) ;
1146
+ let sig_b = secp256k1:: ecdsa :: Signature :: from_str ( "3044022075b7b65a7e6cd386132c5883c9db15f9a849a0f32bc680e9986398879a57c276022056d94d12255a4424f51c700ac75122cb354895c9f2f88f0cbb47ba05c9c589ba" ) . unwrap ( ) ;
1146
1147
1147
1148
let descriptor = Descriptor :: < bitcoin:: PublicKey > :: from_str ( & format ! (
1148
1149
"wsh(and_v(v:pk({A}),pk({B})))" ,
@@ -1155,13 +1156,13 @@ mod tests {
1155
1156
previous_output : bitcoin:: OutPoint :: default ( ) ,
1156
1157
script_sig : bitcoin:: Script :: new ( ) ,
1157
1158
sequence : 0 ,
1158
- witness : vec ! [ ] ,
1159
+ witness : Witness :: default ( ) ,
1159
1160
} ;
1160
1161
let satisfier = {
1161
1162
let mut satisfier = HashMap :: with_capacity ( 2 ) ;
1162
1163
1163
- satisfier. insert ( a, ( sig_a. clone ( ) , :: bitcoin:: SigHashType :: All ) ) ;
1164
- satisfier. insert ( b, ( sig_b. clone ( ) , :: bitcoin:: SigHashType :: All ) ) ;
1164
+ satisfier. insert ( a, ( sig_a. clone ( ) , :: bitcoin:: EcdsaSigHashType :: All ) ) ;
1165
+ satisfier. insert ( b, ( sig_b. clone ( ) , :: bitcoin:: EcdsaSigHashType :: All ) ) ;
1165
1166
1166
1167
satisfier
1167
1168
} ;
@@ -1170,11 +1171,12 @@ mod tests {
1170
1171
descriptor. satisfy ( & mut txin, & satisfier) . unwrap ( ) ;
1171
1172
1172
1173
// assert
1173
- let witness0 = & txin. witness [ 0 ] ;
1174
- let witness1 = & txin. witness [ 1 ] ;
1174
+ let wit = txin. witness . to_vec ( ) ;
1175
+ let witness0 = & wit[ 0 ] ;
1176
+ let witness1 = & wit[ 1 ] ;
1175
1177
1176
- let sig0 = secp256k1:: Signature :: from_der ( & witness0[ ..witness0. len ( ) - 1 ] ) . unwrap ( ) ;
1177
- let sig1 = secp256k1:: Signature :: from_der ( & witness1[ ..witness1. len ( ) - 1 ] ) . unwrap ( ) ;
1178
+ let sig0 = secp256k1:: ecdsa :: Signature :: from_der ( & witness0[ ..witness0. len ( ) - 1 ] ) . unwrap ( ) ;
1179
+ let sig1 = secp256k1:: ecdsa :: Signature :: from_der ( & witness1[ ..witness1. len ( ) - 1 ] ) . unwrap ( ) ;
1178
1180
1179
1181
// why are we asserting this way?
1180
1182
// The witness stack is evaluated from top to bottom. Given an `and` instruction, the left arm of the and is going to evaluate first,
@@ -1351,12 +1353,18 @@ mod tests {
1351
1353
1352
1354
// Same address
1353
1355
let addr_one = desc_one
1354
- . translate_pk2 ( |xpk| xpk. derive_public_key ( & secp_ctx) )
1356
+ . translate_pk2 ( |xpk| {
1357
+ xpk. derive_public_key ( & secp_ctx)
1358
+ . map ( bitcoin:: PublicKey :: new)
1359
+ } )
1355
1360
. unwrap ( )
1356
1361
. address ( bitcoin:: Network :: Bitcoin )
1357
1362
. unwrap ( ) ;
1358
1363
let addr_two = desc_two
1359
- . translate_pk2 ( |xpk| xpk. derive_public_key ( & secp_ctx) )
1364
+ . translate_pk2 ( |xpk| {
1365
+ xpk. derive_public_key ( & secp_ctx)
1366
+ . map ( bitcoin:: PublicKey :: new)
1367
+ } )
1360
1368
. unwrap ( )
1361
1369
. address ( bitcoin:: Network :: Bitcoin )
1362
1370
. unwrap ( ) ;
0 commit comments