mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-28 16:36:04 +01:00
Merge bitcoin/bitcoin#26695: bench: BlockAssembler on a mempool with packages
04528054fc[bench] BlockAssembler with mempool packages (glozow)6ce265acf4[test util] lock cs_main before pool.cs in PopulateMempool (glozow)8791410662[test util] randomize fee in PopulateMempool (glozow)cba5934eb6[miner] allow bypassing TestBlockValidity (glozow)c058852308[refactor] parameterize BlockAssembler::Options in PrepareBlock (glozow)a2de971ba1[refactor] add helper to apply ArgsManager to BlockAssembler::Options (glozow) Pull request description: Performance of block template building matters as miners likely want to be able to start mining on a block with transactions asap after a block is found. We would want to know if a mempool PR accidentally caused, for example, a 100x slowdown. An `AssembleBlock()` bench exists, but it operates on a mempool with 101 transactions, each with 0 ancestors or descendants and with the same fee. Adding a bench with a more complex mempool is useful because (1) it's more realistic (2) updating packages can potentially cause the algorithm to take a long time. ACKs for top commit: kevkevinpal: Tested ACK [0452805](04528054fc) achow101: ACK04528054fcstickies-v: ACK04528054fTree-SHA512: 38c138d6a75616651f9b1faf4e3a1cd833437a486f4e84308fbee958e8462bb570582c88f7ba7ab99d80191e97855ac2cf27c43cc21585d3e4b0e227effe2fb5
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
#include <consensus/merkle.h>
|
||||
#include <key_io.h>
|
||||
#include <node/context.h>
|
||||
#include <node/miner.h>
|
||||
#include <pow.h>
|
||||
#include <script/standard.h>
|
||||
#include <test/util/script.h>
|
||||
@@ -74,10 +73,11 @@ CTxIn MineBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
|
||||
return CTxIn{block->vtx[0]->GetHash(), 0};
|
||||
}
|
||||
|
||||
std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
|
||||
std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey,
|
||||
const BlockAssembler::Options& assembler_options)
|
||||
{
|
||||
auto block = std::make_shared<CBlock>(
|
||||
BlockAssembler{Assert(node.chainman)->ActiveChainstate(), Assert(node.mempool.get())}
|
||||
BlockAssembler{Assert(node.chainman)->ActiveChainstate(), Assert(node.mempool.get()), assembler_options}
|
||||
.CreateNewBlock(coinbase_scriptPubKey)
|
||||
->block);
|
||||
|
||||
@@ -87,3 +87,9 @@ std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coi
|
||||
|
||||
return block;
|
||||
}
|
||||
std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
|
||||
{
|
||||
BlockAssembler::Options assembler_options;
|
||||
ApplyArgsManOptions(*node.args, assembler_options);
|
||||
return PrepareBlock(node, coinbase_scriptPubKey, assembler_options);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user