diff options
author | Carl Dong <contact@carldong.me> | 2020-11-04 19:25:46 -0500 |
---|---|---|
committer | Carl Dong <contact@carldong.me> | 2021-03-08 15:54:31 -0500 |
commit | d0de61b764fc7e9c670b69d8210705da296dd245 (patch) | |
tree | f77ba3e226caf128dd2cf2a826d87c6ce812376e /src | |
parent | a04aac493fd564894166d58ed4cdfd9ad4f561cb (diff) |
miner: Pass in chainstate to BlockAssembler::CreateNewBlock
Diffstat (limited to 'src')
-rw-r--r-- | src/miner.cpp | 11 | ||||
-rw-r--r-- | src/miner.h | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/miner.cpp b/src/miner.cpp index 076d43c951..e0e5ad41fe 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -101,6 +101,11 @@ Optional<int64_t> BlockAssembler::m_last_block_weight{nullopt}; std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& scriptPubKeyIn) { + return CreateNewBlock(::ChainstateActive(), scriptPubKeyIn); +} + +std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(CChainState& chainstate, const CScript& scriptPubKeyIn) +{ int64_t nTimeStart = GetTimeMicros(); resetBlock(); @@ -117,7 +122,8 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc pblocktemplate->vTxSigOpsCost.push_back(-1); // updated at end LOCK2(cs_main, m_mempool.cs); - CBlockIndex* pindexPrev = ::ChainActive().Tip(); + assert(std::addressof(*::ChainActive().Tip()) == std::addressof(*chainstate.m_chain.Tip())); + CBlockIndex* pindexPrev = chainstate.m_chain.Tip(); assert(pindexPrev != nullptr); nHeight = pindexPrev->nHeight + 1; @@ -176,7 +182,8 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc pblocktemplate->vTxSigOpsCost[0] = WITNESS_SCALE_FACTOR * GetLegacySigOpCount(*pblock->vtx[0]); BlockValidationState state; - if (!TestBlockValidity(state, chainparams, ::ChainstateActive(), *pblock, pindexPrev, false, false)) { + assert(std::addressof(::ChainstateActive()) == std::addressof(chainstate)); + if (!TestBlockValidity(state, chainparams, chainstate, *pblock, pindexPrev, false, false)) { throw std::runtime_error(strprintf("%s: TestBlockValidity failed: %s", __func__, state.ToString())); } int64_t nTime2 = GetTimeMicros(); diff --git a/src/miner.h b/src/miner.h index 9a2b7063f4..95f267e491 100644 --- a/src/miner.h +++ b/src/miner.h @@ -159,6 +159,7 @@ public: /** Construct a new block template with coinbase to scriptPubKeyIn */ std::unique_ptr<CBlockTemplate> CreateNewBlock(const CScript& scriptPubKeyIn); + std::unique_ptr<CBlockTemplate> CreateNewBlock(CChainState& chainstate, const CScript& scriptPubKeyIn); static Optional<int64_t> m_last_block_num_txs; static Optional<int64_t> m_last_block_weight; |