Merge bitcoindevkit/bdk#1310: Remove extra taproot fields when finalizing PSBT
5840ce473efix(bdk): Remove extra taproot fields when finalizing Psbt (vmammal)8c78a42163test(psbt): Fixup test_psbt_multiple_internalkey_signers (vmammal) Pull request description: We currently allow removing `partial_sigs` from a finalized PSBT, which is relevant to non-taproot inputs, however taproot related PSBT fields were left in place despite the recommendation of BIP371 to remove them once the `final_script_witness` is constructed. This can cause confusion for parsers that encounter extra taproot metadata in an already satisfied input. Fix this by introducing a new member to SignOptions `remove_taproot_extras`, which when true will remove extra taproot related data from a PSBT upon successful finalization. This change makes removal of all taproot extras the default but configurable. fixes #1243 ### Notes to the reviewers If there's a better or more descriptive name for `remove_taproot_extras`, I'm open to changing it. ### Changelog notice Fixed an [issue](https://github.com/bitcoindevkit/bdk/issues/1243) finalizing taproot inputs following BIP371 ### Checklists #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing #### Bugfixes: <!-- * [ ] This pull request breaks the existing API --> * [x] I've added tests to reproduce the issue which are now passing * [x] I'm linking the issue being fixed by this PR ACKs for top commit: evanlinjin: ACK5840ce473eTree-SHA512: 69f022c6f736500590e36880dd2c845321464f89af6a2c67987d1c520f70a298328363cade0f55f270c4e7169e740bd4ada752ec2c75afa02b6a5a851f9030c3
This commit is contained in:
@@ -1971,6 +1971,15 @@ impl<D> Wallet<D> {
|
||||
if sign_options.remove_partial_sigs {
|
||||
psbt_input.partial_sigs.clear();
|
||||
}
|
||||
if sign_options.remove_taproot_extras {
|
||||
// We just constructed the final witness, clear these fields.
|
||||
psbt_input.tap_key_sig = None;
|
||||
psbt_input.tap_script_sigs.clear();
|
||||
psbt_input.tap_scripts.clear();
|
||||
psbt_input.tap_key_origins.clear();
|
||||
psbt_input.tap_internal_key = None;
|
||||
psbt_input.tap_merkle_root = None;
|
||||
}
|
||||
}
|
||||
Err(_) => finished = false,
|
||||
}
|
||||
@@ -1979,6 +1988,12 @@ impl<D> Wallet<D> {
|
||||
}
|
||||
}
|
||||
|
||||
if finished && sign_options.remove_taproot_extras {
|
||||
for output in &mut psbt.outputs {
|
||||
output.tap_key_origins.clear();
|
||||
}
|
||||
}
|
||||
|
||||
Ok(finished)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user