Skip to content

Commit 19b2ee5

Browse files
committed
refactor: merge ActiveNotificationInterface into ActiveContext
Now that `ActiveNotificationInterface` exclusively calls `ActiveContext` we can now merge them together. Also: - Drop `LLMQContext` from `ActiveContext`, only import what we use
1 parent f0468e6 commit 19b2ee5

File tree

6 files changed

+81
-133
lines changed

6 files changed

+81
-133
lines changed

src/Makefile.am

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,6 @@ BITCOIN_CORE_H = \
295295
logging/timer.h \
296296
mapport.h \
297297
masternode/active/context.h \
298-
masternode/active/notificationinterface.h \
299298
masternode/node.h \
300299
masternode/meta.h \
301300
masternode/payments.h \
@@ -567,7 +566,6 @@ libbitcoin_node_a_SOURCES = \
567566
llmq/observer/quorums.cpp \
568567
mapport.cpp \
569568
masternode/active/context.cpp \
570-
masternode/active/notificationinterface.cpp \
571569
masternode/node.cpp \
572570
masternode/meta.cpp \
573571
masternode/payments.cpp \

src/init.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@
9898
#include <llmq/options.h>
9999
#include <llmq/observer/context.h>
100100
#include <masternode/active/context.h>
101-
#include <masternode/active/notificationinterface.h>
102101
#include <masternode/meta.h>
103102
#include <masternode/node.h>
104103
#include <masternode/sync.h>
@@ -353,9 +352,8 @@ void PrepareShutdown(NodeContext& node)
353352
UnregisterValidationInterface(node.observer_ctx.get());
354353
}
355354

356-
if (g_active_notification_interface) {
357-
UnregisterValidationInterface(g_active_notification_interface.get());
358-
g_active_notification_interface.reset();
355+
if (node.active_ctx) {
356+
UnregisterValidationInterface(node.active_ctx.get());
359357
}
360358

361359
if (node.cj_walletman) {
@@ -2190,7 +2188,6 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
21902188

21912189
// ********************************************************* Step 7c: Setup masternode mode or watch-only mode
21922190
assert(!node.active_ctx);
2193-
assert(!g_active_notification_interface);
21942191
assert(!node.observer_ctx);
21952192

21962193
const bool quorums_recovery = args.GetBoolArg("-llmq-data-recovery", llmq::DEFAULT_ENABLE_QUORUM_DATA_RECOVERY);
@@ -2203,11 +2200,11 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
22032200
return InitError(_("Invalid masternodeblsprivkey. Please see documentation."));
22042201
}
22052202
// Will init later in ThreadImport
2206-
node.active_ctx = std::make_unique<ActiveContext>(*node.connman, *node.dmnman, *node.govman, chainman, *node.mn_metaman, *node.mnhf_manager,
2207-
*node.sporkman, *node.mempool, *node.llmq_ctx, *node.peerman, *node.mn_sync, operator_sk,
2208-
sync_map, dash_db_params, quorums_recovery, quorums_watch);
2209-
g_active_notification_interface = std::make_unique<ActiveNotificationInterface>(*node.active_ctx);
2210-
RegisterValidationInterface(g_active_notification_interface.get());
2203+
node.active_ctx = std::make_unique<ActiveContext>(*node.llmq_ctx->bls_worker, chainman, *node.connman, *node.dmnman, *node.govman, *node.mn_metaman,
2204+
*node.mnhf_manager, *node.sporkman, *node.mempool, *node.llmq_ctx->clhandler, *node.llmq_ctx->isman,
2205+
*node.llmq_ctx->quorum_block_processor, *node.llmq_ctx->qman, *node.llmq_ctx->qsnapman, *node.llmq_ctx->sigman,
2206+
*node.peerman, *node.mn_sync, operator_sk, sync_map, dash_db_params, quorums_recovery, quorums_watch);
2207+
RegisterValidationInterface(node.active_ctx.get());
22112208
} else if (quorums_watch) {
22122209
node.observer_ctx = std::make_unique<llmq::ObserverContext>(*node.llmq_ctx->bls_worker, *node.connman, *node.dmnman, *node.mn_metaman, *node.mn_sync,
22132210
*node.llmq_ctx->quorum_block_processor, *node.llmq_ctx->qman, *node.llmq_ctx->qsnapman,

src/masternode/active/context.cpp

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,48 +23,48 @@
2323
#include <util/check.h>
2424
#include <validation.h>
2525

26-
ActiveContext::ActiveContext(CConnman& connman, CDeterministicMNManager& dmnman, CGovernanceManager& govman,
27-
ChainstateManager& chainman, CMasternodeMetaMan& mn_metaman, CMNHFManager& mnhfman,
28-
CSporkManager& sporkman, CTxMemPool& mempool, LLMQContext& llmq_ctx, PeerManager& peerman,
29-
const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
26+
ActiveContext::ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman, CConnman& connman,
27+
CDeterministicMNManager& dmnman, CGovernanceManager& govman,
28+
CMasternodeMetaMan& mn_metaman, CMNHFManager& mnhfman, CSporkManager& sporkman,
29+
CTxMemPool& mempool, llmq::CChainLocksHandler& clhandler, llmq::CInstantSendManager& isman,
30+
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumManager& qman,
31+
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman,
32+
PeerManager& peerman, const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
3033
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
3134
bool quorums_recovery, bool quorums_watch) :
32-
m_llmq_ctx{llmq_ctx},
35+
m_clhandler{clhandler},
36+
m_isman{isman},
37+
m_qman{qman},
3338
nodeman{std::make_unique<CActiveMasternodeManager>(connman, dmnman, operator_sk)},
34-
gov_signer{std::make_unique<GovernanceSigner>(connman, dmnman, govman, *nodeman, chainman, mn_sync)},
3539
dkgdbgman{std::make_unique<llmq::CDKGDebugManager>()},
36-
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(dmnman, *llmq_ctx.qsnapman, chainman, sporkman, db_params,
37-
quorums_watch)},
38-
shareman{std::make_unique<llmq::CSigSharesManager>(connman, chainman.ActiveChainstate(), *llmq_ctx.sigman, peerman,
39-
*nodeman, *llmq_ctx.qman, sporkman)},
40-
ehf_sighandler{
41-
std::make_unique<llmq::CEHFSignalsHandler>(chainman, mnhfman, *llmq_ctx.sigman, *shareman, *llmq_ctx.qman)},
42-
qman_handler{std::make_unique<llmq::QuorumParticipant>(*llmq_ctx.bls_worker, connman, dmnman, *llmq_ctx.qman,
43-
*llmq_ctx.qsnapman, *nodeman, chainman, mn_sync, sporkman,
44-
sync_map, quorums_recovery, quorums_watch)},
45-
cl_signer{std::make_unique<chainlock::ChainLockSigner>(chainman.ActiveChainstate(), *llmq_ctx.clhandler,
46-
*llmq_ctx.sigman, *shareman, sporkman, mn_sync)},
47-
is_signer{std::make_unique<instantsend::InstantSendSigner>(chainman.ActiveChainstate(), *llmq_ctx.clhandler,
48-
*llmq_ctx.isman, *llmq_ctx.sigman, *shareman,
49-
*llmq_ctx.qman, sporkman, mempool, mn_sync)}
40+
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(dmnman, qsnapman, chainman, sporkman, db_params, quorums_watch)},
41+
shareman{std::make_unique<llmq::CSigSharesManager>(connman, chainman.ActiveChainstate(), sigman, peerman, *nodeman,
42+
qman, sporkman)},
43+
gov_signer{std::make_unique<GovernanceSigner>(connman, dmnman, govman, *nodeman, chainman, mn_sync)},
44+
ehf_sighandler{std::make_unique<llmq::CEHFSignalsHandler>(chainman, mnhfman, sigman, *shareman, qman)},
45+
qman_handler{std::make_unique<llmq::QuorumParticipant>(bls_worker, connman, dmnman, qman, qsnapman, *nodeman, chainman,
46+
mn_sync, sporkman, sync_map, quorums_recovery, quorums_watch)},
47+
cl_signer{std::make_unique<chainlock::ChainLockSigner>(chainman.ActiveChainstate(), clhandler, sigman, *shareman,
48+
sporkman, mn_sync)},
49+
is_signer{std::make_unique<instantsend::InstantSendSigner>(chainman.ActiveChainstate(), clhandler, isman, sigman,
50+
*shareman, qman, sporkman, mempool, mn_sync)}
5051
{
5152
qdkgsman->InitializeHandlers([&](const Consensus::LLMQParams& llmq_params,
5253
int quorum_idx) -> std::unique_ptr<llmq::ActiveDKGSessionHandler> {
53-
return std::make_unique<llmq::ActiveDKGSessionHandler>(*llmq_ctx.bls_worker, dmnman, mn_metaman, *dkgdbgman,
54-
*qdkgsman, *llmq_ctx.quorum_block_processor,
55-
*llmq_ctx.qsnapman, *nodeman, chainman, sporkman,
54+
return std::make_unique<llmq::ActiveDKGSessionHandler>(bls_worker, dmnman, mn_metaman, *dkgdbgman, *qdkgsman,
55+
qblockman, qsnapman, *nodeman, chainman, sporkman,
5656
llmq_params, quorums_watch, quorum_idx);
5757
});
58-
m_llmq_ctx.clhandler->ConnectSigner(cl_signer.get());
59-
m_llmq_ctx.isman->ConnectSigner(is_signer.get());
60-
m_llmq_ctx.qman->ConnectManagers(qman_handler.get(), qdkgsman.get());
58+
m_clhandler.ConnectSigner(cl_signer.get());
59+
m_isman.ConnectSigner(is_signer.get());
60+
m_qman.ConnectManagers(qman_handler.get(), qdkgsman.get());
6161
}
6262

6363
ActiveContext::~ActiveContext()
6464
{
65-
m_llmq_ctx.qman->DisconnectManagers();
66-
m_llmq_ctx.isman->DisconnectSigner();
67-
m_llmq_ctx.clhandler->DisconnectSigner();
65+
m_qman.DisconnectManagers();
66+
m_isman.DisconnectSigner();
67+
m_clhandler.DisconnectSigner();
6868
}
6969

7070
void ActiveContext::Interrupt()
@@ -103,3 +103,20 @@ void ActiveContext::SetCJServer(gsl::not_null<CCoinJoinServer*> cj_server)
103103
assert(m_cj_server == nullptr);
104104
m_cj_server = cj_server;
105105
}
106+
107+
void ActiveContext::UpdatedBlockTip(const CBlockIndex* pindexNew, const CBlockIndex* pindexFork, bool fInitialDownload)
108+
{
109+
if (fInitialDownload || pindexNew == pindexFork) // In IBD or blocks were disconnected without any new ones
110+
return;
111+
112+
nodeman->UpdatedBlockTip(pindexNew, pindexFork, fInitialDownload);
113+
ehf_sighandler->UpdatedBlockTip(pindexNew);
114+
gov_signer->UpdatedBlockTip(pindexNew);
115+
qdkgsman->UpdatedBlockTip(pindexNew, fInitialDownload);
116+
qman_handler->UpdatedBlockTip(pindexNew, fInitialDownload);
117+
}
118+
119+
void ActiveContext::NotifyRecoveredSig(const std::shared_ptr<const llmq::CRecoveredSig>& sig, bool proactive_relay)
120+
{
121+
shareman->NotifyRecoveredSig(sig, proactive_relay);
122+
}

src/masternode/active/context.h

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77

88
#include <llmq/options.h>
99

10+
#include <validationinterface.h>
11+
1012
#include <gsl/pointers.h>
1113

1214
#include <memory>
1315

1416
class CActiveMasternodeManager;
1517
class CBLSSecretKey;
18+
class CBLSWorker;
1619
class ChainstateManager;
1720
class CCoinJoinServer;
1821
class CConnman;
@@ -25,36 +28,45 @@ class CSporkManager;
2528
class CTxMemPool;
2629
class GovernanceSigner;
2730
class PeerManager;
28-
struct LLMQContext;
2931
namespace chainlock {
3032
class ChainLockSigner;
3133
} // namespace chainlock
3234
namespace instantsend {
3335
class InstantSendSigner;
3436
} // namespace instantsend
3537
namespace llmq {
38+
class CChainLocksHandler;
3639
class CDKGDebugManager;
3740
class CDKGSessionManager;
3841
class CEHFSignalsHandler;
42+
class CInstantSendManager;
43+
class CQuorumBlockProcessor;
44+
class CQuorumManager;
45+
class CQuorumSnapshotManager;
46+
class CSigningManager;
3947
class CSigSharesManager;
4048
class QuorumParticipant;
4149
} // namespace llmq
4250
namespace util {
4351
struct DbWrapperParams;
4452
} // namespace util
4553

46-
struct ActiveContext {
54+
struct ActiveContext final : public CValidationInterface {
4755
private:
48-
// TODO: Switch to references to members when migration is finished
49-
LLMQContext& m_llmq_ctx;
56+
llmq::CChainLocksHandler& m_clhandler;
57+
llmq::CInstantSendManager& m_isman;
58+
llmq::CQuorumManager& m_qman;
5059

5160
public:
5261
ActiveContext() = delete;
5362
ActiveContext(const ActiveContext&) = delete;
5463
ActiveContext& operator=(const ActiveContext&) = delete;
55-
explicit ActiveContext(CConnman& connman, CDeterministicMNManager& dmnman, CGovernanceManager& govman,
56-
ChainstateManager& chainman, CMasternodeMetaMan& mn_metaman, CMNHFManager& mnhfman,
57-
CSporkManager& sporkman, CTxMemPool& mempool, LLMQContext& llmq_ctx, PeerManager& peerman,
64+
explicit ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman, CConnman& connman,
65+
CDeterministicMNManager& dmnman, CGovernanceManager& govman, CMasternodeMetaMan& mn_metaman,
66+
CMNHFManager& mnhfman, CSporkManager& sporkman, CTxMemPool& mempool,
67+
llmq::CChainLocksHandler& clhandler, llmq::CInstantSendManager& isman,
68+
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumManager& qman,
69+
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman, PeerManager& peerman,
5870
const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
5971
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
6072
bool quorums_recovery, bool quorums_watch);
@@ -67,23 +79,25 @@ struct ActiveContext {
6779
CCoinJoinServer& GetCJServer() const;
6880
void SetCJServer(gsl::not_null<CCoinJoinServer*> cj_server);
6981

82+
protected:
83+
// CValidationInterface
84+
void NotifyRecoveredSig(const std::shared_ptr<const llmq::CRecoveredSig>& sig, bool proactive_relay) override;
85+
void UpdatedBlockTip(const CBlockIndex* pindexNew, const CBlockIndex* pindexFork, bool fInitialDownload) override;
86+
87+
public:
7088
/*
7189
* Entities that are only utilized when masternode mode is enabled
7290
* and are accessible in their own right
7391
*/
7492
const std::unique_ptr<CActiveMasternodeManager> nodeman;
75-
const std::unique_ptr<GovernanceSigner> gov_signer;
7693
const std::unique_ptr<llmq::CDKGDebugManager> dkgdbgman;
7794
const std::unique_ptr<llmq::CDKGSessionManager> qdkgsman;
7895
const std::unique_ptr<llmq::CSigSharesManager> shareman;
79-
const std::unique_ptr<llmq::CEHFSignalsHandler> ehf_sighandler;
80-
const std::unique_ptr<llmq::QuorumParticipant> qman_handler;
8196

8297
private:
83-
/*
84-
* Entities that are registered with LLMQContext members are not accessible
85-
* and are managed with (Dis)connectSigner() in the (c/d)tor instead
86-
*/
98+
const std::unique_ptr<GovernanceSigner> gov_signer;
99+
const std::unique_ptr<llmq::CEHFSignalsHandler> ehf_sighandler;
100+
const std::unique_ptr<llmq::QuorumParticipant> qman_handler;
87101
const std::unique_ptr<chainlock::ChainLockSigner> cl_signer;
88102
const std::unique_ptr<instantsend::InstantSendSigner> is_signer;
89103

src/masternode/active/notificationinterface.cpp

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/masternode/active/notificationinterface.h

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)