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...);
}
// 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()
{

View File

@ -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
}
]
}

View File

@ -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)