File tree Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Expand file tree Collapse file tree 1 file changed +26
-0
lines changed Original file line number Diff line number Diff line change @@ -1472,6 +1472,32 @@ mod tests {
1472
1472
1473
1473
#[ test]
1474
1474
fn segwit_limits ( ) {
1475
+ // Hit the maximum witness script size limit.
1476
+ // or(thresh(52, [pubkey; 52]), thresh(52, [pubkey; 52])) results in a 3642-bytes long
1477
+ // witness script with only 54 stack elements
1478
+ let ( keys, _) = pubkeys_and_a_sig ( 104 ) ;
1479
+ let keys_a: Vec < Concrete < bitcoin:: PublicKey > > = keys[ ..keys. len ( ) / 2 ]
1480
+ . iter ( )
1481
+ . map ( |pubkey| Concrete :: Key ( * pubkey) )
1482
+ . collect ( ) ;
1483
+ let keys_b: Vec < Concrete < bitcoin:: PublicKey > > = keys[ keys. len ( ) / 2 ..]
1484
+ . iter ( )
1485
+ . map ( |pubkey| Concrete :: Key ( * pubkey) )
1486
+ . collect ( ) ;
1487
+
1488
+ let thresh_res: Result < SegwitMiniScript , _ > = Concrete :: Or ( vec ! [
1489
+ ( 1 , Concrete :: Threshold ( keys_a. len( ) , keys_a) ) ,
1490
+ ( 1 , Concrete :: Threshold ( keys_b. len( ) , keys_b) ) ,
1491
+ ] )
1492
+ . compile ( ) ;
1493
+ let script_size = thresh_res. clone ( ) . and_then ( |m| Ok ( m. script_size ( NullCtx ) ) ) ;
1494
+ assert_eq ! (
1495
+ thresh_res,
1496
+ Err ( CompilerError :: LimitsExceeded ) ,
1497
+ "Compilation succeeded with a witscript size of '{:?}'" ,
1498
+ script_size,
1499
+ ) ;
1500
+
1475
1501
// Hit the maximum witness stack elements limit
1476
1502
let ( keys, _) = pubkeys_and_a_sig ( 100 ) ;
1477
1503
let keys: Vec < Concrete < bitcoin:: PublicKey > > =
You can’t perform that action at this time.
0 commit comments