Create wallet RPCs for PSBT

walletprocesspsbt takes a PSBT format transaction, updates the
PSBT with any inputs related to this wallet, signs, and finalizes
the transaction. There is also an option to not sign and just
update.

walletcreatefundedpsbt creates a PSBT from user provided data
in the same form as createrawtransaction. It also funds the transaction
and takes an options argument in the same form as fundrawtransaction.
The resulting PSBT is blank with no input or output data filled
in.
This commit is contained in:
Andrew Chow
2018-06-28 19:05:05 -07:00
parent c27fe419ef
commit a4b06fb42e
8 changed files with 385 additions and 17 deletions

View File

@@ -614,3 +614,13 @@ void PSBTOutput::Merge(const PSBTOutput& output)
if (redeem_script.empty() && !output.redeem_script.empty()) redeem_script = output.redeem_script;
if (witness_script.empty() && !output.witness_script.empty()) witness_script = output.witness_script;
}
bool PublicOnlySigningProvider::GetCScript(const CScriptID &scriptid, CScript& script) const
{
return m_provider->GetCScript(scriptid, script);
}
bool PublicOnlySigningProvider::GetPubKey(const CKeyID &address, CPubKey& pubkey) const
{
return m_provider->GetPubKey(address, pubkey);
}

View File

@@ -32,6 +32,17 @@ public:
extern const SigningProvider& DUMMY_SIGNING_PROVIDER;
class PublicOnlySigningProvider : public SigningProvider
{
private:
const SigningProvider* m_provider;
public:
PublicOnlySigningProvider(const SigningProvider* provider) : m_provider(provider) {}
bool GetCScript(const CScriptID &scriptid, CScript& script) const;
bool GetPubKey(const CKeyID &address, CPubKey& pubkey) const;
};
/** Interface for signature creators. */
class BaseSignatureCreator {
public: