44
55#include < evo/simplifiedmns.h>
66
7+ #include < clientversion.h>
78#include < consensus/merkle.h>
8- #include < evo/deterministicmns.h>
99#include < evo/netinfo.h>
1010#include < key_io.h>
1111#include < logging.h>
1212#include < pubkey.h>
1313#include < serialize.h>
14+ #include < sync.h>
1415#include < univalue.h>
16+ #include < util/time.h>
1517#include < util/underlying.h>
1618#include < version.h>
1719
18- CSimplifiedMNListEntry::CSimplifiedMNListEntry (const CDeterministicMN& dmn) :
19- proRegTxHash(dmn.proTxHash),
20- confirmedHash(dmn.pdmnState->confirmedHash),
21- netInfo(dmn.pdmnState->netInfo),
22- pubKeyOperator(dmn.pdmnState->pubKeyOperator),
23- keyIDVoting(dmn.pdmnState->keyIDVoting),
24- isValid(!dmn.pdmnState->IsBanned ()),
25- platformHTTPPort(dmn.pdmnState->platformHTTPPort),
26- platformNodeID(dmn.pdmnState->platformNodeID),
27- scriptPayout(dmn.pdmnState->scriptPayout),
28- scriptOperatorPayout(dmn.pdmnState->scriptOperatorPayout),
29- nVersion(dmn.pdmnState->nVersion),
30- nType(dmn.nType)
20+ CSimplifiedMNListEntry::CSimplifiedMNListEntry (const uint256& proreg_tx_hash, const uint256& confirmed_hash,
21+ const std::shared_ptr<NetInfoInterface>& net_info,
22+ const CBLSLazyPublicKey& pubkey_operator, const CKeyID& keyid_voting,
23+ bool is_valid, uint16_t platform_http_port,
24+ const uint160& platform_node_id, const CScript& script_payout,
25+ const CScript& script_operator_payout, uint16_t version, MnType type) :
26+ proRegTxHash(proreg_tx_hash),
27+ confirmedHash(confirmed_hash),
28+ netInfo(net_info),
29+ pubKeyOperator(pubkey_operator),
30+ keyIDVoting(keyid_voting),
31+ isValid(is_valid),
32+ platformHTTPPort(platform_http_port),
33+ platformNodeID(platform_node_id),
34+ scriptPayout(script_payout),
35+ scriptOperatorPayout(script_operator_payout),
36+ nVersion(version),
37+ nType(type)
3138{
3239}
3340
@@ -59,24 +66,9 @@ std::string CSimplifiedMNListEntry::ToString() const
5966 operatorPayoutAddress, platformHTTPPort, platformNodeID.ToString (), netInfo->ToString ());
6067}
6168
62- CSimplifiedMNList::CSimplifiedMNList (const std::vector<CSimplifiedMNListEntry>& smlEntries)
69+ CSimplifiedMNList::CSimplifiedMNList (std::vector<std::unique_ptr< CSimplifiedMNListEntry>>& & smlEntries)
6370{
64- mnList.reserve (smlEntries.size ());
65- for (const auto & entry : smlEntries) {
66- mnList.emplace_back (std::make_unique<CSimplifiedMNListEntry>(entry));
67- }
68-
69- std::sort (mnList.begin (), mnList.end (), [&](const std::unique_ptr<CSimplifiedMNListEntry>& a, const std::unique_ptr<CSimplifiedMNListEntry>& b) {
70- return a->proRegTxHash .Compare (b->proRegTxHash ) < 0 ;
71- });
72- }
73-
74- CSimplifiedMNList::CSimplifiedMNList (const CDeterministicMNList& dmnList)
75- {
76- mnList.reserve (dmnList.GetAllMNsCount ());
77- dmnList.ForEachMN (false , [this ](auto & dmn) {
78- mnList.emplace_back (std::make_unique<CSimplifiedMNListEntry>(dmn));
79- });
71+ mnList = std::move (smlEntries);
8072
8173 std::sort (mnList.begin (), mnList.end (), [&](const std::unique_ptr<CSimplifiedMNListEntry>& a, const std::unique_ptr<CSimplifiedMNListEntry>& b) {
8274 return a->proRegTxHash .Compare (b->proRegTxHash ) < 0 ;
@@ -104,7 +96,8 @@ bool CSimplifiedMNList::operator==(const CSimplifiedMNList& rhs) const
10496 );
10597}
10698
107- bool CalcCbTxMerkleRootMNList (uint256& merkleRootRet, const CDeterministicMNList& mn_list, BlockValidationState& state)
99+ bool CalcCbTxMerkleRootMNList (uint256& merkleRootRet, std::shared_ptr<const CSimplifiedMNList> sml,
100+ BlockValidationState& state)
108101{
109102 try {
110103 static std::atomic<int64_t > nTimeMerkle = 0 ;
@@ -117,7 +110,6 @@ bool CalcCbTxMerkleRootMNList(uint256& merkleRootRet, const CDeterministicMNList
117110 static uint256 merkleRootCached GUARDED_BY (cached_mutex);
118111 static bool mutatedCached GUARDED_BY (cached_mutex){false };
119112
120- std::shared_ptr<const CSimplifiedMNList> sml{mn_list.GetSML ()};
121113 LOCK (cached_mutex);
122114 if (sml == cached_sml || *sml == *cached_sml) {
123115 merkleRootRet = merkleRootCached;
0 commit comments