Page MenuHomePhabricator

D11156.id32660.diff
No OneTemporary

D11156.id32660.diff

diff --git a/src/node/coinstats.cpp b/src/node/coinstats.cpp
--- a/src/node/coinstats.cpp
+++ b/src/node/coinstats.cpp
@@ -19,33 +19,39 @@
scriptPubKey.size() /* scriptPubKey */;
}
-static void ApplyStats(CCoinsStats &stats, CHashWriter &ss, const uint256 &hash,
- const std::map<uint32_t, Coin> &outputs) {
- assert(!outputs.empty());
- ss << hash;
- ss << VARINT(outputs.begin()->second.GetHeight() * 2 +
- outputs.begin()->second.IsCoinBase());
- stats.nTransactions++;
- for (const auto &output : outputs) {
- ss << VARINT(output.first + 1);
- ss << output.second.GetTxOut().scriptPubKey;
- ss << VARINT_MODE(output.second.GetTxOut().nValue / SATOSHI,
- VarIntMode::NONNEGATIVE_SIGNED);
- stats.nTransactionOutputs++;
- stats.nTotalAmount += output.second.GetTxOut().nValue;
- stats.nBogoSize += GetBogoSize(output.second.GetTxOut().scriptPubKey);
+static void ApplyHash(CCoinsStats &stats, CHashWriter &ss, const uint256 &hash,
+ const std::map<uint32_t, Coin> &outputs,
+ std::map<uint32_t, Coin>::const_iterator it) {
+ if (it == outputs.begin()) {
+ ss << hash;
+ ss << VARINT(it->second.GetHeight() * 2 + it->second.IsCoinBase());
+ }
+
+ ss << VARINT(it->first + 1);
+ ss << it->second.GetTxOut().scriptPubKey;
+ ss << VARINT_MODE(it->second.GetTxOut().nValue / SATOSHI,
+ VarIntMode::NONNEGATIVE_SIGNED);
+
+ if (it == std::prev(outputs.end())) {
+ ss << VARINT(0u);
}
- ss << VARINT(0u);
}
-static void ApplyStats(CCoinsStats &stats, std::nullptr_t, const uint256 &hash,
+static void ApplyHash(CCoinsStats &stats, std::nullptr_t, const uint256 &hash,
+ const std::map<uint32_t, Coin> &outputs,
+ std::map<uint32_t, Coin>::const_iterator it) {}
+
+template <typename T>
+static void ApplyStats(CCoinsStats &stats, T &hash_obj, const uint256 &hash,
const std::map<uint32_t, Coin> &outputs) {
assert(!outputs.empty());
stats.nTransactions++;
- for (const auto &output : outputs) {
+ for (auto it = outputs.begin(); it != outputs.end(); ++it) {
+ ApplyHash(stats, hash_obj, hash, outputs, it);
+
stats.nTransactionOutputs++;
- stats.nTotalAmount += output.second.GetTxOut().nValue;
- stats.nBogoSize += GetBogoSize(output.second.GetTxOut().scriptPubKey);
+ stats.nTotalAmount += it->second.GetTxOut().nValue;
+ stats.nBogoSize += GetBogoSize(it->second.GetTxOut().scriptPubKey);
}
}

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 1, 11:18 (9 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5187566
Default Alt Text
D11156.id32660.diff (2 KB)

Event Timeline