Skip to content

Commit a475f5f

Browse files
committed
refactor: drop usage of chainstate globals in coinjoin logic
1 parent ed56dbd commit a475f5f

File tree

6 files changed

+14
-14
lines changed

6 files changed

+14
-14
lines changed

src/coinjoin/client.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ PeerMsgRet CCoinJoinClientQueueManager::ProcessDSQueue(const CNode& peer, CDataS
131131
return {};
132132
}
133133

134-
void CCoinJoinClientManager::ProcessMessage(CNode& peer, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv)
134+
void CCoinJoinClientManager::ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv)
135135
{
136136
if (m_is_masternode) return;
137137
if (!CCoinJoinClientOptions::IsEnabled()) return;
@@ -150,7 +150,7 @@ void CCoinJoinClientManager::ProcessMessage(CNode& peer, CConnman& connman, cons
150150
AssertLockNotHeld(cs_deqsessions);
151151
LOCK(cs_deqsessions);
152152
for (auto& session : deqSessions) {
153-
session.ProcessMessage(peer, connman, mempool, msg_type, vRecv);
153+
session.ProcessMessage(peer, active_chainstate, connman, mempool, msg_type, vRecv);
154154
}
155155
}
156156
}
@@ -167,7 +167,7 @@ CCoinJoinClientSession::CCoinJoinClientSession(CWallet& wallet, CoinJoinWalletMa
167167
m_is_masternode{is_masternode}
168168
{}
169169

170-
void CCoinJoinClientSession::ProcessMessage(CNode& peer, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv)
170+
void CCoinJoinClientSession::ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv)
171171
{
172172
if (m_is_masternode) return;
173173
if (!CCoinJoinClientOptions::IsEnabled()) return;
@@ -202,7 +202,7 @@ void CCoinJoinClientSession::ProcessMessage(CNode& peer, CConnman& connman, cons
202202
WalletCJLogPrint(m_wallet, "DSFINALTX -- txNew %s", txNew.ToString()); /* Continued */
203203

204204
// check to see if input is spent already? (and probably not confirmed)
205-
SignFinalTransaction(mempool, txNew, peer, connman);
205+
SignFinalTransaction(peer, active_chainstate, connman, mempool, txNew);
206206

207207
} else if (msg_type == NetMsgType::DSCOMPLETE) {
208208
if (!mixingMasternode) return;
@@ -548,7 +548,7 @@ void CCoinJoinClientSession::ProcessPoolStateUpdate(CCoinJoinStatusUpdate psssup
548548
// check it to make sure it's what we want, then sign it if we agree.
549549
// If we refuse to sign, it's possible we'll be charged collateral
550550
//
551-
bool CCoinJoinClientSession::SignFinalTransaction(const CTxMemPool& mempool, const CTransaction& finalTransactionNew, CNode& peer, CConnman& connman)
551+
bool CCoinJoinClientSession::SignFinalTransaction(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, const CTransaction& finalTransactionNew)
552552
{
553553
if (!CCoinJoinClientOptions::IsEnabled()) return false;
554554

@@ -577,7 +577,7 @@ bool CCoinJoinClientSession::SignFinalTransaction(const CTxMemPool& mempool, con
577577

578578
// Make sure all inputs/outputs are valid
579579
PoolMessage nMessageID{MSG_NOERR};
580-
if (!IsValidInOuts(mempool, finalMutableTransaction.vin, finalMutableTransaction.vout, nMessageID, nullptr)) {
580+
if (!IsValidInOuts(active_chainstate, mempool, finalMutableTransaction.vin, finalMutableTransaction.vout, nMessageID, nullptr)) {
581581
WalletCJLogPrint(m_wallet, "CCoinJoinClientSession::%s -- ERROR! IsValidInOuts() failed: %s\n", __func__, CoinJoin::GetMessageByID(nMessageID).translated);
582582
UnlockCoins();
583583
keyHolderStorage.ReturnAll();

src/coinjoin/client.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class CCoinJoinClientSession : public CCoinJoinBaseSession
161161
void CompletedTransaction(PoolMessage nMessageID);
162162

163163
/// As a client, check and sign the final transaction
164-
bool SignFinalTransaction(const CTxMemPool& mempool, const CTransaction& finalTransactionNew, CNode& peer, CConnman& connman) EXCLUSIVE_LOCKS_REQUIRED(!cs_coinjoin);
164+
bool SignFinalTransaction(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, const CTransaction& finalTransactionNew) EXCLUSIVE_LOCKS_REQUIRED(!cs_coinjoin);
165165

166166
void RelayIn(const CCoinJoinEntry& entry, CConnman& connman) const;
167167

@@ -171,7 +171,7 @@ class CCoinJoinClientSession : public CCoinJoinBaseSession
171171
explicit CCoinJoinClientSession(CWallet& wallet, CoinJoinWalletManager& walletman, CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_metaman,
172172
const CMasternodeSync& mn_sync, const std::unique_ptr<CCoinJoinClientQueueManager>& queueman, bool is_masternode);
173173

174-
void ProcessMessage(CNode& peer, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv);
174+
void ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv);
175175

176176
void UnlockCoins();
177177

@@ -268,7 +268,7 @@ class CCoinJoinClientManager
268268
m_wallet(wallet), m_walletman(walletman), m_dmnman(dmnman), m_mn_metaman(mn_metaman), m_mn_sync(mn_sync), m_queueman(queueman),
269269
m_is_masternode{is_masternode} {}
270270

271-
void ProcessMessage(CNode& peer, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) EXCLUSIVE_LOCKS_REQUIRED(!cs_deqsessions);
271+
void ProcessMessage(CNode& peer, CChainState& active_chainstate, CConnman& connman, const CTxMemPool& mempool, std::string_view msg_type, CDataStream& vRecv) EXCLUSIVE_LOCKS_REQUIRED(!cs_deqsessions);
272272

273273
bool StartMixing();
274274
void StopMixing();

src/coinjoin/coinjoin.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ std::string CCoinJoinBaseSession::GetStateString() const
217217
}
218218
}
219219

220-
bool CCoinJoinBaseSession::IsValidInOuts(const CTxMemPool& mempool, const std::vector<CTxIn>& vin, const std::vector<CTxOut>& vout, PoolMessage& nMessageIDRet, bool* fConsumeCollateralRet) const
220+
bool CCoinJoinBaseSession::IsValidInOuts(CChainState& active_chainstate, const CTxMemPool& mempool, const std::vector<CTxIn>& vin, const std::vector<CTxOut>& vout, PoolMessage& nMessageIDRet, bool* fConsumeCollateralRet) const
221221
{
222222
std::set<CScript> setScripPubKeys;
223223
nMessageIDRet = MSG_NOERR;
@@ -264,7 +264,7 @@ bool CCoinJoinBaseSession::IsValidInOuts(const CTxMemPool& mempool, const std::v
264264
nFees -= txout.nValue;
265265
}
266266

267-
CCoinsViewMemPool viewMemPool(WITH_LOCK(cs_main, return &::ChainstateActive().CoinsTip()), mempool);
267+
CCoinsViewMemPool viewMemPool(WITH_LOCK(cs_main, return &active_chainstate.CoinsTip()), mempool);
268268

269269
for (const auto& txin : vin) {
270270
LogPrint(BCLog::COINJOIN, "CCoinJoinBaseSession::%s -- txin=%s\n", __func__, txin.ToString());

src/coinjoin/coinjoin.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ class CCoinJoinBaseSession
309309

310310
virtual void SetNull() EXCLUSIVE_LOCKS_REQUIRED(cs_coinjoin);
311311

312-
bool IsValidInOuts(const CTxMemPool& mempool, const std::vector<CTxIn>& vin, const std::vector<CTxOut>& vout, PoolMessage& nMessageIDRet, bool* fConsumeCollateralRet) const;
312+
bool IsValidInOuts(CChainState& active_chainstate, const CTxMemPool& mempool, const std::vector<CTxIn>& vin, const std::vector<CTxOut>& vout, PoolMessage& nMessageIDRet, bool* fConsumeCollateralRet) const;
313313

314314
public:
315315
int nSessionDenom{0}; // Users must submit a denom matching this

src/coinjoin/server.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ bool CCoinJoinServer::AddEntry(const CCoinJoinEntry& entry, PoolMessage& nMessag
608608
}
609609

610610
bool fConsumeCollateral{false};
611-
if (!IsValidInOuts(mempool, vin, entry.vecTxOut, nMessageIDRet, &fConsumeCollateral)) {
611+
if (!IsValidInOuts(m_chainstate, mempool, vin, entry.vecTxOut, nMessageIDRet, &fConsumeCollateral)) {
612612
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::%s -- ERROR! IsValidInOuts() failed: %s\n", __func__, CoinJoin::GetMessageByID(nMessageIDRet).translated);
613613
if (fConsumeCollateral) {
614614
ConsumeCollateral(entry.txCollateral);

src/net_processing.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -4897,7 +4897,7 @@ void PeerManagerImpl::ProcessMessage(
48974897
#ifdef ENABLE_WALLET
48984898
ProcessPeerMsgRet(m_cj_ctx->queueman->ProcessMessage(pfrom, msg_type, vRecv), pfrom);
48994899
for (auto& pair : m_cj_ctx->walletman->raw()) {
4900-
pair.second->ProcessMessage(pfrom, m_connman, m_mempool, msg_type, vRecv);
4900+
pair.second->ProcessMessage(pfrom, m_chainman.ActiveChainstate(), m_connman, m_mempool, msg_type, vRecv);
49014901
}
49024902
#endif // ENABLE_WALLET
49034903
ProcessPeerMsgRet(m_cj_ctx->server->ProcessMessage(pfrom, msg_type, vRecv), pfrom);

0 commit comments

Comments
 (0)