@@ -1161,6 +1161,9 @@ where
11611161 let psbt_input = & mut psbt. inputs [ n] ;
11621162 psbt_input. final_script_sig = Some ( tmp_input. script_sig ) ;
11631163 psbt_input. final_script_witness = Some ( tmp_input. witness ) ;
1164+ if sign_options. remove_partial_sigs {
1165+ psbt_input. partial_sigs . clear ( ) ;
1166+ }
11641167 }
11651168 Err ( e) => {
11661169 debug ! ( "satisfy error {:?} for input {}" , e, n) ;
@@ -3878,6 +3881,36 @@ pub(crate) mod test {
38783881 )
38793882 }
38803883
3884+ #[ test]
3885+ fn test_remove_partial_sigs_after_finalize_sign_option ( ) {
3886+ let ( wallet, _, _) = get_funded_wallet ( "wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)" ) ;
3887+
3888+ for remove_partial_sigs in & [ true , false ] {
3889+ let addr = wallet. get_address ( New ) . unwrap ( ) ;
3890+ let mut builder = wallet. build_tx ( ) ;
3891+ builder. drain_to ( addr. script_pubkey ( ) ) . drain_wallet ( ) ;
3892+ let mut psbt = builder. finish ( ) . unwrap ( ) . 0 ;
3893+
3894+ assert ! ( wallet
3895+ . sign(
3896+ & mut psbt,
3897+ SignOptions {
3898+ remove_partial_sigs: * remove_partial_sigs,
3899+ ..Default :: default ( )
3900+ } ,
3901+ )
3902+ . unwrap( ) ) ;
3903+
3904+ psbt. inputs . iter ( ) . for_each ( |input| {
3905+ if * remove_partial_sigs {
3906+ assert ! ( input. partial_sigs. is_empty( ) )
3907+ } else {
3908+ assert ! ( !input. partial_sigs. is_empty( ) )
3909+ }
3910+ } ) ;
3911+ }
3912+ }
3913+
38813914 #[ test]
38823915 fn test_sign_nonstandard_sighash ( ) {
38833916 let sighash = EcdsaSighashType :: NonePlusAnyoneCanPay ;
0 commit comments