aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@protonmail.com>2020-07-16 17:35:11 +0200
committerWladimir J. van der Laan <laanwj@protonmail.com>2020-07-16 20:06:31 +0200
commitf61398a978ba10b33f2b246d64711abf47b73805 (patch)
tree364eb61653bd1fc38e77c770793e8b88413ea1f9
parent2f6c7c0f6f47571eb36f54d07e1de7f47c10d354 (diff)
parentbad9cf8f404ab70df7d3df430885430f76fea596 (diff)
downloadbitcoin-f61398a978ba10b33f2b246d64711abf47b73805.tar.xz
Merge #19524: [0.20] Backport #19517 - Increment input value sum only once per UTXO in decodepsbt
bad9cf8f404ab70df7d3df430885430f76fea596 Increment input value sum only once per UTXO in decodepsbt (Andrew Chow) Pull request description: Github-Pull: #19517 Rebased-From: 75122780e2c46505d977e24c5612dfa9442ab754 ACKs for top commit: jnewbery: utACK bad9cf8f404ab70df7d3df430885430f76fea596 laanwj: ACK bad9cf8f404ab70df7d3df430885430f76fea596 Tree-SHA512: 543bbe58f2dafc772289708007d72fa61592270f3de083afffb9a56274b03f2ffe8d8d509a93790ceea3a708e1c02b1ad941e23281b3db1f48766c01a930dbd6
-rw-r--r--src/rpc/rawtransaction.cpp33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp
index 746900fdab..b9ec3c53d6 100644
--- a/src/rpc/rawtransaction.cpp
+++ b/src/rpc/rawtransaction.cpp
@@ -1117,39 +1117,38 @@ UniValue decodepsbt(const JSONRPCRequest& request)
UniValue in(UniValue::VOBJ);
// UTXOs
bool have_a_utxo = false;
+ CTxOut txout;
if (!input.witness_utxo.IsNull()) {
- const CTxOut& txout = input.witness_utxo;
-
- UniValue out(UniValue::VOBJ);
-
- out.pushKV("amount", ValueFromAmount(txout.nValue));
- if (MoneyRange(txout.nValue) && MoneyRange(total_in + txout.nValue)) {
- total_in += txout.nValue;
- } else {
- // Hack to just not show fee later
- have_all_utxos = false;
- }
+ txout = input.witness_utxo;
UniValue o(UniValue::VOBJ);
ScriptToUniv(txout.scriptPubKey, o, true);
+
+ UniValue out(UniValue::VOBJ);
+ out.pushKV("amount", ValueFromAmount(txout.nValue));
out.pushKV("scriptPubKey", o);
+
in.pushKV("witness_utxo", out);
+
have_a_utxo = true;
}
if (input.non_witness_utxo) {
+ txout = input.non_witness_utxo->vout[psbtx.tx->vin[i].prevout.n];
+
UniValue non_wit(UniValue::VOBJ);
TxToUniv(*input.non_witness_utxo, uint256(), non_wit, false);
in.pushKV("non_witness_utxo", non_wit);
- CAmount utxo_val = input.non_witness_utxo->vout[psbtx.tx->vin[i].prevout.n].nValue;
- if (MoneyRange(utxo_val) && MoneyRange(total_in + utxo_val)) {
- total_in += utxo_val;
+
+ have_a_utxo = true;
+ }
+ if (have_a_utxo) {
+ if (MoneyRange(txout.nValue) && MoneyRange(total_in + txout.nValue)) {
+ total_in += txout.nValue;
} else {
// Hack to just not show fee later
have_all_utxos = false;
}
- have_a_utxo = true;
- }
- if (!have_a_utxo) {
+ } else {
have_all_utxos = false;
}