diff options
| author | bitflash-maintainer <noreply@bitflash.invalid> | 2026-09-02 14:23:50 +0000 |
|---|---|---|
| committer | bitflash-maintainer <noreply@bitflash.invalid> | 2026-09-02 14:23:50 +0000 |
| commit | ff6af901eaab61b6dbba41bb80f7bb2f40980880 (patch) | |
| tree | f5d43b200dd7cfc165d29487c8a354fcd91fc85e /src/imgui/imgui.cpp | |
| parent | 2ed8fae6088c99f1a5dfcfd760c1a24c2b2706db (diff) | |
selftest: cover the assembly half of the block limits
consensus-limits only ever asked what CheckBlock() refuses. Nothing asked what
the assemblers produce, which is why a miner able to overshoot the cap by an
entire mempool sat here unnoticed through both the deployed and candidate
builds.
Adds the other half: a template built from a 3 MB mempool stays inside the
budget and passes CheckSizeLimits(); a transaction too big for the budget is
skipped while the ones that fit are still taken; sigop-heavy transactions stop
selection at MAX_BLOCK_SIGOPS while the block is still small. Plus the rule's
edges, including that sigops exactly on the limit fit -- CheckBlock() fails on
`>`, so assembly must accept what validation accepts.
The test drives BlockTemplateFits the way the assemblers drive it rather than
calling them: BitcoinMiner needs a CTxDB, a wallet key and cs_main, and
RebuildJob is static in rpc.cpp. What that proves is the shared rule and the
property it exists to give, which is where the defect was -- the budget was
right and the enforcement was not.
Checked against the bug: with the fit test neutered, eight of these fail,
including both templates that CheckBlock() would have rejected. With the sigop
comparison stricter than CheckBlock's by one, the boundary case fails.
Diffstat (limited to 'src/imgui/imgui.cpp')
0 files changed, 0 insertions, 0 deletions