@@ -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
@@ -3895,18 +3899,18 @@ pub(crate) mod test {
38953899 let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
38963900
38973901 for remove_partial_sigs in & [ true , false ] {
3898- let mut psbt_1 = create_drain_all_and_consolidate_psbt ( & wallet) ;
3902+ let mut psbt = create_drain_all_and_consolidate_psbt ( & wallet) ;
38993903 assert ! ( wallet
39003904 . sign(
3901- & mut psbt_1 ,
3905+ & mut psbt ,
39023906 SignOptions {
39033907 remove_partial_sigs: * remove_partial_sigs,
39043908 ..Default :: default ( )
39053909 } ,
39063910 )
39073911 . unwrap( ) ) ;
39083912
3909- psbt_1 . inputs . iter ( ) . for_each ( |input| {
3913+ psbt . inputs . iter ( ) . for_each ( |input| {
39103914 // remove finalized input partial_sigs if remove_partial_sigs is set as true in SignOptions
39113915 // do not remove finalized input partial_sigs if remove_partial_sigs is set as false in SignOptions.
39123916 if * remove_partial_sigs {
@@ -3918,6 +3922,39 @@ pub(crate) mod test {
39183922 }
39193923 }
39203924
3925+ #[ test]
3926+ fn test_try_finalize_sign_option ( ) {
3927+ let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
3928+
3929+ for try_finalize in & [ true , false ] {
3930+ let mut psbt = create_drain_all_and_consolidate_psbt ( & wallet) ;
3931+
3932+ let finalized = wallet
3933+ . sign (
3934+ & mut psbt,
3935+ SignOptions {
3936+ try_finalize : * try_finalize,
3937+ ..Default :: default ( )
3938+ } ,
3939+ )
3940+ . unwrap ( ) ;
3941+
3942+ // sign but do not finalize if try_finalize is set as false in SignOptions
3943+ // sign and do finalize if try_finalize is set as true in SignOptions
3944+ psbt. inputs . iter ( ) . for_each ( |input| {
3945+ if * try_finalize {
3946+ assert ! ( finalized) ;
3947+ assert ! ( input. final_script_sig. is_some( ) ) ;
3948+ assert ! ( input. final_script_witness. is_some( ) ) ;
3949+ } else {
3950+ assert ! ( !finalized) ;
3951+ assert ! ( input. final_script_sig. is_none( ) ) ;
3952+ assert ! ( input. final_script_witness. is_none( ) ) ;
3953+ }
3954+ } ) ;
3955+ }
3956+ }
3957+
39213958 #[ test]
39223959 fn test_sign_nonstandard_sighash ( ) {
39233960 let sighash = EcdsaSighashType :: NonePlusAnyoneCanPay ;
0 commit comments