44
55#include < evo/simplifiedmns.h>
66
7+ #include < clientversion.h>
78#include < consensus/merkle.h>
8- #include < evo/deterministicmns.h>
99#include < key_io.h>
1010#include < pubkey.h>
1111#include < serialize.h>
12+ #include < sync.h>
1213#include < univalue.h>
14+ #include < util/time.h>
1315#include < util/underlying.h>
1416#include < version.h>
1517
16- CSimplifiedMNListEntry::CSimplifiedMNListEntry (const CDeterministicMN& dmn) :
17- proRegTxHash(dmn.proTxHash),
18- confirmedHash(dmn.pdmnState->confirmedHash),
19- netInfo(dmn.pdmnState->netInfo),
20- pubKeyOperator(dmn.pdmnState->pubKeyOperator),
21- keyIDVoting(dmn.pdmnState->keyIDVoting),
22- isValid(!dmn.pdmnState->IsBanned ()),
23- platformHTTPPort(dmn.pdmnState->platformHTTPPort),
24- platformNodeID(dmn.pdmnState->platformNodeID),
25- scriptPayout(dmn.pdmnState->scriptPayout),
26- scriptOperatorPayout(dmn.pdmnState->scriptOperatorPayout),
27- nVersion(dmn.pdmnState->nVersion),
28- nType(dmn.nType)
18+ CSimplifiedMNListEntry::CSimplifiedMNListEntry (const uint256& proreg_tx_hash, const uint256& confirmed_hash,
19+ const std::shared_ptr<NetInfoInterface>& net_info,
20+ const CBLSLazyPublicKey& pubkey_operator, const CKeyID& keyid_voting,
21+ bool is_valid, uint16_t platform_http_port,
22+ const uint160& platform_node_id, const CScript& script_payout,
23+ const CScript& script_operator_payout, uint16_t version, MnType type) :
24+ proRegTxHash(proreg_tx_hash),
25+ confirmedHash(confirmed_hash),
26+ netInfo(net_info),
27+ pubKeyOperator(pubkey_operator),
28+ keyIDVoting(keyid_voting),
29+ isValid(is_valid),
30+ platformHTTPPort(platform_http_port),
31+ platformNodeID(platform_node_id),
32+ scriptPayout(script_payout),
33+ scriptOperatorPayout(script_operator_payout),
34+ nVersion(version),
35+ nType(type)
2936{
3037}
3138
@@ -57,24 +64,9 @@ std::string CSimplifiedMNListEntry::ToString() const
5764 operatorPayoutAddress, platformHTTPPort, platformNodeID.ToString (), netInfo->ToString ());
5865}
5966
60- CSimplifiedMNList::CSimplifiedMNList (const std::vector<CSimplifiedMNListEntry>& smlEntries)
67+ CSimplifiedMNList::CSimplifiedMNList (std::vector<std::unique_ptr< CSimplifiedMNListEntry>>& & smlEntries)
6168{
62- mnList.reserve (smlEntries.size ());
63- for (const auto & entry : smlEntries) {
64- mnList.emplace_back (std::make_unique<CSimplifiedMNListEntry>(entry));
65- }
66-
67- std::sort (mnList.begin (), mnList.end (), [&](const std::unique_ptr<CSimplifiedMNListEntry>& a, const std::unique_ptr<CSimplifiedMNListEntry>& b) {
68- return a->proRegTxHash .Compare (b->proRegTxHash ) < 0 ;
69- });
70- }
71-
72- CSimplifiedMNList::CSimplifiedMNList (const CDeterministicMNList& dmnList)
73- {
74- mnList.reserve (dmnList.GetAllMNsCount ());
75- dmnList.ForEachMN (false , [this ](auto & dmn) {
76- mnList.emplace_back (std::make_unique<CSimplifiedMNListEntry>(dmn));
77- });
69+ mnList = std::move (smlEntries);
7870
7971 std::sort (mnList.begin (), mnList.end (), [&](const std::unique_ptr<CSimplifiedMNListEntry>& a, const std::unique_ptr<CSimplifiedMNListEntry>& b) {
8072 return a->proRegTxHash .Compare (b->proRegTxHash ) < 0 ;
@@ -102,7 +94,8 @@ bool CSimplifiedMNList::operator==(const CSimplifiedMNList& rhs) const
10294 );
10395}
10496
105- bool CalcCbTxMerkleRootMNList (uint256& merkleRootRet, const CDeterministicMNList& mn_list, BlockValidationState& state)
97+ bool CalcCbTxMerkleRootMNList (uint256& merkleRootRet, std::shared_ptr<const CSimplifiedMNList> sml,
98+ BlockValidationState& state)
10699{
107100 try {
108101 static std::atomic<int64_t > nTimeMerkle = 0 ;
@@ -115,7 +108,6 @@ bool CalcCbTxMerkleRootMNList(uint256& merkleRootRet, const CDeterministicMNList
115108 static uint256 merkleRootCached GUARDED_BY (cached_mutex);
116109 static bool mutatedCached GUARDED_BY (cached_mutex){false };
117110
118- std::shared_ptr<const CSimplifiedMNList> sml{mn_list.GetSML ()};
119111 LOCK (cached_mutex);
120112 if (sml == cached_sml || *sml == *cached_sml) {
121113 merkleRootRet = merkleRootCached;
0 commit comments