Skip to content

Commit

Permalink
refactor: migrate globals to managed pointers in preparation for degl…
Browse files Browse the repository at this point in the history
…obalization (dashpay#4930)

* coinjoin: make CCoinJoinServer managed pointer, assign CConnman during init

* coinjoin: make CCoinJoinClientQueueManager managed pointer, assign CConnman during init

* sporks: move spork validation logic downwards after CConnman initialization

* sporks: make CSporkManager a pointer, reduce global invocations

* governance: make CGovernanceManager a pointer, reduce global invocations

* llmq: migrate LLMQ subsystem raw pointers to managed pointers

* masternode: make activeMasternodeManager a managed pointer

* masternode: make masternodeSync a managed pointer, assign CConnman during init

* refactor: make instantsend helper functions class members

* fix: send empty CDeterministicMNList if pointer isn't initialized yet

* fix: refactor governance object retrieval logic across node and ui

Update src/interfaces/node.cpp

Co-authored-by: UdjinM6 <[email protected]>

Co-authored-by: UdjinM6 <[email protected]>
  • Loading branch information
kwvg and UdjinM6 authored Aug 26, 2022
1 parent c078e66 commit 71e8caf
Show file tree
Hide file tree
Showing 67 changed files with 577 additions and 476 deletions.
38 changes: 22 additions & 16 deletions src/coinjoin/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,26 +29,26 @@
#include <univalue.h>

std::map<const std::string, std::shared_ptr<CCoinJoinClientManager>> coinJoinClientManagers;
CCoinJoinClientQueueManager coinJoinClientQueueManager;
std::unique_ptr<CCoinJoinClientQueueManager> coinJoinClientQueueManager;


void CCoinJoinClientQueueManager::ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, CConnman& connman, bool enable_bip61)
void CCoinJoinClientQueueManager::ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, bool enable_bip61)
{
if (fMasternodeMode) return;
if (!CCoinJoinClientOptions::IsEnabled()) return;
if (!masternodeSync.IsBlockchainSynced()) return;
if (!masternodeSync->IsBlockchainSynced()) return;

if (!CheckDiskSpace(GetDataDir())) {
LogPrint(BCLog::COINJOIN, "CCoinJoinClientQueueManager::ProcessMessage -- Not enough disk space, disabling CoinJoin.\n");
return;
}

if (msg_type == NetMsgType::DSQUEUE) {
CCoinJoinClientQueueManager::ProcessDSQueue(pfrom, msg_type, vRecv, connman, enable_bip61);
CCoinJoinClientQueueManager::ProcessDSQueue(pfrom, msg_type, vRecv, enable_bip61);
}
}

void CCoinJoinClientQueueManager::ProcessDSQueue(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, CConnman& connman, bool enable_bip61)
void CCoinJoinClientQueueManager::ProcessDSQueue(CNode* pfrom, const std::string& strCommand, CDataStream& vRecv, bool enable_bip61)
{
CCoinJoinQueue dsq;
vRecv >> dsq;
Expand Down Expand Up @@ -86,7 +86,7 @@ void CCoinJoinClientQueueManager::ProcessDSQueue(CNode* pfrom, const std::string

// if the queue is ready, submit if we can
if (dsq.fReady && ranges::any_of(coinJoinClientManagers,
[&dmn, &connman](const auto& pair){ return pair.second->TrySubmitDenominate(dmn->pdmnState->addr, connman); })) {
[this, &dmn](const auto& pair){ return pair.second->TrySubmitDenominate(dmn->pdmnState->addr, this->connman); })) {
LogPrint(BCLog::COINJOIN, "DSQUEUE -- CoinJoin queue (%s) is ready on masternode %s\n", dsq.ToString(), dmn->pdmnState->addr.ToString());
return;
} else {
Expand Down Expand Up @@ -117,7 +117,7 @@ void CCoinJoinClientManager::ProcessMessage(CNode* pfrom, const std::string& msg
{
if (fMasternodeMode) return;
if (!CCoinJoinClientOptions::IsEnabled()) return;
if (!masternodeSync.IsBlockchainSynced()) return;
if (!masternodeSync->IsBlockchainSynced()) return;

if (!CheckDiskSpace(GetDataDir())) {
ResetPool();
Expand All @@ -141,7 +141,7 @@ void CCoinJoinClientSession::ProcessMessage(CNode* pfrom, const std::string& msg
{
if (fMasternodeMode) return;
if (!CCoinJoinClientOptions::IsEnabled()) return;
if (!masternodeSync.IsBlockchainSynced()) return;
if (!masternodeSync->IsBlockchainSynced()) return;

if (msg_type == NetMsgType::DSSTATUSUPDATE) {
if (!mixingMasternode) return;
Expand Down Expand Up @@ -272,7 +272,7 @@ bilingual_str CCoinJoinClientSession::GetStatus(bool fWaitForBlock) const
nStatusMessageProgress += 10;
std::string strSuffix;

if (fWaitForBlock || !masternodeSync.IsBlockchainSynced()) {
if (fWaitForBlock || !masternodeSync->IsBlockchainSynced()) {
return strAutoDenomResult;
}

Expand Down Expand Up @@ -658,7 +658,7 @@ void CCoinJoinClientManager::UpdatedSuccessBlock()

bool CCoinJoinClientManager::WaitForAnotherBlock() const
{
if (!masternodeSync.IsBlockchainSynced()) return true;
if (!masternodeSync->IsBlockchainSynced()) return true;

if (CCoinJoinClientOptions::IsMultiSessionEnabled()) return false;

Expand Down Expand Up @@ -740,7 +740,7 @@ bool CCoinJoinClientSession::DoAutomaticDenominating(CConnman& connman, bool fDr
if (fMasternodeMode) return false; // no client-side mixing on masternodes
if (nState != POOL_STATE_IDLE) return false;

if (!masternodeSync.IsBlockchainSynced()) {
if (!masternodeSync->IsBlockchainSynced()) {
strAutoDenomResult = _("Can't mix while sync in progress.");
return false;
}
Expand Down Expand Up @@ -920,7 +920,7 @@ bool CCoinJoinClientManager::DoAutomaticDenominating(CConnman& connman, bool fDr
if (fMasternodeMode) return false; // no client-side mixing on masternodes
if (!CCoinJoinClientOptions::IsEnabled() || !IsMixing()) return false;

if (!masternodeSync.IsBlockchainSynced()) {
if (!masternodeSync->IsBlockchainSynced()) {
strAutoDenomResult = _("Can't mix while sync in progress.");
return false;
}
Expand Down Expand Up @@ -1009,6 +1009,7 @@ CDeterministicMNCPtr CCoinJoinClientManager::GetRandomNotUsedMasternode()
bool CCoinJoinClientSession::JoinExistingQueue(CAmount nBalanceNeedsAnonymized, CConnman& connman)
{
if (!CCoinJoinClientOptions::IsEnabled()) return false;
if (coinJoinClientQueueManager == nullptr) return false;

auto mnList = deterministicMNManager->GetListAtChainTip();

Expand All @@ -1020,7 +1021,7 @@ bool CCoinJoinClientSession::JoinExistingQueue(CAmount nBalanceNeedsAnonymized,

// Look through the queues and see if anything matches
CCoinJoinQueue dsq;
while (coinJoinClientQueueManager.GetQueueItemAndTry(dsq)) {
while (coinJoinClientQueueManager->GetQueueItemAndTry(dsq)) {
auto dmn = mnList.GetValidMNByCollateral(dsq.masternodeOutpoint);

if (!dmn) {
Expand Down Expand Up @@ -1785,19 +1786,21 @@ void CCoinJoinClientManager::UpdatedBlockTip(const CBlockIndex* pindex)
void CCoinJoinClientQueueManager::DoMaintenance()
{
if (!CCoinJoinClientOptions::IsEnabled()) return;
if (masternodeSync == nullptr) return;
if (fMasternodeMode) return; // no client-side mixing on masternodes

if (!masternodeSync.IsBlockchainSynced() || ShutdownRequested()) return;
if (!masternodeSync->IsBlockchainSynced() || ShutdownRequested()) return;

CheckQueue();
}

void CCoinJoinClientManager::DoMaintenance(CConnman& connman)
{
if (!CCoinJoinClientOptions::IsEnabled()) return;
if (masternodeSync == nullptr) return;
if (fMasternodeMode) return; // no client-side mixing on masternodes

if (!masternodeSync.IsBlockchainSynced() || ShutdownRequested()) return;
if (!masternodeSync->IsBlockchainSynced() || ShutdownRequested()) return;

static int nTick = 0;
static int nDoAutoNextRun = nTick + COINJOIN_AUTO_TIMEOUT_MIN;
Expand Down Expand Up @@ -1845,7 +1848,10 @@ void CCoinJoinClientManager::GetJsonInfo(UniValue& obj) const

void DoCoinJoinMaintenance(CConnman& connman)
{
coinJoinClientQueueManager.DoMaintenance();
if (coinJoinClientQueueManager != nullptr) {
coinJoinClientQueueManager->DoMaintenance();
}

for (const auto& pair : coinJoinClientManagers) {
pair.second->DoMaintenance(connman);
}
Expand Down
12 changes: 8 additions & 4 deletions src/coinjoin/client.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class UniValue;
extern std::map<const std::string, std::shared_ptr<CCoinJoinClientManager>> coinJoinClientManagers;

// The object to track mixing queues
extern CCoinJoinClientQueueManager coinJoinClientQueueManager;
extern std::unique_ptr<CCoinJoinClientQueueManager> coinJoinClientQueueManager;

class CPendingDsaRequest
{
Expand Down Expand Up @@ -150,11 +150,15 @@ class CCoinJoinClientSession : public CCoinJoinBaseSession
*/
class CCoinJoinClientQueueManager : public CCoinJoinBaseManager
{
public:
void ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, CConnman& connman, bool enable_bip61) LOCKS_EXCLUDED(cs_vecqueue);
private:
CConnman& connman;

void ProcessDSQueue(CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, CConnman& connman, bool enable_bip61);
public:
explicit CCoinJoinClientQueueManager(CConnman& _connman) :
connman(_connman) {};

void ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, bool enable_bip61) LOCKS_EXCLUDED(cs_vecqueue);
void ProcessDSQueue(CNode* pfrom, const std::string& msg_type, CDataStream& vRecv, bool enable_bip61);
void DoMaintenance();
};

Expand Down
4 changes: 2 additions & 2 deletions src/coinjoin/coinjoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,14 +457,14 @@ void CCoinJoin::CheckDSTXes(const CBlockIndex* pindex)

void CCoinJoin::UpdatedBlockTip(const CBlockIndex* pindex)
{
if (pindex && masternodeSync.IsBlockchainSynced()) {
if (pindex && masternodeSync->IsBlockchainSynced()) {
CheckDSTXes(pindex);
}
}

void CCoinJoin::NotifyChainLock(const CBlockIndex* pindex)
{
if (pindex && masternodeSync.IsBlockchainSynced()) {
if (pindex && masternodeSync->IsBlockchainSynced()) {
CheckDSTXes(pindex);
}
}
Expand Down
Loading

0 comments on commit 71e8caf

Please sign in to comment.