Have createNewBlock() wait for a tip

- return null on shutdown instead of the last tip
- ignore timeout value node initialization

This allows consumers of BlockTemplate to safely
assume that a tip is connected, instead of having
to account for startup and early shutdown scenarios.
This commit is contained in:
Sjors Provoost
2025-02-03 18:11:00 +01:00
parent 64a2795fd4
commit 5315278e7c
2 changed files with 8 additions and 2 deletions

View File

@@ -1102,6 +1102,9 @@ public:
std::unique_ptr<BlockTemplate> createNewBlock(const BlockCreateOptions& options) override
{
// Ensure m_tip_block is set so consumers of BlockTemplate can rely on that.
if (!waitTipChanged(uint256::ZERO, MillisecondsDouble::max())) return {};
BlockAssembler::Options assemble_options{options};
ApplyArgsManOptions(*Assert(m_node.args), assemble_options);
return std::make_unique<BlockTemplateImpl>(assemble_options, BlockAssembler{chainman().ActiveChainstate(), context()->mempool.get(), assemble_options}.CreateNewBlock(), m_node);