Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/evo/deterministicmns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
#include <base58.h>
#include <chainparams.h>
#include <consensus/validation.h>
#include <core_io.h>
#include <script/standard.h>
#include <ui_interface.h>
#include <validation.h>
Expand Down
13 changes: 11 additions & 2 deletions src/llmq/blockprocessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@

#include <map>

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
{

Expand Down Expand Up @@ -148,7 +157,7 @@ bool CQuorumBlockProcessor::ProcessBlock(const CBlock& block, const CBlockIndex*
return true;
}

llmq::utils::PreComputeQuorumMembers(pindex);
PreComputeQuorumMembers(pindex);

std::multimap<Consensus::LLMQType, CFinalCommitment> qcs;
if (!GetCommitmentsFromBlock(block, pindex, qcs, state)) {
Expand Down Expand Up @@ -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<Consensus::LLMQType, CFinalCommitment> qcs;
BlockValidationState dummy;
Expand Down
6 changes: 1 addition & 5 deletions src/llmq/chainlocks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions src/llmq/chainlocks.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ class PeerManager;

namespace llmq
{
class CInstantSendManager;
class CSigningManager;
class CSigSharesManager;

Expand Down Expand Up @@ -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
Expand Down
18 changes: 9 additions & 9 deletions src/llmq/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ VersionBitsCache llmq_versionbitscache;
namespace utils

{
//QuorumMembers per quorumIndex at heights H-Cycle, H-2Cycles, H-3Cycles
struct PreviousQuorumQuarters {
std::vector<std::vector<CDeterministicMNCPtr>> quarterHMinusC;
std::vector<std::vector<CDeterministicMNCPtr>> quarterHMinus2C;
std::vector<std::vector<CDeterministicMNCPtr>> quarterHMinus3C;
explicit PreviousQuorumQuarters(size_t s) :
quarterHMinusC(s), quarterHMinus2C(s), quarterHMinus3C(s) {}
};

// Forward declarations
static std::vector<CDeterministicMNCPtr> ComputeQuorumMembers(Consensus::LLMQType llmqType, const CBlockIndex* pQuorumBaseBlockIndex);
static std::vector<std::vector<CDeterministicMNCPtr>> ComputeQuorumMembersByQuarterRotation(const Consensus::LLMQParams& llmqParams, const CBlockIndex* pCycleQuorumBaseBlockIndex);
Expand All @@ -54,15 +63,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);
Expand Down
10 changes: 0 additions & 10 deletions src/llmq/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,22 +42,12 @@ enum class QvvecSyncMode {
OnlyIfTypeMember = 1,
};

//QuorumMembers per quorumIndex at heights H-Cycle, H-2Cycles, H-3Cycles
struct PreviousQuorumQuarters {
std::vector<std::vector<CDeterministicMNCPtr>> quarterHMinusC;
std::vector<std::vector<CDeterministicMNCPtr>> quarterHMinus2C;
std::vector<std::vector<CDeterministicMNCPtr>> quarterHMinus3C;
explicit PreviousQuorumQuarters(size_t s) :
quarterHMinusC(s), quarterHMinus2C(s), quarterHMinus3C(s) {}
};

namespace utils
{

// includes members which failed DKG
std::vector<CDeterministicMNCPtr> 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<bool>& validMembers, const CBLSPublicKey& pubKey, const uint256& vvecHash);
uint256 BuildSignHash(Consensus::LLMQType llmqType, const uint256& quorumHash, const uint256& id, const uint256& msgHash);
Expand Down
6 changes: 5 additions & 1 deletion src/miner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
1 change: 0 additions & 1 deletion test/lint/lint-circular-dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ EXPECTED_CIRCULAR_DEPENDENCIES=(
"qt/bitcoingui -> qt/guiutil -> qt/bitcoingui"
"qt/guiutil -> qt/optionsdialog -> qt/guiutil"
"qt/guiutil -> qt/qvalidatedlineedit -> qt/guiutil"
"core_io -> evo/cbtx -> evo/deterministicmns -> core_io"
"core_io -> evo/cbtx -> evo/simplifiedmns -> core_io"
"evo/simplifiedmns -> llmq/blockprocessor -> net_processing -> evo/simplifiedmns"
"llmq/dkgsession -> llmq/dkgsessionmgr -> llmq/dkgsessionhandler -> llmq/dkgsession"
Expand Down