diff options
author | Fabian Jahr <fjahr@protonmail.com> | 2020-06-02 23:56:28 +0200 |
---|---|---|
committer | Fabian Jahr <fjahr@protonmail.com> | 2020-06-22 01:55:36 +0200 |
commit | f17a4d1c4ddce6935a353004898fb4e8618a213e (patch) | |
tree | ac02ebbe6cb4014da200bf3e466efd74468c521c /src | |
parent | a712cf6f6801157667fcf36d1c498b6fff6d328a (diff) |
rpc: Add hash_type NONE to gettxoutsetinfo
Diffstat (limited to 'src')
-rw-r--r-- | src/node/coinstats.cpp | 16 | ||||
-rw-r--r-- | src/node/coinstats.h | 1 | ||||
-rw-r--r-- | src/rpc/blockchain.cpp | 4 | ||||
-rw-r--r-- | src/rpc/util.cpp | 2 |
4 files changed, 21 insertions, 2 deletions
diff --git a/src/node/coinstats.cpp b/src/node/coinstats.cpp index cc5e3cb627..fb46ea1731 100644 --- a/src/node/coinstats.cpp +++ b/src/node/coinstats.cpp @@ -41,6 +41,17 @@ static void ApplyStats(CCoinsStats& stats, CHashWriter& ss, const uint256& hash, ss << VARINT(0u); } +static void ApplyStats(CCoinsStats& stats, std::nullptr_t, const uint256& hash, const std::map<uint32_t, Coin>& outputs) +{ + assert(!outputs.empty()); + stats.nTransactions++; + for (const auto& output : outputs) { + stats.nTransactionOutputs++; + stats.nTotalAmount += output.second.out.nValue; + stats.nBogoSize += GetBogoSize(output.second.out.scriptPubKey); + } +} + //! Calculate statistics about the unspent transaction output set template <typename T> static bool GetUTXOStats(CCoinsView* view, CCoinsStats& stats, T hash_obj, const std::function<void()>& interruption_point) @@ -93,6 +104,9 @@ bool GetUTXOStats(CCoinsView* view, CCoinsStats& stats, CoinStatsHashType hash_t CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); return GetUTXOStats(view, stats, ss, interruption_point); } + case(CoinStatsHashType::NONE): { + return GetUTXOStats(view, stats, nullptr, interruption_point); + } } // no default case, so the compiler can warn about missing cases assert(false); } @@ -102,8 +116,10 @@ static void PrepareHash(CHashWriter& ss, CCoinsStats& stats) { ss << stats.hashBlock; } +static void PrepareHash(std::nullptr_t, CCoinsStats& stats) {} static void FinalizeHash(CHashWriter& ss, CCoinsStats& stats) { stats.hashSerialized = ss.GetHash(); } +static void FinalizeHash(std::nullptr_t, CCoinsStats& stats) {} diff --git a/src/node/coinstats.h b/src/node/coinstats.h index 1d0270d56d..2a7441c10e 100644 --- a/src/node/coinstats.h +++ b/src/node/coinstats.h @@ -16,6 +16,7 @@ class CCoinsView; enum class CoinStatsHashType { HASH_SERIALIZED, + NONE, }; struct CCoinsStats diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 8ba850be11..2e9cccc2f4 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -973,7 +973,7 @@ static UniValue gettxoutsetinfo(const JSONRPCRequest& request) "\nReturns statistics about the unspent transaction output set.\n" "Note this call may take some time.\n", { - {"hash_type", RPCArg::Type::STR, /* default */ "hash_serialized_2", "Which UTXO set hash should be calculated. Options: 'hash_serialized_2' (the legacy algorithm)."}, + {"hash_type", RPCArg::Type::STR, /* default */ "hash_serialized_2", "Which UTXO set hash should be calculated. Options: 'hash_serialized_2' (the legacy algorithm), 'none'."}, }, RPCResult{ RPCResult::Type::OBJ, "", "", @@ -2322,7 +2322,7 @@ UniValue dumptxoutset(const JSONRPCRequest& request) ::ChainstateActive().ForceFlushStateToDisk(); - if (!GetUTXOStats(&::ChainstateActive().CoinsDB(), stats, CoinStatsHashType::HASH_SERIALIZED, RpcInterruptionPoint)) { + if (!GetUTXOStats(&::ChainstateActive().CoinsDB(), stats, CoinStatsHashType::NONE, RpcInterruptionPoint)) { throw JSONRPCError(RPC_INTERNAL_ERROR, "Unable to read UTXO set"); } diff --git a/src/rpc/util.cpp b/src/rpc/util.cpp index bac7c722c1..7abf966226 100644 --- a/src/rpc/util.cpp +++ b/src/rpc/util.cpp @@ -122,6 +122,8 @@ CoinStatsHashType ParseHashType(const UniValue& param, const CoinStatsHashType d if (hash_type_input == "hash_serialized_2") { return CoinStatsHashType::HASH_SERIALIZED; + } else if (hash_type_input == "none") { + return CoinStatsHashType::NONE; } else { throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("%d is not a valid hash_type", hash_type_input)); } |