Skip to content

Commit 459f339

Browse files
committed
node/chainstate: extract Dash post-InitializeChainstate logic
1 parent c06e074 commit 459f339

File tree

3 files changed

+96
-33
lines changed

3 files changed

+96
-33
lines changed

src/init.cpp

+2-9
Original file line numberDiff line numberDiff line change
@@ -335,15 +335,8 @@ void PrepareShutdown(NodeContext& node)
335335
chainstate->ResetCoinsViews();
336336
}
337337
}
338-
node.chain_helper.reset();
339-
if (node.mnhf_manager) {
340-
node.mnhf_manager->DisconnectManagers();
341-
}
342-
node.llmq_ctx.reset();
343-
llmq::quorumSnapshotManager.reset();
344-
node.mempool->DisconnectManagers();
345-
node.dmnman.reset();
346-
node.cpoolman.reset();
338+
DashChainstateSetupClose(node.chain_helper, node.cpoolman, node.dmnman, node.mnhf_manager,
339+
llmq::quorumSnapshotManager, node.llmq_ctx, Assert(node.mempool.get()));
347340
node.mnhf_manager.reset();
348341
node.evodb.reset();
349342
}

src/node/chainstate.cpp

+67-24
Original file line numberDiff line numberDiff line change
@@ -77,30 +77,9 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
7777
pblocktree.reset();
7878
pblocktree.reset(new CBlockTreeDB(nBlockTreeDBCache, block_tree_db_in_memory, fReset));
7979

80-
// Same logic as above with pblocktree
81-
dmnman.reset();
82-
dmnman = std::make_unique<CDeterministicMNManager>(chainman.ActiveChainstate(), *evodb);
83-
mempool->ConnectManagers(dmnman.get());
84-
85-
cpoolman.reset();
86-
cpoolman = std::make_unique<CCreditPoolManager>(*evodb);
87-
88-
qsnapman.reset();
89-
qsnapman.reset(new llmq::CQuorumSnapshotManager(*evodb));
90-
91-
if (llmq_ctx) {
92-
llmq_ctx->Interrupt();
93-
llmq_ctx->Stop();
94-
}
95-
llmq_ctx.reset();
96-
llmq_ctx = std::make_unique<LLMQContext>(chainman, *dmnman, *evodb, mn_metaman, *mnhf_manager, sporkman,
97-
*mempool, mn_activeman.get(), mn_sync, /*unit_tests=*/false, /*wipe=*/fReset || fReindexChainState);
98-
// Enable CMNHFManager::{Process, Undo}Block
99-
mnhf_manager->ConnectManagers(&chainman, llmq_ctx->qman.get());
100-
101-
chain_helper.reset();
102-
chain_helper = std::make_unique<CChainstateHelper>(*cpoolman, *dmnman, *mnhf_manager, govman, *(llmq_ctx->quorum_block_processor), chainman,
103-
consensus_params, mn_sync, sporkman, *(llmq_ctx->clhandler), *(llmq_ctx->qman));
80+
DashChainstateSetup(chainman, govman, mn_metaman, mn_sync, sporkman, mn_activeman, chain_helper, cpoolman,
81+
dmnman, evodb, mnhf_manager, qsnapman, llmq_ctx, mempool, fReset, fReindexChainState,
82+
consensus_params);
10483

10584
if (fReset) {
10685
pblocktree->WriteReindexing(true);
@@ -229,6 +208,70 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
229208
return std::nullopt;
230209
}
231210

211+
void DashChainstateSetup(ChainstateManager& chainman,
212+
CGovernanceManager& govman,
213+
CMasternodeMetaMan& mn_metaman,
214+
CMasternodeSync& mn_sync,
215+
CSporkManager& sporkman,
216+
std::unique_ptr<CActiveMasternodeManager>& mn_activeman,
217+
std::unique_ptr<CChainstateHelper>& chain_helper,
218+
std::unique_ptr<CCreditPoolManager>& cpoolman,
219+
std::unique_ptr<CDeterministicMNManager>& dmnman,
220+
std::unique_ptr<CEvoDB>& evodb,
221+
std::unique_ptr<CMNHFManager>& mnhf_manager,
222+
std::unique_ptr<llmq::CQuorumSnapshotManager>& qsnapman,
223+
std::unique_ptr<LLMQContext>& llmq_ctx,
224+
CTxMemPool* mempool,
225+
bool fReset,
226+
bool fReindexChainState,
227+
const Consensus::Params& consensus_params)
228+
{
229+
// Same logic as pblocktree
230+
dmnman.reset();
231+
dmnman = std::make_unique<CDeterministicMNManager>(chainman.ActiveChainstate(), *evodb);
232+
mempool->ConnectManagers(dmnman.get());
233+
234+
cpoolman.reset();
235+
cpoolman = std::make_unique<CCreditPoolManager>(*evodb);
236+
237+
qsnapman.reset();
238+
qsnapman.reset(new llmq::CQuorumSnapshotManager(*evodb));
239+
240+
if (llmq_ctx) {
241+
llmq_ctx->Interrupt();
242+
llmq_ctx->Stop();
243+
}
244+
llmq_ctx.reset();
245+
llmq_ctx = std::make_unique<LLMQContext>(chainman, *dmnman, *evodb, mn_metaman, *mnhf_manager, sporkman,
246+
*mempool, mn_activeman.get(), mn_sync, /*unit_tests=*/false, /*wipe=*/fReset || fReindexChainState);
247+
// Enable CMNHFManager::{Process, Undo}Block
248+
mnhf_manager->ConnectManagers(&chainman, llmq_ctx->qman.get());
249+
250+
chain_helper.reset();
251+
chain_helper = std::make_unique<CChainstateHelper>(*cpoolman, *dmnman, *mnhf_manager, govman, *(llmq_ctx->quorum_block_processor), chainman,
252+
consensus_params, mn_sync, sporkman, *(llmq_ctx->clhandler), *(llmq_ctx->qman));
253+
}
254+
255+
void DashChainstateSetupClose(std::unique_ptr<CChainstateHelper>& chain_helper,
256+
std::unique_ptr<CCreditPoolManager>& cpoolman,
257+
std::unique_ptr<CDeterministicMNManager>& dmnman,
258+
std::unique_ptr<CMNHFManager>& mnhf_manager,
259+
std::unique_ptr<llmq::CQuorumSnapshotManager>& qsnapman,
260+
std::unique_ptr<LLMQContext>& llmq_ctx,
261+
CTxMemPool* mempool)
262+
263+
{
264+
chain_helper.reset();
265+
if (mnhf_manager) {
266+
mnhf_manager->DisconnectManagers();
267+
}
268+
llmq_ctx.reset();
269+
qsnapman.reset();
270+
cpoolman.reset();
271+
mempool->DisconnectManagers();
272+
dmnman.reset();
273+
}
274+
232275
std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManager& chainman,
233276
CEvoDB& evodb,
234277
bool fReset,

src/node/chainstate.h

+27
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,33 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
115115
std::function<bool()> shutdown_requested = nullptr,
116116
std::function<void()> coins_error_cb = nullptr);
117117

118+
/** Initialize Dash-specific components during chainstate initialization */
119+
void DashChainstateSetup(ChainstateManager& chainman,
120+
CGovernanceManager& govman,
121+
CMasternodeMetaMan& mn_metaman,
122+
CMasternodeSync& mn_sync,
123+
CSporkManager& sporkman,
124+
std::unique_ptr<CActiveMasternodeManager>& mn_activeman,
125+
std::unique_ptr<CChainstateHelper>& chain_helper,
126+
std::unique_ptr<CCreditPoolManager>& cpoolman,
127+
std::unique_ptr<CDeterministicMNManager>& dmnman,
128+
std::unique_ptr<CEvoDB>& evodb,
129+
std::unique_ptr<CMNHFManager>& mnhf_manager,
130+
std::unique_ptr<llmq::CQuorumSnapshotManager>& qsnapman,
131+
std::unique_ptr<LLMQContext>& llmq_ctx,
132+
CTxMemPool* mempool,
133+
bool fReset,
134+
bool fReindexChainState,
135+
const Consensus::Params& consensus_params);
136+
137+
void DashChainstateSetupClose(std::unique_ptr<CChainstateHelper>& chain_helper,
138+
std::unique_ptr<CCreditPoolManager>& cpoolman,
139+
std::unique_ptr<CDeterministicMNManager>& dmnman,
140+
std::unique_ptr<CMNHFManager>& mnhf_manager,
141+
std::unique_ptr<llmq::CQuorumSnapshotManager>& qsnapman,
142+
std::unique_ptr<LLMQContext>& llmq_ctx,
143+
CTxMemPool* mempool);
144+
118145
enum class ChainstateLoadVerifyError {
119146
ERROR_BLOCK_FROM_FUTURE,
120147
ERROR_CORRUPTED_BLOCK_DB,

0 commit comments

Comments
 (0)