@@ -83,33 +83,46 @@ namespace node {
83
83
namespace {
84
84
class EVOImpl : public EVO
85
85
{
86
+ private:
87
+ ChainstateManager& chainman () { return *Assert (m_context->chainman ); }
88
+ NodeContext& context () { return *Assert (m_context); }
89
+
86
90
public:
87
91
std::pair<CDeterministicMNList, const CBlockIndex*> getListAtChainTip () override
88
92
{
89
- const CBlockIndex *tip = WITH_LOCK (::cs_main, return :: ChainActive ().Tip ());
93
+ const CBlockIndex *tip = WITH_LOCK (::cs_main, return chainman (). ActiveChain ().Tip ());
90
94
CDeterministicMNList mnList{};
91
- if (tip != nullptr && deterministicMNManager != nullptr ) {
92
- mnList = deterministicMNManager ->GetListForBlock (tip);
95
+ if (tip != nullptr && context (). dmnman != nullptr ) {
96
+ mnList = context (). dmnman ->GetListForBlock (tip);
93
97
}
94
98
return {std::move (mnList), tip};
95
99
}
100
+ void setContext (NodeContext* context) override
101
+ {
102
+ m_context = context;
103
+ }
104
+
105
+ private:
106
+ NodeContext* m_context{nullptr };
96
107
};
97
108
98
109
class GOVImpl : public GOV
99
110
{
111
+ private:
112
+ NodeContext& context () { return *Assert (m_context); }
113
+
100
114
public:
101
115
void getAllNewerThan (std::vector<CGovernanceObject> &objs, int64_t nMoreThanTime) override
102
116
{
103
- if (::governance != nullptr ) {
104
- return ::governance ->GetAllNewerThan (objs, nMoreThanTime);
117
+ if (context (). govman != nullptr ) {
118
+ context (). govman ->GetAllNewerThan (objs, nMoreThanTime);
105
119
}
106
- return ;
107
120
}
108
121
int32_t getObjAbsYesCount (const CGovernanceObject& obj, vote_signal_enum_t vote_signal) override
109
122
{
110
123
// TODO: Move GetListAtChainTip query outside CGovernanceObject, query requires
111
124
// active CDeterministicMNManager instance
112
- if (::governance != nullptr && ::deterministicMNManager != nullptr ) {
125
+ if (context (). govman != nullptr && context (). dmnman != nullptr ) {
113
126
return obj.GetAbsoluteYesCount (vote_signal);
114
127
}
115
128
return 0 ;
@@ -118,39 +131,78 @@ class GOVImpl : public GOV
118
131
{
119
132
// TODO: Move GetListAtChainTip query outside CGovernanceObject, query requires
120
133
// active CDeterministicMNManager instance
121
- if (::governance != nullptr && ::deterministicMNManager != nullptr ) {
134
+ if (context (). govman != nullptr && context (). dmnman != nullptr ) {
122
135
LOCK (cs_main);
123
136
return obj.IsValidLocally (error, check_collateral);
124
137
}
125
138
return false ;
126
139
}
140
+ void setContext (NodeContext* context) override
141
+ {
142
+ m_context = context;
143
+ }
144
+
145
+ private:
146
+ NodeContext* m_context{nullptr };
127
147
};
128
148
129
149
class LLMQImpl : public LLMQ
130
150
{
151
+ private:
152
+ NodeContext& context () { return *Assert (m_context); }
153
+
131
154
public:
132
155
size_t getInstantSentLockCount () override
133
156
{
134
- return llmq::quorumInstantSendManager == nullptr ? 0 : llmq::quorumInstantSendManager->GetInstantSendLockCount ();
157
+ if (context ().llmq_ctx ->isman != nullptr ) {
158
+ return context ().llmq_ctx ->isman ->GetInstantSendLockCount ();
159
+ }
160
+ return 0 ;
161
+ }
162
+ void setContext (NodeContext* context) override
163
+ {
164
+ m_context = context;
135
165
}
166
+
167
+ private:
168
+ NodeContext* m_context{nullptr };
136
169
};
137
170
138
171
namespace Masternode = interfaces::Masternode;
139
172
class MasternodeSyncImpl : public Masternode ::Sync
140
173
{
174
+ private:
175
+ NodeContext& context () { return *Assert (m_context); }
176
+
141
177
public:
142
178
bool isSynced () override
143
179
{
144
- return ::masternodeSync == nullptr ? false : ::masternodeSync->IsSynced ();
180
+ if (context ().mn_sync != nullptr ) {
181
+ return context ().mn_sync ->IsSynced ();
182
+ }
183
+ return false ;
145
184
}
146
185
bool isBlockchainSynced () override
147
186
{
148
- return ::masternodeSync == nullptr ? false : ::masternodeSync->IsBlockchainSynced ();
187
+ if (context ().mn_sync != nullptr ) {
188
+ return context ().mn_sync ->IsBlockchainSynced ();
189
+ }
190
+ return false ;
149
191
}
150
192
std::string getSyncStatus () override
151
193
{
152
- return ::masternodeSync == nullptr ? " " : ::masternodeSync->GetSyncStatus ();
194
+ if (context ().mn_sync != nullptr ) {
195
+ return context ().mn_sync ->GetSyncStatus ();
196
+ }
197
+ return " " ;
153
198
}
199
+ void setContext (NodeContext* context) override
200
+ {
201
+ m_context = context;
202
+ }
203
+
204
+ private:
205
+ NodeContext* m_context{nullptr };
154
206
};
155
207
156
208
namespace CoinJoin = interfaces::CoinJoin;
@@ -539,6 +591,11 @@ class NodeImpl : public Node
539
591
void setContext (NodeContext* context) override
540
592
{
541
593
m_context = context;
594
+ m_evo.setContext (context);
595
+ m_gov.setContext (context);
596
+ m_llmq.setContext (context);
597
+ m_masternodeSync.setContext (context);
598
+
542
599
if (context) {
543
600
m_context_ref = *context;
544
601
} else {
@@ -748,8 +805,8 @@ class ChainImpl : public Chain
748
805
{
749
806
const CBlockIndex *tip = WITH_LOCK (::cs_main, return ::ChainActive ().Tip ());
750
807
CDeterministicMNList mnList{};
751
- if (tip != nullptr && deterministicMNManager != nullptr ) {
752
- mnList = deterministicMNManager ->GetListForBlock (tip);
808
+ if (tip != nullptr && m_node. dmnman != nullptr ) {
809
+ mnList = m_node. dmnman ->GetListForBlock (tip);
753
810
}
754
811
std::vector<COutPoint> listRet;
755
812
for (const auto & [tx, index]: outputs) {
0 commit comments