Skip to content

Commit 156329e

Browse files
Merge #7104: refactor: move ownerships of mnhfman, cpoolman inside CChainstateHelper where it belongs to
7da6d06 fmt: clang-format for active/context and other files (Konstantin Akimov) 46302be refactor: code move only; validation of protx transactions are moved from detemrinisticmns to specialtxman (Konstantin Akimov) ce1c7de refactor: unwrap CEvoDB from unique_ptr when calling DashChainstateSetup (Konstantin Akimov) e869209 chore: add TODO to drop circular dependency of mnhftx and validation.h (Konstantin Akimov) 9709588 refactor: move CCreditPool inside chain-state helper (Konstantin Akimov) 0bb7f53 refactor: drop atomic from evo/mnhftx (Konstantin Akimov) 24ee98e refactor: re-connect ehf manager to fix new circular dependencies (Konstantin Akimov) 0949a34 refactor: move initialization of ehf manager from init.cpp to chainhelper (Konstantin Akimov) 525c3dc refactor: drop left-over CActiveMasternodeManager from chain state and LLMQContext (Konstantin Akimov) Pull request description: ## Issue being fixed or feature implemented LoadChainState is aware of EHF Manager and Credit Pool Manager that are constructed outside, but have no meaning without Chain State; and its ownership and life time is controlled by Chain State too. ## What was done? - EHF Manager (`CMNHFManager`), Credit Pool Manager (`CCreditPoolManager` - Removed `CMNHFManager::ConnectManagers` - validation of protx transaction is moved from evo/deterministicmns.h to evo/specialtxman.h to break new circular dependencies - removed atomic from `m_qman` in `CMNHFManager` TODO: this PR includes some extra refactorings with code move from deterministicmns.h, that's a preparation for move `dmnman` (`CDeterministicMNManager`) inside Chain State too. Though, there's too many usages of `NodeContext::dmnman` all over code base, and many of its usages are not aware about Chain State at the moment; it will requires significant refactoring all over code base and out-of-scope of this PR; will be done in the further PRs with some extra efforts. Also, LLMQContext depends on dmnman; chainhelper depends on llmq-context; dmnman can't be easily moved inside chainhelper without moving llmq-ctx inside, which is out-of-scope of this PR. $ grep -r node.dmnman src/ -I | wc -l 80 ## How Has This Been Tested? Run unit and functional tests, run lint-circular-dependencies.py ## Breaking Changes N/A ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone ACKs for top commit: UdjinM6: utACK 7da6d06 kwvg: utACK 7da6d06 Tree-SHA512: f54596840a88df6b4a3d31d9c44ce9b6d44bf67f64e1f2392cec0139f1d955d189ac7180a5067a86263526ec2138faedc99c2e73c292724dfa7d94a61a467f2b
2 parents d8a2233 + 7da6d06 commit 156329e

24 files changed

+590
-651
lines changed

src/active/context.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525

2626
ActiveContext::ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman, CConnman& connman,
2727
CDeterministicMNManager& dmnman, CGovernanceManager& govman, CMasternodeMetaMan& mn_metaman,
28-
CMNHFManager& mnhfman, CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks,
29-
CTxMemPool& mempool, chainlock::ChainlockHandler& clhandler,
30-
llmq::CInstantSendManager& isman, llmq::CQuorumBlockProcessor& qblockman,
31-
llmq::CQuorumManager& qman, llmq::CQuorumSnapshotManager& qsnapman,
32-
llmq::CSigningManager& sigman, PeerManager& peerman, const CMasternodeSync& mn_sync,
33-
const CBLSSecretKey& operator_sk, const llmq::QvvecSyncModeMap& sync_map,
34-
const util::DbWrapperParams& db_params, bool quorums_recovery, bool quorums_watch) :
28+
CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks, CTxMemPool& mempool,
29+
chainlock::ChainlockHandler& 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,
33+
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
34+
bool quorums_recovery, bool quorums_watch) :
3535
m_isman{isman},
3636
m_qman{qman},
3737
nodeman{std::make_unique<CActiveMasternodeManager>(connman, dmnman, operator_sk)},
@@ -40,7 +40,7 @@ ActiveContext::ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman
4040
shareman{std::make_unique<llmq::CSigSharesManager>(connman, chainman.ActiveChainstate(), sigman, peerman, *nodeman,
4141
qman, sporkman)},
4242
gov_signer{std::make_unique<GovernanceSigner>(connman, dmnman, govman, *nodeman, chainman, mn_sync)},
43-
ehf_sighandler{std::make_unique<llmq::CEHFSignalsHandler>(chainman, mnhfman, sigman, *shareman, qman)},
43+
ehf_sighandler{std::make_unique<llmq::CEHFSignalsHandler>(chainman, sigman, *shareman, qman)},
4444
qman_handler{std::make_unique<llmq::QuorumParticipant>(bls_worker, connman, dmnman, qman, qsnapman, *nodeman, chainman,
4545
mn_sync, sporkman, sync_map, quorums_recovery, quorums_watch)},
4646
cl_signer{std::make_unique<chainlock::ChainLockSigner>(chainman.ActiveChainstate(), chainlocks, clhandler, isman,

src/active/context.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ struct ActiveContext final : public CValidationInterface {
6363
ActiveContext& operator=(const ActiveContext&) = delete;
6464
explicit ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman, CConnman& connman,
6565
CDeterministicMNManager& dmnman, CGovernanceManager& govman, CMasternodeMetaMan& mn_metaman,
66-
CMNHFManager& mnhfman, CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks,
67-
CTxMemPool& mempool, chainlock::ChainlockHandler& clhandler,
68-
llmq::CInstantSendManager& isman, llmq::CQuorumBlockProcessor& qblockman,
69-
llmq::CQuorumManager& qman, llmq::CQuorumSnapshotManager& qsnapman,
70-
llmq::CSigningManager& sigman, PeerManager& peerman, const CMasternodeSync& mn_sync,
71-
const CBLSSecretKey& operator_sk, const llmq::QvvecSyncModeMap& sync_map,
72-
const util::DbWrapperParams& db_params, bool quorums_recovery, bool quorums_watch);
66+
CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks, CTxMemPool& mempool,
67+
chainlock::ChainlockHandler& clhandler, llmq::CInstantSendManager& isman,
68+
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumManager& qman,
69+
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman, PeerManager& peerman,
70+
const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
71+
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
72+
bool quorums_recovery, bool quorums_watch);
7373
~ActiveContext();
7474

7575
void Interrupt();

src/evo/chainhelper.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,26 @@
77
#include <chainparams.h>
88

99
#include <chainlock/chainlock.h>
10+
#include <evo/creditpool.h>
11+
#include <evo/mnhftx.h>
1012
#include <evo/specialtxman.h>
1113
#include <instantsend/instantsend.h>
1214
#include <instantsend/lock.h>
1315
#include <masternode/payments.h>
1416

15-
CChainstateHelper::CChainstateHelper(CCreditPoolManager& cpoolman, CDeterministicMNManager& dmnman,
16-
CMNHFManager& mnhfman, CGovernanceManager& govman, llmq::CInstantSendManager& isman,
17-
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumSnapshotManager& qsnapman,
18-
const ChainstateManager& chainman, const Consensus::Params& consensus_params,
19-
const CMasternodeSync& mn_sync, const CSporkManager& sporkman,
20-
const chainlock::Chainlocks& chainlocks, const llmq::CQuorumManager& qman) :
17+
CChainstateHelper::CChainstateHelper(CEvoDB& evodb, CDeterministicMNManager& dmnman, CGovernanceManager& govman,
18+
llmq::CInstantSendManager& isman, llmq::CQuorumBlockProcessor& qblockman,
19+
llmq::CQuorumSnapshotManager& qsnapman, const ChainstateManager& chainman,
20+
const Consensus::Params& consensus_params, const CMasternodeSync& mn_sync,
21+
const CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks,
22+
const llmq::CQuorumManager& qman) :
2123
isman{isman},
2224
m_chainlocks{chainlocks},
25+
ehf_manager{std::make_unique<CMNHFManager>(evodb, chainman, qman)},
26+
credit_pool_manager{std::make_unique<CCreditPoolManager>(evodb, chainman)},
2327
mn_payments{std::make_unique<CMNPaymentsProcessor>(dmnman, govman, chainman, consensus_params, mn_sync, sporkman)},
24-
special_tx{std::make_unique<CSpecialTxProcessor>(cpoolman, dmnman, mnhfman, qblockman, qsnapman, chainman,
25-
consensus_params, chainlocks, qman)}
28+
special_tx{std::make_unique<CSpecialTxProcessor>(*credit_pool_manager, dmnman, *ehf_manager, qblockman, qsnapman,
29+
chainman, consensus_params, chainlocks, qman)}
2630
{}
2731

2832
CChainstateHelper::~CChainstateHelper() = default;
@@ -61,3 +65,7 @@ bool CChainstateHelper::RemoveConflictingISLockByTx(const CTransaction& tx)
6165

6266
bool CChainstateHelper::ShouldInstantSendRejectConflicts() const { return isman.RejectConflictingBlocks(); }
6367

68+
std::unordered_map<uint8_t, int> CChainstateHelper::GetSignalsStage(const CBlockIndex* const pindexPrev)
69+
{
70+
return ehf_manager->GetSignalsStage(pindexPrev);
71+
}

src/evo/chainhelper.h

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77

88
#include <memory>
99
#include <optional>
10+
#include <unordered_map>
1011

12+
class CBlockIndex;
1113
class CCreditPoolManager;
1214
class CDeterministicMNManager;
15+
class CEvoDB;
1316
class ChainstateManager;
1417
class CMNHFManager;
1518
class CMNPaymentsProcessor;
@@ -43,12 +46,12 @@ class CChainstateHelper
4346
CChainstateHelper() = delete;
4447
CChainstateHelper(const CChainstateHelper&) = delete;
4548
CChainstateHelper& operator=(const CChainstateHelper&) = delete;
46-
explicit CChainstateHelper(CCreditPoolManager& cpoolman, CDeterministicMNManager& dmnman, CMNHFManager& mnhfman,
47-
CGovernanceManager& govman, llmq::CInstantSendManager& isman,
48-
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumSnapshotManager& qsnapman,
49-
const ChainstateManager& chainman, const Consensus::Params& consensus_params,
50-
const CMasternodeSync& mn_sync, const CSporkManager& sporkman,
51-
const chainlock::Chainlocks& chainlocks, const llmq::CQuorumManager& qman);
49+
explicit CChainstateHelper(CEvoDB& evodb, CDeterministicMNManager& dmnman, CGovernanceManager& govman,
50+
llmq::CInstantSendManager& isman, llmq::CQuorumBlockProcessor& qblockman,
51+
llmq::CQuorumSnapshotManager& qsnapman, const ChainstateManager& chainman,
52+
const Consensus::Params& consensus_params, const CMasternodeSync& mn_sync,
53+
const CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks,
54+
const llmq::CQuorumManager& qman);
5255
~CChainstateHelper();
5356

5457
/** Passthrough functions to chainlock::Chainlocks*/
@@ -62,7 +65,11 @@ class CChainstateHelper
6265
bool RemoveConflictingISLockByTx(const CTransaction& tx);
6366
bool ShouldInstantSendRejectConflicts() const;
6467

68+
std::unordered_map<uint8_t, int> GetSignalsStage(const CBlockIndex* const pindexPrev);
69+
6570
public:
71+
const std::unique_ptr<CMNHFManager> ehf_manager;
72+
const std::unique_ptr<CCreditPoolManager> credit_pool_manager;
6673
const std::unique_ptr<CMNPaymentsProcessor> mn_payments;
6774
const std::unique_ptr<CSpecialTxProcessor> special_tx;
6875
};

0 commit comments

Comments
 (0)