Skip to content

Commit a5ff0d8

Browse files
committed
refactor: constructors of BlockAssembler using LLMQContext
New constructors uses LLMQContext instead of direct usage llmq's component. Refactoring some internal methods accordingly in rpc/mining.cpp It helps to avoid passing too many arguments and make code cleaner. Beside that it can add more components or refactor llmq/ module without chaging interface of BlockAssembler that is widely used in unit tests
1 parent acdabb9 commit a5ff0d8

10 files changed

+29
-33
lines changed

src/miner.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <governance/governance.h>
2828
#include <llmq/blockprocessor.h>
2929
#include <llmq/chainlocks.h>
30+
#include <llmq/context.h>
3031
#include <llmq/instantsend.h>
3132
#include <llmq/utils.h>
3233
#include <masternode/payments.h>
@@ -56,16 +57,15 @@ BlockAssembler::Options::Options() {
5657
}
5758

5859
BlockAssembler::BlockAssembler(const CSporkManager& sporkManager, CGovernanceManager& governanceManager,
59-
const llmq::CQuorumBlockProcessor& quorumBlockProcessor, llmq::CChainLocksHandler& clhandler,
60-
llmq::CInstantSendManager& isman, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params, const Options& options) :
60+
LLMQContext& llmq_ctx, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params, const Options& options) :
6161
chainparams(params),
6262
m_mempool(mempool),
6363
m_chainstate(chainstate),
6464
spork_manager(sporkManager),
6565
governance_manager(governanceManager),
66-
quorum_block_processor(quorumBlockProcessor),
67-
m_clhandler(clhandler),
68-
m_isman(isman),
66+
quorum_block_processor(*llmq_ctx.quorum_block_processor),
67+
m_clhandler(*llmq_ctx.clhandler),
68+
m_isman(*llmq_ctx.isman),
6969
m_evoDb(evoDb)
7070
{
7171
blockMinFeeRate = options.blockMinFeeRate;
@@ -91,9 +91,8 @@ static BlockAssembler::Options DefaultOptions()
9191
}
9292

9393
BlockAssembler::BlockAssembler(const CSporkManager& sporkManager, CGovernanceManager& governanceManager,
94-
const llmq::CQuorumBlockProcessor& quorumBlockProcessor, llmq::CChainLocksHandler& clhandler,
95-
llmq::CInstantSendManager& isman, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params)
96-
: BlockAssembler(sporkManager, governanceManager, quorumBlockProcessor, clhandler, isman, evoDb, chainstate, mempool, params, DefaultOptions()) {}
94+
LLMQContext& llmq_ctx, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params)
95+
: BlockAssembler(sporkManager, governanceManager, llmq_ctx, evoDb, chainstate, mempool, params, DefaultOptions()) {}
9796

9897
void BlockAssembler::resetBlock()
9998
{

src/miner.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class CConnman;
2323
class CGovernanceManager;
2424
class CScript;
2525
class CSporkManager;
26+
struct LLMQContext;
2627

2728
namespace Consensus { struct Params; };
2829
namespace llmq {
@@ -171,11 +172,9 @@ class BlockAssembler
171172
};
172173

173174
explicit BlockAssembler(const CSporkManager& sporkManager, CGovernanceManager& governanceManager,
174-
const llmq::CQuorumBlockProcessor& quorumBlockProcessor, llmq::CChainLocksHandler& clhandler,
175-
llmq::CInstantSendManager& isman, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params);
175+
LLMQContext& llmq_ctx, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params);
176176
explicit BlockAssembler(const CSporkManager& sporkManager, CGovernanceManager& governanceManager,
177-
const llmq::CQuorumBlockProcessor& quorumBlockProcessor, llmq::CChainLocksHandler& clhandler,
178-
llmq::CInstantSendManager& isman, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params, const Options& options);
177+
LLMQContext& llmq_ctx, CEvoDB& evoDb, CChainState& chainstate, const CTxMemPool& mempool, const CChainParams& params, const Options& options);
179178

180179
/** Construct a new block template with coinbase to scriptPubKeyIn */
181180
std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn);

src/rpc/mining.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,7 @@ static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t&
146146
}
147147

148148
static UniValue generateBlocks(ChainstateManager& chainman, const CTxMemPool& mempool, CEvoDB& evodb,
149-
llmq::CQuorumBlockProcessor& quorum_block_processor, llmq::CChainLocksHandler& clhandler,
150-
llmq::CInstantSendManager& isman, const CScript& coinbase_script, int nGenerate, uint64_t nMaxTries)
149+
LLMQContext& llmq_ctx, const CScript& coinbase_script, int nGenerate, uint64_t nMaxTries)
151150
{
152151
int nHeightEnd = 0;
153152
int nHeight = 0;
@@ -161,7 +160,7 @@ static UniValue generateBlocks(ChainstateManager& chainman, const CTxMemPool& me
161160
UniValue blockHashes(UniValue::VARR);
162161
while (nHeight < nHeightEnd && !ShutdownRequested())
163162
{
164-
std::unique_ptr<CBlockTemplate> pblocktemplate(BlockAssembler(*sporkManager, *governance, quorum_block_processor, clhandler, isman, evodb, ::ChainstateActive(), mempool, Params()).CreateNewBlock(coinbase_script));
163+
std::unique_ptr<CBlockTemplate> pblocktemplate(BlockAssembler(*sporkManager, *governance, llmq_ctx, evodb, ::ChainstateActive(), mempool, Params()).CreateNewBlock(coinbase_script));
165164
if (!pblocktemplate.get())
166165
throw JSONRPCError(RPC_INTERNAL_ERROR, "Couldn't create new block");
167166
CBlock *pblock = &pblocktemplate->block;
@@ -248,7 +247,7 @@ static UniValue generatetodescriptor(const JSONRPCRequest& request)
248247
ChainstateManager& chainman = EnsureChainman(request.context);
249248
LLMQContext& llmq_ctx = EnsureLLMQContext(request.context);
250249

251-
return generateBlocks(chainman, mempool, *node_context.evodb, *llmq_ctx.quorum_block_processor, *llmq_ctx.clhandler, *llmq_ctx.isman, coinbase_script, num_blocks, max_tries);
250+
return generateBlocks(chainman, mempool, *node_context.evodb, llmq_ctx, coinbase_script, num_blocks, max_tries);
252251
}
253252

254253
static UniValue generatetoaddress(const JSONRPCRequest& request)
@@ -287,7 +286,7 @@ static UniValue generatetoaddress(const JSONRPCRequest& request)
287286

288287
CScript coinbase_script = GetScriptForDestination(destination);
289288

290-
return generateBlocks(chainman, mempool, *node_context.evodb, *llmq_ctx.quorum_block_processor, *llmq_ctx.clhandler, *llmq_ctx.isman, coinbase_script, num_blocks, max_tries);
289+
return generateBlocks(chainman, mempool, *node_context.evodb, llmq_ctx, coinbase_script, num_blocks, max_tries);
291290
}
292291

293292
static UniValue generateblock(const JSONRPCRequest& request)
@@ -364,7 +363,7 @@ static UniValue generateblock(const JSONRPCRequest& request)
364363
LOCK(cs_main);
365364

366365
CTxMemPool empty_mempool;
367-
std::unique_ptr<CBlockTemplate> blocktemplate(BlockAssembler(*sporkManager, *governance, *llmq_ctx.quorum_block_processor, *llmq_ctx.clhandler, *llmq_ctx.isman, *node_context.evodb, ::ChainstateActive(), empty_mempool, chainparams).CreateNewBlock(coinbase_script));
366+
std::unique_ptr<CBlockTemplate> blocktemplate(BlockAssembler(*sporkManager, *governance, llmq_ctx, *node_context.evodb, ::ChainstateActive(), empty_mempool, chainparams).CreateNewBlock(coinbase_script));
368367
if (!blocktemplate) {
369368
throw JSONRPCError(RPC_INTERNAL_ERROR, "Couldn't create new block");
370369
}
@@ -773,7 +772,7 @@ static UniValue getblocktemplate(const JSONRPCRequest& request)
773772
// Create new block
774773
CScript scriptDummy = CScript() << OP_TRUE;
775774
LLMQContext& llmq_ctx = EnsureLLMQContext(request.context);
776-
pblocktemplate = BlockAssembler(*sporkManager, *governance, *llmq_ctx.quorum_block_processor, *llmq_ctx.clhandler, *llmq_ctx.isman, *node_context.evodb, ::ChainstateActive(), mempool, Params()).CreateNewBlock(scriptDummy);
775+
pblocktemplate = BlockAssembler(*sporkManager, *governance, llmq_ctx, *node_context.evodb, ::ChainstateActive(), mempool, Params()).CreateNewBlock(scriptDummy);
777776
if (!pblocktemplate)
778777
throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory");
779778

src/test/block_reward_reallocation_tests.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
175175
BOOST_ASSERT(deterministicMNManager->GetListAtChainTip().HasMN(tx.GetHash()));
176176
BOOST_CHECK(::ChainActive().Height() < Params().GetConsensus().BRRHeight);
177177
// Creating blocks by different ways
178-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
178+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
179179
}
180180
for ([[maybe_unused]] auto _ : irange::range(1999)) {
181181
CreateAndProcessBlock({}, coinbaseKey);
@@ -202,7 +202,7 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
202202
deterministicMNManager->UpdatedBlockTip(::ChainActive().Tip());
203203
BOOST_ASSERT(deterministicMNManager->GetListAtChainTip().HasMN(tx.GetHash()));
204204
auto masternode_payment = GetMasternodePayment(::ChainActive().Height(), GetBlockSubsidy(::ChainActive().Tip()->nBits, ::ChainActive().Height(), consensus_params), 2500);
205-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
205+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
206206
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, masternode_payment);
207207
}
208208

@@ -213,7 +213,7 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
213213
{
214214
LOCK(cs_main);
215215
auto masternode_payment = GetMasternodePayment(::ChainActive().Height(), GetBlockSubsidy(::ChainActive().Tip()->nBits, ::ChainActive().Height(), consensus_params), 2500);
216-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
216+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
217217
BOOST_CHECK_EQUAL(pblocktemplate->block.vtx[0]->GetValueOut(), 13748571607);
218218
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, masternode_payment);
219219
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, 6874285801); // 0.4999999998
@@ -228,7 +228,7 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
228228
}
229229
LOCK(cs_main);
230230
auto masternode_payment = GetMasternodePayment(::ChainActive().Height(), GetBlockSubsidy(::ChainActive().Tip()->nBits, ::ChainActive().Height(), consensus_params), 2500);
231-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
231+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
232232
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, masternode_payment);
233233
}
234234
}
@@ -237,7 +237,7 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
237237
// Reward split should reach ~60/40 after reallocation is done
238238
LOCK(cs_main);
239239
auto masternode_payment = GetMasternodePayment(::ChainActive().Height(), GetBlockSubsidy(::ChainActive().Tip()->nBits, ::ChainActive().Height(), consensus_params), 2500);
240-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
240+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
241241
BOOST_CHECK_EQUAL(pblocktemplate->block.vtx[0]->GetValueOut(), 10221599170);
242242
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, masternode_payment);
243243
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, 6132959502); // 0.6
@@ -251,15 +251,15 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
251251
}
252252
LOCK(cs_main);
253253
auto masternode_payment = GetMasternodePayment(::ChainActive().Height(), GetBlockSubsidy(::ChainActive().Tip()->nBits, ::ChainActive().Height(), consensus_params), 2500);
254-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
254+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
255255
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, masternode_payment);
256256
}
257257

258258
{
259259
// Reward split should reach ~60/40 after reallocation is done
260260
LOCK(cs_main);
261261
auto masternode_payment = GetMasternodePayment(::ChainActive().Height(), GetBlockSubsidy(::ChainActive().Tip()->nBits, ::ChainActive().Height(), consensus_params), 2500);
262-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
262+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
263263
BOOST_CHECK_EQUAL(pblocktemplate->block.vtx[0]->GetValueOut(), 9491484944);
264264
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, masternode_payment);
265265
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, 5694890966); // 0.6

src/test/blockfilter_index_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ CBlock BuildChainTestingSetup::CreateBlock(const CBlockIndex* prev,
6969
const CScript& scriptPubKey)
7070
{
7171
const CChainParams& chainparams = Params();
72-
std::unique_ptr<CBlockTemplate> pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, chainparams).CreateNewBlock(scriptPubKey);
72+
std::unique_ptr<CBlockTemplate> pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, chainparams).CreateNewBlock(scriptPubKey);
7373
CBlock& block = pblocktemplate->block;
7474
block.hashPrevBlock = prev->GetBlockHash();
7575
block.nTime = prev->nTime + 1;

src/test/dynamic_activation_thresholds_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ struct TestChainDATSetup : public TestChainSetup
7979
BOOST_CHECK_EQUAL(VersionBitsState(::ChainActive().Tip(), consensus_params, deployment_id, versionbitscache), ThresholdState::STARTED);
8080
BOOST_CHECK_EQUAL(VersionBitsStatistics(::ChainActive().Tip(), consensus_params, deployment_id, versionbitscache).threshold, threshold(0));
8181
// Next block should be signaling by default
82-
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
82+
const auto pblocktemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(coinbasePubKey);
8383
const uint32_t bitmask = ((uint32_t)1) << consensus_params.vDeployments[deployment_id].bit;
8484
BOOST_CHECK_EQUAL(::ChainActive().Tip()->nVersion & bitmask, 0);
8585
BOOST_CHECK_EQUAL(pblocktemplate->block.nVersion & bitmask, bitmask);

src/test/miner_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ BlockAssembler MinerTestingSetup::AssemblerForTest(const CChainParams& params)
5151

5252
options.nBlockMaxSize = DEFAULT_BLOCK_MAX_SIZE;
5353
options.blockMinFeeRate = blockMinFeeRate;
54-
return BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, params, options);
54+
return BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, params, options);
5555
}
5656

5757
constexpr static struct {

src/test/util/mining.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coi
4949
{
5050
assert(node.mempool);
5151
auto block = std::make_shared<CBlock>(
52-
BlockAssembler{*sporkManager, *governance, *node.llmq_ctx->quorum_block_processor, *node.llmq_ctx->clhandler, *node.llmq_ctx->isman, *node.evodb, ::ChainstateActive(), *node.mempool, Params()}
52+
BlockAssembler{*sporkManager, *governance, *node.llmq_ctx, *node.evodb, ::ChainstateActive(), *node.mempool, Params()}
5353
.CreateNewBlock(coinbase_scriptPubKey)
5454
->block);
5555

src/test/util/setup_common.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,7 @@ CBlock TestChainSetup::CreateBlock(const std::vector<CMutableTransaction>& txns,
341341
const CChainParams& chainparams = Params();
342342
CTxMemPool empty_pool;
343343
CBlock block = BlockAssembler(
344-
*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor,
345-
*m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb,
344+
*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb,
346345
::ChainstateActive(), empty_pool, chainparams
347346
).CreateNewBlock(scriptPubKey)->block;
348347

src/test/validation_block_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ std::shared_ptr<CBlock> MinerTestingSetup::Block(const uint256& prev_hash)
7575
CScript pubKey;
7676
pubKey << i++ << OP_TRUE;
7777

78-
auto ptemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx->quorum_block_processor, *m_node.llmq_ctx->clhandler, *m_node.llmq_ctx->isman, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(pubKey);
78+
auto ptemplate = BlockAssembler(*sporkManager, *governance, *m_node.llmq_ctx, *m_node.evodb, ::ChainstateActive(), *m_node.mempool, Params()).CreateNewBlock(pubKey);
7979
auto pblock = std::make_shared<CBlock>(ptemplate->block);
8080
pblock->hashPrevBlock = prev_hash;
8181
pblock->nTime = ++time;

0 commit comments

Comments
 (0)