Page MenuHomePhabricator

D8082.diff
No OneTemporary

D8082.diff

diff --git a/src/rpc/rawtransaction_util.cpp b/src/rpc/rawtransaction_util.cpp
--- a/src/rpc/rawtransaction_util.cpp
+++ b/src/rpc/rawtransaction_util.cpp
@@ -217,7 +217,7 @@
CTxOut txout;
txout.scriptPubKey = scriptPubKey;
- txout.nValue = Amount::zero();
+ txout.nValue = MAX_MONEY;
if (prevOut.exists("amount")) {
txout.nValue =
AmountFromValue(find_value(prevOut, "amount"));
@@ -294,6 +294,13 @@
UpdateInput(txin, sigdata);
+ // amount must be specified for valid signature
+ if (amount == MAX_MONEY) {
+ throw JSONRPCError(RPC_TYPE_ERROR,
+ strprintf("Missing amount for %s",
+ coin->second.GetTxOut().ToString()));
+ }
+
ScriptError serror = ScriptError::OK;
if (!VerifyScript(
txin.scriptSig, prevPubKey, STANDARD_SCRIPT_VERIFY_FLAGS,
diff --git a/test/functional/rpc_rawtransaction.py b/test/functional/rpc_rawtransaction.py
--- a/test/functional/rpc_rawtransaction.py
+++ b/test/functional/rpc_rawtransaction.py
@@ -205,6 +205,57 @@
{address: 99}, {address2: 99}, {'data': '99'}]),
)
+ for type in ["legacy"]:
+ addr = self.nodes[0].getnewaddress("", type)
+ addrinfo = self.nodes[0].getaddressinfo(addr)
+ pubkey = addrinfo["scriptPubKey"]
+
+ self.log.info(
+ 'sendrawtransaction with missing prevtx info ({})'.format(type))
+
+ # Test `signrawtransactionwithwallet` invalid `prevtxs`
+ inputs = [{'txid': txid, 'vout': 3, 'sequence': 1000}]
+ outputs = {self.nodes[0].getnewaddress(): 1}
+ rawtx = self.nodes[0].createrawtransaction(inputs, outputs)
+
+ prevtx = dict(txid=txid, scriptPubKey=pubkey, vout=3, amount=1)
+ succ = self.nodes[0].signrawtransactionwithwallet(rawtx, [prevtx])
+ assert succ["complete"]
+
+ assert_raises_rpc_error(-8, "Missing amount", self.nodes[0].signrawtransactionwithwallet, rawtx, [
+ {
+ "txid": txid,
+ "scriptPubKey": pubkey,
+ "vout": 3,
+ }
+ ])
+
+ assert_raises_rpc_error(-3, "Missing vout", self.nodes[0].signrawtransactionwithwallet, rawtx, [
+ {
+ "txid": txid,
+ "scriptPubKey": pubkey,
+ "amount": 1,
+ }
+ ])
+ assert_raises_rpc_error(-3, "Missing txid", self.nodes[0].signrawtransactionwithwallet, rawtx, [
+ {
+ "scriptPubKey": pubkey,
+ "vout": 3,
+ "amount": 1,
+ }
+ ])
+ assert_raises_rpc_error(-3, "Missing scriptPubKey", self.nodes[0].signrawtransactionwithwallet, rawtx, [
+ {
+ "txid": txid,
+ "vout": 3,
+ "amount": 1
+ }
+ ])
+
+ #########################################
+ # sendrawtransaction with missing input #
+ #########################################
+
self.log.info('sendrawtransaction with missing input')
# won't exists
inputs = [

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 1, 11:59 (3 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5187750
Default Alt Text
D8082.diff (3 KB)

Event Timeline