Skip to content

Commit fcabb3d

Browse files
committed
refactor: move ChainLock signer to ActiveContext
1 parent 314f070 commit fcabb3d

File tree

5 files changed

+24
-12
lines changed

5 files changed

+24
-12
lines changed

src/chainlock/chainlock.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,15 @@ bool AreChainLocksEnabled(const CSporkManager& sporkman)
4444
}
4545

4646
CChainLocksHandler::CChainLocksHandler(CChainState& chainstate, CQuorumManager& _qman, CSigningManager& _sigman,
47-
CSigSharesManager& _shareman, CSporkManager& sporkman, CTxMemPool& _mempool,
48-
const CMasternodeSync& mn_sync, bool is_masternode) :
47+
CSporkManager& sporkman, CTxMemPool& _mempool, const CMasternodeSync& mn_sync) :
4948
m_chainstate{chainstate},
5049
qman{_qman},
5150
spork_manager{sporkman},
5251
mempool{_mempool},
5352
m_mn_sync{mn_sync},
5453
scheduler{std::make_unique<CScheduler>()},
5554
scheduler_thread{
56-
std::make_unique<std::thread>(std::thread(util::TraceThread, "cl-schdlr", [&] { scheduler->serviceQueue(); }))},
57-
m_signer{is_masternode
58-
? std::make_unique<chainlock::ChainLockSigner>(chainstate, *this, _sigman, _shareman, sporkman, mn_sync)
59-
: nullptr}
55+
std::make_unique<std::thread>(std::thread(util::TraceThread, "cl-schdlr", [&] { scheduler->serviceQueue(); }))}
6056
{
6157
}
6258

src/chainlock/chainlock.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ namespace llmq {
3333
class CInstantSendManager;
3434
class CQuorumManager;
3535
class CSigningManager;
36-
class CSigSharesManager;
3736
enum class VerifyRecSigStatus;
3837

3938
class CChainLocksHandler final : public chainlock::ChainLockSignerParent
@@ -47,7 +46,7 @@ class CChainLocksHandler final : public chainlock::ChainLockSignerParent
4746
std::unique_ptr<CScheduler> scheduler;
4847
std::unique_ptr<std::thread> scheduler_thread;
4948

50-
std::unique_ptr<chainlock::ChainLockSigner> m_signer{nullptr};
49+
chainlock::ChainLockSigner* m_signer{nullptr};
5150

5251
mutable Mutex cs;
5352
std::atomic<bool> tryLockChainTipScheduled{false};
@@ -68,10 +67,17 @@ class CChainLocksHandler final : public chainlock::ChainLockSignerParent
6867

6968
public:
7069
explicit CChainLocksHandler(CChainState& chainstate, CQuorumManager& _qman, CSigningManager& _sigman,
71-
CSigSharesManager& _shareman, CSporkManager& sporkman, CTxMemPool& _mempool,
72-
const CMasternodeSync& mn_sync, bool is_masternode);
70+
CSporkManager& sporkman, CTxMemPool& _mempool, const CMasternodeSync& mn_sync);
7371
~CChainLocksHandler();
7472

73+
void ConnectSigner(gsl::not_null<chainlock::ChainLockSigner*> signer)
74+
{
75+
// Prohibit double initialization
76+
assert(m_signer == nullptr);
77+
m_signer = signer;
78+
}
79+
void DisconnectSigner() { m_signer = nullptr; }
80+
7581
void Start(const llmq::CInstantSendManager& isman);
7682
void Stop();
7783

src/llmq/context.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ LLMQContext::LLMQContext(ChainstateManager& chainman, CDeterministicMNManager& d
3535
unit_tests, wipe)},
3636
sigman{std::make_unique<llmq::CSigningManager>(mn_activeman, chainman.ActiveChainstate(), *qman, unit_tests, wipe)},
3737
shareman{std::make_unique<llmq::CSigSharesManager>(*sigman, mn_activeman, *qman, sporkman)},
38-
clhandler{std::make_unique<llmq::CChainLocksHandler>(chainman.ActiveChainstate(), *qman, *sigman, *shareman,
39-
sporkman, mempool, mn_sync, is_masternode)},
38+
clhandler{std::make_unique<llmq::CChainLocksHandler>(chainman.ActiveChainstate(), *qman, *sigman, sporkman, mempool,
39+
mn_sync)},
4040
isman{std::make_unique<llmq::CInstantSendManager>(*clhandler, chainman.ActiveChainstate(), *qman, *sigman, sporkman,
4141
mempool, mn_sync, unit_tests, wipe)},
4242
ehfSignalsHandler{std::make_unique<llmq::CEHFSignalsHandler>(chainman, mnhfman, *sigman, *shareman, *qman)}

src/masternode/active/context.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,27 @@
44

55
#include <masternode/active/context.h>
66

7+
#include <chainlock/chainlock.h>
8+
#include <chainlock/signing.h>
79
#include <instantsend/instantsend.h>
810
#include <instantsend/signing.h>
911
#include <llmq/context.h>
1012

1113
ActiveContext::ActiveContext(CChainState& chainstate, LLMQContext& llmq_ctx, CSporkManager& sporkman,
1214
CTxMemPool& mempool, const CMasternodeSync& mn_sync) :
1315
m_llmq_ctx{llmq_ctx},
16+
cl_signer{std::make_unique<chainlock::ChainLockSigner>(chainstate, *llmq_ctx.clhandler, *llmq_ctx.sigman,
17+
*llmq_ctx.shareman, sporkman, mn_sync)},
1418
is_signer{std::make_unique<instantsend::InstantSendSigner>(chainstate, *llmq_ctx.clhandler, *llmq_ctx.isman,
1519
*llmq_ctx.sigman, *llmq_ctx.shareman, *llmq_ctx.qman,
1620
sporkman, mempool, mn_sync)}
1721
{
22+
m_llmq_ctx.clhandler->ConnectSigner(cl_signer.get());
1823
m_llmq_ctx.isman->ConnectSigner(is_signer.get());
1924
}
2025

2126
ActiveContext::~ActiveContext()
2227
{
28+
m_llmq_ctx.clhandler->DisconnectSigner();
2329
m_llmq_ctx.isman->DisconnectSigner();
2430
}

src/masternode/active/context.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ class CMasternodeSync;
1212
class CSporkManager;
1313
class CTxMemPool;
1414
struct LLMQContext;
15+
namespace chainlock {
16+
class ChainLockSigner;
17+
} // namespace chainlock
1518
namespace instantsend {
1619
class InstantSendSigner;
1720
} // namespace instantsend
@@ -24,6 +27,7 @@ struct ActiveContext {
2427
* Entities that are registered with LLMQContext members are not accessible
2528
* and are managed with (Dis)connectSigner() in the (c/d)tor instead
2629
*/
30+
const std::unique_ptr<chainlock::ChainLockSigner> cl_signer;
2731
const std::unique_ptr<instantsend::InstantSendSigner> is_signer;
2832

2933
public:

0 commit comments

Comments
 (0)