aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Chow <achow101-github@achow101.com>2018-11-08 10:08:46 -0500
committerAndrew Chow <achow101-github@achow101.com>2018-11-08 10:38:43 -0500
commit6b8d86ddb803d50d8608d95f7e8f791511dec8b9 (patch)
tree33a41f992ee78992960871af6b010dda8345cc10
parent11e1ac3ae08535cefbd8235a8deb6cd100bcb2b1 (diff)
downloadbitcoin-6b8d86ddb803d50d8608d95f7e8f791511dec8b9.tar.xz
Require a public key to be retrieved when signing a P2PKH input
If we do not have the public key for a P2PKH input, we should not continue to attempt to sign for it.
-rw-r--r--src/script/sign.cpp2
-rwxr-xr-xtest/functional/rpc_psbt.py4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/script/sign.cpp b/src/script/sign.cpp
index 89cc7c808c..68ceea7e6f 100644
--- a/src/script/sign.cpp
+++ b/src/script/sign.cpp
@@ -123,7 +123,7 @@ static bool SignStep(const SigningProvider& provider, const BaseSignatureCreator
case TX_PUBKEYHASH: {
CKeyID keyID = CKeyID(uint160(vSolutions[0]));
CPubKey pubkey;
- GetPubKey(provider, sigdata, keyID, pubkey);
+ if (!GetPubKey(provider, sigdata, keyID, pubkey)) return false;
if (!CreateSig(creator, sigdata, provider, sig, pubkey, scriptPubKey, sigversion)) return false;
ret.push_back(std::move(sig));
ret.push_back(ToByteVector(pubkey));
diff --git a/test/functional/rpc_psbt.py b/test/functional/rpc_psbt.py
index fca910bf64..30f84cff3c 100755
--- a/test/functional/rpc_psbt.py
+++ b/test/functional/rpc_psbt.py
@@ -269,6 +269,10 @@ class PSBTTest(BitcoinTestFramework):
self.test_utxo_conversion()
+ # Test that psbts with p2pkh outputs are created properly
+ p2pkh = self.nodes[0].getnewaddress(address_type='legacy')
+ psbt = self.nodes[1].walletcreatefundedpsbt([], [{p2pkh : 1}], 0, {"includeWatching" : True}, True)
+ self.nodes[0].decodepsbt(psbt['psbt'])
if __name__ == '__main__':
PSBTTest().main()