17
17
#include < masternode/meta.h>
18
18
#include < masternode/node.h>
19
19
#include < masternode/sync.h>
20
- #include < net_processing.h>
21
20
#include < netfulfilledman.h>
22
21
#include < netmessagemaker.h>
23
22
#include < protocol.h>
@@ -115,17 +114,17 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
115
114
return cmapVoteToObject.Get (nHash, pGovobj) && pGovobj->GetVoteFile ().SerializeVoteToStream (nHash, ss);
116
115
}
117
116
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)
119
118
{
120
- if (fDisableGovernance ) return ;
121
- if (::masternodeSync == nullptr || !::masternodeSync->IsBlockchainSynced ()) return ;
119
+ if (fDisableGovernance ) return {} ;
120
+ if (::masternodeSync == nullptr || !::masternodeSync->IsBlockchainSynced ()) return {} ;
122
121
123
122
// ANOTHER USER IS ASKING US TO HELP THEM SYNC GOVERNANCE OBJECT DATA
124
123
if (msg_type == NetMsgType::MNGOVERNANCESYNC) {
125
124
// Ignore such requests until we are fully synced.
126
125
// We could start processing this after masternode list is synced
127
126
// but this is a heavy one so it's better to finish sync first.
128
- if (!::masternodeSync->IsSynced ()) return ;
127
+ if (!::masternodeSync->IsSynced ()) return {} ;
129
128
130
129
uint256 nProp;
131
130
CBloomFilter filter;
@@ -134,12 +133,12 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
134
133
135
134
vRecv >> filter;
136
135
136
+ LogPrint (BCLog::GOBJECT, " MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n " , peer.GetLogString ());
137
137
if (nProp == uint256 ()) {
138
- SyncObjects (peer, peerman , connman);
138
+ return SyncObjects (peer, connman);
139
139
} else {
140
140
SyncSingleObjVotes (peer, nProp, filter, connman);
141
141
}
142
- LogPrint (BCLog::GOBJECT, " MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n " , peer.GetLogString ());
143
142
}
144
143
145
144
// A NEW GOVERNANCE OBJECT HAS ARRIVED
@@ -158,7 +157,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
158
157
159
158
if (!::masternodeSync->IsBlockchainSynced ()) {
160
159
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode list not synced\n " );
161
- return ;
160
+ return {} ;
162
161
}
163
162
164
163
std::string strHash = nHash.ToString ();
@@ -167,21 +166,21 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
167
166
168
167
if (!AcceptObjectMessage (nHash)) {
169
168
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- Received unrequested object: %s\n " , strHash);
170
- return ;
169
+ return {} ;
171
170
}
172
171
173
172
LOCK2 (cs_main, cs);
174
173
175
174
if (mapObjects.count (nHash) || mapPostponedObjects.count (nHash) || mapErasedGovernanceObjects.count (nHash)) {
176
175
// TODO - print error code? what if it's GOVOBJ_ERROR_IMMATURE?
177
176
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- Received already seen object: %s\n " , strHash);
178
- return ;
177
+ return {} ;
179
178
}
180
179
181
180
bool fRateCheckBypassed = false ;
182
181
if (!MasternodeRateCheck (govobj, true , false , fRateCheckBypassed )) {
183
182
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode rate check failed - %s - (current block height %d) \n " , strHash, nCachedBlockHeight);
184
- return ;
183
+ return {} ;
185
184
}
186
185
187
186
std::string strError;
@@ -192,7 +191,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
192
191
193
192
if (fRateCheckBypassed && fIsValid && !MasternodeRateCheck (govobj, true )) {
194
193
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode rate check failed (after signature verification) - %s - (current block height %d)\n " , strHash, nCachedBlockHeight);
195
- return ;
194
+ return {} ;
196
195
}
197
196
198
197
if (!fIsValid ) {
@@ -202,10 +201,10 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
202
201
} else {
203
202
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- Governance object is invalid - %s\n " , strError);
204
203
// apply node's ban score
205
- peerman. Misbehaving (peer. GetId (), 20 ) ;
204
+ return tl::unexpected{ 20 } ;
206
205
}
207
206
208
- return ;
207
+ return {} ;
209
208
}
210
209
211
210
AddGovernanceObject (govobj, connman, &peer);
@@ -226,7 +225,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
226
225
// Ignore such messages until masternode list is synced
227
226
if (!::masternodeSync->IsBlockchainSynced ()) {
228
227
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n " );
229
- return ;
228
+ return {} ;
230
229
}
231
230
232
231
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- Received vote: %s\n " , vote.ToString ());
@@ -236,7 +235,7 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
236
235
if (!AcceptVoteMessage (nHash)) {
237
236
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- Received unrequested vote object: %s, hash: %s, peer = %d\n " ,
238
237
vote.ToString (), strHash, peer.GetId ());
239
- return ;
238
+ return {} ;
240
239
}
241
240
242
241
CGovernanceException exception;
@@ -247,11 +246,12 @@ void CGovernanceManager::ProcessMessage(CNode& peer, PeerManager& peerman, CConn
247
246
} else {
248
247
LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n " , exception.what ());
249
248
if ((exception.GetNodePenalty () != 0 ) && ::masternodeSync->IsSynced ()) {
250
- peerman. Misbehaving (peer. GetId (), exception.GetNodePenalty ()) ;
249
+ return tl::unexpected{ exception.GetNodePenalty ()} ;
251
250
}
252
- return ;
251
+ return {} ;
253
252
}
254
253
}
254
+ return {};
255
255
}
256
256
257
257
void CGovernanceManager::CheckOrphanVotes (CGovernanceObject& govobj, CConnman& connman)
@@ -895,16 +895,15 @@ void CGovernanceManager::SyncSingleObjVotes(CNode& peer, const uint256& nProp, c
895
895
LogPrint (BCLog::GOBJECT, " CGovernanceManager::%s -- sent %d votes to peer=%d\n " , __func__, nVoteCount, peer.GetId ());
896
896
}
897
897
898
- void CGovernanceManager::SyncObjects (CNode& peer, PeerManager& peerman , CConnman& connman) const
898
+ PeerMsgRet CGovernanceManager::SyncObjects (CNode& peer, CConnman& connman) const
899
899
{
900
900
// do not provide any data until our node is synced
901
- if (!::masternodeSync->IsSynced ()) return ;
901
+ if (!::masternodeSync->IsSynced ()) return {} ;
902
902
903
903
if (netfulfilledman->HasFulfilledRequest (peer.addr , NetMsgType::MNGOVERNANCESYNC)) {
904
904
// Asking for the whole list multiple times in a short period of time is no good
905
905
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 };
908
907
}
909
908
netfulfilledman->AddFulfilledRequest (peer.addr , NetMsgType::MNGOVERNANCESYNC);
910
909
@@ -952,6 +951,7 @@ void CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CConnman
952
951
CNetMsgMaker msgMaker (peer.GetSendVersion ());
953
952
connman.PushMessage (&peer, msgMaker.Make (NetMsgType::SYNCSTATUSCOUNT, MASTERNODE_SYNC_GOVOBJ, nObjCount));
954
953
LogPrint (BCLog::GOBJECT, " CGovernanceManager::%s -- sent %d objects to peer=%d\n " , __func__, nObjCount, peer.GetId ());
954
+ return {};
955
955
}
956
956
957
957
void CGovernanceManager::MasternodeRateUpdate (const CGovernanceObject& govobj)
0 commit comments