Skip to content

Commit c6a21bb

Browse files
knstPastaPastaPasta
authored andcommitted
refactor: llmq/blockprocessor no more depends on net_processing
1 parent f613f34 commit c6a21bb

File tree

4 files changed

+20
-25
lines changed

4 files changed

+20
-25
lines changed

src/llmq/blockprocessor.cpp

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include <consensus/validation.h>
1616
#include <deploymentstatus.h>
1717
#include <net.h>
18-
#include <net_processing.h>
1918
#include <primitives/block.h>
2019
#include <primitives/transaction.h>
2120
#include <saltedhasher.h>
@@ -46,16 +45,16 @@ static const std::string DB_MINED_COMMITMENT_BY_INVERSED_HEIGHT_Q_INDEXED = "q_m
4645

4746
static const std::string DB_BEST_BLOCK_UPGRADE = "q_bbu2";
4847

49-
CQuorumBlockProcessor::CQuorumBlockProcessor(CChainState& chainstate, CConnman& _connman, CEvoDB& evoDb, const std::unique_ptr<PeerManager>& peerman) :
50-
m_chainstate(chainstate), connman(_connman), m_evoDb(evoDb), m_peerman(peerman)
48+
CQuorumBlockProcessor::CQuorumBlockProcessor(CChainState& chainstate, CConnman& _connman, CEvoDB& evoDb) :
49+
m_chainstate(chainstate), connman(_connman), m_evoDb(evoDb)
5150
{
5251
utils::InitQuorumsCache(mapHasMinedCommitmentCache);
5352
}
5453

55-
void CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view msg_type, CDataStream& vRecv)
54+
PeerMsgRet CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view msg_type, CDataStream& vRecv)
5655
{
5756
if (msg_type != NetMsgType::QFCOMMITMENT) {
58-
return;
57+
return {};
5958
}
6059

6160
CFinalCommitment qc;
@@ -65,16 +64,14 @@ void CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view m
6564

6665
if (qc.IsNull()) {
6766
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- null commitment from peer=%d\n", __func__, peer.GetId());
68-
m_peerman->Misbehaving(peer.GetId(), 100);
69-
return;
67+
return tl::unexpected{100};
7068
}
7169

7270
const auto& llmq_params_opt = GetLLMQParams(qc.llmqType);
7371
if (!llmq_params_opt.has_value()) {
7472
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- invalid commitment type %d from peer=%d\n", __func__,
7573
ToUnderlying(qc.llmqType), peer.GetId());
76-
m_peerman->Misbehaving(peer.GetId(), 100);
77-
return;
74+
return tl::unexpected{100};
7875
}
7976
auto type = qc.llmqType;
8077

@@ -88,33 +85,32 @@ void CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view m
8885
qc.quorumHash.ToString(), peer.GetId());
8986
// can't really punish the node here, as we might simply be the one that is on the wrong chain or not
9087
// fully synced
91-
return;
88+
return {};
9289
}
9390
if (m_chainstate.m_chain.Tip()->GetAncestor(pQuorumBaseBlockIndex->nHeight) != pQuorumBaseBlockIndex) {
9491
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- block %s not in active chain, peer=%d\n", __func__,
9592
qc.quorumHash.ToString(), peer.GetId());
9693
// same, can't punish
97-
return;
94+
return {};
9895
}
9996
int quorumHeight = pQuorumBaseBlockIndex->nHeight - (pQuorumBaseBlockIndex->nHeight % llmq_params_opt->dkgInterval) + int(qc.quorumIndex);
10097
if (quorumHeight != pQuorumBaseBlockIndex->nHeight) {
10198
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- block %s is not the first block in the DKG interval, peer=%d\n", __func__,
10299
qc.quorumHash.ToString(), peer.GetId());
103-
m_peerman->Misbehaving(peer.GetId(), 100);
104-
return;
100+
return tl::unexpected{100};
105101
}
106102
if (pQuorumBaseBlockIndex->nHeight < (m_chainstate.m_chain.Height() - llmq_params_opt->dkgInterval)) {
107103
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- block %s is too old, peer=%d\n", __func__,
108104
qc.quorumHash.ToString(), peer.GetId());
109105
// TODO: enable punishment in some future version when all/most nodes are running with this fix
110-
// m_peerman->Misbehaving(peer.GetId(), 100);
111-
return;
106+
// return tl::unexpected{100};
107+
return {};
112108
}
113109
if (HasMinedCommitment(type, qc.quorumHash)) {
114110
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- commitment for quorum hash[%s], type[%d], quorumIndex[%d] is already mined, peer=%d\n",
115111
__func__, qc.quorumHash.ToString(), ToUnderlying(type), qc.quorumIndex, peer.GetId());
116112
// NOTE: do not punish here
117-
return;
113+
return {};
118114
}
119115
}
120116

@@ -127,7 +123,7 @@ void CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view m
127123
if (it != minableCommitmentsByQuorum.end()) {
128124
auto jt = minableCommitments.find(it->second);
129125
if (jt != minableCommitments.end() && jt->second.CountSigners() <= qc.CountSigners()) {
130-
return;
126+
return {};
131127
}
132128
}
133129
}
@@ -136,14 +132,14 @@ void CQuorumBlockProcessor::ProcessMessage(const CNode& peer, std::string_view m
136132
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- commitment for quorum %s:%d is not valid quorumIndex[%d] nversion[%d], peer=%d\n",
137133
__func__, qc.quorumHash.ToString(),
138134
ToUnderlying(qc.llmqType), qc.quorumIndex, qc.nVersion, peer.GetId());
139-
m_peerman->Misbehaving(peer.GetId(), 100);
140-
return;
135+
return tl::unexpected{100};
141136
}
142137

143138
LogPrint(BCLog::LLMQ, "CQuorumBlockProcessor::%s -- received commitment for quorum %s:%d, validMembers=%d, signers=%d, peer=%d\n", __func__,
144139
qc.quorumHash.ToString(), ToUnderlying(qc.llmqType), qc.CountValidMembers(), qc.CountSigners(), peer.GetId());
145140

146141
AddMineableCommitment(qc);
142+
return {};
147143
}
148144

149145
bool CQuorumBlockProcessor::ProcessBlock(const CBlock& block, gsl::not_null<const CBlockIndex*> pindex, BlockValidationState& state, bool fJustCheck, bool fBLSChecks)

src/llmq/blockprocessor.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include <chain.h>
1111
#include <consensus/params.h>
12+
#include <net_types.h>
1213
#include <primitives/block.h>
1314
#include <saltedhasher.h>
1415
#include <sync.h>
@@ -23,7 +24,6 @@ class CConnman;
2324
class CDataStream;
2425
class CEvoDB;
2526
class CNode;
26-
class PeerManager;
2727

2828
extern RecursiveMutex cs_main;
2929

@@ -39,7 +39,6 @@ class CQuorumBlockProcessor
3939
CChainState& m_chainstate;
4040
CConnman& connman;
4141
CEvoDB& m_evoDb;
42-
const std::unique_ptr<PeerManager>& m_peerman;
4342

4443
mutable RecursiveMutex minableCommitmentsCs;
4544
std::map<std::pair<Consensus::LLMQType, uint256>, uint256> minableCommitmentsByQuorum GUARDED_BY(minableCommitmentsCs);
@@ -48,9 +47,9 @@ class CQuorumBlockProcessor
4847
mutable std::map<Consensus::LLMQType, unordered_lru_cache<uint256, bool, StaticSaltedHasher>> mapHasMinedCommitmentCache GUARDED_BY(minableCommitmentsCs);
4948

5049
public:
51-
explicit CQuorumBlockProcessor(CChainState& chainstate, CConnman& _connman, CEvoDB& evoDb, const std::unique_ptr<PeerManager>& peerman);
50+
explicit CQuorumBlockProcessor(CChainState& chainstate, CConnman& _connman, CEvoDB& evoDb);
5251

53-
void ProcessMessage(const CNode& peer, std::string_view msg_type, CDataStream& vRecv);
52+
PeerMsgRet ProcessMessage(const CNode& peer, std::string_view msg_type, CDataStream& vRecv);
5453

5554
bool ProcessBlock(const CBlock& block, gsl::not_null<const CBlockIndex*> pindex, BlockValidationState& state, bool fJustCheck, bool fBLSChecks) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
5655
bool UndoBlock(const CBlock& block, gsl::not_null<const CBlockIndex*> pindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main);

src/llmq/context.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ LLMQContext::LLMQContext(CChainState& chainstate, CConnman& connman, CEvoDB& evo
2626
dkg_debugman{std::make_unique<llmq::CDKGDebugManager>()},
2727
quorum_block_processor{[&]() -> llmq::CQuorumBlockProcessor* const {
2828
assert(llmq::quorumBlockProcessor == nullptr);
29-
llmq::quorumBlockProcessor = std::make_unique<llmq::CQuorumBlockProcessor>(chainstate, connman, evo_db, peerman);
29+
llmq::quorumBlockProcessor = std::make_unique<llmq::CQuorumBlockProcessor>(chainstate, connman, evo_db);
3030
return llmq::quorumBlockProcessor.get();
3131
}()},
3232
qdkgsman{std::make_unique<llmq::CDKGSessionManager>(*bls_worker, chainstate, connman, *dkg_debugman, *quorum_block_processor, sporkman, peerman, unit_tests, wipe)},

src/net_processing.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4352,7 +4352,7 @@ void PeerManagerImpl::ProcessMessage(
43524352
::masternodeSync->ProcessMessage(pfrom, msg_type, vRecv);
43534353
ProcessPeerMsgRet(m_govman.ProcessMessage(pfrom, m_connman, msg_type, vRecv), pfrom);
43544354
ProcessPeerMsgRet(CMNAuth::ProcessMessage(pfrom, m_connman, msg_type, vRecv), pfrom);
4355-
m_llmq_ctx->quorum_block_processor->ProcessMessage(pfrom, msg_type, vRecv);
4355+
ProcessPeerMsgRet(m_llmq_ctx->quorum_block_processor->ProcessMessage(pfrom, msg_type, vRecv), pfrom);
43564356
m_llmq_ctx->qdkgsman->ProcessMessage(pfrom, *m_llmq_ctx->qman, msg_type, vRecv);
43574357
m_llmq_ctx->qman->ProcessMessage(pfrom, msg_type, vRecv);
43584358
m_llmq_ctx->shareman->ProcessMessage(pfrom, *sporkManager, msg_type, vRecv);

0 commit comments

Comments
 (0)