@@ -19,9 +19,8 @@ use bitcoin::{
19
19
use bitcoind:: bitcoincore_rpc:: { json, Client , RpcApi } ;
20
20
use miniscript:: miniscript:: iter;
21
21
use miniscript:: psbt:: { PsbtExt , PsbtInputExt } ;
22
- use miniscript:: { Descriptor , Error , Miniscript , MiniscriptKey , ScriptContext , ToPublicKey } ;
22
+ use miniscript:: { Descriptor , Miniscript , MiniscriptKey , ScriptContext , ToPublicKey } ;
23
23
mod setup;
24
- // use crate::test_util::{self, TestData};
25
24
26
25
use rand:: RngCore ;
27
26
use setup:: test_util:: { self , TestData } ;
@@ -51,6 +50,11 @@ fn get_vout(cl: &Client, txid: Txid, value: u64, spk: Script) -> (OutPoint, TxOu
51
50
pub enum DescError {
52
51
/// PSBT was not able to finalize
53
52
PsbtFinalizeError ,
53
+ /// Problem with address computation
54
+ AddressComputationError ,
55
+ /// Error while parsing the descriptor
56
+ DescParseError ,
57
+ /// Invalid descriptor
54
58
InvalidDescriptor ,
55
59
}
56
60
@@ -59,6 +63,8 @@ impl fmt::Display for DescError {
59
63
match * self {
60
64
DescError :: PsbtFinalizeError => f. write_str ( "PSBT was not able to finalize" ) ,
61
65
DescError :: InvalidDescriptor => f. write_str ( "Invalid descriptor" ) ,
66
+ DescError :: AddressComputationError => f. write_str ( "Problem with address computation" ) ,
67
+ DescError :: DescParseError => f. write_str ( "Not able to parse the descriptor" ) ,
62
68
}
63
69
}
64
70
}
@@ -81,29 +87,16 @@ pub fn test_desc_satisfy(
81
87
. unwrap ( ) ;
82
88
assert_eq ! ( blocks. len( ) , 1 ) ;
83
89
84
- let mut desc;
85
- let desc_res = test_util:: parse_test_desc ( & descriptor, & testdata. pubdata ) ;
86
- match desc_res {
87
- Ok ( temp_desc) => {
88
- desc = temp_desc;
89
- }
90
- Err ( _) => {
91
- return Err ( DescError :: InvalidDescriptor ) ;
92
- }
93
- }
90
+ let desc = test_util:: parse_test_desc ( & descriptor, & testdata. pubdata ) ;
91
+ let desc = desc. map_err ( |_x| DescError :: DescParseError ) ?;
92
+
94
93
let derived_desc = desc. derived_descriptor ( & secp, 0 ) . unwrap ( ) ;
94
+ let desc_address = derived_desc. address ( bitcoin:: Network :: Regtest ) ;
95
+ let desc_address = desc_address. map_err ( |_x| DescError :: AddressComputationError ) ?;
96
+
95
97
// Next send some btc to each address corresponding to the miniscript
96
- let mut rest;
97
- match derived_desc. address ( bitcoin:: Network :: Regtest ) {
98
- Ok ( addr) => {
99
- rest = addr;
100
- }
101
- Err ( _) => {
102
- return Err ( DescError :: InvalidDescriptor ) ;
103
- }
104
- }
105
98
let txid = cl
106
- . send_to_address ( & rest , btc ( 1 ) , None , None , None , None , None , None )
99
+ . send_to_address ( & desc_address , btc ( 1 ) , None , None , None , None , None , None )
107
100
. unwrap ( ) ;
108
101
// Wait for the funds to mature.
109
102
let blocks = cl
@@ -308,7 +301,7 @@ pub fn test_desc_satisfy(
308
301
println ! ( "Testing descriptor: {}" , desc) ;
309
302
// Finalize the transaction using psbt
310
303
// Let miniscript do it's magic!
311
- if let Err ( e ) = psbt. finalize_mut ( & secp) {
304
+ if let Err ( _ ) = psbt. finalize_mut ( & secp) {
312
305
return Err ( DescError :: PsbtFinalizeError ) ;
313
306
}
314
307
let tx = psbt. extract ( & secp) . expect ( "Extraction error" ) ;
@@ -398,35 +391,66 @@ fn test_descs(cl: &Client, testdata: &TestData) {
398
391
assert ! ( wit. len( ) == 1 ) ; // control block, script and signature
399
392
400
393
// Test 6: Test the new multi_a opcodes
401
- test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(1,X2,X3!,X4!,X5!)})" ) ;
402
- test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(2,X2,X3,X4!,X5!)})" ) ;
403
- test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(3,X2,X3,X4,X5!)})" ) ;
404
- test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(4,X2,X3,X4,X5)})" ) ;
394
+ test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(1,X2,X3!,X4!,X5!)})" ) . unwrap ( ) ;
395
+ test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(2,X2,X3,X4!,X5!)})" ) . unwrap ( ) ;
396
+ test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(3,X2,X3,X4,X5!)})" ) . unwrap ( ) ;
397
+ test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(4,X2,X3,X4,X5)})" ) . unwrap ( ) ;
405
398
406
399
// Test 7: Test script tree of depth 127 is valid, only X128 is known
407
- test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),{pk(X2!),{pk(X3!),{pk(X4!),{pk(X5!),{pk(X6!),{pk(X7!),{pk(X8!),{pk(X9!),{pk(X10!),{pk(X11!),{pk(X12!),{pk(X13!),{pk(X14!),{pk(X15!),{pk(X16!),{pk(X17!),{pk(X18!),{pk(X19!),{pk(X20!),{pk(X21!),{pk(X22!),{pk(X23!),{pk(X24!),{pk(X25!),{pk(X26!),{pk(X27!),{pk(X28!),{pk(X29!),{pk(X30!),{pk(X31!),{pk(X32!),{pk(X33!),{pk(X34!),{pk(X35!),{pk(X36!),{pk(X37!),{pk(X38!),{pk(X39!),{pk(X40!),{pk(X41!),{pk(X42!),{pk(X43!),{pk(X44!),{pk(X45!),{pk(X46!),{pk(X47!),{pk(X48!),{pk(X49!),{pk(X50!),{pk(X51!),{pk(X52!),{pk(X53!),{pk(X54!),{pk(X55!),{pk(X56!),{pk(X57!),{pk(X58!),{pk(X59!),{pk(X60!),{pk(X61!),{pk(X62!),{pk(X63!),{pk(X64!),{pk(X65!),{pk(X66!),{pk(X67!),{pk(X68!),{pk(X69!),{pk(X70!),{pk(X71!),{pk(X72!),{pk(X73!),{pk(X74!),{pk(X75!),{pk(X76!),{pk(X77!),{pk(X78!),{pk(X79!),{pk(X80!),{pk(X81!),{pk(X82!),{pk(X83!),{pk(X84!),{pk(X85!),{pk(X86!),{pk(X87!),{pk(X88!),{pk(X89!),{pk(X90!),{pk(X91!),{pk(X92!),{pk(X93!),{pk(X94!),{pk(X95!),{pk(X96!),{pk(X97!),{pk(X98!),{pk(X99!),{pk(X100!),{pk(X101!),{pk(X102!),{pk(X103!),{pk(X104!),{pk(X105!),{pk(X106!),{pk(X107!),{pk(X108!),{pk(X109!),{pk(X110!),{pk(X111!),{pk(X112!),{pk(X113!),{pk(X114!),{pk(X115!),{pk(X116!),{pk(X117!),{pk(X118!),{pk(X119!),{pk(X120!),{pk(X121!),{pk(X122!),{pk(X123!),{pk(X124!),{pk(X125!),{pk(X126!),{pk(X127!),pk(X128)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})" ) ;
400
+ test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),{pk(X2!),{pk(X3!),{pk(X4!),{pk(X5!),{pk(X6!),{pk(X7!),{pk(X8!),{pk(X9!),{pk(X10!),{pk(X11!),{pk(X12!),{pk(X13!),{pk(X14!),{pk(X15!),{pk(X16!),{pk(X17!),{pk(X18!),{pk(X19!),{pk(X20!),{pk(X21!),{pk(X22!),{pk(X23!),{pk(X24!),{pk(X25!),{pk(X26!),{pk(X27!),{pk(X28!),{pk(X29!),{pk(X30!),{pk(X31!),{pk(X32!),{pk(X33!),{pk(X34!),{pk(X35!),{pk(X36!),{pk(X37!),{pk(X38!),{pk(X39!),{pk(X40!),{pk(X41!),{pk(X42!),{pk(X43!),{pk(X44!),{pk(X45!),{pk(X46!),{pk(X47!),{pk(X48!),{pk(X49!),{pk(X50!),{pk(X51!),{pk(X52!),{pk(X53!),{pk(X54!),{pk(X55!),{pk(X56!),{pk(X57!),{pk(X58!),{pk(X59!),{pk(X60!),{pk(X61!),{pk(X62!),{pk(X63!),{pk(X64!),{pk(X65!),{pk(X66!),{pk(X67!),{pk(X68!),{pk(X69!),{pk(X70!),{pk(X71!),{pk(X72!),{pk(X73!),{pk(X74!),{pk(X75!),{pk(X76!),{pk(X77!),{pk(X78!),{pk(X79!),{pk(X80!),{pk(X81!),{pk(X82!),{pk(X83!),{pk(X84!),{pk(X85!),{pk(X86!),{pk(X87!),{pk(X88!),{pk(X89!),{pk(X90!),{pk(X91!),{pk(X92!),{pk(X93!),{pk(X94!),{pk(X95!),{pk(X96!),{pk(X97!),{pk(X98!),{pk(X99!),{pk(X100!),{pk(X101!),{pk(X102!),{pk(X103!),{pk(X104!),{pk(X105!),{pk(X106!),{pk(X107!),{pk(X108!),{pk(X109!),{pk(X110!),{pk(X111!),{pk(X112!),{pk(X113!),{pk(X114!),{pk(X115!),{pk(X116!),{pk(X117!),{pk(X118!),{pk(X119!),{pk(X120!),{pk(X121!),{pk(X122!),{pk(X123!),{pk(X124!),{pk(X125!),{pk(X126!),{pk(X127!),pk(X128)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})" ) . unwrap ( ) ;
408
401
409
402
// Test 8: Test script tree of depth 128 is valid, only X129 is known
410
- test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),{pk(X2!),{pk(X3!),{pk(X4!),{pk(X5!),{pk(X6!),{pk(X7!),{pk(X8!),{pk(X9!),{pk(X10!),{pk(X11!),{pk(X12!),{pk(X13!),{pk(X14!),{pk(X15!),{pk(X16!),{pk(X17!),{pk(X18!),{pk(X19!),{pk(X20!),{pk(X21!),{pk(X22!),{pk(X23!),{pk(X24!),{pk(X25!),{pk(X26!),{pk(X27!),{pk(X28!),{pk(X29!),{pk(X30!),{pk(X31!),{pk(X32!),{pk(X33!),{pk(X34!),{pk(X35!),{pk(X36!),{pk(X37!),{pk(X38!),{pk(X39!),{pk(X40!),{pk(X41!),{pk(X42!),{pk(X43!),{pk(X44!),{pk(X45!),{pk(X46!),{pk(X47!),{pk(X48!),{pk(X49!),{pk(X50!),{pk(X51!),{pk(X52!),{pk(X53!),{pk(X54!),{pk(X55!),{pk(X56!),{pk(X57!),{pk(X58!),{pk(X59!),{pk(X60!),{pk(X61!),{pk(X62!),{pk(X63!),{pk(X64!),{pk(X65!),{pk(X66!),{pk(X67!),{pk(X68!),{pk(X69!),{pk(X70!),{pk(X71!),{pk(X72!),{pk(X73!),{pk(X74!),{pk(X75!),{pk(X76!),{pk(X77!),{pk(X78!),{pk(X79!),{pk(X80!),{pk(X81!),{pk(X82!),{pk(X83!),{pk(X84!),{pk(X85!),{pk(X86!),{pk(X87!),{pk(X88!),{pk(X89!),{pk(X90!),{pk(X91!),{pk(X92!),{pk(X93!),{pk(X94!),{pk(X95!),{pk(X96!),{pk(X97!),{pk(X98!),{pk(X99!),{pk(X100!),{pk(X101!),{pk(X102!),{pk(X103!),{pk(X104!),{pk(X105!),{pk(X106!),{pk(X107!),{pk(X108!),{pk(X109!),{pk(X110!),{pk(X111!),{pk(X112!),{pk(X113!),{pk(X114!),{pk(X115!),{pk(X116!),{pk(X117!),{pk(X118!),{pk(X119!),{pk(X120!),{pk(X121!),{pk(X122!),{pk(X123!),{pk(X124!),{pk(X125!),{pk(X126!),{pk(X127!),{pk(X128!),pk(X129)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})" ) ;
403
+ test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),{pk(X2!),{pk(X3!),{pk(X4!),{pk(X5!),{pk(X6!),{pk(X7!),{pk(X8!),{pk(X9!),{pk(X10!),{pk(X11!),{pk(X12!),{pk(X13!),{pk(X14!),{pk(X15!),{pk(X16!),{pk(X17!),{pk(X18!),{pk(X19!),{pk(X20!),{pk(X21!),{pk(X22!),{pk(X23!),{pk(X24!),{pk(X25!),{pk(X26!),{pk(X27!),{pk(X28!),{pk(X29!),{pk(X30!),{pk(X31!),{pk(X32!),{pk(X33!),{pk(X34!),{pk(X35!),{pk(X36!),{pk(X37!),{pk(X38!),{pk(X39!),{pk(X40!),{pk(X41!),{pk(X42!),{pk(X43!),{pk(X44!),{pk(X45!),{pk(X46!),{pk(X47!),{pk(X48!),{pk(X49!),{pk(X50!),{pk(X51!),{pk(X52!),{pk(X53!),{pk(X54!),{pk(X55!),{pk(X56!),{pk(X57!),{pk(X58!),{pk(X59!),{pk(X60!),{pk(X61!),{pk(X62!),{pk(X63!),{pk(X64!),{pk(X65!),{pk(X66!),{pk(X67!),{pk(X68!),{pk(X69!),{pk(X70!),{pk(X71!),{pk(X72!),{pk(X73!),{pk(X74!),{pk(X75!),{pk(X76!),{pk(X77!),{pk(X78!),{pk(X79!),{pk(X80!),{pk(X81!),{pk(X82!),{pk(X83!),{pk(X84!),{pk(X85!),{pk(X86!),{pk(X87!),{pk(X88!),{pk(X89!),{pk(X90!),{pk(X91!),{pk(X92!),{pk(X93!),{pk(X94!),{pk(X95!),{pk(X96!),{pk(X97!),{pk(X98!),{pk(X99!),{pk(X100!),{pk(X101!),{pk(X102!),{pk(X103!),{pk(X104!),{pk(X105!),{pk(X106!),{pk(X107!),{pk(X108!),{pk(X109!),{pk(X110!),{pk(X111!),{pk(X112!),{pk(X113!),{pk(X114!),{pk(X115!),{pk(X116!),{pk(X117!),{pk(X118!),{pk(X119!),{pk(X120!),{pk(X121!),{pk(X122!),{pk(X123!),{pk(X124!),{pk(X125!),{pk(X126!),{pk(X127!),{pk(X128!),pk(X129)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})" ) . unwrap ( ) ;
411
404
412
405
// Test 9: Test script complete tree having 128 leaves with depth log(128), only X1 is known
413
- test_desc_satisfy ( cl, testdata, "tr(X!,{{{{{{{pk(X1),pk(X2!)},{pk(X3!),pk(X4!)}},{{pk(X5!),pk(X6!)},{pk(X7!),pk(X8!)}}},{{{pk(X9!),pk(X10!)},{pk(X11!),pk(X12!)}},{{pk(X13!),pk(X14!)},{pk(X15!),pk(X16!)}}}},{{{{pk(X17!),pk(X18!)},{pk(X19!),pk(X20!)}},{{pk(X21!),pk(X22!)},{pk(X23!),pk(X24!)}}},{{{pk(X25!),pk(X26!)},{pk(X27!),pk(X28!)}},{{pk(X29!),pk(X30!)},{pk(X31!),pk(X32!)}}}}},{{{{{pk(X33!),pk(X34!)},{pk(X35!),pk(X36!)}},{{pk(X37!),pk(X38!)},{pk(X39!),pk(X40!)}}},{{{pk(X41!),pk(X42!)},{pk(X43!),pk(X44!)}},{{pk(X45!),pk(X46!)},{pk(X47!),pk(X48!)}}}},{{{{pk(X49!),pk(X50!)},{pk(X51!),pk(X52!)}},{{pk(X53!),pk(X54!)},{pk(X55!),pk(X56!)}}},{{{pk(X57!),pk(X58!)},{pk(X59!),pk(X60!)}},{{pk(X61!),pk(X62!)},{pk(X63!),pk(X64!)}}}}}},{{{{{{pk(X65!),pk(X66!)},{pk(X67!),pk(X68!)}},{{pk(X69!),pk(X70!)},{pk(X71!),pk(X72!)}}},{{{pk(X73!),pk(X74!)},{pk(X75!),pk(X76!)}},{{pk(X77!),pk(X78!)},{pk(X79!),pk(X80!)}}}},{{{{pk(X81!),pk(X82!)},{pk(X83!),pk(X84!)}},{{pk(X85!),pk(X86!)},{pk(X87!),pk(X88!)}}},{{{pk(X89!),pk(X90!)},{pk(X91!),pk(X92!)}},{{pk(X93!),pk(X94!)},{pk(X95!),pk(X96!)}}}}},{{{{{pk(X97!),pk(X98!)},{pk(X99!),pk(X100!)}},{{pk(X101!),pk(X102!)},{pk(X103!),pk(X104!)}}},{{{pk(X105!),pk(X106!)},{pk(X107!),pk(X108!)}},{{pk(X109!),pk(X110!)},{pk(X111!),pk(X112!)}}}},{{{{pk(X113!),pk(X114!)},{pk(X115!),pk(X116!)}},{{pk(X117!),pk(X118!)},{pk(X119!),pk(X120!)}}},{{{pk(X121!),pk(X122!)},{pk(X123!),pk(X124!)}},{{pk(X125!),pk(X126!)},{pk(X127!),pk(X128!)}}}}}}})" ) ;
406
+ test_desc_satisfy ( cl, testdata, "tr(X!,{{{{{{{pk(X1),pk(X2!)},{pk(X3!),pk(X4!)}},{{pk(X5!),pk(X6!)},{pk(X7!),pk(X8!)}}},{{{pk(X9!),pk(X10!)},{pk(X11!),pk(X12!)}},{{pk(X13!),pk(X14!)},{pk(X15!),pk(X16!)}}}},{{{{pk(X17!),pk(X18!)},{pk(X19!),pk(X20!)}},{{pk(X21!),pk(X22!)},{pk(X23!),pk(X24!)}}},{{{pk(X25!),pk(X26!)},{pk(X27!),pk(X28!)}},{{pk(X29!),pk(X30!)},{pk(X31!),pk(X32!)}}}}},{{{{{pk(X33!),pk(X34!)},{pk(X35!),pk(X36!)}},{{pk(X37!),pk(X38!)},{pk(X39!),pk(X40!)}}},{{{pk(X41!),pk(X42!)},{pk(X43!),pk(X44!)}},{{pk(X45!),pk(X46!)},{pk(X47!),pk(X48!)}}}},{{{{pk(X49!),pk(X50!)},{pk(X51!),pk(X52!)}},{{pk(X53!),pk(X54!)},{pk(X55!),pk(X56!)}}},{{{pk(X57!),pk(X58!)},{pk(X59!),pk(X60!)}},{{pk(X61!),pk(X62!)},{pk(X63!),pk(X64!)}}}}}},{{{{{{pk(X65!),pk(X66!)},{pk(X67!),pk(X68!)}},{{pk(X69!),pk(X70!)},{pk(X71!),pk(X72!)}}},{{{pk(X73!),pk(X74!)},{pk(X75!),pk(X76!)}},{{pk(X77!),pk(X78!)},{pk(X79!),pk(X80!)}}}},{{{{pk(X81!),pk(X82!)},{pk(X83!),pk(X84!)}},{{pk(X85!),pk(X86!)},{pk(X87!),pk(X88!)}}},{{{pk(X89!),pk(X90!)},{pk(X91!),pk(X92!)}},{{pk(X93!),pk(X94!)},{pk(X95!),pk(X96!)}}}}},{{{{{pk(X97!),pk(X98!)},{pk(X99!),pk(X100!)}},{{pk(X101!),pk(X102!)},{pk(X103!),pk(X104!)}}},{{{pk(X105!),pk(X106!)},{pk(X107!),pk(X108!)}},{{pk(X109!),pk(X110!)},{pk(X111!),pk(X112!)}}}},{{{{pk(X113!),pk(X114!)},{pk(X115!),pk(X116!)}},{{pk(X117!),pk(X118!)},{pk(X119!),pk(X120!)}}},{{{pk(X121!),pk(X122!)},{pk(X123!),pk(X124!)}},{{pk(X125!),pk(X126!)},{pk(X127!),pk(X128!)}}}}}}})" ) . unwrap ( ) ;
407
+
408
+ // Test 10: Test taproot desc with ZERO known keys
409
+ let result = test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),pk(X2!)})" ) ;
410
+ match result {
411
+ Ok ( _) => ( ) ,
412
+ Err ( error) => println ! ( "taproot desc with ZERO known keys : {}" , error) ,
413
+ }
414
+
415
+ // Test 11: Test taproot with insufficient known keys
416
+ let result = test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),multi_a(3,X2!,X3,X4)})" ) ;
417
+ match result {
418
+ Ok ( _) => ( ) ,
419
+ Err ( error) => println ! ( "taproot desc with insufficient known keys : {}" , error) ,
420
+ }
421
+
422
+ // Test 12: size exceeds the limit
423
+ let result = test_desc_satisfy ( cl, testdata, "wsh(thresh(1,pk(K1),a:pk(K2),a:pk(K3),a:pk(K4),a:pk(K5),a:pk(K6),a:pk(K7),a:pk(K8),a:pk(K9),a:pk(K10),a:pk(K11),a:pk(K12),a:pk(K13),a:pk(K14),a:pk(K15),a:pk(K16),a:pk(K17),a:pk(K18),a:pk(K19),a:pk(K20),a:pk(K21),a:pk(K22),a:pk(K23),a:pk(K24),a:pk(K25),a:pk(K26),a:pk(K27),a:pk(K28),a:pk(K29),a:pk(K30),a:pk(K31),a:pk(K32),a:pk(K33),a:pk(K34),a:pk(K35),a:pk(K36),a:pk(K37),a:pk(K38),a:pk(K39),a:pk(K40),a:pk(K41),a:pk(K42),a:pk(K43),a:pk(K44),a:pk(K45),a:pk(K46),a:pk(K47),a:pk(K48),a:pk(K49),a:pk(K50),a:pk(K51),a:pk(K52),a:pk(K53),a:pk(K54),a:pk(K55),a:pk(K56),a:pk(K57),a:pk(K58),a:pk(K59),a:pk(K60),a:pk(K61),a:pk(K62),a:pk(K63),a:pk(K64),a:pk(K65),a:pk(K66),a:pk(K67),a:pk(K68),a:pk(K69),a:pk(K70),a:pk(K71),a:pk(K72),a:pk(K73),a:pk(K74),a:pk(K75),a:pk(K76),a:pk(K77),a:pk(K78),a:pk(K79),a:pk(K80),a:pk(K81),a:pk(K82),a:pk(K83),a:pk(K84),a:pk(K85),a:pk(K86),a:pk(K87),a:pk(K88),a:pk(K89),a:pk(K90),a:pk(K91),a:pk(K92),a:pk(K93),a:pk(K94),a:pk(K95),a:pk(K96),a:pk(K97),a:pk(K98),a:pk(K99),a:pk(K100)))" ) ;
424
+ match result {
425
+ Ok ( _) => ( ) ,
426
+ Err ( error) => println ! ( "Witness script size exceeds 3600 bytes : {}" , error) ,
427
+ }
428
+
429
+ // Test 13: Test script tree of depth > 128 is invalid
430
+ let result = test_desc_satisfy ( cl, testdata, "tr(X!,{pk(X1!),{pk(X2!),{pk(X3!),{pk(X4!),{pk(X5!),{pk(X6!),{pk(X7!),{pk(X8!),{pk(X9!),{pk(X10!),{pk(X11!),{pk(X12!),{pk(X13!),{pk(X14!),{pk(X15!),{pk(X16!),{pk(X17!),{pk(X18!),{pk(X19!),{pk(X20!),{pk(X21!),{pk(X22!),{pk(X23!),{pk(X24!),{pk(X25!),{pk(X26!),{pk(X27!),{pk(X28!),{pk(X29!),{pk(X30!),{pk(X31!),{pk(X32!),{pk(X33!),{pk(X34!),{pk(X35!),{pk(X36!),{pk(X37!),{pk(X38!),{pk(X39!),{pk(X40!),{pk(X41!),{pk(X42!),{pk(X43!),{pk(X44!),{pk(X45!),{pk(X46!),{pk(X47!),{pk(X48!),{pk(X49!),{pk(X50!),{pk(X51!),{pk(X52!),{pk(X53!),{pk(X54!),{pk(X55!),{pk(X56!),{pk(X57!),{pk(X58!),{pk(X59!),{pk(X60!),{pk(X61!),{pk(X62!),{pk(X63!),{pk(X64!),{pk(X65!),{pk(X66!),{pk(X67!),{pk(X68!),{pk(X69!),{pk(X70!),{pk(X71!),{pk(X72!),{pk(X73!),{pk(X74!),{pk(X75!),{pk(X76!),{pk(X77!),{pk(X78!),{pk(X79!),{pk(X80!),{pk(X81!),{pk(X82!),{pk(X83!),{pk(X84!),{pk(X85!),{pk(X86!),{pk(X87!),{pk(X88!),{pk(X89!),{pk(X90!),{pk(X91!),{pk(X92!),{pk(X93!),{pk(X94!),{pk(X95!),{pk(X96!),{pk(X97!),{pk(X98!),{pk(X99!),{pk(X100!),{pk(X101!),{pk(X102!),{pk(X103!),{pk(X104!),{pk(X105!),{pk(X106!),{pk(X107!),{pk(X108!),{pk(X109!),{pk(X110!),{pk(X111!),{pk(X112!),{pk(X113!),{pk(X114!),{pk(X115!),{pk(X116!),{pk(X117!),{pk(X118!),{pk(X119!),{pk(X120!),{pk(X121!),{pk(X122!),{pk(X123!),{pk(X124!),{pk(X125!),{pk(X126!),{pk(X127!),{pk(X128!),{pk(X129!),pk(X130)}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}})" ) ;
431
+ match result {
432
+ Ok ( _) => ( ) ,
433
+ Err ( error) => println ! (
434
+ "script tree is having depth 129 and hence it is invalid : {}" ,
435
+ error,
436
+ ) ,
437
+ }
414
438
415
439
// Misc tests for other descriptors that we support
416
440
// Keys
417
- test_desc_satisfy ( cl, testdata, "wpkh(K)" ) ;
418
- test_desc_satisfy ( cl, testdata, "pkh(K)" ) ;
419
- test_desc_satisfy ( cl, testdata, "sh(wpkh(K))" ) ;
441
+ test_desc_satisfy ( cl, testdata, "wpkh(K)" ) . unwrap ( ) ;
442
+ test_desc_satisfy ( cl, testdata, "pkh(K)" ) . unwrap ( ) ;
443
+ test_desc_satisfy ( cl, testdata, "sh(wpkh(K))" ) . unwrap ( ) ;
420
444
421
445
// sorted multi
422
- test_desc_satisfy ( cl, testdata, "sh(sortedmulti(2,K1,K2,K3))" ) ;
423
- test_desc_satisfy ( cl, testdata, "wsh(sortedmulti(2,K1,K2,K3))" ) ;
424
- test_desc_satisfy ( cl, testdata, "sh(wsh(sortedmulti(2,K1,K2,K3)))" ) ;
446
+ test_desc_satisfy ( cl, testdata, "sh(sortedmulti(2,K1,K2,K3))" ) . unwrap ( ) ;
447
+ test_desc_satisfy ( cl, testdata, "wsh(sortedmulti(2,K1,K2,K3))" ) . unwrap ( ) ;
448
+ test_desc_satisfy ( cl, testdata, "sh(wsh(sortedmulti(2,K1,K2,K3)))" ) . unwrap ( ) ;
425
449
426
450
// Miniscripts
427
- test_desc_satisfy ( cl, testdata, "sh(and_v(v:pk(K1),pk(K2)))" ) ;
428
- test_desc_satisfy ( cl, testdata, "wsh(and_v(v:pk(K1),pk(K2)))" ) ;
429
- test_desc_satisfy ( cl, testdata, "sh(wsh(and_v(v:pk(K1),pk(K2))))" ) ;
451
+ test_desc_satisfy ( cl, testdata, "sh(and_v(v:pk(K1),pk(K2)))" ) . unwrap ( ) ;
452
+ test_desc_satisfy ( cl, testdata, "wsh(and_v(v:pk(K1),pk(K2)))" ) . unwrap ( ) ;
453
+ test_desc_satisfy ( cl, testdata, "sh(wsh(and_v(v:pk(K1),pk(K2))))" ) . unwrap ( ) ;
430
454
}
431
455
432
456
#[ test]
0 commit comments