Skip to content

Commit 91eca51

Browse files
knstPastaPastaPasta
authored andcommitted
refactor: coinjoin/server no more depends on net_processing
1 parent 1681eb8 commit 91eca51

File tree

3 files changed

+26
-24
lines changed

3 files changed

+26
-24
lines changed

src/coinjoin/server.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@
1010
#include <masternode/meta.h>
1111
#include <masternode/node.h>
1212
#include <masternode/sync.h>
13-
#include <net_processing.h>
13+
#include <net.h>
1414
#include <netmessagemaker.h>
1515
#include <script/interpreter.h>
1616
#include <shutdown.h>
17+
#include <streams.h>
1718
#include <txmempool.h>
1819
#include <util/moneystr.h>
1920
#include <util/ranges.h>
@@ -25,20 +26,21 @@
2526

2627
constexpr static CAmount DEFAULT_MAX_RAW_TX_FEE{COIN / 10};
2728

28-
void CCoinJoinServer::ProcessMessage(CNode& peer, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv)
29+
PeerMsgRet CCoinJoinServer::ProcessMessage(CNode& peer, std::string_view msg_type, CDataStream& vRecv)
2930
{
30-
if (!fMasternodeMode) return;
31-
if (!m_mn_sync.IsBlockchainSynced()) return;
31+
if (!fMasternodeMode) return {};
32+
if (!m_mn_sync.IsBlockchainSynced()) return {};
3233

3334
if (msg_type == NetMsgType::DSACCEPT) {
3435
ProcessDSACCEPT(peer, vRecv);
3536
} else if (msg_type == NetMsgType::DSQUEUE) {
36-
ProcessDSQUEUE(peer, peerman, vRecv);
37+
return ProcessDSQUEUE(peer, vRecv);
3738
} else if (msg_type == NetMsgType::DSVIN) {
3839
ProcessDSVIN(peer, vRecv);
3940
} else if (msg_type == NetMsgType::DSSIGNFINALTX) {
4041
ProcessDSSIGNFINALTX(vRecv);
4142
}
43+
return {};
4244
}
4345

4446
void CCoinJoinServer::ProcessDSACCEPT(CNode& peer, CDataStream& vRecv)
@@ -106,58 +108,55 @@ void CCoinJoinServer::ProcessDSACCEPT(CNode& peer, CDataStream& vRecv)
106108
}
107109
}
108110

109-
void CCoinJoinServer::ProcessDSQUEUE(const CNode& peer, PeerManager& peerman, CDataStream& vRecv)
111+
PeerMsgRet CCoinJoinServer::ProcessDSQUEUE(const CNode& peer, CDataStream& vRecv)
110112
{
111113
CCoinJoinQueue dsq;
112114
vRecv >> dsq;
113115

114116
if (dsq.masternodeOutpoint.IsNull() && dsq.m_protxHash.IsNull()) {
115-
peerman.Misbehaving(peer.GetId(), 100);
116-
return;
117+
return tl::unexpected{100};
117118
}
118119

119120
if (dsq.masternodeOutpoint.IsNull()) {
120121
auto mnList = deterministicMNManager->GetListAtChainTip();
121122
if (auto dmn = mnList.GetValidMN(dsq.m_protxHash)) {
122123
dsq.masternodeOutpoint = dmn->collateralOutpoint;
123124
} else {
124-
peerman.Misbehaving(peer.GetId(), 10);
125-
return;
125+
return tl::unexpected{10};
126126
}
127127
}
128128

129129
{
130130
TRY_LOCK(cs_vecqueue, lockRecv);
131-
if (!lockRecv) return;
131+
if (!lockRecv) return {};
132132

133133
// process every dsq only once
134134
for (const auto& q : vecCoinJoinQueue) {
135135
if (q == dsq) {
136-
return;
136+
return {};
137137
}
138138
if (q.fReady == dsq.fReady && q.masternodeOutpoint == dsq.masternodeOutpoint) {
139139
// no way the same mn can send another dsq with the same readiness this soon
140140
LogPrint(BCLog::COINJOIN, "DSQUEUE -- Peer %s is sending WAY too many dsq messages for a masternode with collateral %s\n", peer.GetLogString(), dsq.masternodeOutpoint.ToStringShort());
141-
return;
141+
return {};
142142
}
143143
}
144144
} // cs_vecqueue
145145

146146
LogPrint(BCLog::COINJOIN, "DSQUEUE -- %s new\n", dsq.ToString());
147147

148-
if (dsq.IsTimeOutOfBounds()) return;
148+
if (dsq.IsTimeOutOfBounds()) return {};
149149

150150
auto mnList = deterministicMNManager->GetListAtChainTip();
151151
auto dmn = mnList.GetValidMNByCollateral(dsq.masternodeOutpoint);
152-
if (!dmn) return;
152+
if (!dmn) return {};
153153

154154
if (dsq.m_protxHash.IsNull()) {
155155
dsq.m_protxHash = dmn->proTxHash;
156156
}
157157

158158
if (!dsq.CheckSignature(dmn->pdmnState->pubKeyOperator.Get())) {
159-
peerman.Misbehaving(peer.GetId(), 10);
160-
return;
159+
return tl::unexpected{10};
161160
}
162161

163162
if (!dsq.fReady) {
@@ -167,17 +166,18 @@ void CCoinJoinServer::ProcessDSQUEUE(const CNode& peer, PeerManager& peerman, CD
167166
//don't allow a few nodes to dominate the queuing process
168167
if (nLastDsq != 0 && nDsqThreshold > mmetaman->GetDsqCount()) {
169168
LogPrint(BCLog::COINJOIN, "DSQUEUE -- Masternode %s is sending too many dsq messages\n", dmn->pdmnState->addr.ToString());
170-
return;
169+
return {};
171170
}
172171
mmetaman->AllowMixing(dmn->proTxHash);
173172

174173
LogPrint(BCLog::COINJOIN, "DSQUEUE -- new CoinJoin queue (%s) from masternode %s\n", dsq.ToString(), dmn->pdmnState->addr.ToString());
175174

176175
TRY_LOCK(cs_vecqueue, lockRecv);
177-
if (!lockRecv) return;
176+
if (!lockRecv) return {};
178177
vecCoinJoinQueue.push_back(dsq);
179178
dsq.Relay(connman);
180179
}
180+
return {};
181181
}
182182

183183
void CCoinJoinServer::ProcessDSVIN(CNode& peer, CDataStream& vRecv)

src/coinjoin/server.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
#define BITCOIN_COINJOIN_SERVER_H
77

88
#include <coinjoin/coinjoin.h>
9-
#include <net.h>
9+
10+
#include <net_types.h>
1011

1112
class CChainState;
1213
class CCoinJoinServer;
14+
class CDataStream;
15+
class CNode;
1316
class CTxMemPool;
14-
class PeerManager;
1517

1618
class UniValue;
1719

@@ -71,7 +73,7 @@ class CCoinJoinServer : public CCoinJoinBaseSession, public CCoinJoinBaseManager
7173
void RelayCompletedTransaction(PoolMessage nMessageID) LOCKS_EXCLUDED(cs_coinjoin);
7274

7375
void ProcessDSACCEPT(CNode& peer, CDataStream& vRecv) LOCKS_EXCLUDED(cs_vecqueue);
74-
void ProcessDSQUEUE(const CNode& peer, PeerManager& peerman, CDataStream& vRecv) LOCKS_EXCLUDED(cs_vecqueue);
76+
PeerMsgRet ProcessDSQUEUE(const CNode& peer, CDataStream& vRecv) LOCKS_EXCLUDED(cs_vecqueue);
7577
void ProcessDSVIN(CNode& peer, CDataStream& vRecv) LOCKS_EXCLUDED(cs_coinjoin);
7678
void ProcessDSSIGNFINALTX(CDataStream& vRecv) LOCKS_EXCLUDED(cs_coinjoin);
7779

@@ -87,7 +89,7 @@ class CCoinJoinServer : public CCoinJoinBaseSession, public CCoinJoinBaseManager
8789
fUnitTest(false)
8890
{}
8991

90-
void ProcessMessage(CNode& pfrom, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv);
92+
PeerMsgRet ProcessMessage(CNode& pfrom, std::string_view msg_type, CDataStream& vRecv);
9193

9294
bool HasTimedOut() const;
9395
void CheckTimeout();

src/net_processing.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4347,7 +4347,7 @@ void PeerManagerImpl::ProcessMessage(
43474347
pair.second->ProcessMessage(pfrom, m_connman, m_mempool, msg_type, vRecv);
43484348
}
43494349
#endif // ENABLE_WALLET
4350-
m_cj_ctx->server->ProcessMessage(pfrom, *this, msg_type, vRecv);
4350+
ProcessPeerMsgRet(m_cj_ctx->server->ProcessMessage(pfrom, msg_type, vRecv), pfrom);
43514351
sporkManager->ProcessMessage(pfrom, *this, m_connman, msg_type, vRecv);
43524352
::masternodeSync->ProcessMessage(pfrom, msg_type, vRecv);
43534353
m_govman.ProcessMessage(pfrom, *this, m_connman, msg_type, vRecv);

0 commit comments

Comments
 (0)