@@ -1050,7 +1050,11 @@ where
10501050 }
10511051
10521052 // attempt to finalize
1053- self . finalize_psbt ( psbt, sign_options)
1053+ if sign_options. try_finalize {
1054+ self . finalize_psbt ( psbt, sign_options)
1055+ } else {
1056+ Ok ( false )
1057+ }
10541058 }
10551059
10561060 /// Return the spending policies for the wallet's descriptor
@@ -3911,6 +3915,40 @@ pub(crate) mod test {
39113915 }
39123916 }
39133917
3918+ #[ test]
3919+ fn test_try_finalize_sign_option ( ) {
3920+ let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
3921+
3922+ for try_finalize in & [ true , false ] {
3923+ let addr = wallet. get_address ( New ) . unwrap ( ) ;
3924+ let mut builder = wallet. build_tx ( ) ;
3925+ builder. drain_to ( addr. script_pubkey ( ) ) . drain_wallet ( ) ;
3926+ let mut psbt = builder. finish ( ) . unwrap ( ) . 0 ;
3927+
3928+ let finalized = wallet
3929+ . sign (
3930+ & mut psbt,
3931+ SignOptions {
3932+ try_finalize : * try_finalize,
3933+ ..Default :: default ( )
3934+ } ,
3935+ )
3936+ . unwrap ( ) ;
3937+
3938+ psbt. inputs . iter ( ) . for_each ( |input| {
3939+ if * try_finalize {
3940+ assert ! ( finalized) ;
3941+ assert ! ( input. final_script_sig. is_some( ) ) ;
3942+ assert ! ( input. final_script_witness. is_some( ) ) ;
3943+ } else {
3944+ assert ! ( !finalized) ;
3945+ assert ! ( input. final_script_sig. is_none( ) ) ;
3946+ assert ! ( input. final_script_witness. is_none( ) ) ;
3947+ }
3948+ } ) ;
3949+ }
3950+ }
3951+
39143952 #[ test]
39153953 fn test_sign_nonstandard_sighash ( ) {
39163954 let sighash = EcdsaSighashType :: NonePlusAnyoneCanPay ;
0 commit comments