diff options
author | Wladimir J. van der Laan <laanwj@protonmail.com> | 2020-07-16 17:35:11 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@protonmail.com> | 2020-07-16 20:06:31 +0200 |
commit | f61398a978ba10b33f2b246d64711abf47b73805 (patch) | |
tree | 364eb61653bd1fc38e77c770793e8b88413ea1f9 | |
parent | 2f6c7c0f6f47571eb36f54d07e1de7f47c10d354 (diff) | |
parent | bad9cf8f404ab70df7d3df430885430f76fea596 (diff) | |
download | bitcoin-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.cpp | 33 |
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; } |