From eaadea01f3ce0bea553b968a8f709da86f1db285 Mon Sep 17 00:00:00 2001 From: Glenn Willen Date: Fri, 26 Oct 2018 15:28:48 -0700 Subject: [PATCH] Add bool PSBTInputSigned Refactor out a "PSBTInputSigned" function to check if a PSBT is signed, for use in subsequent commits. Also improve a related comment. GitHub-Pull: #14588 Rebased-From: 53e6fffb8f5b10f94708d33d667a67cb91c2d09d --- src/rpc/rawtransaction.cpp | 3 +++ src/script/sign.cpp | 4 ++++ src/script/sign.h | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 3b202d653..0b79bdd6f 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -1309,6 +1309,9 @@ UniValue finalizepsbt(const JSONRPCRequest& request) } bool extract = request.params[1].isNull() || (!request.params[1].isNull() && request.params[1].get_bool()); + // signature, but have not combined them yet (e.g. because the combiner that created this + // PartiallySignedTransaction did not understand them), this will combine them into a final + // script. CMutableTransaction mtx; bool complete = FinalizeAndExtractPSBT(psbtx, mtx); diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 0ed92e8d5..0d3b7bfce 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -245,6 +245,10 @@ bool ProduceSignature(const SigningProvider& provider, const BaseSignatureCreato } namespace { +{ + return !input.final_script_sig.empty() || !input.final_script_witness.IsNull(); +} + class SignatureExtractorChecker final : public BaseSignatureChecker { private: diff --git a/src/script/sign.h b/src/script/sign.h index 0e751afd3..c5b1a60da 100644 --- a/src/script/sign.h +++ b/src/script/sign.h @@ -156,6 +156,9 @@ bool ProduceSignature(const SigningProvider& provider, const BaseSignatureCreato bool SignSignature(const SigningProvider &provider, const CScript& fromPubKey, CMutableTransaction& txTo, unsigned int nIn, const CAmount& amount, int nHashType); bool SignSignature(const SigningProvider &provider, const CTransaction& txFrom, CMutableTransaction& txTo, unsigned int nIn, int nHashType); +/** Checks whether a PSBTInput is already signed. */ +bool PSBTInputSigned(PSBTInput& input); + /** Extract signature data from a transaction input, and insert it. */ SignatureData DataFromTransaction(const CMutableTransaction& tx, unsigned int nIn, const CTxOut& txout); void UpdateInput(CTxIn& input, const SignatureData& data);