From aa4e692a2714ec325b54ce94daea38f0f4369a7e Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 13 Mar 2026 22:01:15 +0700 Subject: [PATCH 1/9] fix: add guards if CTxMempool is nullptr in chainstate --- src/node/chainstate.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/node/chainstate.cpp b/src/node/chainstate.cpp index 289720d0949f..a7bfb33fd133 100644 --- a/src/node/chainstate.cpp +++ b/src/node/chainstate.cpp @@ -233,7 +233,9 @@ void DashChainstateSetup(ChainstateManager& chainman, llmq_ctx = std::make_unique(*dmnman, evodb, sporkman, chainman, mn_sync, util::DbWrapperParams{.path = data_dir, .memory = llmq_dbs_in_memory, .wipe = llmq_dbs_wipe}, bls_threads, worker_count, max_recsigs_age); - mempool->ConnectManagers(dmnman.get(), llmq_ctx->isman.get()); + if (mempool) { + mempool->ConnectManagers(dmnman.get(), llmq_ctx->isman.get()); + } chain_helper.reset(); chain_helper = std::make_unique(evodb, *dmnman, govman, *(llmq_ctx->isman), *(llmq_ctx->quorum_block_processor), *(llmq_ctx->qsnapman), chainman, consensus_params, mn_sync, chainlocks, @@ -248,7 +250,9 @@ void DashChainstateSetupClose(std::unique_ptr& chain_helper, { chain_helper.reset(); llmq_ctx.reset(); - mempool->DisconnectManagers(); + if (mempool) { + mempool->DisconnectManagers(); + } dmnman.reset(); } From d0414cc063bfa3bffada5a10c0f896de8e06f4cb Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 13 Mar 2026 14:16:18 +0700 Subject: [PATCH 2/9] refactor: drop dependency of governance/object on core_write (ScriptToAsmStr) --- src/governance/object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/governance/object.cpp b/src/governance/object.cpp index d05e5b021e99..86431439196f 100644 --- a/src/governance/object.cpp +++ b/src/governance/object.cpp @@ -12,11 +12,11 @@ #include #include -#include #include #include #include #include +#include #include #include #include @@ -491,12 +491,12 @@ bool CGovernanceObject::IsCollateralValid(const ChainstateManager& chainman, std CAmount nMinFee = GetMinCollateralFee(); LogPrint(BCLog::GOBJECT, "CGovernanceObject::IsCollateralValid -- txCollateral->vout.size() = %s, findScript = %s, nMinFee = %lld\n", - txCollateral->vout.size(), ScriptToAsmStr(findScript, false), nMinFee); + txCollateral->vout.size(), HexStr(findScript), nMinFee); bool foundOpReturn = false; for (const auto& output : txCollateral->vout) { LogPrint(BCLog::GOBJECT, "CGovernanceObject::IsCollateralValid -- txout = %s, output.nValue = %lld, output.scriptPubKey = %s\n", - output.ToString(), output.nValue, ScriptToAsmStr(output.scriptPubKey, false)); + output.ToString(), output.nValue, HexStr(output.scriptPubKey)); if (!output.scriptPubKey.IsPayToPublicKeyHash() && !output.scriptPubKey.IsUnspendable()) { strError = strprintf("Invalid Script %s", txCollateral->ToString()); LogPrintf("CGovernanceObject::IsCollateralValid -- %s\n", strError); From 312ca8ee5185657722bdc6d46b0869355fe33f03 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 13 Mar 2026 13:47:43 +0700 Subject: [PATCH 3/9] refactor: drop pfrom from CGovernanceManager::ProcessVote --- src/governance/governance.cpp | 4 ++-- src/governance/governance.h | 2 +- src/governance/net_governance.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/governance/governance.cpp b/src/governance/governance.cpp index 0123bba56b2b..142eb7ac80bd 100644 --- a/src/governance/governance.cpp +++ b/src/governance/governance.cpp @@ -752,14 +752,14 @@ bool CGovernanceManager::ProcessVoteAndRelay(const CGovernanceVote& vote, CGover AssertLockNotHeld(cs_store); AssertLockNotHeld(cs_relay); uint256 hashToRequest; // Ignored for local votes (no peer to request from) - bool fOK = ProcessVote(/*pfrom=*/nullptr, vote, exception, hashToRequest); + bool fOK = ProcessVote(vote, exception, hashToRequest); if (fOK) { RelayVote(vote); } return fOK; } -bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote, CGovernanceException& exception, +bool CGovernanceManager::ProcessVote(const CGovernanceVote& vote, CGovernanceException& exception, uint256& hashToRequest) { AssertLockNotHeld(cs_store); diff --git a/src/governance/governance.h b/src/governance/governance.h index cb43b3bbd452..7feae5a3a022 100644 --- a/src/governance/governance.h +++ b/src/governance/governance.h @@ -381,7 +381,7 @@ class CGovernanceManager : public GovernanceStore, public GovernanceSignerParent CDeterministicMNManager& GetMNManager(); /** Process a governance vote. Returns true on success. * If the vote is for an unknown object (orphan), hashToRequest is set to the object hash. */ - bool ProcessVote(CNode* pfrom, const CGovernanceVote& vote, CGovernanceException& exception, uint256& hashToRequest) + bool ProcessVote(const CGovernanceVote& vote, CGovernanceException& exception, uint256& hashToRequest) EXCLUSIVE_LOCKS_REQUIRED(!cs_store); diff --git a/src/governance/net_governance.cpp b/src/governance/net_governance.cpp index 7849ff91544e..c9314c9cc1d5 100644 --- a/src/governance/net_governance.cpp +++ b/src/governance/net_governance.cpp @@ -169,7 +169,7 @@ void NetGovernance::ProcessMessage(CNode& peer, const std::string& msg_type, CDa CGovernanceException exception; uint256 hashToRequest; - if (m_gov_manager.ProcessVote(&peer, vote, exception, hashToRequest)) { + if (m_gov_manager.ProcessVote(vote, exception, hashToRequest)) { LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- %s new\n", strHash); m_node_sync.BumpAssetLastTime("MNGOVERNANCEOBJECTVOTE"); From 2b2d0a4bb02cc67249476726fe5a9222e1bb4629 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 13 Mar 2026 13:04:48 +0700 Subject: [PATCH 4/9] refactor: move CDeterministicMN::ToJson to core_write to avoid g_txindex dependency for linking --- src/evo/deterministicmns.cpp | 43 +++++++----------------------------- src/qt/masternodemodel.cpp | 1 + src/rpc/evo_util.cpp | 28 +++++++++++++++++++++++ 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/evo/deterministicmns.cpp b/src/evo/deterministicmns.cpp index 55b86c240647..9c70869382c3 100644 --- a/src/evo/deterministicmns.cpp +++ b/src/evo/deterministicmns.cpp @@ -4,6 +4,10 @@ #include +#include +#include +#include +#include #include #include #include @@ -11,25 +15,19 @@ #include #include #include -#include -#include - -#include -#include -#include -#include -#include #include #include