Skip to content

Commit 06e761e

Browse files
Merge #7115: refactor: separate network and consensus logic 2b/N [sig shares]
ce11a03 refactor: Replace GetAllNodes() + RemoveAsBanned() with single RemoveNodesIf(predicate) method (UdjinM6) cfff7cb chore: typo (UdjinM6) 3da19f8 refactor: static class members to static anonymous functions of CSigningSharesManager (Konstantin Akimov) fa655d8 refactor: split PreVerifyBatchedSigShares to non-banning helper PreVerifySigShareQuorum and banning helper (Konstantin Akimov) bbc8f42 refactor: final removing of PeerManager from signing_shares (Konstantin Akimov) 29e4a87 refactor: move include msg_result.h from header to source for signing_shares and cleanup (Konstantin Akimov) 4bf0308 fix: CSigningSharesManager supposed to use _active_ chain but not the chain that has been active during it's creation (Konstantin Akimov) b18eaf2 refactor: move CSigSharesManager::RemoveBannedNodeStates inside NetSigning (Konstantin Akimov) b8fc3fb refactor: move ProcessPendingSigShares from signing_shares to NetSigning (Konstantin Akimov) 115fe9c refactor: remove duplicated code for p2p messages QSIGSHARESINV and QGETSIGSHARES (Konstantin Akimov) 2d485c5 move out BanNode from ProcessMessageSigShare (Konstantin Akimov) 5a13f03 refactor: move ProcessMessage from signing_shares to NetSigning (Konstantin Akimov) 41ee4fe refactor: drop direct dependency of PeerManager on llmq/signing_shares (Konstantin Akimov) 8a6bb8a refactor: simplify CEHFSignalsHandler::HandleNewRecoveredSig a bit (Konstantin Akimov) 3c1c8f0 refactor: move worker threads from signing_shares to NetSigning (Konstantin Akimov) f8cd67e refactor: move listener NotifyRecoveredSig from llmq/signing_share to net_signing (Konstantin Akimov) Pull request description: ## Issue being fixed or feature implemented Separation of consensus & chain code and network & node in Dash Core is blocked by tight connection of network and consensus code; in components such as llmq::CSigningManager, llmq::CSigSharesManager, coinjoin::client, coinjoin::server, governance/, llmq::CInstantSendManager, etc. These dependencies on PeerManager blocks backport's of bitcoin related to 'kernel' project and makes circular dependencies over net_processing; it's also a blocker for bitcoin#25144 ## What was done? This PR addresses a dependency of llmq::CSigSharesManager on PeerManager, it is continuation of #6992 which addressed llmq::CSigningManager It is a split from proof-of-concept PR #6934. Due to multiple other changes (review comments to prior PRs, ActiveContext-related refactorings, proactive signature pushing the implementation is not fully matched with original 6934, the patchset is re-created from scratch. Prior work: - #6959 - #6992 NOTE: this PR is not a direct blocker of chainstate / kernel so far as `CSigSharesManager` already aggregated to masternode's ActiveContext by kwvg, see #6841 ## How Has This Been Tested? Run unit & functional tests Run linter lint-circular-dependencies.py ## Breaking Changes N/A ## Checklist: - [x] I have performed a self-review of my own code - [x] 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 _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: utACK ce11a03 Tree-SHA512: 01740144f9115160b5b2cc79678a61a8946d4e8f759c954bb608f4fb78e064f6538222deb370b3b40939e15a98d7146d8d49ec5e50fd7d48af34f2ccda2a49a1
2 parents ef16173 + ce11a03 commit 06e761e

File tree

11 files changed

+495
-541
lines changed

11 files changed

+495
-541
lines changed

src/active/context.cpp

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,15 @@ ActiveContext::ActiveContext(CBLSWorker& bls_worker, ChainstateManager& chainman
2929
chainlock::ChainlockHandler& clhandler, llmq::CInstantSendManager& isman,
3030
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumManager& qman,
3131
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman,
32-
PeerManager& peerman, const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
32+
const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
3333
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
3434
bool quorums_recovery, bool quorums_watch) :
3535
m_isman{isman},
3636
m_qman{qman},
3737
nodeman{std::make_unique<CActiveMasternodeManager>(connman, dmnman, operator_sk)},
3838
dkgdbgman{std::make_unique<llmq::CDKGDebugManager>()},
3939
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(dmnman, qsnapman, chainman, sporkman, db_params, quorums_watch)},
40-
shareman{std::make_unique<llmq::CSigSharesManager>(connman, chainman.ActiveChainstate(), sigman, peerman, *nodeman,
41-
qman, sporkman)},
40+
shareman{std::make_unique<llmq::CSigSharesManager>(connman, chainman, sigman, *nodeman, qman, sporkman)},
4241
gov_signer{std::make_unique<GovernanceSigner>(connman, dmnman, govman, *nodeman, chainman, mn_sync)},
4342
ehf_sighandler{std::make_unique<llmq::CEHFSignalsHandler>(chainman, sigman, *shareman, qman)},
4443
qman_handler{std::make_unique<llmq::QuorumParticipant>(bls_worker, connman, dmnman, qman, qsnapman, *nodeman, chainman,
@@ -64,20 +63,13 @@ ActiveContext::~ActiveContext()
6463
m_isman.DisconnectSigner();
6564
}
6665

67-
void ActiveContext::Interrupt()
68-
{
69-
shareman->InterruptWorkerThread();
70-
}
71-
7266
void ActiveContext::Start(CConnman& connman, PeerManager& peerman)
7367
{
7468
qman_handler->Start();
7569
qdkgsman->StartThreads(connman, peerman);
76-
shareman->Start();
7770
cl_signer->Start();
7871
cl_signer->RegisterRecoveryInterface();
7972
is_signer->RegisterRecoveryInterface();
80-
shareman->RegisterRecoveryInterface();
8173

8274
RegisterValidationInterface(cl_signer.get());
8375
}
@@ -86,11 +78,9 @@ void ActiveContext::Stop()
8678
{
8779
UnregisterValidationInterface(cl_signer.get());
8880

89-
shareman->UnregisterRecoveryInterface();
9081
is_signer->UnregisterRecoveryInterface();
9182
cl_signer->UnregisterRecoveryInterface();
9283
cl_signer->Stop();
93-
shareman->Stop();
9484
qdkgsman->StopThreads();
9585
qman_handler->Stop();
9686
}
@@ -118,8 +108,3 @@ void ActiveContext::UpdatedBlockTip(const CBlockIndex* pindexNew, const CBlockIn
118108
qdkgsman->UpdatedBlockTip(pindexNew, fInitialDownload);
119109
qman_handler->UpdatedBlockTip(pindexNew, fInitialDownload);
120110
}
121-
122-
void ActiveContext::NotifyRecoveredSig(const std::shared_ptr<const llmq::CRecoveredSig>& sig, bool proactive_relay)
123-
{
124-
shareman->NotifyRecoveredSig(sig, proactive_relay);
125-
}

src/active/context.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,12 @@ struct ActiveContext final : public CValidationInterface {
6666
CSporkManager& sporkman, const chainlock::Chainlocks& chainlocks, CTxMemPool& mempool,
6767
chainlock::ChainlockHandler& clhandler, llmq::CInstantSendManager& isman,
6868
llmq::CQuorumBlockProcessor& qblockman, llmq::CQuorumManager& qman,
69-
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman, PeerManager& peerman,
69+
llmq::CQuorumSnapshotManager& qsnapman, llmq::CSigningManager& sigman,
7070
const CMasternodeSync& mn_sync, const CBLSSecretKey& operator_sk,
7171
const llmq::QvvecSyncModeMap& sync_map, const util::DbWrapperParams& db_params,
7272
bool quorums_recovery, bool quorums_watch);
7373
~ActiveContext();
7474

75-
void Interrupt();
7675
void Start(CConnman& connman, PeerManager& peerman);
7776
void Stop();
7877

@@ -81,7 +80,6 @@ struct ActiveContext final : public CValidationInterface {
8180

8281
protected:
8382
// CValidationInterface
84-
void NotifyRecoveredSig(const std::shared_ptr<const llmq::CRecoveredSig>& sig, bool proactive_relay) override;
8583
void UpdatedBlockTip(const CBlockIndex* pindexNew, const CBlockIndex* pindexFork, bool fInitialDownload) override;
8684

8785
public:

src/init.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,6 @@ void Interrupt(NodeContext& node)
253253
InterruptRPC();
254254
InterruptREST();
255255
InterruptTorControl();
256-
if (node.active_ctx) {
257-
node.active_ctx->Interrupt();
258-
}
259256
if (node.peerman) {
260257
node.peerman->InterruptHandlers();
261258
}
@@ -2199,7 +2196,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
21992196
node.active_ctx = std::make_unique<ActiveContext>(*node.llmq_ctx->bls_worker, chainman, *node.connman, *node.dmnman, *node.govman, *node.mn_metaman,
22002197
*node.sporkman, *node.chainlocks, *node.mempool, *node.clhandler, *node.llmq_ctx->isman,
22012198
*node.llmq_ctx->quorum_block_processor, *node.llmq_ctx->qman, *node.llmq_ctx->qsnapman, *node.llmq_ctx->sigman,
2202-
*node.peerman, *node.mn_sync, operator_sk, sync_map, dash_db_params, quorums_recovery, quorums_watch);
2199+
*node.mn_sync, operator_sk, sync_map, dash_db_params, quorums_recovery, quorums_watch);
22032200
RegisterValidationInterface(node.active_ctx.get());
22042201
} else if (quorums_watch) {
22052202
node.observer_ctx = std::make_unique<llmq::ObserverContext>(*node.llmq_ctx->bls_worker, *node.connman, *node.dmnman, *node.mn_metaman, *node.mn_sync,
@@ -2211,7 +2208,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
22112208
// ********************************************************* Step 7d: Setup other Dash services
22122209

22132210
node.peerman->AddExtraHandler(std::make_unique<NetInstantSend>(node.peerman.get(), *node.llmq_ctx->isman, *node.llmq_ctx->qman, chainman.ActiveChainstate()));
2214-
node.peerman->AddExtraHandler(std::make_unique<NetSigning>(node.peerman.get(), *node.llmq_ctx->sigman));
2211+
node.peerman->AddExtraHandler(std::make_unique<llmq::NetSigning>(node.peerman.get(), *node.llmq_ctx->sigman, node.active_ctx ? node.active_ctx->shareman.get() : nullptr, *node.sporkman));
22152212

22162213
if (node.active_ctx) {
22172214
auto cj_server = std::make_unique<CCoinJoinServer>(node.peerman.get(), chainman, *node.connman, *node.dmnman, *node.dstxman, *node.mn_metaman,

src/llmq/ehf_signals.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ MessageProcessingResult CEHFSignalsHandler::HandleNewRecoveredSig(const CRecover
9292
return {};
9393
}
9494

95-
MessageProcessingResult ret;
9695
const auto ehfSignals = m_chainman.ActiveChainstate().ChainHelper().ehf_manager->GetSignalsStage(
9796
WITH_LOCK(::cs_main, return m_chainman.ActiveTip()));
9897
MNHFTxPayload mnhfPayload;
@@ -113,19 +112,20 @@ MessageProcessingResult CEHFSignalsHandler::HandleNewRecoveredSig(const CRecover
113112

114113
CMutableTransaction tx = mnhfPayload.PrepareTx();
115114

116-
{
117-
CTransactionRef tx_to_sent = MakeTransactionRef(std::move(tx));
118-
LogPrintf("CEHFSignalsHandler::HandleNewRecoveredSig Special EHF TX is created hash=%s\n", tx_to_sent->GetHash().ToString());
119-
LOCK(::cs_main);
120-
const MempoolAcceptResult result = m_chainman.ProcessTransaction(tx_to_sent);
121-
if (result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
122-
ret.m_transactions.push_back(tx_to_sent->GetHash());
123-
} else {
124-
LogPrintf("CEHFSignalsHandler::HandleNewRecoveredSig -- AcceptToMemoryPool failed: %s\n", result.m_state.ToString());
125-
}
115+
CTransactionRef tx_to_sent = MakeTransactionRef(std::move(tx));
116+
LogPrintf("CEHFSignalsHandler::HandleNewRecoveredSig Special EHF TX is created hash=%s\n",
117+
tx_to_sent->GetHash().ToString());
118+
LOCK(::cs_main);
119+
const MempoolAcceptResult result = m_chainman.ProcessTransaction(tx_to_sent);
120+
if (result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
121+
MessageProcessingResult ret;
122+
ret.m_transactions.push_back(tx_to_sent->GetHash());
123+
return ret;
126124
}
127-
break;
125+
LogPrintf("CEHFSignalsHandler::HandleNewRecoveredSig -- AcceptToMemoryPool failed: %s\n",
126+
result.m_state.ToString());
127+
return {};
128128
}
129-
return ret;
129+
return {};
130130
}
131131
} // namespace llmq

0 commit comments

Comments
 (0)