Skip to content

Commit 1e2e854

Browse files
committed
refactor: create InstantSendStorage to break circular dependency over instantsend/signing
1 parent a7e0f19 commit 1e2e854

File tree

4 files changed

+23
-10
lines changed

4 files changed

+23
-10
lines changed

src/instantsend/instantsend.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <threadinterrupt.h>
1313
#include <threadsafety.h>
1414

15+
#include <instantsend/signing.h>
1516
#include <instantsend/db.h>
1617
#include <instantsend/lock.h>
1718
#include <unordered_lru_cache.h>
@@ -43,7 +44,7 @@ class CQuorumManager;
4344
class CSigningManager;
4445
class CSigSharesManager;
4546

46-
class CInstantSendManager
47+
class CInstantSendManager final : public instantsend::InstantSendStorage
4748
{
4849
private:
4950
CInstantSendDb db;
@@ -128,9 +129,9 @@ class CInstantSendManager
128129
EXCLUSIVE_LOCKS_REQUIRED(!cs_nonLocked, !cs_pendingRetry);
129130

130131
public:
131-
bool IsLocked(const uint256& txHash) const;
132+
bool IsLocked(const uint256& txHash) const override;
132133
bool IsWaitingForTx(const uint256& txHash) const EXCLUSIVE_LOCKS_REQUIRED(!cs_pendingLocks);
133-
CInstantSendLockPtr GetConflictingLock(const CTransaction& tx) const;
134+
CInstantSendLockPtr GetConflictingLock(const CTransaction& tx) const override;
134135

135136
PeerMsgRet ProcessMessage(const CNode& pfrom, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv);
136137

@@ -152,12 +153,12 @@ class CInstantSendManager
152153
EXCLUSIVE_LOCKS_REQUIRED(!cs_nonLocked, !cs_pendingRetry);
153154

154155
void RemoveConflictingLock(const uint256& islockHash, const CInstantSendLock& islock);
155-
void TryEmplacePendingLock(const uint256& hash, const NodeId id, const CInstantSendLockPtr& islock)
156+
void TryEmplacePendingLock(const uint256& hash, const NodeId id, const CInstantSendLockPtr& islock) override
156157
EXCLUSIVE_LOCKS_REQUIRED(!cs_pendingLocks);
157158

158159
size_t GetInstantSendLockCount() const;
159160

160-
bool IsInstantSendEnabled() const;
161+
bool IsInstantSendEnabled() const override;
161162
/**
162163
* If true, MN should sign all transactions, if false, MN should not sign
163164
* transactions in mempool, but should sign txes included in a block. This

src/instantsend/signing.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#include <util/irange.h>
1212
#include <validation.h>
1313

14-
#include <instantsend/instantsend.h>
1514
#include <llmq/chainlocks.h>
1615
#include <llmq/quorums.h>
1716
#include <masternode/sync.h>
@@ -30,7 +29,7 @@ using node::fReindex;
3029
namespace instantsend {
3130
static const std::string_view INPUTLOCK_REQUESTID_PREFIX = "inlock";
3231

33-
CSigningManager::CSigningManager(CChainState& chainstate, llmq::CChainLocksHandler& clhandler, llmq::CInstantSendManager& isman,
32+
CSigningManager::CSigningManager(CChainState& chainstate, llmq::CChainLocksHandler& clhandler, InstantSendStorage& isman,
3433
llmq::CSigningManager& sigman, llmq::CSigSharesManager& shareman, llmq::CQuorumManager& qman,
3534
CSporkManager& sporkman, CTxMemPool& mempool, const CMasternodeSync& mn_sync) :
3635
m_chainstate{chainstate},

src/instantsend/signing.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,29 @@ class CInstantSendManager;
2222
class CSigningManager;
2323
class CSigSharesManager;
2424
class CQuorumManager;
25+
struct CInstantSendLock;
26+
using CInstantSendLockPtr = std::shared_ptr<CInstantSendLock>;
2527
} // namespace llmq
2628

2729
namespace instantsend {
30+
31+
class InstantSendStorage
32+
{
33+
public:
34+
virtual ~InstantSendStorage() = default;
35+
36+
virtual bool IsInstantSendEnabled() const = 0;
37+
virtual bool IsLocked(const uint256& txHash) const = 0;
38+
virtual llmq::CInstantSendLockPtr GetConflictingLock(const CTransaction& tx) const = 0;
39+
virtual void TryEmplacePendingLock(const uint256& hash, const NodeId id, const llmq::CInstantSendLockPtr& islock) = 0;
40+
};
41+
2842
class CSigningManager : public llmq::CRecoveredSigsListener
2943
{
3044
private:
3145
CChainState& m_chainstate;
3246
llmq::CChainLocksHandler& m_clhandler;
33-
llmq::CInstantSendManager& m_isman;
47+
InstantSendStorage& m_isman;
3448
llmq::CSigningManager& m_sigman;
3549
llmq::CSigSharesManager& m_shareman;
3650
llmq::CQuorumManager& m_qman;
@@ -58,7 +72,7 @@ class CSigningManager : public llmq::CRecoveredSigsListener
5872
std::unordered_map<uint256, llmq::CInstantSendLock*, StaticSaltedHasher> txToCreatingInstantSendLocks GUARDED_BY(cs_creating);
5973

6074
public:
61-
explicit CSigningManager(CChainState& chainstate, llmq::CChainLocksHandler& clhandler, llmq::CInstantSendManager& isman,
75+
explicit CSigningManager(CChainState& chainstate, llmq::CChainLocksHandler& clhandler, InstantSendStorage& isman,
6276
llmq::CSigningManager& sigman, llmq::CSigSharesManager& shareman, llmq::CQuorumManager& qman,
6377
CSporkManager& sporkman, CTxMemPool& mempool, const CMasternodeSync& mn_sync);
6478
~CSigningManager();

test/lint/lint-circular-dependencies.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
"governance/governance -> masternode/sync -> governance/governance",
5454
"governance/governance -> net_processing -> governance/governance",
5555
"governance/vote -> masternode/node -> validationinterface -> governance/vote",
56-
"instantsend/instantsend -> instantsend/signing -> instantsend/instantsend",
5756
"instantsend/instantsend -> llmq/chainlocks -> instantsend/instantsend",
5857
"instantsend/instantsend -> net_processing -> instantsend/instantsend",
5958
"instantsend/instantsend -> net_processing -> llmq/context -> instantsend/instantsend",

0 commit comments

Comments
 (0)