Skip to content

Commit 3e31f29

Browse files
knstPastaPastaPasta
authored andcommitted
refactor: governance/governance no more depends on net_processing
1 parent fdcc1b7 commit 3e31f29

File tree

3 files changed

+30
-28
lines changed

3 files changed

+30
-28
lines changed

src/governance/governance.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include <masternode/meta.h>
1818
#include <masternode/node.h>
1919
#include <masternode/sync.h>
20-
#include <net_processing.h>
2120
#include <netfulfilledman.h>
2221
#include <netmessagemaker.h>
2322
#include <protocol.h>
@@ -115,17 +114,17 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
115114
return cmapVoteToObject.Get(nHash, pGovobj) && pGovobj->GetVoteFile().SerializeVoteToStream(nHash, ss);
116115
}
117116

118-
void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConnman& connman, std::string_view msg_type, CDataStream& vRecv)
117+
PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, std::string_view msg_type, CDataStream& vRecv)
119118
{
120-
if (fDisableGovernance) return;
121-
if (::masternodeSync == nullptr || !::masternodeSync->IsBlockchainSynced()) return;
119+
if (fDisableGovernance) return {};
120+
if (::masternodeSync == nullptr || !::masternodeSync->IsBlockchainSynced()) return {};
122121

123122
// ANOTHER USER IS ASKING US TO HELP THEM SYNC GOVERNANCE OBJECT DATA
124123
if (msg_type == NetMsgType::MNGOVERNANCESYNC) {
125124
// Ignore such requests until we are fully synced.
126125
// We could start processing this after masternode list is synced
127126
// but this is a heavy one so it's better to finish sync first.
128-
if (!::masternodeSync->IsSynced()) return;
127+
if (!::masternodeSync->IsSynced()) return {};
129128

130129
uint256 nProp;
131130
CBloomFilter filter;
@@ -134,12 +133,12 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
134133

135134
vRecv >> filter;
136135

136+
LogPrint(BCLog::GOBJECT, "MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n", peer.GetLogString());
137137
if (nProp == uint256()) {
138-
SyncObjects(peer, peerman, connman);
138+
return SyncObjects(peer, connman);
139139
} else {
140140
SyncSingleObjVotes(peer, nProp, filter, connman);
141141
}
142-
LogPrint(BCLog::GOBJECT, "MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n", peer.GetLogString());
143142
}
144143

145144
// A NEW GOVERNANCE OBJECT HAS ARRIVED
@@ -158,7 +157,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
158157

159158
if (!::masternodeSync->IsBlockchainSynced()) {
160159
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode list not synced\n");
161-
return;
160+
return {};
162161
}
163162

164163
std::string strHash = nHash.ToString();
@@ -167,21 +166,21 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
167166

168167
if (!AcceptObjectMessage(nHash)) {
169168
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- Received unrequested object: %s\n", strHash);
170-
return;
169+
return {};
171170
}
172171

173172
LOCK2(cs_main, cs);
174173

175174
if (mapObjects.count(nHash) || mapPostponedObjects.count(nHash) || mapErasedGovernanceObjects.count(nHash)) {
176175
// TODO - print error code? what if it's GOVOBJ_ERROR_IMMATURE?
177176
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- Received already seen object: %s\n", strHash);
178-
return;
177+
return {};
179178
}
180179

181180
bool fRateCheckBypassed = false;
182181
if (!MasternodeRateCheck(govobj, true, false, fRateCheckBypassed)) {
183182
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode rate check failed - %s - (current block height %d) \n", strHash, nCachedBlockHeight);
184-
return;
183+
return {};
185184
}
186185

187186
std::string strError;
@@ -192,7 +191,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
192191

193192
if (fRateCheckBypassed && fIsValid && !MasternodeRateCheck(govobj, true)) {
194193
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- masternode rate check failed (after signature verification) - %s - (current block height %d)\n", strHash, nCachedBlockHeight);
195-
return;
194+
return {};
196195
}
197196

198197
if (!fIsValid) {
@@ -202,10 +201,10 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
202201
} else {
203202
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECT -- Governance object is invalid - %s\n", strError);
204203
// apply node's ban score
205-
peerman.Misbehaving(peer.GetId(), 20);
204+
return tl::unexpected{20};
206205
}
207206

208-
return;
207+
return {};
209208
}
210209

211210
AddGovernanceObject(govobj, connman, &peer);
@@ -226,7 +225,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
226225
// Ignore such messages until masternode list is synced
227226
if (!::masternodeSync->IsBlockchainSynced()) {
228227
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n");
229-
return;
228+
return {};
230229
}
231230

232231
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Received vote: %s\n", vote.ToString());
@@ -236,7 +235,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
236235
if (!AcceptVoteMessage(nHash)) {
237236
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Received unrequested vote object: %s, hash: %s, peer = %d\n",
238237
vote.ToString(), strHash, peer.GetId());
239-
return;
238+
return {};
240239
}
241240

242241
CGovernanceException exception;
@@ -247,11 +246,12 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
247246
} else {
248247
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n", exception.what());
249248
if ((exception.GetNodePenalty() != 0) && ::masternodeSync->IsSynced()) {
250-
peerman.Misbehaving(peer.GetId(), exception.GetNodePenalty());
249+
return tl::unexpected{exception.GetNodePenalty()};
251250
}
252-
return;
251+
return {};
253252
}
254253
}
254+
return {};
255255
}
256256

257257
void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CConnman& connman)
@@ -895,16 +895,15 @@ void CGovernanceManager::SyncSingleObjVotes(CNode& peer, const uint256& nProp, c
895895
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s -- sent %d votes to peer=%d\n", __func__, nVoteCount, peer.GetId());
896896
}
897897

898-
void CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CConnman& connman) const
898+
PeerMsgRet CGovernanceManager::SyncObjects(CNode& peer, CConnman& connman) const
899899
{
900900
// do not provide any data until our node is synced
901-
if (!::masternodeSync->IsSynced()) return;
901+
if (!::masternodeSync->IsSynced()) return {};
902902

903903
if (netfulfilledman->HasFulfilledRequest(peer.addr, NetMsgType::MNGOVERNANCESYNC)) {
904904
// Asking for the whole list multiple times in a short period of time is no good
905905
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s -- peer already asked me for the list\n", __func__);
906-
peerman.Misbehaving(peer.GetId(), 20);
907-
return;
906+
return tl::unexpected{20};
908907
}
909908
netfulfilledman->AddFulfilledRequest(peer.addr, NetMsgType::MNGOVERNANCESYNC);
910909

@@ -952,6 +951,7 @@ void CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CConnman
952951
CNetMsgMaker msgMaker(peer.GetSendVersion());
953952
connman.PushMessage(&peer, msgMaker.Make(NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_GOVOBJ, nObjCount));
954953
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s -- sent %d objects to peer=%d\n", __func__, nObjCount, peer.GetId());
954+
return {};
955955
}
956956

957957
void CGovernanceManager::MasternodeRateUpdate(const CGovernanceObject& govobj)

src/governance/governance.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
#ifndef BITCOIN_GOVERNANCE_GOVERNANCE_H
66
#define BITCOIN_GOVERNANCE_GOVERNANCE_H
77

8-
#include <cachemap.h>
9-
#include <cachemultimap.h>
108
#include <governance/classes.h>
119
#include <governance/object.h>
10+
11+
#include <cachemap.h>
12+
#include <cachemultimap.h>
13+
#include <net_types.h>
14+
1215
#include <optional>
1316

1417
class CBloomFilter;
@@ -22,7 +25,6 @@ class CGovernanceTriggerManager;
2225
class CGovernanceObject;
2326
class CGovernanceVote;
2427
class CSporkManager;
25-
class PeerManager;
2628

2729
extern std::unique_ptr<CGovernanceManager> governance;
2830

@@ -278,9 +280,9 @@ class CGovernanceManager : public GovernanceStore
278280
bool ConfirmInventoryRequest(const CInv& inv);
279281

280282
void SyncSingleObjVotes(CNode& peer, const uint256& nProp, const CBloomFilter& filter, CConnman& connman);
281-
void SyncObjects(CNode& peer, PeerManager& peerman, CConnman& connman) const;
283+
PeerMsgRet SyncObjects(CNode& peer, CConnman& connman) const;
282284

283-
void ProcessMessage(CNode& peer, PeerManager& peerman, CConnman& connman, std::string_view msg_type, CDataStream& vRecv);
285+
PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, std::string_view msg_type, CDataStream& vRecv);
284286

285287
void ResetVotedFundingTrigger();
286288

src/net_processing.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4350,7 +4350,7 @@ void PeerManagerImpl::ProcessMessage(
43504350
ProcessPeerMsgRet(m_cj_ctx->server->ProcessMessage(pfrom, msg_type, vRecv), pfrom);
43514351
ProcessPeerMsgRet(sporkManager->ProcessMessage(pfrom, m_connman, msg_type, vRecv), pfrom);
43524352
::masternodeSync->ProcessMessage(pfrom, msg_type, vRecv);
4353-
m_govman.ProcessMessage(pfrom, *this, m_connman, msg_type, vRecv);
4353+
ProcessPeerMsgRet(m_govman.ProcessMessage(pfrom, m_connman, msg_type, vRecv), pfrom);
43544354
CMNAuth::ProcessMessage(pfrom, *this, m_connman, msg_type, vRecv);
43554355
m_llmq_ctx->quorum_block_processor->ProcessMessage(pfrom, msg_type, vRecv);
43564356
m_llmq_ctx->qdkgsman->ProcessMessage(pfrom, *m_llmq_ctx->qman, msg_type, vRecv);

0 commit comments

Comments
 (0)