Skip to content

Commit b03446b

Browse files
kwvgknst
andcommitted
refactor: abstract away InstantSend parent implementation from signer
Co-Authored-By: Konstantin Akimov <knstqq@gmail.com>
1 parent 0dd6598 commit b03446b

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
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 <threadsafety.h>
1313
#include <util/threadinterrupt.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
instantsend::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-
instantsend::InstantSendLockPtr GetConflictingLock(const CTransaction& tx) const;
134+
instantsend::InstantSendLockPtr 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 instantsend::InstantSendLock& islock);
155-
void TryEmplacePendingLock(const uint256& hash, const NodeId id, const instantsend::InstantSendLockPtr& islock)
156+
void TryEmplacePendingLock(const uint256& hash, const NodeId id, const instantsend::InstantSendLockPtr& 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>
@@ -31,7 +30,7 @@ namespace instantsend {
3130
static constexpr std::string_view INPUTLOCK_REQUESTID_PREFIX{"inlock"};
3231

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

src/instantsend/signing.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,23 @@ class CQuorumManager;
2525
} // namespace llmq
2626

2727
namespace instantsend {
28-
class InstantSendSigner : public llmq::CRecoveredSigsListener
28+
class InstantSendStorage
29+
{
30+
public:
31+
virtual ~InstantSendStorage() = default;
32+
33+
virtual bool IsInstantSendEnabled() const = 0;
34+
virtual bool IsLocked(const uint256& txHash) const = 0;
35+
virtual InstantSendLockPtr GetConflictingLock(const CTransaction& tx) const = 0;
36+
virtual void TryEmplacePendingLock(const uint256& hash, const NodeId id, const InstantSendLockPtr& islock) = 0;
37+
};
38+
39+
class InstantSendSigner final : public llmq::CRecoveredSigsListener
2940
{
3041
private:
3142
CChainState& m_chainstate;
3243
llmq::CChainLocksHandler& m_clhandler;
33-
llmq::CInstantSendManager& m_isman;
44+
InstantSendStorage& m_isman;
3445
llmq::CSigningManager& m_sigman;
3546
llmq::CSigSharesManager& m_shareman;
3647
llmq::CQuorumManager& m_qman;
@@ -59,7 +70,7 @@ class InstantSendSigner : public llmq::CRecoveredSigsListener
5970

6071
public:
6172
explicit InstantSendSigner(CChainState& chainstate, llmq::CChainLocksHandler& clhandler,
62-
llmq::CInstantSendManager& isman, llmq::CSigningManager& sigman,
73+
InstantSendStorage& isman, llmq::CSigningManager& sigman,
6374
llmq::CSigSharesManager& shareman, llmq::CQuorumManager& qman, CSporkManager& sporkman,
6475
CTxMemPool& mempool, const CMasternodeSync& mn_sync);
6576
~InstantSendSigner();

test/lint/lint-circular-dependencies.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
"governance/governance -> governance/object -> governance/governance",
4545
"governance/governance -> masternode/sync -> governance/governance",
4646
"governance/governance -> net_processing -> governance/governance",
47-
"instantsend/instantsend -> instantsend/signing -> instantsend/instantsend",
4847
"instantsend/instantsend -> llmq/chainlocks -> instantsend/instantsend",
4948
"instantsend/instantsend -> net_processing -> instantsend/instantsend",
5049
"instantsend/instantsend -> net_processing -> llmq/context -> instantsend/instantsend",

0 commit comments

Comments
 (0)