@@ -5524,6 +5524,7 @@ pub(crate) mod test {
5524
5524
SignOptions {
5525
5525
remove_partial_sigs : false ,
5526
5526
try_finalize : false ,
5527
+ allow_grinding : false ,
5527
5528
..Default :: default ( )
5528
5529
} ,
5529
5530
)
@@ -5538,6 +5539,7 @@ pub(crate) mod test {
5538
5539
& mut psbt,
5539
5540
SignOptions {
5540
5541
remove_partial_sigs : false ,
5542
+ allow_grinding : false ,
5541
5543
..Default :: default ( )
5542
5544
} ,
5543
5545
)
@@ -5546,6 +5548,39 @@ pub(crate) mod test {
5546
5548
assert_fee_rate ! ( psbt, details. fee. unwrap_or( 0 ) , fee_rate) ;
5547
5549
}
5548
5550
5551
+ #[ test]
5552
+ fn test_fee_rate_sign_grinding_low_r ( ) {
5553
+ // Our goal is to obtain a transaction with a signature with low-R (70 bytes)
5554
+ // by setting the `allow_grinding` signing option as true.
5555
+ // We then check that our fee rate and fee calculation is alright and that our
5556
+ // signature is 70 bytes.
5557
+ let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
5558
+ let addr = wallet. get_address ( New ) . unwrap ( ) ;
5559
+ let fee_rate = FeeRate :: from_sat_per_vb ( 1.0 ) ;
5560
+ let mut builder = wallet. build_tx ( ) ;
5561
+ builder
5562
+ . drain_to ( addr. script_pubkey ( ) )
5563
+ . drain_wallet ( )
5564
+ . fee_rate ( fee_rate) ;
5565
+ let ( mut psbt, details) = builder. finish ( ) . unwrap ( ) ;
5566
+
5567
+ wallet
5568
+ . sign (
5569
+ & mut psbt,
5570
+ SignOptions {
5571
+ remove_partial_sigs : false ,
5572
+ allow_grinding : true ,
5573
+ ..Default :: default ( )
5574
+ } ,
5575
+ )
5576
+ . unwrap ( ) ;
5577
+
5578
+ let key = psbt. inputs [ 0 ] . partial_sigs . keys ( ) . next ( ) . unwrap ( ) ;
5579
+ let sig_len = psbt. inputs [ 0 ] . partial_sigs [ key] . sig . serialize_der ( ) . len ( ) ;
5580
+ assert_eq ! ( sig_len, 70 ) ;
5581
+ assert_fee_rate ! ( psbt, details. fee. unwrap_or( 0 ) , fee_rate) ;
5582
+ }
5583
+
5549
5584
#[ cfg( feature = "test-hardware-signer" ) ]
5550
5585
#[ test]
5551
5586
fn test_create_signer ( ) {
0 commit comments