Skip to content

Commit 893b46a

Browse files
Merge #6828: refactor: drop fMasternodeMode global, create new context for masternode mode-only logic (ActiveContext), move spun-off signers and EHF signals handler
f4ac71c lint: update circular dependencies allowlist, minor cleanup (Kittywhiskers Van Gogh) ecb924c refactor: move EHF signals handler to `ActiveContext` (Kittywhiskers Van Gogh) 83707a0 refactor: create notification interface for masternode mode (Kittywhiskers Van Gogh) d52795c refactor: clean up `CCoinJoinServer`, remove redundant checks (Kittywhiskers Van Gogh) afec9ae refactor: move CoinJoin server to `ActiveContext` (Kittywhiskers Van Gogh) fcabb3d refactor: move ChainLock signer to `ActiveContext` (Kittywhiskers Van Gogh) 314f070 refactor: move InstantSend signer to new `ActiveContext` (Kittywhiskers Van Gogh) be84075 refactor: drop `fMasternodeMode` global (Kittywhiskers Van Gogh) 562ad2b wallet: drop collateral outpoints filtering from balance calculation (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * To allow removing `::fMasternodeMode`, we needed to route all pending global usage and one usage, in `wallet/coinjoin.cpp` ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/wallet/coinjoin.cpp#L184)) required additional refactoring. When calculating a tally of all outpoints from an address, if the node is in masternode mode, we skip over outputs with collateral values. `SelectCoinsGroupedByAddresses` is used in three places, creating collaterals ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/coinjoin/client.cpp#L1433)) and denoms ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/coinjoin/client.cpp#L1605)) in the CoinJoin client, calculating the anonymizable balance ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/wallet/coinjoin.cpp#L438)) in wallet, and tests. As the wallet will have no way of querying if masternode mode is enabled, we need to pull this logic outside. It isn't required in the CoinJoin client as masternodes cannot participate in CoinJoin as a client ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/coinjoin/client.cpp#L684)) and so `fMasternodeMode` will not evaluate `true`, leaving behind `GetAnonymizableBalance()`~~, which now accepts `fSkipMnCollateral` as the caller _can_ query if the node is in masternode mode ([source](https://github.com/dashpay/dash/blob/08db0fd193ecf124de0f8745eca8b24483a0c062/src/qt/overviewpage.cpp#L397)).~~ * ~~This requires storing the outpoint's value in order to filter it in `GetAnonymizableBalance()`, which required a change in `CompactTallyItem`'s structure ([source](https://github.com/dashpay/dash/blob/08db0fd193ecf124de0f8745eca8b24483a0c062/src/wallet/wallet.h#L135)).~~ This has been reverted as masternodes can no longer hold collaterals in their local wallet, so we can remove the collateral check outright ([comment](#6828 (comment))). * The signers spun-off in [dash#6742](#6742) and [dash#6761](#6761) have been moved to a dedicated masternode mode-only context, `ActiveContext`, as part of an effort to pull out networking-heavy and interactive consensus elements out of `LLMQContext`, for `bitcoin-chainstate`. * As the signers plug into existing managers and aren't standalone, they are _not_ public. * Alongside the signers, managers that are masternode mode-only have been moved to `ActiveContext`, namely `CCoinJoinServer` ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/coinjoin/server.cpp#L898)) and `llmq::CEHFSignalsHandler` ([source](https://github.com/dashpay/dash/blob/873dee049265404f91b7012f73d0e7e8f63078c2/src/llmq/ehf_signals.cpp#L41-L43)). ## Breaking Changes None expected. ## Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ Top commit has no ACKs. Tree-SHA512: d193af61592d7206bc3af5d74f4ee4e5b3b8a91d2806d57e8e2d6bed636f33ceeb82f73cdd0557a5239c67ed99e1c98e42d7e6c412d23f5fa076cfd965d804a5
2 parents 7165894 + f4ac71c commit 893b46a

37 files changed

+328
-167
lines changed

src/Makefile.am

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ BITCOIN_CORE_H = \
262262
logging.h \
263263
logging/timer.h \
264264
mapport.h \
265+
masternode/active/context.h \
266+
masternode/active/notificationinterface.h \
265267
masternode/node.h \
266268
masternode/meta.h \
267269
masternode/payments.h \
@@ -520,6 +522,8 @@ libbitcoin_node_a_SOURCES = \
520522
llmq/snapshot.cpp \
521523
llmq/utils.cpp \
522524
mapport.cpp \
525+
masternode/active/context.cpp \
526+
masternode/active/notificationinterface.cpp \
523527
masternode/node.cpp \
524528
masternode/meta.cpp \
525529
masternode/payments.cpp \

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/coinjoin/context.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,19 @@
77
#ifdef ENABLE_WALLET
88
#include <coinjoin/client.h>
99
#endif // ENABLE_WALLET
10-
#include <coinjoin/server.h>
10+
#include <coinjoin/coinjoin.h>
1111

12-
CJContext::CJContext(ChainstateManager& chainman, CConnman& connman, CDeterministicMNManager& dmnman,
13-
CMasternodeMetaMan& mn_metaman, CTxMemPool& mempool,
14-
const CActiveMasternodeManager* const mn_activeman, const CMasternodeSync& mn_sync,
15-
const llmq::CInstantSendManager& isman, std::unique_ptr<PeerManager>& peerman, bool relay_txes) :
16-
dstxman{std::make_unique<CDSTXManager>()},
12+
CJContext::CJContext(ChainstateManager& chainman, CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_metaman,
13+
CTxMemPool& mempool, const CActiveMasternodeManager* const mn_activeman,
14+
const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman, bool relay_txes) :
1715
#ifdef ENABLE_WALLET
1816
walletman{std::make_unique<CoinJoinWalletManager>(chainman, dmnman, mn_metaman, mempool, mn_sync, isman, queueman,
1917
/*is_masternode=*/mn_activeman != nullptr)},
2018
queueman{relay_txes ? std::make_unique<CCoinJoinClientQueueManager>(*walletman, dmnman, mn_metaman, mn_sync,
2119
/*is_masternode=*/mn_activeman != nullptr)
2220
: nullptr},
2321
#endif // ENABLE_WALLET
24-
server{std::make_unique<CCoinJoinServer>(chainman, connman, dmnman, *dstxman, mn_metaman, mempool, mn_activeman,
25-
mn_sync, isman, peerman)}
22+
dstxman{std::make_unique<CDSTXManager>()}
2623
{}
2724

2825
CJContext::~CJContext() {}

src/coinjoin/context.h

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,12 @@
1212
#include <memory>
1313

1414
class CActiveMasternodeManager;
15-
class CBlockPolicyEstimator;
16-
class CCoinJoinServer;
17-
class CConnman;
1815
class CDeterministicMNManager;
1916
class CDSTXManager;
2017
class ChainstateManager;
2118
class CMasternodeMetaMan;
2219
class CMasternodeSync;
2320
class CTxMemPool;
24-
class PeerManager;
2521
namespace llmq {
2622
class CInstantSendManager;
2723
};
@@ -34,19 +30,17 @@ class CoinJoinWalletManager;
3430
struct CJContext {
3531
CJContext() = delete;
3632
CJContext(const CJContext&) = delete;
37-
CJContext(ChainstateManager& chainman, CConnman& connman, CDeterministicMNManager& dmnman,
38-
CMasternodeMetaMan& mn_metaman, CTxMemPool& mempool, const CActiveMasternodeManager* const mn_activeman,
39-
const CMasternodeSync& mn_sync, const llmq::CInstantSendManager& isman,
40-
std::unique_ptr<PeerManager>& peerman, bool relay_txes);
33+
CJContext(ChainstateManager& chainman, CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_metaman,
34+
CTxMemPool& mempool, const CActiveMasternodeManager* const mn_activeman, const CMasternodeSync& mn_sync,
35+
const llmq::CInstantSendManager& isman, bool relay_txes);
4136
~CJContext();
4237

43-
const std::unique_ptr<CDSTXManager> dstxman;
4438
#ifdef ENABLE_WALLET
4539
// The main object for accessing mixing
4640
const std::unique_ptr<CoinJoinWalletManager> walletman;
4741
const std::unique_ptr<CCoinJoinClientQueueManager> queueman;
4842
#endif // ENABLE_WALLET
49-
const std::unique_ptr<CCoinJoinServer> server;
43+
const std::unique_ptr<CDSTXManager> dstxman;
5044
};
5145

5246
#endif // BITCOIN_COINJOIN_CONTEXT_H

src/coinjoin/server.cpp

Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
MessageProcessingResult CCoinJoinServer::ProcessMessage(CNode& peer, std::string_view msg_type, CDataStream& vRecv)
2727
{
28-
if (!m_mn_activeman) return {};
2928
if (!m_mn_sync.IsBlockchainSynced()) return {};
3029

3130
if (msg_type == NetMsgType::DSACCEPT) {
@@ -42,7 +41,6 @@ MessageProcessingResult CCoinJoinServer::ProcessMessage(CNode& peer, std::string
4241

4342
void CCoinJoinServer::ProcessDSACCEPT(CNode& peer, CDataStream& vRecv)
4443
{
45-
assert(m_mn_activeman);
4644
assert(m_mn_metaman.IsValid());
4745

4846
if (IsSessionReady()) {
@@ -58,7 +56,7 @@ void CCoinJoinServer::ProcessDSACCEPT(CNode& peer, CDataStream& vRecv)
5856
LogPrint(BCLog::COINJOIN, "DSACCEPT -- nDenom %d (%s) txCollateral %s", dsa.nDenom, CoinJoin::DenominationToString(dsa.nDenom), dsa.txCollateral.ToString()); /* Continued */
5957

6058
auto mnList = m_dmnman.GetListAtChainTip();
61-
auto dmn = mnList.GetValidMNByCollateral(m_mn_activeman->GetOutPoint());
59+
auto dmn = mnList.GetValidMNByCollateral(m_mn_activeman.GetOutPoint());
6260
if (!dmn) {
6361
PushStatus(peer, STATUS_REJECTED, ERR_MN_LIST);
6462
return;
@@ -69,7 +67,7 @@ void CCoinJoinServer::ProcessDSACCEPT(CNode& peer, CDataStream& vRecv)
6967
TRY_LOCK(cs_vecqueue, lockRecv);
7068
if (!lockRecv) return;
7169

72-
auto mnOutpoint = m_mn_activeman->GetOutPoint();
70+
auto mnOutpoint = m_mn_activeman.GetOutPoint();
7371

7472
if (ranges::any_of(vecCoinJoinQueue,
7573
[&mnOutpoint](const auto& q){return q.masternodeOutpoint == mnOutpoint;})) {
@@ -183,7 +181,7 @@ MessageProcessingResult CCoinJoinServer::ProcessDSQUEUE(NodeId from, CDataStream
183181
TRY_LOCK(cs_vecqueue, lockRecv);
184182
if (!lockRecv) return ret;
185183
vecCoinJoinQueue.push_back(dsq);
186-
m_peerman->RelayDSQ(dsq);
184+
m_peerman.RelayDSQ(dsq);
187185
}
188186
return ret;
189187
}
@@ -254,8 +252,6 @@ void CCoinJoinServer::SetNull()
254252
//
255253
void CCoinJoinServer::CheckPool()
256254
{
257-
if (!m_mn_activeman) return;
258-
259255
if (int entries = GetEntriesCount(); entries != 0) LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CheckPool -- entries count %lu\n", entries);
260256

261257
// If we have an entry for each collateral, then create final tx
@@ -317,7 +313,6 @@ void CCoinJoinServer::CreateFinalTransaction()
317313
void CCoinJoinServer::CommitFinalTransaction()
318314
{
319315
AssertLockNotHeld(cs_coinjoin);
320-
if (!m_mn_activeman) return; // check and relay final tx only on masternode
321316

322317
CTransactionRef finalTransaction = WITH_LOCK(cs_coinjoin, return MakeTransactionRef(finalMutableTransaction));
323318
uint256 hashTx = finalTransaction->GetHash();
@@ -341,18 +336,16 @@ void CCoinJoinServer::CommitFinalTransaction()
341336

342337
// create and sign masternode dstx transaction
343338
if (!m_dstxman.GetDSTX(hashTx)) {
344-
CCoinJoinBroadcastTx dstxNew(finalTransaction,
345-
m_mn_activeman->GetOutPoint(),
346-
m_mn_activeman->GetProTxHash(),
347-
GetAdjustedTime());
348-
dstxNew.Sign(*m_mn_activeman);
339+
CCoinJoinBroadcastTx dstxNew(finalTransaction, m_mn_activeman.GetOutPoint(), m_mn_activeman.GetProTxHash(),
340+
GetAdjustedTime());
341+
dstxNew.Sign(m_mn_activeman);
349342
m_dstxman.AddDSTX(dstxNew);
350343
}
351344

352345
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CommitFinalTransaction -- TRANSMITTING DSTX\n");
353346

354347
CInv inv(MSG_DSTX, hashTx);
355-
Assert(m_peerman)->RelayInv(inv);
348+
m_peerman.RelayInv(inv);
356349

357350
// Tell the clients it was successful
358351
RelayCompletedTransaction(MSG_SUCCESS);
@@ -380,7 +373,6 @@ void CCoinJoinServer::CommitFinalTransaction()
380373
void CCoinJoinServer::ChargeFees() const
381374
{
382375
AssertLockNotHeld(cs_coinjoin);
383-
if (!m_mn_activeman) return;
384376

385377
//we don't need to charge collateral for every offence.
386378
if (GetRand<int>(/*nMax=*/100) > 33) return;
@@ -448,8 +440,6 @@ void CCoinJoinServer::ChargeFees() const
448440
*/
449441
void CCoinJoinServer::ChargeRandomFees() const
450442
{
451-
if (!m_mn_activeman) return;
452-
453443
for (const auto& txCollateral : vecSessionCollaterals) {
454444
if (GetRand<int>(/*nMax=*/100) > 10) return;
455445
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::ChargeRandomFees -- charging random fees, txCollateral=%s", txCollateral->ToString()); /* Continued */
@@ -463,15 +453,13 @@ void CCoinJoinServer::ConsumeCollateral(const CTransactionRef& txref) const
463453
if (!ATMPIfSaneFee(m_chainman, txref)) {
464454
LogPrint(BCLog::COINJOIN, "%s -- ATMPIfSaneFee failed\n", __func__);
465455
} else {
466-
Assert(m_peerman)->RelayTransaction(txref->GetHash());
456+
m_peerman.RelayTransaction(txref->GetHash());
467457
LogPrint(BCLog::COINJOIN, "%s -- Collateral was consumed\n", __func__);
468458
}
469459
}
470460

471461
bool CCoinJoinServer::HasTimedOut() const
472462
{
473-
if (!m_mn_activeman) return false;
474-
475463
if (nState == POOL_STATE_IDLE) return false;
476464

477465
int nTimeout = (nState == POOL_STATE_SIGNING) ? COINJOIN_SIGNING_TIMEOUT : COINJOIN_QUEUE_TIMEOUT;
@@ -484,8 +472,6 @@ bool CCoinJoinServer::HasTimedOut() const
484472
//
485473
void CCoinJoinServer::CheckTimeout()
486474
{
487-
if (!m_mn_activeman) return;
488-
489475
CheckQueue();
490476

491477
// Too early to do anything
@@ -504,19 +490,15 @@ void CCoinJoinServer::CheckTimeout()
504490
*/
505491
void CCoinJoinServer::CheckForCompleteQueue()
506492
{
507-
if (!m_mn_activeman) return;
508-
509493
if (nState == POOL_STATE_QUEUE && IsSessionReady()) {
510494
SetState(POOL_STATE_ACCEPTING_ENTRIES);
511495

512-
CCoinJoinQueue dsq(nSessionDenom,
513-
m_mn_activeman->GetOutPoint(),
514-
m_mn_activeman->GetProTxHash(),
515-
GetAdjustedTime(), true);
496+
CCoinJoinQueue dsq(nSessionDenom, m_mn_activeman.GetOutPoint(), m_mn_activeman.GetProTxHash(),
497+
GetAdjustedTime(), true);
516498
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CheckForCompleteQueue -- queue is ready, signing and relaying (%s) " /* Continued */
517499
"with %d participants\n", dsq.ToString(), vecSessionCollaterals.size());
518-
dsq.Sign(*m_mn_activeman);
519-
m_peerman->RelayDSQ(dsq);
500+
dsq.Sign(m_mn_activeman);
501+
m_peerman.RelayDSQ(dsq);
520502
WITH_LOCK(cs_vecqueue, vecCoinJoinQueue.push_back(dsq));
521503
}
522504
}
@@ -572,7 +554,6 @@ bool CCoinJoinServer::IsInputScriptSigValid(const CTxIn& txin) const
572554
bool CCoinJoinServer::AddEntry(const CCoinJoinEntry& entry, PoolMessage& nMessageIDRet)
573555
{
574556
AssertLockNotHeld(cs_coinjoin);
575-
if (!m_mn_activeman) return false;
576557

577558
if (size_t(GetEntriesCount()) >= vecSessionCollaterals.size()) {
578559
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::%s -- ERROR: entries is full!\n", __func__);
@@ -682,8 +663,6 @@ bool CCoinJoinServer::IsSignaturesComplete() const
682663

683664
bool CCoinJoinServer::IsAcceptableDSA(const CCoinJoinAccept& dsa, PoolMessage& nMessageIDRet) const
684665
{
685-
if (!m_mn_activeman) return false;
686-
687666
// is denom even something legit?
688667
if (!CoinJoin::IsValidDenomination(dsa.nDenom)) {
689668
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::%s -- denom not valid!\n", __func__);
@@ -703,7 +682,7 @@ bool CCoinJoinServer::IsAcceptableDSA(const CCoinJoinAccept& dsa, PoolMessage& n
703682

704683
bool CCoinJoinServer::CreateNewSession(const CCoinJoinAccept& dsa, PoolMessage& nMessageIDRet)
705684
{
706-
if (!m_mn_activeman || nSessionID != 0) return false;
685+
if (nSessionID != 0) return false;
707686

708687
// new session can only be started in idle mode
709688
if (nState != POOL_STATE_IDLE) {
@@ -725,13 +704,11 @@ bool CCoinJoinServer::CreateNewSession(const CCoinJoinAccept& dsa, PoolMessage&
725704

726705
if (!fUnitTest) {
727706
//broadcast that I'm accepting entries, only if it's the first entry through
728-
CCoinJoinQueue dsq(nSessionDenom,
729-
m_mn_activeman->GetOutPoint(),
730-
m_mn_activeman->GetProTxHash(),
731-
GetAdjustedTime(), false);
707+
CCoinJoinQueue dsq(nSessionDenom, m_mn_activeman.GetOutPoint(), m_mn_activeman.GetProTxHash(),
708+
GetAdjustedTime(), false);
732709
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CreateNewSession -- signing and relaying new queue: %s\n", dsq.ToString());
733-
dsq.Sign(*m_mn_activeman);
734-
m_peerman->RelayDSQ(dsq);
710+
dsq.Sign(m_mn_activeman);
711+
m_peerman.RelayDSQ(dsq);
735712
LOCK(cs_vecqueue);
736713
vecCoinJoinQueue.push_back(dsq);
737714
}
@@ -745,7 +722,7 @@ bool CCoinJoinServer::CreateNewSession(const CCoinJoinAccept& dsa, PoolMessage&
745722

746723
bool CCoinJoinServer::AddUserToExistingSession(const CCoinJoinAccept& dsa, PoolMessage& nMessageIDRet)
747724
{
748-
if (!m_mn_activeman || nSessionID == 0 || IsSessionReady()) return false;
725+
if (nSessionID == 0 || IsSessionReady()) return false;
749726

750727
if (!IsAcceptableDSA(dsa, nMessageIDRet)) {
751728
return false;
@@ -881,8 +858,6 @@ void CCoinJoinServer::RelayCompletedTransaction(PoolMessage nMessageID)
881858

882859
void CCoinJoinServer::SetState(PoolState nStateNew)
883860
{
884-
if (!m_mn_activeman) return;
885-
886861
if (nStateNew == POOL_STATE_ERROR) {
887862
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::SetState -- Can't set state to ERROR as a Masternode. \n");
888863
return;
@@ -895,7 +870,6 @@ void CCoinJoinServer::SetState(PoolState nStateNew)
895870

896871
void CCoinJoinServer::DoMaintenance()
897872
{
898-
if (!m_mn_activeman) return; // only run on masternodes
899873
if (!m_mn_sync.IsBlockchainSynced()) return;
900874
if (ShutdownRequested()) return;
901875

0 commit comments

Comments
 (0)