@@ -1050,7 +1050,11 @@ where
10501050 }
10511051
10521052 // attempt to finalize
1053- self . finalize_psbt ( psbt, sign_options)
1053+ if sign_options. do_not_finalize {
1054+ Ok ( false )
1055+ } else {
1056+ self . finalize_psbt ( psbt, sign_options)
1057+ }
10541058 }
10551059
10561060 /// Return the spending policies for the wallet's descriptor
@@ -3931,6 +3935,48 @@ pub(crate) mod test {
39313935 . for_each ( |input| assert ! ( !input. partial_sigs. is_empty( ) ) ) ;
39323936 }
39333937
3938+ #[ test]
3939+ fn test_do_not_finalize_sign_option ( ) {
3940+ let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
3941+
3942+ let mut psbt_1 = create_drain_all_and_consolidate_psbt ( & wallet) ;
3943+
3944+ let finalized = wallet
3945+ . sign (
3946+ & mut psbt_1,
3947+ SignOptions {
3948+ do_not_finalize : false ,
3949+ ..Default :: default ( )
3950+ } ,
3951+ )
3952+ . unwrap ( ) ;
3953+ assert ! ( finalized) ;
3954+
3955+ psbt_1. inputs . iter ( ) . for_each ( |input| {
3956+ assert ! ( input. final_script_sig. is_some( ) ) ;
3957+ assert ! ( input. final_script_witness. is_some( ) ) ;
3958+ } ) ;
3959+
3960+ // only sign and do not finalize if do_not_finalize is set as true in SignOptions
3961+ let mut psbt_2 = create_drain_all_and_consolidate_psbt ( & wallet) ;
3962+
3963+ let finalized = wallet
3964+ . sign (
3965+ & mut psbt_2,
3966+ SignOptions {
3967+ do_not_finalize : true ,
3968+ ..Default :: default ( )
3969+ } ,
3970+ )
3971+ . unwrap ( ) ;
3972+ assert ! ( !finalized) ;
3973+
3974+ psbt_2. inputs . iter ( ) . for_each ( |input| {
3975+ assert ! ( input. final_script_sig. is_none( ) ) ;
3976+ assert ! ( input. final_script_witness. is_none( ) ) ;
3977+ } ) ;
3978+ }
3979+
39343980 #[ test]
39353981 fn test_sign_nonstandard_sighash ( ) {
39363982 let sighash = EcdsaSighashType :: NonePlusAnyoneCanPay ;
0 commit comments