@@ -1046,7 +1046,11 @@ where
10461046 }
10471047
10481048 // attempt to finalize
1049- self . finalize_psbt ( psbt, sign_options)
1049+ if sign_options. do_not_finalize {
1050+ Ok ( false )
1051+ } else {
1052+ self . finalize_psbt ( psbt, sign_options)
1053+ }
10501054 }
10511055
10521056 /// Return the spending policies for the wallet's descriptor
@@ -3836,6 +3840,56 @@ pub(crate) mod test {
38363840 . for_each ( |input| assert ! ( !input. partial_sigs. is_empty( ) ) ) ;
38373841 }
38383842
3843+ #[ test]
3844+ fn test_do_not_finalize_sign_option ( ) {
3845+ let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
3846+
3847+ fn create_psbt ( wallet : & Wallet < AnyDatabase > ) -> psbt:: PartiallySignedTransaction {
3848+ let addr = wallet. get_address ( New ) . unwrap ( ) ;
3849+ // only sign and finalize if do_not_finalize is set as false in SignOptions
3850+ let mut builder = wallet. build_tx ( ) ;
3851+ builder. drain_to ( addr. script_pubkey ( ) ) . drain_wallet ( ) ;
3852+ builder. finish ( ) . unwrap ( ) . 0
3853+ }
3854+
3855+ let mut psbt_1 = create_psbt ( & wallet) ;
3856+
3857+ let finalized = wallet
3858+ . sign (
3859+ & mut psbt_1,
3860+ SignOptions {
3861+ do_not_finalize : false ,
3862+ ..Default :: default ( )
3863+ } ,
3864+ )
3865+ . unwrap ( ) ;
3866+ assert ! ( finalized) ;
3867+
3868+ psbt_1. inputs . iter ( ) . for_each ( |input| {
3869+ assert ! ( input. final_script_sig. is_some( ) ) ;
3870+ assert ! ( input. final_script_witness. is_some( ) ) ;
3871+ } ) ;
3872+
3873+ // only sign and do not finalize if do_not_finalize is set as true in SignOptions
3874+ let mut psbt_2 = create_psbt ( & wallet) ;
3875+
3876+ let finalized = wallet
3877+ . sign (
3878+ & mut psbt_2,
3879+ SignOptions {
3880+ do_not_finalize : true ,
3881+ ..Default :: default ( )
3882+ } ,
3883+ )
3884+ . unwrap ( ) ;
3885+ assert ! ( !finalized) ;
3886+
3887+ psbt_2. inputs . iter ( ) . for_each ( |input| {
3888+ assert ! ( input. final_script_sig. is_none( ) ) ;
3889+ assert ! ( input. final_script_witness. is_none( ) ) ;
3890+ } ) ;
3891+ }
3892+
38393893 #[ test]
38403894 fn test_sign_nonstandard_sighash ( ) {
38413895 let sighash = EcdsaSighashType :: NonePlusAnyoneCanPay ;
0 commit comments