Skip to content

Commit 44f237a

Browse files
Merge dashpay#6030: refactor: remove llmq::CQuorum{BlockProcessor, Manager} globals, move to LLMQContext
d7c35d0 refactor: remove `llmq::CQuorumManager` global, move to `LLMQContext` (Kittywhiskers Van Gogh) 5b86df6 refactor: reduce `llmq::CQuorumManager` globals use, use args (Kittywhiskers Van Gogh) 1efd219 refactor: remove `llmq::CQuorumBlockProcessor` global, move to `LLMQContext` (Kittywhiskers Van Gogh) 1d3afe7 evo: use `gsl::not_null` in `CTxMemPool::ConnectManagers` (Kittywhiskers Van Gogh) 805537e evo: add `CMNHFManager::`(`Dis`)`connectManagers` to remove global use (Kittywhiskers Van Gogh) cbb6828 refactor: access `llmq::CQuorumManager` through arg in `MNHFTx`, functions (Kittywhiskers Van Gogh) Pull request description: ## 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 **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)** - [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)_ ACKs for top commit: knst: utACK d7c35d0 knst: re-utACK dashpay@d7c35d0 PastaPastaPasta: utACK d7c35d0 Tree-SHA512: 07e7494bc061f85259a3a6cfb13d052403419cdc94fc51904ac03468bbdbd1ed74429546309d2bfc6a31ba184b93dc32842e49d2960819d19313bcb7e403008e
2 parents 3612b8a + d7c35d0 commit 44f237a

28 files changed

+159
-121
lines changed

src/evo/assetlocktx.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222
/**
2323
* Common code for Asset Lock and Asset Unlock
2424
*/
25-
bool CheckAssetLockUnlockTx(const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state)
25+
bool CheckAssetLockUnlockTx(const llmq::CQuorumManager& qman, const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state)
2626
{
2727
switch (tx.nType) {
2828
case TRANSACTION_ASSET_LOCK:
2929
return CheckAssetLockTx(tx, state);
3030
case TRANSACTION_ASSET_UNLOCK:
31-
return CheckAssetUnlockTx(tx, pindexPrev, indexes, state);
31+
return CheckAssetUnlockTx(qman, tx, pindexPrev, indexes, state);
3232
default:
3333
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-not-asset-locks-at-all");
3434
}
@@ -107,7 +107,7 @@ std::string CAssetLockPayload::ToString() const
107107

108108
const std::string ASSETUNLOCK_REQUESTID_PREFIX = "plwdtx";
109109

110-
bool CAssetUnlockPayload::VerifySig(const uint256& msgHash, gsl::not_null<const CBlockIndex*> pindexTip, TxValidationState& state) const
110+
bool CAssetUnlockPayload::VerifySig(const llmq::CQuorumManager& qman, const uint256& msgHash, gsl::not_null<const CBlockIndex*> pindexTip, TxValidationState& state) const
111111
{
112112
// That quourm hash must be active at `requestHeight`,
113113
// and at the quorumHash must be active in either the current or previous quorum cycle
@@ -116,7 +116,7 @@ bool CAssetUnlockPayload::VerifySig(const uint256& msgHash, gsl::not_null<const
116116
Consensus::LLMQType llmqType = Params().GetConsensus().llmqTypePlatform;
117117

118118
// We check at most 2 quorums
119-
const auto quorums = llmq::quorumManager->ScanQuorums(llmqType, pindexTip, 2);
119+
const auto quorums = qman.ScanQuorums(llmqType, pindexTip, 2);
120120

121121
if (bool isActive = std::any_of(quorums.begin(), quorums.end(), [&](const auto &q) { return q->qc->quorumHash == quorumHash; }); !isActive) {
122122
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-assetunlock-not-active-quorum");
@@ -128,7 +128,7 @@ bool CAssetUnlockPayload::VerifySig(const uint256& msgHash, gsl::not_null<const
128128
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-assetunlock-too-late");
129129
}
130130

131-
const auto quorum = llmq::quorumManager->GetQuorum(llmqType, quorumHash);
131+
const auto quorum = qman.GetQuorum(llmqType, quorumHash);
132132
assert(quorum);
133133

134134
const uint256 requestId = ::SerializeHash(std::make_pair(ASSETUNLOCK_REQUESTID_PREFIX, index));
@@ -141,7 +141,7 @@ bool CAssetUnlockPayload::VerifySig(const uint256& msgHash, gsl::not_null<const
141141
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-assetunlock-not-verified");
142142
}
143143

144-
bool CheckAssetUnlockTx(const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state)
144+
bool CheckAssetUnlockTx(const llmq::CQuorumManager& qman, const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state)
145145
{
146146
// Some checks depends from blockchain status also, such as `known indexes` and `withdrawal limits`
147147
// They are omitted here and done by CCreditPool
@@ -182,7 +182,7 @@ bool CheckAssetUnlockTx(const CTransaction& tx, gsl::not_null<const CBlockIndex*
182182

183183
uint256 msgHash = tx_copy.GetHash();
184184

185-
return assetUnlockTx.VerifySig(msgHash, pindexPrev, state);
185+
return assetUnlockTx.VerifySig(qman, msgHash, pindexPrev, state);
186186
}
187187

188188
bool GetAssetUnlockFee(const CTransaction& tx, CAmount& txfee, TxValidationState& state)

src/evo/assetlocktx.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
class CBlockIndex;
1818
class CRangesSet;
1919
class TxValidationState;
20+
namespace llmq {
21+
class CQuorumManager;
22+
} // namespace llmq
2023

2124
class CAssetLockPayload
2225
{
@@ -127,7 +130,7 @@ class CAssetUnlockPayload
127130
return obj;
128131
}
129132

130-
bool VerifySig(const uint256& msgHash, gsl::not_null<const CBlockIndex*> pindexTip, TxValidationState& state) const;
133+
bool VerifySig(const llmq::CQuorumManager& qman, const uint256& msgHash, gsl::not_null<const CBlockIndex*> pindexTip, TxValidationState& state) const;
131134

132135
// getters
133136
uint8_t getVersion() const
@@ -169,8 +172,8 @@ class CAssetUnlockPayload
169172
};
170173

171174
bool CheckAssetLockTx(const CTransaction& tx, TxValidationState& state);
172-
bool CheckAssetUnlockTx(const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state);
173-
bool CheckAssetLockUnlockTx(const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state);
175+
bool CheckAssetUnlockTx(const llmq::CQuorumManager& qman, const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state);
176+
bool CheckAssetLockUnlockTx(const llmq::CQuorumManager& qman, const CTransaction& tx, gsl::not_null<const CBlockIndex*> pindexPrev, const std::optional<CRangesSet>& indexes, TxValidationState& state);
174177
bool GetAssetUnlockFee(const CTransaction& tx, CAmount& txfee, TxValidationState& state);
175178

176179
#endif // BITCOIN_EVO_ASSETLOCKTX_H

src/evo/chainhelper.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010

1111
CChainstateHelper::CChainstateHelper(CCreditPoolManager& cpoolman, CDeterministicMNManager& dmnman, CMNHFManager& mnhfman, CGovernanceManager& govman,
1212
llmq::CQuorumBlockProcessor& qblockman, const Consensus::Params& consensus_params,
13-
const CMasternodeSync& mn_sync, const CSporkManager& sporkman, const llmq::CChainLocksHandler& clhandler)
13+
const CMasternodeSync& mn_sync, const CSporkManager& sporkman, const llmq::CChainLocksHandler& clhandler,
14+
const llmq::CQuorumManager& qman)
1415
: mn_payments{std::make_unique<CMNPaymentsProcessor>(dmnman, govman, consensus_params, mn_sync, sporkman)},
15-
special_tx{std::make_unique<CSpecialTxProcessor>(cpoolman, dmnman, mnhfman, qblockman, consensus_params, clhandler)}
16+
special_tx{std::make_unique<CSpecialTxProcessor>(cpoolman, dmnman, mnhfman, qblockman, consensus_params, clhandler, qman)}
1617
{}
1718

1819
CChainstateHelper::~CChainstateHelper() = default;

src/evo/chainhelper.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@ namespace Consensus { struct Params; }
2020
namespace llmq {
2121
class CChainLocksHandler;
2222
class CQuorumBlockProcessor;
23+
class CQuorumManager;
2324
}
2425

2526
class CChainstateHelper
2627
{
2728
public:
2829
explicit CChainstateHelper(CCreditPoolManager& cpoolman, CDeterministicMNManager& dmnman, CMNHFManager& mnhfman, CGovernanceManager& govman,
2930
llmq::CQuorumBlockProcessor& qblockman, const Consensus::Params& consensus_params,
30-
const CMasternodeSync& mn_sync, const CSporkManager& sporkman, const llmq::CChainLocksHandler& clhandler);
31+
const CMasternodeSync& mn_sync, const CSporkManager& sporkman, const llmq::CChainLocksHandler& clhandler,
32+
const llmq::CQuorumManager& qman);
3133
~CChainstateHelper();
3234

3335
CChainstateHelper() = delete;

src/evo/creditpool.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,12 @@ bool CCreditPoolDiff::Unlock(const CTransaction& tx, TxValidationState& state)
267267
return true;
268268
}
269269

270-
bool CCreditPoolDiff::ProcessLockUnlockTransaction(const CTransaction& tx, TxValidationState& state)
270+
bool CCreditPoolDiff::ProcessLockUnlockTransaction(const llmq::CQuorumManager& qman, const CTransaction& tx, TxValidationState& state)
271271
{
272272
if (!tx.IsSpecialTxVersion()) return true;
273273
if (tx.nType != TRANSACTION_ASSET_LOCK && tx.nType != TRANSACTION_ASSET_UNLOCK) return true;
274274

275-
if (!CheckAssetLockUnlockTx(tx, pindexPrev, pool.indexes, state)) {
275+
if (!CheckAssetLockUnlockTx(qman, tx, pindexPrev, pool.indexes, state)) {
276276
// pass the state returned by the function above
277277
return false;
278278
}
@@ -292,7 +292,7 @@ bool CCreditPoolDiff::ProcessLockUnlockTransaction(const CTransaction& tx, TxVal
292292
}
293293
}
294294

295-
std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpoolman, const CBlock& block, const CBlockIndex* pindexPrev,
295+
std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpoolman, const llmq::CQuorumManager& qman, const CBlock& block, const CBlockIndex* pindexPrev,
296296
const Consensus::Params& consensusParams, const CAmount blockSubsidy, BlockValidationState& state)
297297
{
298298
try {
@@ -302,7 +302,7 @@ std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpo
302302
for (size_t i = 1; i < block.vtx.size(); ++i) {
303303
const auto& tx = *block.vtx[i];
304304
TxValidationState tx_state;
305-
if (!creditPoolDiff.ProcessLockUnlockTransaction(tx, tx_state)) {
305+
if (!creditPoolDiff.ProcessLockUnlockTransaction(qman, tx, tx_state)) {
306306
assert(tx_state.GetResult() == TxValidationResult::TX_CONSENSUS);
307307
state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, tx_state.GetRejectReason(),
308308
strprintf("Process Lock/Unlock Transaction failed at Credit Pool (tx hash %s) %s", tx.GetHash().ToString(), tx_state.GetDebugMessage()));

src/evo/creditpool.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
class CBlockIndex;
2424
class BlockValidationState;
2525
class TxValidationState;
26-
27-
namespace Consensus
28-
{
29-
struct Params;
30-
}
26+
namespace Consensus {
27+
struct Params;
28+
} // namespace Consensus
29+
namespace llmq {
30+
class CQuorumManager;
31+
} // namespace llmq
3132

3233
struct CCreditPool {
3334
CAmount locked{0};
@@ -82,7 +83,7 @@ class CCreditPoolDiff {
8283
* to change amount of credit pool
8384
* @return true if transaction can be included in this block
8485
*/
85-
bool ProcessLockUnlockTransaction(const CTransaction& tx, TxValidationState& state);
86+
bool ProcessLockUnlockTransaction(const llmq::CQuorumManager& qman, const CTransaction& tx, TxValidationState& state);
8687

8788
/**
8889
* this function returns total amount of credits for the next block
@@ -134,7 +135,7 @@ class CCreditPoolManager
134135
CCreditPool ConstructCreditPool(const CBlockIndex* block_index, CCreditPool prev, const Consensus::Params& consensusParams);
135136
};
136137

137-
std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpoolman, const CBlock& block, const CBlockIndex* pindexPrev,
138+
std::optional<CCreditPoolDiff> GetCreditPoolDiffForBlock(CCreditPoolManager& cpoolman, const llmq::CQuorumManager& qman, const CBlock& block, const CBlockIndex* pindexPrev,
138139
const Consensus::Params& consensusParams, const CAmount blockSubsidy, BlockValidationState& state);
139140

140141
#endif

src/evo/mnhftx.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,14 @@ CMNHFManager::Signals CMNHFManager::GetSignalsStage(const CBlockIndex* const pin
8484
return signals;
8585
}
8686

87-
bool MNHFTx::Verify(const uint256& quorumHash, const uint256& requestId, const uint256& msgHash, TxValidationState& state) const
87+
bool MNHFTx::Verify(const llmq::CQuorumManager& qman, const uint256& quorumHash, const uint256& requestId, const uint256& msgHash, TxValidationState& state) const
8888
{
8989
if (versionBit >= VERSIONBITS_NUM_BITS) {
9090
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-mnhf-nbit-out-of-bounds");
9191
}
9292

9393
const Consensus::LLMQType& llmqType = Params().GetConsensus().llmqTypeMnhf;
94-
const auto quorum = llmq::quorumManager->GetQuorum(llmqType, quorumHash);
94+
const auto quorum = qman.GetQuorum(llmqType, quorumHash);
9595

9696
const uint256 signHash = llmq::BuildSignHash(llmqType, quorum->qc->quorumHash, requestId, msgHash);
9797
if (!sig.VerifyInsecure(quorum->qc->quorumPublicKey, signHash)) {
@@ -101,7 +101,7 @@ bool MNHFTx::Verify(const uint256& quorumHash, const uint256& requestId, const u
101101
return true;
102102
}
103103

104-
bool CheckMNHFTx(const CTransaction& tx, const CBlockIndex* pindexPrev, TxValidationState& state)
104+
bool CheckMNHFTx(const llmq::CQuorumManager& qman, const CTransaction& tx, const CBlockIndex* pindexPrev, TxValidationState& state)
105105
{
106106
if (!tx.IsSpecialTxVersion() || tx.nType != TRANSACTION_MNHF_SIGNAL) {
107107
return state.Invalid(TxValidationResult::TX_CONSENSUS, "bad-mnhf-type");
@@ -134,7 +134,7 @@ bool CheckMNHFTx(const CTransaction& tx, const CBlockIndex* pindexPrev, TxValida
134134
uint256 msgHash = tx_copy.GetHash();
135135

136136

137-
if (!mnhfTx.signal.Verify(mnhfTx.signal.quorumHash, mnhfTx.GetRequestId(), msgHash, state)) {
137+
if (!mnhfTx.signal.Verify(qman, mnhfTx.signal.quorumHash, mnhfTx.GetRequestId(), msgHash, state)) {
138138
// set up inside Verify
139139
return false;
140140
}
@@ -160,7 +160,7 @@ std::optional<uint8_t> extractEHFSignal(const CTransaction& tx)
160160
return opt_mnhfTx->signal.versionBit;
161161
}
162162

163-
static bool extractSignals(const CBlock& block, const CBlockIndex* const pindex, std::vector<uint8_t>& new_signals, BlockValidationState& state)
163+
static bool extractSignals(const llmq::CQuorumManager& qman, const CBlock& block, const CBlockIndex* const pindex, std::vector<uint8_t>& new_signals, BlockValidationState& state)
164164
{
165165
// we skip the coinbase
166166
for (size_t i = 1; i < block.vtx.size(); ++i) {
@@ -172,7 +172,7 @@ static bool extractSignals(const CBlock& block, const CBlockIndex* const pindex,
172172
}
173173

174174
TxValidationState tx_state;
175-
if (!CheckMNHFTx(tx, pindex, tx_state)) {
175+
if (!CheckMNHFTx(qman, tx, pindex, tx_state)) {
176176
return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, tx_state.GetRejectReason(), tx_state.GetDebugMessage());
177177
}
178178

@@ -192,9 +192,11 @@ static bool extractSignals(const CBlock& block, const CBlockIndex* const pindex,
192192

193193
std::optional<CMNHFManager::Signals> CMNHFManager::ProcessBlock(const CBlock& block, const CBlockIndex* const pindex, bool fJustCheck, BlockValidationState& state)
194194
{
195+
assert(m_qman);
196+
195197
try {
196198
std::vector<uint8_t> new_signals;
197-
if (!extractSignals(block, pindex, new_signals, state)) {
199+
if (!extractSignals(*m_qman, block, pindex, new_signals, state)) {
198200
// state is set inside extractSignals
199201
return std::nullopt;
200202
}
@@ -244,9 +246,11 @@ std::optional<CMNHFManager::Signals> CMNHFManager::ProcessBlock(const CBlock& bl
244246

245247
bool CMNHFManager::UndoBlock(const CBlock& block, const CBlockIndex* const pindex)
246248
{
249+
assert(m_qman);
250+
247251
std::vector<uint8_t> excluded_signals;
248252
BlockValidationState state;
249-
if (!extractSignals(block, pindex, excluded_signals, state)) {
253+
if (!extractSignals(*m_qman, block, pindex, excluded_signals, state)) {
250254
LogPrintf("CMNHFManager::%s: failed to extract signals\n", __func__);
251255
return false;
252256
}
@@ -350,6 +354,13 @@ void CMNHFManager::AddSignal(const CBlockIndex* const pindex, int bit)
350354
AddToCache(signals, pindex);
351355
}
352356

357+
void CMNHFManager::ConnectManagers(gsl::not_null<llmq::CQuorumManager*> qman)
358+
{
359+
// Do not allow double-initialization
360+
assert(m_qman == nullptr);
361+
m_qman = qman;
362+
}
363+
353364
std::string MNHFTx::ToString() const
354365
{
355366
return strprintf("MNHFTx(versionBit=%d, quorumHash=%s, sig=%s)",

src/evo/mnhftx.h

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define BITCOIN_EVO_MNHFTX_H
77

88
#include <bls/bls.h>
9+
#include <gsl/pointers.h>
910
#include <primitives/transaction.h>
1011
#include <sync.h>
1112
#include <threadsafety.h>
@@ -22,6 +23,9 @@ class CBlock;
2223
class CBlockIndex;
2324
class CEvoDB;
2425
class TxValidationState;
26+
namespace llmq {
27+
class CQuorumManager;
28+
}
2529

2630
// mnhf signal special transaction
2731
class MNHFTx
@@ -32,7 +36,8 @@ class MNHFTx
3236
CBLSSignature sig{};
3337

3438
MNHFTx() = default;
35-
bool Verify(const uint256& quorumHash, const uint256& requestId, const uint256& msgHash, TxValidationState& state) const;
39+
bool Verify(const llmq::CQuorumManager& qman, const uint256& quorumHash, const uint256& requestId, const uint256& msgHash,
40+
TxValidationState& state) const;
3641

3742
SERIALIZE_METHODS(MNHFTx, obj)
3843
{
@@ -95,6 +100,7 @@ class CMNHFManager : public AbstractEHFManager
95100
{
96101
private:
97102
CEvoDB& m_evoDb;
103+
llmq::CQuorumManager* m_qman{nullptr};
98104

99105
static constexpr size_t MNHFCacheSize = 1000;
100106
Mutex cs_cache;
@@ -111,24 +117,45 @@ class CMNHFManager : public AbstractEHFManager
111117
/**
112118
* Every new block should be processed when Tip() is updated by calling of CMNHFManager::ProcessBlock.
113119
* This function actually does only validate EHF transaction for this block and update internal caches/evodb state
120+
*
121+
* @pre Caller must ensure that LLMQContext has been initialized and the llmq::CQuorumManager pointer has been
122+
* set by calling ConnectManagers() for this CMNHFManager instance
114123
*/
115124
std::optional<Signals> ProcessBlock(const CBlock& block, const CBlockIndex* const pindex, bool fJustCheck, BlockValidationState& state);
116125

117126
/**
118127
* Every undo block should be processed when Tip() is updated by calling of CMNHFManager::UndoBlock
119-
* This function actually does nothing at the moment, because status of ancestor block is already know.
128+
* This function actually does nothing at the moment, because status of ancestor block is already known.
120129
* Although it should be still called to do some sanity checks
130+
*
131+
* @pre Caller must ensure that LLMQContext has been initialized and the llmq::CQuorumManager pointer has been
132+
* set by calling ConnectManagers() for this CMNHFManager instance
121133
*/
122134
bool UndoBlock(const CBlock& block, const CBlockIndex* const pindex);
123135

124-
125136
// Implements interface
126137
Signals GetSignalsStage(const CBlockIndex* const pindexPrev) override;
127138

128139
/**
129140
* Helper that used in Unit Test to forcely setup EHF signal for specific block
130141
*/
131142
void AddSignal(const CBlockIndex* const pindex, int bit) EXCLUSIVE_LOCKS_REQUIRED(!cs_cache);
143+
144+
/**
145+
* Set llmq::CQuorumManager pointer.
146+
*
147+
* Separated from constructor to allow LLMQContext to use CMNHFManager in read-only capacity.
148+
* Required to mutate state.
149+
*/
150+
void ConnectManagers(gsl::not_null<llmq::CQuorumManager*> qman);
151+
152+
/**
153+
* Reset llmq::CQuorumManager pointer.
154+
*
155+
* @pre Must be called before LLMQContext (containing llmq::CQuorumManager) is destroyed.
156+
*/
157+
void DisconnectManagers() { m_qman = nullptr; };
158+
132159
private:
133160
void AddToCache(const Signals& signals, const CBlockIndex* const pindex);
134161

@@ -148,6 +175,6 @@ class CMNHFManager : public AbstractEHFManager
148175
};
149176

150177
std::optional<uint8_t> extractEHFSignal(const CTransaction& tx);
151-
bool CheckMNHFTx(const CTransaction& tx, const CBlockIndex* pindexPrev, TxValidationState& state);
178+
bool CheckMNHFTx(const llmq::CQuorumManager& qman, const CTransaction& tx, const CBlockIndex* pindexPrev, TxValidationState& state);
152179

153180
#endif // BITCOIN_EVO_MNHFTX_H

0 commit comments

Comments
 (0)