@@ -77,30 +77,9 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
77
77
pblocktree.reset ();
78
78
pblocktree.reset (new CBlockTreeDB (nBlockTreeDBCache, block_tree_db_in_memory, fReset ));
79
79
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);
104
83
105
84
if (fReset ) {
106
85
pblocktree->WriteReindexing (true );
@@ -229,6 +208,70 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
229
208
return std::nullopt;
230
209
}
231
210
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
+
232
275
std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate (ChainstateManager& chainman,
233
276
CEvoDB& evodb,
234
277
bool fReset ,
0 commit comments