diff options
| author | Pieter Wuille <[email protected]> | 2018-07-20 00:23:32 -0700 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2018-08-13 08:46:23 -0700 |
| commit | 917353c8b0eff4cd95f9a5f7719f6756bb8338b1 (patch) | |
| tree | cb8138b5071ded72e3ab8a6ebb8d4e03a0115606 /src/script/sign.cpp | |
| parent | Pass HD path data through SignatureData (diff) | |
| download | discoin-917353c8b0eff4cd95f9a5f7719f6756bb8338b1.tar.xz discoin-917353c8b0eff4cd95f9a5f7719f6756bb8338b1.zip | |
Make SignPSBTInput operate on a private SignatureData object
Diffstat (limited to 'src/script/sign.cpp')
| -rw-r--r-- | src/script/sign.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 4060111ff..ea14abce4 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -237,7 +237,7 @@ bool ProduceSignature(const SigningProvider& provider, const BaseSignatureCreato return sigdata.complete; } -bool SignPSBTInput(const SigningProvider& provider, const CMutableTransaction& tx, PSBTInput& input, SignatureData& sigdata, int index, int sighash) +bool SignPSBTInput(const SigningProvider& provider, const CMutableTransaction& tx, PSBTInput& input, int index, int sighash) { // if this input has a final scriptsig or scriptwitness, don't do anything with it if (!input.final_script_sig.empty() || !input.final_script_witness.IsNull()) { @@ -245,6 +245,7 @@ bool SignPSBTInput(const SigningProvider& provider, const CMutableTransaction& t } // Fill SignatureData with input info + SignatureData sigdata; input.FillSignatureData(sigdata); // Get UTXO @@ -276,6 +277,16 @@ bool SignPSBTInput(const SigningProvider& provider, const CMutableTransaction& t // Verify that a witness signature was produced in case one was required. if (require_witness_sig && !sigdata.witness) return false; input.FromSignatureData(sigdata); + + // If both UTXO types are present, drop the unnecessary one. + if (input.non_witness_utxo && !input.witness_utxo.IsNull()) { + if (sigdata.witness) { + input.non_witness_utxo = nullptr; + } else { + input.witness_utxo.SetNull(); + } + } + return sig_complete; } |