@@ -13,7 +13,7 @@ use bitcoin::util::{psbt, sighash};
13
13
use bitcoin:: { self , Amount , OutPoint , SchnorrSig , Script , Transaction , TxIn , TxOut , Txid } ;
14
14
use bitcoincore_rpc:: { json, Client , RpcApi } ;
15
15
use miniscript:: miniscript:: iter;
16
- use miniscript:: psbt:: PbstOps ;
16
+ use miniscript:: psbt:: PsbtExt ;
17
17
use miniscript:: { Descriptor , DescriptorTrait , Miniscript , ToPublicKey } ;
18
18
use miniscript:: { MiniscriptKey , ScriptContext } ;
19
19
use std:: collections:: BTreeMap ;
@@ -40,17 +40,17 @@ fn get_vout(cl: &Client, txid: Txid, value: u64, spk: Script) -> (OutPoint, TxOu
40
40
unreachable ! ( "Only call get vout on functions which have the expected outpoint" ) ;
41
41
}
42
42
43
- pub fn test_desc_satisfy ( cl : & Client , testdata : & TestData , desc : String ) -> Witness {
43
+ pub fn test_desc_satisfy ( cl : & Client , testdata : & TestData , desc : & str ) -> Witness {
44
44
let secp = secp256k1:: Secp256k1 :: new ( ) ;
45
45
let sks = & testdata. secretdata . sks ;
46
46
let xonly_keypairs = & testdata. secretdata . x_only_keypairs ;
47
47
let pks = & testdata. pubdata . pks ;
48
48
let x_only_pks = & testdata. pubdata . x_only_pks ;
49
49
// Generate some blocks
50
50
let blocks = cl
51
- . generate_to_address ( 500 , & cl. get_new_address ( None , None ) . unwrap ( ) )
51
+ . generate_to_address ( 1 , & cl. get_new_address ( None , None ) . unwrap ( ) )
52
52
. unwrap ( ) ;
53
- assert_eq ! ( blocks. len( ) , 500 ) ;
53
+ assert_eq ! ( blocks. len( ) , 1 ) ;
54
54
55
55
let desc = test_util:: parse_test_desc ( & desc, & testdata. pubdata ) ;
56
56
let derived_desc = desc. derived_descriptor ( & secp, 0 ) . unwrap ( ) ;
@@ -69,9 +69,9 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
69
69
. unwrap ( ) ;
70
70
// Wait for the funds to mature.
71
71
let blocks = cl
72
- . generate_to_address ( 50 , & cl. get_new_address ( None , None ) . unwrap ( ) )
72
+ . generate_to_address ( 2 , & cl. get_new_address ( None , None ) . unwrap ( ) )
73
73
. unwrap ( ) ;
74
- assert_eq ! ( blocks. len( ) , 50 ) ;
74
+ assert_eq ! ( blocks. len( ) , 2 ) ;
75
75
// Create a PSBT for each transaction.
76
76
// Spend one input and spend one output for simplicity.
77
77
let mut psbt = Psbt {
@@ -95,8 +95,8 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
95
95
txin. previous_output = outpoint;
96
96
// set the sequence to a non-final number for the locktime transactions to be
97
97
// processed correctly.
98
- // We waited 50 blocks, keep 49 for safety
99
- txin. sequence = 49 ;
98
+ // We waited 2 blocks, keep 1 for safety
99
+ txin. sequence = 1 ;
100
100
psbt. unsigned_tx . input . push ( txin) ;
101
101
// Get a new script pubkey from the node so that
102
102
// the node wallet tracks the receiving transaction
@@ -112,7 +112,7 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
112
112
input. witness_utxo = Some ( witness_utxo. clone ( ) ) ;
113
113
psbt. inputs . push ( input) ;
114
114
psbt. outputs . push ( psbt:: Output :: default ( ) ) ;
115
- psbt. update_desc ( 0 , & desc, 0 .. 0 ) . unwrap ( ) ;
115
+ psbt. update_desc ( 0 , & desc, None ) . unwrap ( ) ;
116
116
117
117
// --------------------------------------------
118
118
// Sign the transactions with all keys
@@ -134,7 +134,9 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
134
134
135
135
if let Some ( mut internal_keypair) = internal_keypair {
136
136
// ---------------------- Tr key spend --------------------
137
- internal_keypair. tweak_add_assign ( & secp, tr. spend_info ( ) . tap_tweak ( ) . as_ref ( ) ) ;
137
+ internal_keypair
138
+ . tweak_add_assign ( & secp, tr. spend_info ( ) . tap_tweak ( ) . as_ref ( ) )
139
+ . expect ( "Tweaking failed" ) ;
138
140
let sighash_msg = sighash_cache
139
141
. taproot_key_spend_signature_hash ( 0 , & prevouts, hash_ty)
140
142
. unwrap ( ) ;
@@ -218,7 +220,10 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
218
220
} ,
219
221
Descriptor :: Tr ( _tr) => unreachable ! ( "Tr checked earlier" ) ,
220
222
} ;
221
- let msg = psbt. sighash_msg ( 0 , & mut sighash_cache, None ) . unwrap ( ) . to_secp_msg ( ) ;
223
+ let msg = psbt
224
+ . sighash_msg ( 0 , & mut sighash_cache, None )
225
+ . unwrap ( )
226
+ . to_secp_msg ( ) ;
222
227
223
228
// Fixme: Take a parameter
224
229
let hash_ty = bitcoin:: EcdsaSigHashType :: All ;
@@ -227,6 +232,7 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
227
232
for sk in sks_reqd {
228
233
let sig = secp. sign_ecdsa ( & msg, & sk) ;
229
234
let pk = pks[ sks. iter ( ) . position ( |& x| x == sk) . unwrap ( ) ] ;
235
+ assert ! ( secp. verify_ecdsa( & msg, & sig, & pk. inner) . is_ok( ) ) ;
230
236
psbt. inputs [ 0 ] . partial_sigs . insert (
231
237
pk. inner ,
232
238
bitcoin:: EcdsaSig {
@@ -257,9 +263,12 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
257
263
println ! ( "Testing descriptor: {}" , desc) ;
258
264
// Finalize the transaction using psbt
259
265
// Let miniscript do it's magic!
260
- if let Err ( e) = psbt. finalize ( & secp) {
266
+ if let Err ( e) = psbt. finalize_mut ( & secp) {
261
267
// All miniscripts should satisfy
262
- panic ! ( "Could not satisfy non-malleably: error{} desc:{} " , e, desc) ;
268
+ panic ! (
269
+ "Could not satisfy non-malleably: error{} desc:{} " ,
270
+ e[ 0 ] , desc
271
+ ) ;
263
272
}
264
273
let tx = psbt. extract ( & secp) . expect ( "Extraction error" ) ;
265
274
@@ -272,7 +281,7 @@ pub fn test_desc_satisfy(cl: &Client, testdata: &TestData, desc: String) -> Witn
272
281
273
282
// Finally mine the blocks and await confirmations
274
283
let _blocks = cl
275
- . generate_to_address ( 10 , & cl. get_new_address ( None , None ) . unwrap ( ) )
284
+ . generate_to_address ( 1 , & cl. get_new_address ( None , None ) . unwrap ( ) )
276
285
. unwrap ( ) ;
277
286
// Get the required transactions from the node mined in the blocks.
278
287
// Check whether the transaction is mined in blocks
@@ -310,8 +319,6 @@ fn find_sks_ms<Ctx: ScriptContext>(
310
319
fn find_sk_single_key ( pk : bitcoin:: PublicKey , testdata : & TestData ) -> Vec < secp256k1:: SecretKey > {
311
320
let sks = & testdata. secretdata . sks ;
312
321
let pks = & testdata. pubdata . pks ;
313
- let i = pks
314
- . iter ( )
315
- . position ( |& x| x. to_public_key ( ) == pk) ;
322
+ let i = pks. iter ( ) . position ( |& x| x. to_public_key ( ) == pk) ;
316
323
i. map ( |idx| vec ! [ sks[ idx] ] ) . unwrap_or ( Vec :: new ( ) )
317
324
}
0 commit comments