Skip to content

Commit d4dc191

Browse files
committed
refactor: adapt LLMQ logic to DeploymentActive{At,After}
1 parent 2f9210f commit d4dc191

23 files changed

+250
-203
lines changed

src/evo/specialtxman.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,7 @@ static bool CheckSpecialTxInner(CDeterministicMNManager& dmnman, llmq::CQuorumSn
105105
if (!tx.HasExtraPayloadField())
106106
return true;
107107

108-
const auto& consensusParams = Params().GetConsensus();
109-
if (!DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_DIP0003)) {
108+
if (!DeploymentActiveAfter(pindexPrev, chainman.GetConsensus(), Consensus::DEPLOYMENT_DIP0003)) {
110109
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-tx-type");
111110
}
112111

@@ -443,7 +442,7 @@ bool CSpecialTxProcessor::RebuildListFromBlock(const CBlock& block, gsl::not_nul
443442
// The commitment has already been validated at this point, so it's safe to use members of it
444443

445444
const auto members = llmq::utils::GetAllQuorumMembers(opt_qc->commitment.llmqType, m_dmnman, m_qsnapman,
446-
pQuorumBaseBlockIndex);
445+
m_chainman, pQuorumBaseBlockIndex);
447446
HandleQuorumCommitment(opt_qc->commitment, members, debugLogs, newList);
448447
}
449448
}

src/llmq/blockprocessor.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
#include <map>
2929

3030
static void PreComputeQuorumMembers(CDeterministicMNManager& dmnman, llmq::CQuorumSnapshotManager& qsnapman,
31-
const CBlockIndex* pindex, bool reset_cache)
31+
const ChainstateManager& chainman, const CBlockIndex* pindex, bool reset_cache)
3232
{
33-
for (const Consensus::LLMQParams& params : llmq::GetEnabledQuorumParams(pindex->pprev)) {
33+
for (const Consensus::LLMQParams& params : llmq::GetEnabledQuorumParams(chainman, pindex->pprev)) {
3434
if (llmq::IsQuorumRotationEnabled(params, pindex) && (pindex->nHeight % params.dkgInterval == 0)) {
35-
llmq::utils::GetAllQuorumMembers(params.type, dmnman, qsnapman, pindex, reset_cache);
35+
llmq::utils::GetAllQuorumMembers(params.type, dmnman, qsnapman, chainman, pindex, reset_cache);
3636
}
3737
}
3838
}
@@ -157,7 +157,7 @@ MessageProcessingResult CQuorumBlockProcessor::ProcessMessage(const CNode& peer,
157157
}
158158
}
159159

160-
if (!qc.Verify(m_dmnman, m_qsnapman, pQuorumBaseBlockIndex, /*checkSigs=*/true)) {
160+
if (!qc.Verify(m_dmnman, m_qsnapman, m_chainstate.m_chainman, pQuorumBaseBlockIndex, /*checkSigs=*/true)) {
161161
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- commitment for quorum %s:%d is not valid quorumIndex[%d] nversion[%d], peer=%d\n",
162162
__func__, qc.quorumHash.ToString(),
163163
ToUnderlying(qc.llmqType), qc.quorumIndex, qc.nVersion, peer.GetId());
@@ -180,12 +180,12 @@ bool CQuorumBlockProcessor::ProcessBlock(const CBlock& block, gsl::not_null<cons
180180

181181
const auto blockHash = pindex->GetBlockHash();
182182

183-
if (!DeploymentActiveAt(*pindex, Params().GetConsensus(), Consensus::DEPLOYMENT_DIP0003)) {
183+
if (!DeploymentActiveAt(*pindex, m_chainstate.m_chainman.GetConsensus(), Consensus::DEPLOYMENT_DIP0003)) {
184184
m_evoDb.Write(DB_BEST_BLOCK_UPGRADE, blockHash);
185185
return true;
186186
}
187187

188-
PreComputeQuorumMembers(m_dmnman, m_qsnapman, pindex, /*reset_cache=*/false);
188+
PreComputeQuorumMembers(m_dmnman, m_qsnapman, m_chainstate.m_chainman, pindex, /*reset_cache=*/false);
189189

190190
std::multimap<Consensus::LLMQType, CFinalCommitment> qcs;
191191
if (!GetCommitmentsFromBlock(block, pindex, qcs, state)) {
@@ -196,7 +196,7 @@ bool CQuorumBlockProcessor::ProcessBlock(const CBlock& block, gsl::not_null<cons
196196
// until the first non-null commitment has been mined. After the non-null commitment, no other commitments are
197197
// allowed, including null commitments.
198198
// Note: must only check quorums that were enabled at the _previous_ block height to match mining logic
199-
for (const Consensus::LLMQParams& params : GetEnabledQuorumParams(pindex->pprev)) {
199+
for (const Consensus::LLMQParams& params : GetEnabledQuorumParams(m_chainstate.m_chainman, pindex->pprev)) {
200200
// skip these checks when replaying blocks after the crash
201201
if (m_chainstate.m_chain.Tip() == nullptr) {
202202
break;
@@ -227,7 +227,7 @@ bool CQuorumBlockProcessor::ProcessBlock(const CBlock& block, gsl::not_null<cons
227227
pindex->nHeight, qc.quorumHash.ToString());
228228
return false;
229229
}
230-
qc.VerifySignatureAsync(m_dmnman, m_qsnapman, pQuorumBaseBlockIndex, &queue_control);
230+
qc.VerifySignatureAsync(m_dmnman, m_qsnapman, m_chainstate.m_chainman, pQuorumBaseBlockIndex, &queue_control);
231231
}
232232

233233
if (!queue_control.Wait()) {
@@ -349,7 +349,7 @@ bool CQuorumBlockProcessor::ProcessCommitment(int nHeight, const uint256& blockH
349349
}
350350

351351
// we don't validate signatures here; they already validated on previous step
352-
if (!qc.Verify(m_dmnman, m_qsnapman, pQuorumBaseBlockIndex, /*checksigs=*/false)) {
352+
if (!qc.Verify(m_dmnman, m_qsnapman, m_chainstate.m_chainman, pQuorumBaseBlockIndex, /*checksigs=*/false)) {
353353
LogPrint(BCLog::LLMQ, /* Continued */
354354
"%s -- height=%d, type=%d, quorumIndex=%d, quorumHash=%s, signers=%s, validMembers=%d, "
355355
"quorumPublicKey=%s qc verify failed.\n",
@@ -396,7 +396,7 @@ bool CQuorumBlockProcessor::UndoBlock(const CBlock& block, gsl::not_null<const C
396396
{
397397
AssertLockHeld(::cs_main);
398398

399-
PreComputeQuorumMembers(m_dmnman, m_qsnapman, pindex, /*reset_cache=*/true);
399+
PreComputeQuorumMembers(m_dmnman, m_qsnapman, m_chainstate.m_chainman, pindex, /*reset_cache=*/true);
400400

401401
std::multimap<Consensus::LLMQType, CFinalCommitment> qcs;
402402
if (BlockValidationState dummy; !GetCommitmentsFromBlock(block, pindex, qcs, dummy)) {
@@ -466,7 +466,7 @@ bool CQuorumBlockProcessor::GetCommitmentsFromBlock(const CBlock& block, gsl::no
466466
}
467467
}
468468

469-
if (pindex->nHeight < consensus.DIP0003Height && !ret.empty()) {
469+
if (!DeploymentActiveAt(*pindex, consensus, Consensus::DEPLOYMENT_DIP0003) && !ret.empty()) {
470470
return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-qc-premature");
471471
}
472472

@@ -749,7 +749,7 @@ std::optional<std::vector<CFinalCommitment>> CQuorumBlockProcessor::GetMineableC
749749
const auto *const pindex = m_chainstate.m_chain.Height() < nHeight ? m_chainstate.m_chain.Tip() : m_chainstate.m_chain.Tip()->GetAncestor(nHeight);
750750

751751
bool rotation_enabled = IsQuorumRotationEnabled(llmqParams, pindex);
752-
bool basic_bls_enabled{DeploymentActiveAfter(pindex, Params().GetConsensus(), Consensus::DEPLOYMENT_V19)};
752+
bool basic_bls_enabled{DeploymentActiveAfter(pindex, m_chainstate.m_chainman.GetConsensus(), Consensus::DEPLOYMENT_V19)};
753753
size_t quorums_num = rotation_enabled ? llmqParams.signingActiveQuorumCount : 1;
754754

755755
std::stringstream ss;

src/llmq/commitment.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ CFinalCommitment::CFinalCommitment(const Consensus::LLMQParams& params, const ui
2929
}
3030

3131
bool CFinalCommitment::VerifySignatureAsync(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,
32+
const ChainstateManager& chainman,
3233
gsl::not_null<const CBlockIndex*> pQuorumBaseBlockIndex,
3334
CCheckQueueControl<utils::BlsCheck>* queue_control) const
3435
{
35-
auto members = utils::GetAllQuorumMembers(llmqType, dmnman, qsnapman, pQuorumBaseBlockIndex);
36+
auto members = utils::GetAllQuorumMembers(llmqType, dmnman, qsnapman, chainman, pQuorumBaseBlockIndex);
3637
const auto& llmq_params_opt = Params().GetLLMQ(llmqType);
3738
if (!llmq_params_opt.has_value()) {
3839
LogPrint(BCLog::LLMQ, "CFinalCommitment -- q[%s] invalid llmqType=%d\n", quorumHash.ToString(),
@@ -96,6 +97,7 @@ bool CFinalCommitment::VerifySignatureAsync(CDeterministicMNManager& dmnman, CQu
9697

9798

9899
bool CFinalCommitment::Verify(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,
100+
const ChainstateManager& chainman,
99101
gsl::not_null<const CBlockIndex*> pQuorumBaseBlockIndex, bool checkSigs) const
100102
{
101103
const auto& llmq_params_opt = Params().GetLLMQ(llmqType);
@@ -106,7 +108,7 @@ bool CFinalCommitment::Verify(CDeterministicMNManager& dmnman, CQuorumSnapshotMa
106108
const auto& llmq_params = llmq_params_opt.value();
107109

108110
const uint16_t expected_nversion{CFinalCommitment::GetVersion(IsQuorumRotationEnabled(llmq_params, pQuorumBaseBlockIndex),
109-
DeploymentActiveAfter(pQuorumBaseBlockIndex, Params().GetConsensus(), Consensus::DEPLOYMENT_V19))};
111+
DeploymentActiveAfter(pQuorumBaseBlockIndex, chainman.GetConsensus(), Consensus::DEPLOYMENT_V19))};
110112
if (nVersion == 0 || nVersion != expected_nversion) {
111113
LogPrint(BCLog::LLMQ, "CFinalCommitment -- q[%s] invalid nVersion=%d expected=%d\n", quorumHash.ToString(), nVersion, expected_nversion);
112114
return false;
@@ -150,7 +152,7 @@ bool CFinalCommitment::Verify(CDeterministicMNManager& dmnman, CQuorumSnapshotMa
150152
LogPrint(BCLog::LLMQ, "CFinalCommitment -- q[%s] invalid vvecSig\n", quorumHash.ToString());
151153
return false;
152154
}
153-
auto members = utils::GetAllQuorumMembers(llmqType, dmnman, qsnapman, pQuorumBaseBlockIndex);
155+
auto members = utils::GetAllQuorumMembers(llmqType, dmnman, qsnapman, chainman, pQuorumBaseBlockIndex);
154156
if (LogAcceptDebug(BCLog::LLMQ)) {
155157
std::stringstream ss;
156158
std::stringstream ss2;
@@ -174,7 +176,7 @@ bool CFinalCommitment::Verify(CDeterministicMNManager& dmnman, CQuorumSnapshotMa
174176

175177
// sigs are only checked when the block is processed
176178
if (checkSigs) {
177-
if (!VerifySignatureAsync(dmnman, qsnapman, pQuorumBaseBlockIndex, nullptr)) {
179+
if (!VerifySignatureAsync(dmnman, qsnapman, chainman, pQuorumBaseBlockIndex, nullptr)) {
178180
return false;
179181
}
180182
}
@@ -268,7 +270,7 @@ bool CheckLLMQCommitment(CDeterministicMNManager& dmnman, CQuorumSnapshotManager
268270
return true;
269271
}
270272

271-
if (!qcTx.commitment.Verify(dmnman, qsnapman, pQuorumBaseBlockIndex, false)) {
273+
if (!qcTx.commitment.Verify(dmnman, qsnapman, chainman, pQuorumBaseBlockIndex, false)) {
272274
LogPrint(BCLog::LLMQ, "CFinalCommitment -- h[%d] invalid qcTx.commitment[%s] Verify failed\n", pindexPrev->nHeight, qcTx.commitment.quorumHash.ToString());
273275
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-qc-invalid");
274276
}

src/llmq/commitment.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ class CFinalCommitment
7575
}
7676

7777
bool VerifySignatureAsync(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,
78-
gsl::not_null<const CBlockIndex*> pQuorumBaseBlockIndex,
78+
const ChainstateManager& chainman, gsl::not_null<const CBlockIndex*> pQuorumBaseBlockIndex,
7979
CCheckQueueControl<utils::BlsCheck>* queue_control) const;
80-
bool Verify(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman,
80+
bool Verify(CDeterministicMNManager& dmnman, CQuorumSnapshotManager& qsnapman, const ChainstateManager& chainman,
8181
gsl::not_null<const CBlockIndex*> pQuorumBaseBlockIndex, bool checkSigs) const;
8282
bool VerifyNull() const;
8383
bool VerifySizes(const Consensus::LLMQParams& params) const;

src/llmq/context.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ LLMQContext::LLMQContext(ChainstateManager& chainman, CDeterministicMNManager& d
2424
qsnapman{std::make_unique<llmq::CQuorumSnapshotManager>(evo_db)},
2525
quorum_block_processor{
2626
std::make_unique<llmq::CQuorumBlockProcessor>(chainman.ActiveChainstate(), dmnman, evo_db, *qsnapman)},
27-
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(*bls_worker, chainman.ActiveChainstate(), dmnman, *dkg_debugman,
28-
mn_metaman, *quorum_block_processor, *qsnapman, mn_activeman,
27+
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(*bls_worker, dmnman, *dkg_debugman, mn_metaman,
28+
*quorum_block_processor, *qsnapman, mn_activeman, chainman,
2929
sporkman, db_params)},
30-
qman{std::make_unique<llmq::CQuorumManager>(*bls_worker, chainman.ActiveChainstate(), dmnman, *qdkgsman, evo_db,
31-
*quorum_block_processor, *qsnapman, mn_activeman, mn_sync, sporkman,
32-
db_params)},
30+
qman{std::make_unique<llmq::CQuorumManager>(*bls_worker, dmnman, *qdkgsman, evo_db, *quorum_block_processor,
31+
*qsnapman, mn_activeman, chainman, mn_sync, sporkman, db_params)},
3332
sigman{std::make_unique<llmq::CSigningManager>(*qman, db_params)},
3433
clhandler{std::make_unique<llmq::CChainLocksHandler>(chainman.ActiveChainstate(), *qman, sporkman, mempool, mn_sync)},
3534
isman{std::make_unique<llmq::CInstantSendManager>(*clhandler, chainman.ActiveChainstate(), *sigman, sporkman,

src/llmq/debug.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ UniValue CDKGDebugSessionStatus::ToJson(CDeterministicMNManager& dmnman, CQuorum
2828
if (detailLevel == 2) {
2929
const CBlockIndex* pindex = WITH_LOCK(::cs_main, return chainman.m_blockman.LookupBlockIndex(quorumHash));
3030
if (pindex != nullptr) {
31-
dmnMembers = utils::GetAllQuorumMembers(llmqType, dmnman, qsnapman, pindex);
31+
dmnMembers = utils::GetAllQuorumMembers(llmqType, dmnman, qsnapman, chainman, pindex);
3232
}
3333
}
3434

src/llmq/dkgsession.cpp

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,24 @@
44

55
#include <llmq/dkgsession.h>
66

7+
#include <batchedlogger.h>
8+
#include <evo/deterministicmns.h>
79
#include <llmq/commitment.h>
810
#include <llmq/debug.h>
911
#include <llmq/dkgsessionmgr.h>
1012
#include <llmq/options.h>
1113
#include <llmq/utils.h>
14+
#include <masternode/meta.h>
15+
#include <masternode/node.h>
16+
#include <util/irange.h>
1217

13-
#include <batchedlogger.h>
1418
#include <chainparams.h>
15-
#include <cxxtimer.hpp>
1619
#include <deploymentstatus.h>
17-
#include <evo/deterministicmns.h>
1820
#include <logging.h>
19-
#include <masternode/meta.h>
20-
#include <masternode/node.h>
21-
#include <util/irange.h>
2221
#include <util/underlying.h>
22+
#include <validation.h>
23+
24+
#include <cxxtimer.hpp>
2325

2426
#include <array>
2527
#include <atomic>
@@ -71,25 +73,26 @@ CDKGSession::CDKGSession(const CBlockIndex* pQuorumBaseBlockIndex, const Consens
7173
CBLSWorker& _blsWorker, CDeterministicMNManager& dmnman, CDKGSessionManager& _dkgManager,
7274
CDKGDebugManager& _dkgDebugManager, CMasternodeMetaMan& mn_metaman,
7375
CQuorumSnapshotManager& qsnapman, const CActiveMasternodeManager* const mn_activeman,
74-
const CSporkManager& sporkman) :
75-
params(_params),
76-
blsWorker(_blsWorker),
77-
cache(_blsWorker),
78-
m_dmnman(dmnman),
79-
dkgManager(_dkgManager),
80-
dkgDebugManager(_dkgDebugManager),
81-
m_mn_metaman(mn_metaman),
82-
m_qsnapman(qsnapman),
83-
m_mn_activeman(mn_activeman),
84-
m_sporkman(sporkman),
76+
const ChainstateManager& chainman, const CSporkManager& sporkman) :
77+
params{_params},
78+
blsWorker{_blsWorker},
79+
cache{_blsWorker},
80+
m_dmnman{dmnman},
81+
dkgManager{_dkgManager},
82+
dkgDebugManager{_dkgDebugManager},
83+
m_mn_metaman{mn_metaman},
84+
m_qsnapman{qsnapman},
85+
m_mn_activeman{mn_activeman},
86+
m_chainman{chainman},
87+
m_sporkman{sporkman},
8588
m_quorum_base_block_index{pQuorumBaseBlockIndex},
86-
m_use_legacy_bls{!DeploymentActiveAfter(m_quorum_base_block_index, Params().GetConsensus(), Consensus::DEPLOYMENT_V19)}
89+
m_use_legacy_bls{!DeploymentActiveAfter(m_quorum_base_block_index, chainman.GetConsensus(), Consensus::DEPLOYMENT_V19)}
8790
{
8891
}
8992

9093
bool CDKGSession::Init(const uint256& _myProTxHash, int _quorumIndex)
9194
{
92-
const auto mns = utils::GetAllQuorumMembers(params.type, m_dmnman, m_qsnapman, m_quorum_base_block_index);
95+
const auto mns = utils::GetAllQuorumMembers(params.type, m_dmnman, m_qsnapman, m_chainman, m_quorum_base_block_index);
9396
quorumIndex = _quorumIndex;
9497
members.resize(mns.size());
9598
memberIds.resize(members.size());
@@ -134,7 +137,7 @@ bool CDKGSession::Init(const uint256& _myProTxHash, int _quorumIndex)
134137

135138
if (!myProTxHash.IsNull()) {
136139
dkgDebugManager.InitLocalSessionStatus(params, quorumIndex, m_quorum_base_block_index->GetBlockHash(), m_quorum_base_block_index->nHeight);
137-
relayMembers = utils::GetQuorumRelayMembers(params, m_dmnman, m_qsnapman, m_quorum_base_block_index,
140+
relayMembers = utils::GetQuorumRelayMembers(params, m_dmnman, m_qsnapman, m_chainman, m_quorum_base_block_index,
138141
myProTxHash, true);
139142
if (LogAcceptDebug(BCLog::LLMQ)) {
140143
std::stringstream ss;
@@ -1238,7 +1241,7 @@ std::vector<CFinalCommitment> CDKGSession::FinalizeCommitments()
12381241

12391242
const bool isQuorumRotationEnabled{IsQuorumRotationEnabled(params, m_quorum_base_block_index)};
12401243
// TODO: always put `true` here: so far as v19 is activated, we always write BASIC now
1241-
fqc.nVersion = CFinalCommitment::GetVersion(isQuorumRotationEnabled, DeploymentActiveAfter(m_quorum_base_block_index, Params().GetConsensus(), Consensus::DEPLOYMENT_V19));
1244+
fqc.nVersion = CFinalCommitment::GetVersion(isQuorumRotationEnabled, DeploymentActiveAfter(m_quorum_base_block_index, m_chainman.GetConsensus(), Consensus::DEPLOYMENT_V19));
12421245
fqc.quorumIndex = isQuorumRotationEnabled ? quorumIndex : 0;
12431246

12441247
uint256 commitmentHash = BuildCommitmentHash(fqc.llmqType, fqc.quorumHash, fqc.validMembers, fqc.quorumPublicKey, fqc.quorumVvecHash);
@@ -1277,7 +1280,7 @@ std::vector<CFinalCommitment> CDKGSession::FinalizeCommitments()
12771280
t2.stop();
12781281

12791282
cxxtimer::Timer t3(true);
1280-
if (!fqc.Verify(m_dmnman, m_qsnapman, m_quorum_base_block_index, true)) {
1283+
if (!fqc.Verify(m_dmnman, m_qsnapman, m_chainman, m_quorum_base_block_index, true)) {
12811284
logger.Batch("failed to verify final commitment");
12821285
continue;
12831286
}
@@ -1326,7 +1329,7 @@ CFinalCommitment CDKGSession::FinalizeSingleCommitment()
13261329
}
13271330
const bool isQuorumRotationEnabled{false};
13281331
fqc.nVersion = CFinalCommitment::GetVersion(isQuorumRotationEnabled,
1329-
DeploymentActiveAfter(m_quorum_base_block_index, Params().GetConsensus(),
1332+
DeploymentActiveAfter(m_quorum_base_block_index, m_chainman.GetConsensus(),
13301333
Consensus::DEPLOYMENT_V19));
13311334
fqc.quorumIndex = 0;
13321335

@@ -1340,7 +1343,7 @@ CFinalCommitment CDKGSession::FinalizeSingleCommitment()
13401343
fqc.quorumSig = fqc.membersSig;
13411344
}
13421345

1343-
if (!fqc.Verify(m_dmnman, m_qsnapman, m_quorum_base_block_index, true)) {
1346+
if (!fqc.Verify(m_dmnman, m_qsnapman, m_chainman, m_quorum_base_block_index, true)) {
13441347
logger.Batch("failed to verify final commitment");
13451348
assert(false);
13461349
}

src/llmq/dkgsession.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ class CDKGSession
289289
CMasternodeMetaMan& m_mn_metaman;
290290
CQuorumSnapshotManager& m_qsnapman;
291291
const CActiveMasternodeManager* const m_mn_activeman;
292+
const ChainstateManager& m_chainman;
292293
const CSporkManager& m_sporkman;
293294

294295
const CBlockIndex* const m_quorum_base_block_index;
@@ -333,7 +334,8 @@ class CDKGSession
333334
CDKGSession(const CBlockIndex* pQuorumBaseBlockIndex, const Consensus::LLMQParams& _params, CBLSWorker& _blsWorker,
334335
CDeterministicMNManager& dmnman, CDKGSessionManager& _dkgManager, CDKGDebugManager& _dkgDebugManager,
335336
CMasternodeMetaMan& mn_metaman, CQuorumSnapshotManager& qsnapman,
336-
const CActiveMasternodeManager* const mn_activeman, const CSporkManager& sporkman);
337+
const CActiveMasternodeManager* const mn_activeman, const ChainstateManager& chainman,
338+
const CSporkManager& sporkman);
337339

338340
// TODO: remove Init completely
339341
bool Init(const uint256& _myProTxHash, int _quorumIndex);

0 commit comments

Comments
 (0)