From 93ee3cca61f7856f6ba6a2742c2eb3780ac9b937 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Fri, 16 Jun 2023 14:44:10 +0700 Subject: [PATCH 1/4] refactor: reducing dependencies between chainlocks and instant send manager --- src/llmq/chainlocks.cpp | 6 +----- src/llmq/chainlocks.h | 3 +-- src/miner.cpp | 6 +++++- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/llmq/chainlocks.cpp b/src/llmq/chainlocks.cpp index 1d556aaf878e..d6c9f147adc0 100644 --- a/src/llmq/chainlocks.cpp +++ b/src/llmq/chainlocks.cpp @@ -447,12 +447,8 @@ CChainLocksHandler::BlockTxs::mapped_type CChainLocksHandler::GetBlockTxs(const return ret; } -bool CChainLocksHandler::IsTxSafeForMining(const CInstantSendManager& isman, const uint256& txid) const +bool CChainLocksHandler::IsTxSafeForMining(const uint256& txid) const { - if (!isman.RejectConflictingBlocks() || !isman.IsInstantSendEnabled() || isman.IsLocked(txid)) { - return true; - } - int64_t txAge = 0; { LOCK(cs); diff --git a/src/llmq/chainlocks.h b/src/llmq/chainlocks.h index b52493f17226..b62cb6ceda56 100644 --- a/src/llmq/chainlocks.h +++ b/src/llmq/chainlocks.h @@ -29,7 +29,6 @@ class PeerManager; namespace llmq { -class CInstantSendManager; class CSigningManager; class CSigSharesManager; @@ -113,7 +112,7 @@ class CChainLocksHandler : public CRecoveredSigsListener bool HasConflictingChainLock(int nHeight, const uint256& blockHash) const LOCKS_EXCLUDED(cs); bool VerifyChainLock(const CChainLockSig& clsig) const; - bool IsTxSafeForMining(const CInstantSendManager& isman, const uint256& txid) const LOCKS_EXCLUDED(cs); + bool IsTxSafeForMining(const uint256& txid) const LOCKS_EXCLUDED(cs); private: // these require locks to be held already diff --git a/src/miner.cpp b/src/miner.cpp index 6c1e703d4686..6c3dc40f7c7c 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -286,7 +286,11 @@ bool BlockAssembler::TestPackageTransactions(const CTxMemPool::setEntries& packa for (CTxMemPool::txiter it : package) { if (!IsFinalTx(it->GetTx(), nHeight, nLockTimeCutoff)) return false; - if (!m_clhandler.IsTxSafeForMining(m_isman, it->GetTx().GetHash())) { + + const auto& txid = it->GetTx().GetHash(); + if (!m_isman.RejectConflictingBlocks() || !m_isman.IsInstantSendEnabled() || m_isman.IsLocked(txid)) continue; + + if (!m_clhandler.IsTxSafeForMining(txid)) { return false; } } From 71b5d6b0a2061016c1bbaca359b785240bc03a09 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Thu, 8 Jun 2023 14:56:50 +0700 Subject: [PATCH 2/4] refactor: move PreComputeQuorumMembers from header llmq/utils to blockprocessor.cpp --- src/llmq/blockprocessor.cpp | 13 +++++++++++-- src/llmq/utils.cpp | 9 --------- src/llmq/utils.h | 1 - 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/llmq/blockprocessor.cpp b/src/llmq/blockprocessor.cpp index 4e54d62a97a2..4a4a2c34b2c6 100644 --- a/src/llmq/blockprocessor.cpp +++ b/src/llmq/blockprocessor.cpp @@ -25,6 +25,15 @@ #include +static void PreComputeQuorumMembers(const CBlockIndex* pindex, bool reset_cache = false) +{ + for (const Consensus::LLMQParams& params : llmq::utils::GetEnabledQuorumParams(pindex->pprev)) { + if (llmq::utils::IsQuorumRotationEnabled(params, pindex) && (pindex->nHeight % params.dkgInterval == 0)) { + llmq::utils::GetAllQuorumMembers(params.type, pindex, reset_cache); + } + } +} + namespace llmq { @@ -148,7 +157,7 @@ bool CQuorumBlockProcessor::ProcessBlock(const CBlock& block, const CBlockIndex* return true; } - llmq::utils::PreComputeQuorumMembers(pindex); + PreComputeQuorumMembers(pindex); std::multimap qcs; if (!GetCommitmentsFromBlock(block, pindex, qcs, state)) { @@ -304,7 +313,7 @@ bool CQuorumBlockProcessor::UndoBlock(const CBlock& block, const CBlockIndex* pi { AssertLockHeld(cs_main); - llmq::utils::PreComputeQuorumMembers(pindex, true); + PreComputeQuorumMembers(pindex, true); std::multimap qcs; BlockValidationState dummy; diff --git a/src/llmq/utils.cpp b/src/llmq/utils.cpp index 4be89f6b8d79..70aa5c455ebc 100644 --- a/src/llmq/utils.cpp +++ b/src/llmq/utils.cpp @@ -54,15 +54,6 @@ static void BuildQuorumSnapshot(const Consensus::LLMQParams& llmqParams, const C static bool IsInstantSendLLMQTypeShared(); -void PreComputeQuorumMembers(const CBlockIndex* pindex, bool reset_cache) -{ - for (const Consensus::LLMQParams& params : GetEnabledQuorumParams(pindex->pprev)) { - if (IsQuorumRotationEnabled(params, pindex) && (pindex->nHeight % params.dkgInterval == 0)) { - GetAllQuorumMembers(params.type, pindex, reset_cache); - } - } -} - uint256 GetHashModifier(const Consensus::LLMQParams& llmqParams, const CBlockIndex* pCycleQuorumBaseBlockIndex) { ASSERT_IF_DEBUG(pCycleQuorumBaseBlockIndex->nHeight % llmqParams.dkgInterval == 0); diff --git a/src/llmq/utils.h b/src/llmq/utils.h index 74bd63b4dfac..c34435b46d56 100644 --- a/src/llmq/utils.h +++ b/src/llmq/utils.h @@ -57,7 +57,6 @@ namespace utils // includes members which failed DKG std::vector GetAllQuorumMembers(Consensus::LLMQType llmqType, const CBlockIndex* pQuorumBaseBlockIndex, bool reset_cache = false); -void PreComputeQuorumMembers(const CBlockIndex* pindex, bool reset_cache = false); uint256 GetHashModifier(const Consensus::LLMQParams& llmqParams, const CBlockIndex* pCycleQuorumBaseBlockIndex); uint256 BuildCommitmentHash(Consensus::LLMQType llmqType, const uint256& blockHash, const std::vector& validMembers, const CBLSPublicKey& pubKey, const uint256& vvecHash); uint256 BuildSignHash(Consensus::LLMQType llmqType, const uint256& quorumHash, const uint256& id, const uint256& msgHash); From d83c9591d8bfd38b8f0e4c48d4b3fb75c2a0a381 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Wed, 7 Jun 2023 04:26:07 +0700 Subject: [PATCH 3/4] refactor: move PreviousQuorumQuarters from header llmq/utils.h to llmq/utils.cpp --- src/llmq/utils.cpp | 9 +++++++++ src/llmq/utils.h | 9 --------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/llmq/utils.cpp b/src/llmq/utils.cpp index 70aa5c455ebc..3dcfcc1bdbdc 100644 --- a/src/llmq/utils.cpp +++ b/src/llmq/utils.cpp @@ -40,6 +40,15 @@ VersionBitsCache llmq_versionbitscache; namespace utils { +//QuorumMembers per quorumIndex at heights H-Cycle, H-2Cycles, H-3Cycles +struct PreviousQuorumQuarters { + std::vector> quarterHMinusC; + std::vector> quarterHMinus2C; + std::vector> quarterHMinus3C; + explicit PreviousQuorumQuarters(size_t s) : + quarterHMinusC(s), quarterHMinus2C(s), quarterHMinus3C(s) {} +}; + // Forward declarations static std::vector ComputeQuorumMembers(Consensus::LLMQType llmqType, const CBlockIndex* pQuorumBaseBlockIndex); static std::vector> ComputeQuorumMembersByQuarterRotation(const Consensus::LLMQParams& llmqParams, const CBlockIndex* pCycleQuorumBaseBlockIndex); diff --git a/src/llmq/utils.h b/src/llmq/utils.h index c34435b46d56..f1e5275e3097 100644 --- a/src/llmq/utils.h +++ b/src/llmq/utils.h @@ -42,15 +42,6 @@ enum class QvvecSyncMode { OnlyIfTypeMember = 1, }; -//QuorumMembers per quorumIndex at heights H-Cycle, H-2Cycles, H-3Cycles -struct PreviousQuorumQuarters { - std::vector> quarterHMinusC; - std::vector> quarterHMinus2C; - std::vector> quarterHMinus3C; - explicit PreviousQuorumQuarters(size_t s) : - quarterHMinusC(s), quarterHMinus2C(s), quarterHMinus3C(s) {} -}; - namespace utils { From 9ca2b1a5a25f97edb2cc457e57087cfb81a081ce Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Wed, 7 Jun 2023 03:41:32 +0700 Subject: [PATCH 4/4] refactor: removed circular depenencies through core_io by removing unused header --- src/evo/deterministicmns.cpp | 1 - test/lint/lint-circular-dependencies.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/src/evo/deterministicmns.cpp b/src/evo/deterministicmns.cpp index 662a0006f562..567a566c67c0 100644 --- a/src/evo/deterministicmns.cpp +++ b/src/evo/deterministicmns.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include