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
This commit is contained in:
Lőrinc 2024-12-09 14:02:49 +01:00
parent ff9d484876
commit 72ec388244
3 changed files with 11 additions and 11 deletions

View file

@ -1828,8 +1828,8 @@ static inline bool SetHasKeys(const std::set<T>& set, const Tk& key, const Args&
return (set.count(key) != 0) || SetHasKeys(set, args...); return (set.count(key) != 0) || SetHasKeys(set, args...);
} }
// outpoint (needed for the utxo index) + nHeight + fCoinBase // outpoint (needed for the utxo index) + nHeight|fCoinBase
static constexpr size_t PER_UTXO_OVERHEAD = sizeof(COutPoint) + sizeof(uint32_t) + sizeof(bool); static constexpr size_t PER_UTXO_OVERHEAD = sizeof(COutPoint) + sizeof(uint32_t);
static RPCHelpMan getblockstats() static RPCHelpMan getblockstats()
{ {

View file

@ -143,8 +143,8 @@
"txs": 1, "txs": 1,
"utxo_increase": 2, "utxo_increase": 2,
"utxo_increase_actual": 1, "utxo_increase_actual": 1,
"utxo_size_inc": 163, "utxo_size_inc": 161,
"utxo_size_inc_actual": 75 "utxo_size_inc_actual": 74
}, },
{ {
"avgfee": 4440, "avgfee": 4440,
@ -182,8 +182,8 @@
"txs": 2, "txs": 2,
"utxo_increase": 3, "utxo_increase": 3,
"utxo_increase_actual": 2, "utxo_increase_actual": 2,
"utxo_size_inc": 235, "utxo_size_inc": 232,
"utxo_size_inc_actual": 147 "utxo_size_inc_actual": 145
}, },
{ {
"avgfee": 21390, "avgfee": 21390,
@ -221,8 +221,8 @@
"txs": 5, "txs": 5,
"utxo_increase": 6, "utxo_increase": 6,
"utxo_increase_actual": 4, "utxo_increase_actual": 4,
"utxo_size_inc": 441, "utxo_size_inc": 435,
"utxo_size_inc_actual": 300 "utxo_size_inc_actual": 296
} }
] ]
} }

View file

@ -171,16 +171,16 @@ class GetblockstatsTest(BitcoinTestFramework):
genesis_stats = self.nodes[0].getblockstats(0) genesis_stats = self.nodes[0].getblockstats(0)
assert_equal(genesis_stats["blockhash"], "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206") assert_equal(genesis_stats["blockhash"], "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")
assert_equal(genesis_stats["utxo_increase"], 1) 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_increase_actual"], 0)
assert_equal(genesis_stats["utxo_size_inc_actual"], 0) assert_equal(genesis_stats["utxo_size_inc_actual"], 0)
self.log.info('Test tip including OP_RETURN') self.log.info('Test tip including OP_RETURN')
tip_stats = self.nodes[0].getblockstats(tip) tip_stats = self.nodes[0].getblockstats(tip)
assert_equal(tip_stats["utxo_increase"], 6) 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_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") self.log.info("Test when only header is known")
block = self.generateblock(self.nodes[0], output="raw(55)", transactions=[], submit=False) block = self.generateblock(self.nodes[0], output="raw(55)", transactions=[], submit=False)