From 72ec3882447d489ab8f708b9e3ff2ea2422401c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc?= Date: Mon, 9 Dec 2024 14:02:49 +0100 Subject: [PATCH] rpc: Fix utxo_size_inc(_actual) calculation `nHeight` and `fCoinBase` are stored in `Coin` as bitfields and are serialized as a single 32 bit number, so the UTXO overhead calculation shouldn't include an additional boolean --- src/rpc/blockchain.cpp | 4 ++-- test/functional/data/rpc_getblockstats.json | 12 ++++++------ test/functional/rpc_getblockstats.py | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 52440464d82..d6553ddbf49 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1828,8 +1828,8 @@ static inline bool SetHasKeys(const std::set& set, const Tk& key, const Args& return (set.count(key) != 0) || SetHasKeys(set, args...); } -// outpoint (needed for the utxo index) + nHeight + fCoinBase -static constexpr size_t PER_UTXO_OVERHEAD = sizeof(COutPoint) + sizeof(uint32_t) + sizeof(bool); +// outpoint (needed for the utxo index) + nHeight|fCoinBase +static constexpr size_t PER_UTXO_OVERHEAD = sizeof(COutPoint) + sizeof(uint32_t); static RPCHelpMan getblockstats() { diff --git a/test/functional/data/rpc_getblockstats.json b/test/functional/data/rpc_getblockstats.json index 7d7460aacc8..e0c0eb39fbc 100644 --- a/test/functional/data/rpc_getblockstats.json +++ b/test/functional/data/rpc_getblockstats.json @@ -143,8 +143,8 @@ "txs": 1, "utxo_increase": 2, "utxo_increase_actual": 1, - "utxo_size_inc": 163, - "utxo_size_inc_actual": 75 + "utxo_size_inc": 161, + "utxo_size_inc_actual": 74 }, { "avgfee": 4440, @@ -182,8 +182,8 @@ "txs": 2, "utxo_increase": 3, "utxo_increase_actual": 2, - "utxo_size_inc": 235, - "utxo_size_inc_actual": 147 + "utxo_size_inc": 232, + "utxo_size_inc_actual": 145 }, { "avgfee": 21390, @@ -221,8 +221,8 @@ "txs": 5, "utxo_increase": 6, "utxo_increase_actual": 4, - "utxo_size_inc": 441, - "utxo_size_inc_actual": 300 + "utxo_size_inc": 435, + "utxo_size_inc_actual": 296 } ] } \ No newline at end of file diff --git a/test/functional/rpc_getblockstats.py b/test/functional/rpc_getblockstats.py index 002763201a5..11dd1cdae1f 100755 --- a/test/functional/rpc_getblockstats.py +++ b/test/functional/rpc_getblockstats.py @@ -171,16 +171,16 @@ class GetblockstatsTest(BitcoinTestFramework): genesis_stats = self.nodes[0].getblockstats(0) assert_equal(genesis_stats["blockhash"], "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206") assert_equal(genesis_stats["utxo_increase"], 1) - assert_equal(genesis_stats["utxo_size_inc"], 117) + assert_equal(genesis_stats["utxo_size_inc"], 116) assert_equal(genesis_stats["utxo_increase_actual"], 0) assert_equal(genesis_stats["utxo_size_inc_actual"], 0) self.log.info('Test tip including OP_RETURN') tip_stats = self.nodes[0].getblockstats(tip) assert_equal(tip_stats["utxo_increase"], 6) - assert_equal(tip_stats["utxo_size_inc"], 441) + assert_equal(tip_stats["utxo_size_inc"], 435) assert_equal(tip_stats["utxo_increase_actual"], 4) - assert_equal(tip_stats["utxo_size_inc_actual"], 300) + assert_equal(tip_stats["utxo_size_inc_actual"], 296) self.log.info("Test when only header is known") block = self.generateblock(self.nodes[0], output="raw(55)", transactions=[], submit=False)