forked from dashpay/dash
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontext.cpp
More file actions
122 lines (109 loc) · 5.38 KB
/
context.cpp
File metadata and controls
122 lines (109 loc) · 5.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Copyright (c) 2025 The Dash Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <active/context.h>
#include <active/dkgsessionhandler.h>
#include <active/masternode.h>
#include <active/quorums.h>
#include <chainlock/chainlock.h>
#include <chainlock/signing.h>
#include <governance/governance.h>
#include <governance/signing.h>
#include <instantsend/instantsend.h>
#include <instantsend/signing.h>
#include <llmq/context.h>
#include <llmq/debug.h>
#include <llmq/dkgsessionmgr.h>
#include <llmq/ehf_signals.h>
#include <llmq/quorumsman.h>
#include <llmq/signing_shares.h>
#include <util/check.h>
#include <validation.h>
ActiveContext::ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman, CConnman& connman,
CDeterministicMNManager& dmnman, CGovernanceManager& govman,
CMasternodeMetaMan& mn_metaman, CMNHFManager& mnhfman, CSporkManager& sporkman,
CTxMemPool& mempool, llmq::CChainLocksHandler& clhandler, llmq::CInstantSendManager& isman,
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumManager& qman,
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman,
PeerManager& peerman, const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
bool quorums_recovery, bool quorums_watch) :
m_clhandler{clhandler},
m_isman{isman},
m_qman{qman},
nodeman{std::make_unique<CActiveMasternodeManager>(connman, dmnman, operator_sk)},
dkgdbgman{std::make_unique<llmq::CDKGDebugManager>()},
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(dmnman, qsnapman, chainman, sporkman, db_params, quorums_watch)},
shareman{std::make_unique<llmq::CSigSharesManager>(connman, chainman.ActiveChainstate(), sigman, peerman, *nodeman,
qman, sporkman)},
gov_signer{std::make_unique<GovernanceSigner>(connman, dmnman, govman, *nodeman, chainman, mn_sync)},
ehf_sighandler{std::make_unique<llmq::CEHFSignalsHandler>(chainman, mnhfman, sigman, *shareman, qman)},
qman_handler{std::make_unique<llmq::QuorumParticipant>(bls_worker, connman, dmnman, qman, qsnapman, *nodeman, chainman,
mn_sync, sporkman, sync_map, quorums_recovery, quorums_watch)},
cl_signer{std::make_unique<chainlock::ChainLockSigner>(chainman.ActiveChainstate(), clhandler, sigman, *shareman,
sporkman, mn_sync)},
is_signer{std::make_unique<instantsend::InstantSendSigner>(chainman.ActiveChainstate(), clhandler, isman, sigman,
*shareman, qman, sporkman, mempool, mn_sync)}
{
qdkgsman->InitializeHandlers([&](const Consensus::LLMQParams& llmq_params,
int quorum_idx) -> std::unique_ptr<llmq::ActiveDKGSessionHandler> {
return std::make_unique<llmq::ActiveDKGSessionHandler>(bls_worker, dmnman, mn_metaman, *dkgdbgman, *qdkgsman,
qblockman, qsnapman, *nodeman, chainman, sporkman,
llmq_params, quorums_watch, quorum_idx);
});
m_clhandler.ConnectSigner(cl_signer.get());
m_isman.ConnectSigner(is_signer.get());
m_qman.ConnectManagers(qman_handler.get(), qdkgsman.get());
}
ActiveContext::~ActiveContext()
{
m_qman.DisconnectManagers();
m_isman.DisconnectSigner();
m_clhandler.DisconnectSigner();
}
void ActiveContext::Interrupt()
{
shareman->InterruptWorkerThread();
}
void ActiveContext::Start(CConnman& connman, PeerManager& peerman)
{
qman_handler->Start();
qdkgsman->StartThreads(connman, peerman);
shareman->Start();
cl_signer->RegisterRecoveryInterface();
is_signer->RegisterRecoveryInterface();
shareman->RegisterRecoveryInterface();
}
void ActiveContext::Stop()
{
shareman->UnregisterRecoveryInterface();
is_signer->UnregisterRecoveryInterface();
cl_signer->UnregisterRecoveryInterface();
shareman->Stop();
qdkgsman->StopThreads();
qman_handler->Stop();
}
CCoinJoinServer& ActiveContext::GetCJServer() const
{
return *Assert(m_cj_server);
}
void ActiveContext::SetCJServer(gsl::not_null<CCoinJoinServer*> cj_server)
{
// Prohibit double initialization
assert(m_cj_server == nullptr);
m_cj_server = cj_server;
}
void ActiveContext::UpdatedBlockTip(const CBlockIndex* pindexNew, const CBlockIndex* pindexFork, bool fInitialDownload)
{
if (fInitialDownload || pindexNew == pindexFork) // In IBD or blocks were disconnected without any new ones
return;
nodeman->UpdatedBlockTip(pindexNew, pindexFork, fInitialDownload);
ehf_sighandler->UpdatedBlockTip(pindexNew);
gov_signer->UpdatedBlockTip(pindexNew);
qdkgsman->UpdatedBlockTip(pindexNew, fInitialDownload);
qman_handler->UpdatedBlockTip(pindexNew, fInitialDownload);
}
void ActiveContext::NotifyRecoveredSig(const std::shared_ptr<const llmq::CRecoveredSig>& sig, bool proactive_relay)
{
shareman->NotifyRecoveredSig(sig, proactive_relay);
}