Skip to content

Commit bfd33cd

Browse files
committed
net: move CConnman::RelayInv{Filtered} into PeerManager
1 parent 313a7e9 commit bfd33cd

26 files changed

+173
-147
lines changed

src/coinjoin/server.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ void CCoinJoinServer::CommitFinalTransaction()
349349
LogPrint(BCLog::COINJOIN, "CCoinJoinServer::CommitFinalTransaction -- TRANSMITTING DSTX\n");
350350

351351
CInv inv(MSG_DSTX, hashTx);
352-
RelayInv(connman, inv);
352+
m_peerman->RelayInv(inv);
353353

354354
// Tell the clients it was successful
355355
RelayCompletedTransaction(MSG_SUCCESS);

src/dsnotificationinterface.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <dsnotificationinterface.h>
1212
#include <governance/governance.h>
1313
#include <masternode/sync.h>
14+
#include <net_processing.h>
1415
#include <validation.h>
1516

1617
#include <evo/deterministicmns.h>
@@ -26,13 +27,15 @@
2627
CDSNotificationInterface::CDSNotificationInterface(CConnman& connman,
2728
CMasternodeSync& mn_sync,
2829
CGovernanceManager& govman,
30+
PeerManager& peerman,
2931
const CActiveMasternodeManager* const mn_activeman,
3032
const std::unique_ptr<CDeterministicMNManager>& dmnman,
3133
const std::unique_ptr<LLMQContext>& llmq_ctx,
3234
const std::unique_ptr<CJContext>& cj_ctx)
3335
: m_connman(connman),
3436
m_mn_sync(mn_sync),
3537
m_govman(govman),
38+
m_peerman(peerman),
3639
m_mn_activeman(mn_activeman),
3740
m_dmnman(dmnman),
3841
m_llmq_ctx(llmq_ctx),
@@ -96,7 +99,7 @@ void CDSNotificationInterface::UpdatedBlockTip(const CBlockIndex *pindexNew, con
9699
m_llmq_ctx->qdkgsman->UpdatedBlockTip(pindexNew, fInitialDownload);
97100
m_llmq_ctx->ehfSignalsHandler->UpdatedBlockTip(pindexNew);
98101

99-
if (!fDisableGovernance) m_govman.UpdatedBlockTip(pindexNew, m_connman, m_mn_activeman);
102+
if (!fDisableGovernance) m_govman.UpdatedBlockTip(pindexNew, m_connman, m_peerman, m_mn_activeman);
100103
}
101104

102105
void CDSNotificationInterface::TransactionAddedToMempool(const CTransactionRef& ptx, int64_t nAcceptTime)

src/dsnotificationinterface.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class CConnman;
1212
class CDeterministicMNManager;
1313
class CGovernanceManager;
1414
class CMasternodeSync;
15+
class PeerManager;
1516
struct CJContext;
1617
struct LLMQContext;
1718

@@ -21,6 +22,7 @@ class CDSNotificationInterface : public CValidationInterface
2122
explicit CDSNotificationInterface(CConnman& connman,
2223
CMasternodeSync& mn_sync,
2324
CGovernanceManager& govman,
25+
PeerManager& peerman,
2426
const CActiveMasternodeManager* const mn_activeman,
2527
const std::unique_ptr<CDeterministicMNManager>& dmnman,
2628
const std::unique_ptr<LLMQContext>& llmq_ctx,
@@ -45,10 +47,9 @@ class CDSNotificationInterface : public CValidationInterface
4547

4648
private:
4749
CConnman& m_connman;
48-
4950
CMasternodeSync& m_mn_sync;
5051
CGovernanceManager& m_govman;
51-
52+
PeerManager& m_peerman;
5253
const CActiveMasternodeManager* const m_mn_activeman;
5354
const std::unique_ptr<CDeterministicMNManager>& m_dmnman;
5455
const std::unique_ptr<LLMQContext>& m_llmq_ctx;

src/governance/governance.cpp

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
119119
return cmapVoteToObject.Get(nHash, pGovobj) && pGovobj->GetVoteFile().SerializeVoteToStream(nHash, ss);
120120
}
121121

122-
PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, std::string_view msg_type, CDataStream& vRecv)
122+
PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv)
123123
{
124124
if (fDisableGovernance) return {};
125125
if (m_mn_sync == nullptr || !m_mn_sync->IsBlockchainSynced()) return {};
@@ -213,7 +213,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
213213
return {};
214214
}
215215

216-
AddGovernanceObject(govobj, connman, &peer);
216+
AddGovernanceObject(govobj, peerman, &peer);
217217
}
218218

219219
// A NEW GOVERNANCE OBJECT VOTE HAS ARRIVED
@@ -248,7 +248,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
248248
if (ProcessVote(&peer, vote, exception, connman)) {
249249
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- %s new\n", strHash);
250250
m_mn_sync->BumpAssetLastTime("MNGOVERNANCEOBJECTVOTE");
251-
vote.Relay(connman, *m_mn_sync, tip_mn_list);
251+
vote.Relay(peerman, *m_mn_sync, tip_mn_list);
252252
} else {
253253
LogPrint(BCLog::GOBJECT, "MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n", exception.what());
254254
if ((exception.GetNodePenalty() != 0) && m_mn_sync->IsSynced()) {
@@ -260,7 +260,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, st
260260
return {};
261261
}
262262

263-
void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CConnman& connman)
263+
void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, PeerManager& peerman)
264264
{
265265
uint256 nHash = govobj.GetHash();
266266
std::vector<vote_time_pair_t> vecVotePairs;
@@ -277,7 +277,7 @@ void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CConnman& c
277277
if (pairVote.second < nNow) {
278278
fRemove = true;
279279
} else if (govobj.ProcessVote(m_mn_metaman, *this, tip_mn_list, vote, e)) {
280-
vote.Relay(connman, *Assert(m_mn_sync), tip_mn_list);
280+
vote.Relay(peerman, *Assert(m_mn_sync), tip_mn_list);
281281
fRemove = true;
282282
}
283283
if (fRemove) {
@@ -286,7 +286,7 @@ void CGovernanceManager::CheckOrphanVotes(CGovernanceObject& govobj, CConnman& c
286286
}
287287
}
288288

289-
void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman& connman, const CNode* pfrom)
289+
void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, PeerManager& peerman, const CNode* pfrom)
290290
{
291291
uint256 nHash = govobj.GetHash();
292292
std::string strHash = nHash.ToString();
@@ -331,7 +331,7 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman
331331
}
332332

333333
LogPrint(BCLog::GOBJECT, "CGovernanceManager::AddGovernanceObject -- %s new, received from peer %s\n", strHash, pfrom ? pfrom->GetLogString() : "nullptr");
334-
govobj.Relay(connman, *Assert(m_mn_sync));
334+
govobj.Relay(peerman, *Assert(m_mn_sync));
335335

336336
// Update the rate buffer
337337
MasternodeRateUpdate(govobj);
@@ -340,7 +340,7 @@ void CGovernanceManager::AddGovernanceObject(CGovernanceObject& govobj, CConnman
340340

341341
// WE MIGHT HAVE PENDING/ORPHAN VOTES FOR THIS OBJECT
342342

343-
CheckOrphanVotes(govobj, connman);
343+
CheckOrphanVotes(govobj, peerman);
344344

345345
// SEND NOTIFICATION TO SCRIPT/ZMQ
346346
GetMainSignals().NotifyGovernanceObject(std::make_shared<const Governance::Object>(govobj.Object()));
@@ -672,7 +672,7 @@ std::optional<const CSuperblock> CGovernanceManager::CreateSuperblockCandidate(i
672672
return CSuperblock(nNextSuperblock, std::move(payments));
673673
}
674674

675-
std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, CConnman& connman,
675+
std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, PeerManager& peerman,
676676
const CActiveMasternodeManager* const mn_activeman)
677677
{
678678
if (!fMasternodeMode) return std::nullopt;
@@ -718,11 +718,11 @@ std::optional<const CGovernanceObject> CGovernanceManager::CreateGovernanceTrigg
718718
}
719719

720720
// The trigger we just created looks good, submit it
721-
AddGovernanceObject(gov_sb, connman);
721+
AddGovernanceObject(gov_sb, peerman);
722722
return std::make_optional<CGovernanceObject>(gov_sb);
723723
}
724724

725-
void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman,
725+
void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman, PeerManager& peerman,
726726
const CActiveMasternodeManager* const mn_activeman)
727727
{
728728
// only active masternodes can vote on triggers
@@ -736,7 +736,7 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
736736
assert(!votedFundingYesTriggerHash.has_value());
737737
// Vote YES-FUNDING for the trigger we like
738738
const uint256 gov_sb_hash = trigger_opt.value().GetHash();
739-
if (!VoteFundingTrigger(gov_sb_hash, VOTE_OUTCOME_YES, connman, mn_activeman)) {
739+
if (!VoteFundingTrigger(gov_sb_hash, VOTE_OUTCOME_YES, connman, peerman, mn_activeman)) {
740740
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Voting YES-FUNDING for new trigger:%s failed\n", __func__, gov_sb_hash.ToString());
741741
// this should never happen, bail out
742742
return;
@@ -759,7 +759,7 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
759759
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Not voting NO-FUNDING for trigger:%s, we voted yes for it already\n", __func__, trigger_hash.ToString());
760760
continue;
761761
}
762-
if (!VoteFundingTrigger(trigger_hash, VOTE_OUTCOME_NO, connman, mn_activeman)) {
762+
if (!VoteFundingTrigger(trigger_hash, VOTE_OUTCOME_NO, connman, peerman, mn_activeman)) {
763763
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Voting NO-FUNDING for trigger:%s failed\n", __func__, trigger_hash.ToString());
764764
// failing here is ok-ish
765765
continue;
@@ -768,7 +768,7 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
768768
}
769769
}
770770

771-
bool CGovernanceManager::VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman,
771+
bool CGovernanceManager::VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman, PeerManager& peerman,
772772
const CActiveMasternodeManager* const mn_activeman)
773773
{
774774
if (!fMasternodeMode) return false;
@@ -778,7 +778,7 @@ bool CGovernanceManager::VoteFundingTrigger(const uint256& nHash, const vote_out
778778
vote.Sign(*mn_activeman);
779779

780780
CGovernanceException exception;
781-
if (!ProcessVoteAndRelay(vote, exception, connman)) {
781+
if (!ProcessVoteAndRelay(vote, exception, connman, peerman)) {
782782
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Vote FUNDING %d for trigger:%s failed:%s\n", __func__, outcome, nHash.ToString(), exception.what());
783783
return false;
784784
}
@@ -1066,11 +1066,11 @@ bool CGovernanceManager::MasternodeRateCheck(const CGovernanceObject& govobj, bo
10661066
return false;
10671067
}
10681068

1069-
bool CGovernanceManager::ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman)
1069+
bool CGovernanceManager::ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman, PeerManager& peerman)
10701070
{
10711071
bool fOK = ProcessVote(/* pfrom = */ nullptr, vote, exception, connman);
10721072
if (fOK) {
1073-
vote.Relay(connman, *Assert(m_mn_sync), Assert(m_dmnman)->GetListAtChainTip());
1073+
vote.Relay(peerman, *Assert(m_mn_sync), Assert(m_dmnman)->GetListAtChainTip());
10741074
}
10751075
return fOK;
10761076
}
@@ -1129,7 +1129,7 @@ bool CGovernanceManager::ProcessVote(CNode* pfrom, const CGovernanceVote& vote,
11291129
return fOk;
11301130
}
11311131

1132-
void CGovernanceManager::CheckPostponedObjects(CConnman& connman)
1132+
void CGovernanceManager::CheckPostponedObjects(PeerManager& peerman)
11331133
{
11341134
if (!Assert(m_mn_sync)->IsSynced()) return;
11351135

@@ -1146,7 +1146,7 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman)
11461146
bool fMissingConfirmations;
11471147
if (govobj.IsCollateralValid(strError, fMissingConfirmations)) {
11481148
if (govobj.IsValidLocally(Assert(m_dmnman)->GetListAtChainTip(), strError, false)) {
1149-
AddGovernanceObject(govobj, connman);
1149+
AddGovernanceObject(govobj, peerman);
11501150
} else {
11511151
LogPrint(BCLog::GOBJECT, "CGovernanceManager::CheckPostponedObjects -- %s invalid\n", nHash.ToString());
11521152
}
@@ -1179,7 +1179,7 @@ void CGovernanceManager::CheckPostponedObjects(CConnman& connman)
11791179
if (fValid) {
11801180
if (fReady) {
11811181
LogPrint(BCLog::GOBJECT, "CGovernanceManager::CheckPostponedObjects -- additional relay: hash = %s\n", govobj.GetHash().ToString());
1182-
govobj.Relay(connman, *m_mn_sync);
1182+
govobj.Relay(peerman, *m_mn_sync);
11831183
} else {
11841184
it++;
11851185
continue;
@@ -1474,7 +1474,7 @@ UniValue CGovernanceManager::ToJson() const
14741474
return jsonObj;
14751475
}
14761476

1477-
void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, const CActiveMasternodeManager* const mn_activeman)
1477+
void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, PeerManager& peerman, const CActiveMasternodeManager* const mn_activeman)
14781478
{
14791479
// Note this gets called from ActivateBestChain without cs_main being held
14801480
// so it should be safe to lock our mutex here without risking a deadlock
@@ -1486,8 +1486,8 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& co
14861486
}
14871487

14881488
const auto sb_opt = CreateSuperblockCandidate(pindex->nHeight);
1489-
const auto trigger_opt = CreateGovernanceTrigger(sb_opt, connman, mn_activeman);
1490-
VoteGovernanceTriggers(trigger_opt, connman, mn_activeman);
1489+
const auto trigger_opt = CreateGovernanceTrigger(sb_opt, peerman, mn_activeman);
1490+
VoteGovernanceTriggers(trigger_opt, connman, peerman, mn_activeman);
14911491

14921492
nCachedBlockHeight = pindex->nHeight;
14931493
LogPrint(BCLog::GOBJECT, "CGovernanceManager::UpdatedBlockTip -- nCachedBlockHeight: %d\n", nCachedBlockHeight);
@@ -1496,7 +1496,7 @@ void CGovernanceManager::UpdatedBlockTip(const CBlockIndex* pindex, CConnman& co
14961496
RemoveInvalidVotes();
14971497
}
14981498

1499-
CheckPostponedObjects(connman);
1499+
CheckPostponedObjects(peerman);
15001500

15011501
CSuperblockManager::ExecuteBestSuperblock(*this, Assert(m_dmnman)->GetListAtChainTip(), pindex->nHeight);
15021502
}

src/governance/governance.h

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
class CBloomFilter;
1919
class CBlockIndex;
20+
class CConnman;
2021
template<typename T>
2122
class CFlatDB;
2223
class CInv;
24+
class PeerManager;
2325

2426
class CDeterministicMNManager;
2527
class CGovernanceManager;
@@ -292,7 +294,7 @@ class CGovernanceManager : public GovernanceStore
292294
void SyncSingleObjVotes(CNode& peer, const uint256& nProp, const CBloomFilter& filter, CConnman& connman);
293295
PeerMsgRet SyncObjects(CNode& peer, CConnman& connman) const;
294296

295-
PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, std::string_view msg_type, CDataStream& vRecv);
297+
PeerMsgRet ProcessMessage(CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv);
296298

297299
void ResetVotedFundingTrigger();
298300

@@ -307,13 +309,13 @@ class CGovernanceManager : public GovernanceStore
307309
std::vector<CGovernanceVote> GetCurrentVotes(const uint256& nParentHash, const COutPoint& mnCollateralOutpointFilter) const;
308310
void GetAllNewerThan(std::vector<CGovernanceObject>& objs, int64_t nMoreThanTime) const;
309311

310-
void AddGovernanceObject(CGovernanceObject& govobj, CConnman& connman, const CNode* pfrom = nullptr);
312+
void AddGovernanceObject(CGovernanceObject& govobj, PeerManager& peerman, const CNode* pfrom = nullptr);
311313

312314
void CheckAndRemove();
313315

314316
UniValue ToJson() const;
315317

316-
void UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, const CActiveMasternodeManager* const mn_activeman);
318+
void UpdatedBlockTip(const CBlockIndex* pindex, CConnman& connman, PeerManager& peerman, const CActiveMasternodeManager* const mn_activeman);
317319
int64_t GetLastDiffTime() const { return nTimeLastDiff; }
318320
void UpdateLastDiffTime(int64_t nTimeIn) { nTimeLastDiff = nTimeIn; }
319321

@@ -342,9 +344,9 @@ class CGovernanceManager : public GovernanceStore
342344

343345
bool MasternodeRateCheck(const CGovernanceObject& govobj, bool fUpdateFailStatus, bool fForce, bool& fRateCheckBypassed);
344346

345-
bool ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman);
347+
bool ProcessVoteAndRelay(const CGovernanceVote& vote, CGovernanceException& exception, CConnman& connman, PeerManager& peerman);
346348

347-
void CheckPostponedObjects(CConnman& connman);
349+
void CheckPostponedObjects(PeerManager& peerman);
348350

349351
bool AreRateChecksEnabled() const
350352
{
@@ -368,11 +370,11 @@ class CGovernanceManager : public GovernanceStore
368370

369371
private:
370372
std::optional<const CSuperblock> CreateSuperblockCandidate(int nHeight) const;
371-
std::optional<const CGovernanceObject> CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, CConnman& connman,
373+
std::optional<const CGovernanceObject> CreateGovernanceTrigger(const std::optional<const CSuperblock>& sb_opt, PeerManager& peerman,
372374
const CActiveMasternodeManager* const mn_activeman);
373-
void VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman,
375+
void VoteGovernanceTriggers(const std::optional<const CGovernanceObject>& trigger_opt, CConnman& connman, PeerManager& peerman,
374376
const CActiveMasternodeManager* const mn_activeman);
375-
bool VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman,
377+
bool VoteFundingTrigger(const uint256& nHash, const vote_outcome_enum_t outcome, CConnman& connman, PeerManager& peerman,
376378
const CActiveMasternodeManager* const mn_activeman);
377379
bool HasAlreadyVotedFundingTrigger() const;
378380

@@ -393,7 +395,7 @@ class CGovernanceManager : public GovernanceStore
393395

394396
static bool AcceptMessage(const uint256& nHash, hash_s_t& setHash);
395397

396-
void CheckOrphanVotes(CGovernanceObject& govobj, CConnman& connman);
398+
void CheckOrphanVotes(CGovernanceObject& govobj, PeerManager& peerman);
397399

398400
void RebuildIndexes();
399401

src/governance/object.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <masternode/node.h>
1515
#include <masternode/sync.h>
1616
#include <messagesigner.h>
17-
#include <net.h>
17+
#include <net_processing.h>
1818
#include <timedata.h>
1919
#include <util/time.h>
2020
#include <validation.h>
@@ -629,7 +629,7 @@ bool CGovernanceObject::GetCurrentMNVotes(const COutPoint& mnCollateralOutpoint,
629629
return true;
630630
}
631631

632-
void CGovernanceObject::Relay(CConnman& connman, const CMasternodeSync& mn_sync) const
632+
void CGovernanceObject::Relay(PeerManager& peerman, const CMasternodeSync& mn_sync) const
633633
{
634634
// Do not relay until fully synced
635635
if (!mn_sync.IsSynced()) {
@@ -651,7 +651,7 @@ void CGovernanceObject::Relay(CConnman& connman, const CMasternodeSync& mn_sync)
651651
}
652652

653653
CInv inv(MSG_GOVERNANCE_OBJECT, GetHash());
654-
RelayInv(connman, inv, minProtoVersion);
654+
peerman.RelayInv(inv, minProtoVersion);
655655
}
656656

657657
void CGovernanceObject::UpdateSentinelVariables(const CDeterministicMNList& tip_mn_list)

src/governance/object.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class CGovernanceVote;
2222
class CMasternodeMetaMan;
2323
class CMasternodeSync;
2424
class CNode;
25+
class PeerManager;
2526

2627
extern RecursiveMutex cs_main;
2728

@@ -249,7 +250,7 @@ class CGovernanceObject
249250

250251
UniValue GetJSONObject() const;
251252

252-
void Relay(CConnman& connman, const CMasternodeSync& mn_sync) const;
253+
void Relay(PeerManager& peerman, const CMasternodeSync& mn_sync) const;
253254

254255
uint256 GetHash() const;
255256
uint256 GetDataHash() const;

0 commit comments

Comments
 (0)