Skip to content

Commit c7948e6

Browse files
committed
evo: allow deciding NetInfoInterface impl based on object version
1 parent 22d9e93 commit c7948e6

File tree

10 files changed

+25
-7
lines changed

10 files changed

+25
-7
lines changed

src/evo/deterministicmns.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,7 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
732732
newList.DecreaseScores();
733733

734734
const bool isMNRewardReallocation{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_MN_RR)};
735+
const bool is_v23_deployed{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_V23)};
735736

736737
// we skip the coinbase
737738
for (int i = 1; i < (int)block.vtx.size(); i++) {
@@ -839,6 +840,10 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
839840
}
840841

841842
auto newState = std::make_shared<CDeterministicMNState>(*dmn->pdmnState);
843+
if (is_v23_deployed) {
844+
// Extended addresses support in v23 means that the version can be updated
845+
newState->nVersion = opt_proTx->nVersion;
846+
}
842847
newState->netInfo = opt_proTx->netInfo;
843848
newState->scriptOperatorPayout = opt_proTx->scriptOperatorPayout;
844849
if (opt_proTx->nType == MnType::Evo) {
@@ -880,6 +885,7 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
880885
newState->BanIfNotBanned(nHeight);
881886
// we update pubKeyOperator here, make sure state version matches
882887
newState->nVersion = opt_proTx->nVersion;
888+
newState->netInfo = NetInfoInterface::MakeNetInfo(newState->nVersion);
883889
newState->pubKeyOperator = opt_proTx->pubKeyOperator;
884890
}
885891
newState->keyIDVoting = opt_proTx->keyIDVoting;

src/evo/dmnstate.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class CDeterministicMNState
5555
CKeyID keyIDOwner;
5656
CBLSLazyPublicKey pubKeyOperator;
5757
CKeyID keyIDVoting;
58-
std::shared_ptr<NetInfoInterface> netInfo{NetInfoInterface::MakeNetInfo()};
58+
std::shared_ptr<NetInfoInterface> netInfo{nullptr};
5959
CScript scriptPayout;
6060
CScript scriptOperatorPayout;
6161

@@ -109,7 +109,7 @@ class CDeterministicMNState
109109
{
110110
nVersion = ProTxVersion::LegacyBLS;
111111
pubKeyOperator = CBLSLazyPublicKey();
112-
netInfo = NetInfoInterface::MakeNetInfo();
112+
netInfo = NetInfoInterface::MakeNetInfo(nVersion);
113113
scriptOperatorPayout = CScript();
114114
nRevocationReason = CProUpRevTx::REASON_NOT_SPECIFIED;
115115
platformNodeID = uint160();

src/evo/netinfo.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,9 @@ std::string NetInfoEntry::ToStringAddrPort() const
147147
m_data);
148148
}
149149

150-
std::shared_ptr<NetInfoInterface> NetInfoInterface::MakeNetInfo()
150+
std::shared_ptr<NetInfoInterface> NetInfoInterface::MakeNetInfo(const uint16_t nVersion)
151151
{
152+
assert(nVersion > 0);
152153
return std::make_shared<MnNetInfo>();
153154
}
154155

src/evo/netinfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ using NetInfoList = std::vector<std::reference_wrapper<const NetInfoEntry>>;
129129
class NetInfoInterface
130130
{
131131
public:
132-
static std::shared_ptr<NetInfoInterface> MakeNetInfo();
132+
static std::shared_ptr<NetInfoInterface> MakeNetInfo(const uint16_t nVersion);
133133

134134
public:
135135
virtual ~NetInfoInterface() = default;

src/evo/providertx.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class CProRegTx
4141
MnType nType{MnType::Regular};
4242
uint16_t nMode{0}; // only 0 supported for now
4343
COutPoint collateralOutpoint{uint256(), (uint32_t)-1}; // if hash is null, we refer to a ProRegTx output
44-
std::shared_ptr<NetInfoInterface> netInfo{NetInfoInterface::MakeNetInfo()};
44+
std::shared_ptr<NetInfoInterface> netInfo{nullptr};
4545
uint160 platformNodeID{};
4646
uint16_t platformP2PPort{0};
4747
uint16_t platformHTTPPort{0};
@@ -110,7 +110,7 @@ class CProUpServTx
110110
uint16_t nVersion{ProTxVersion::LegacyBLS}; // message version
111111
MnType nType{MnType::Regular};
112112
uint256 proTxHash;
113-
std::shared_ptr<NetInfoInterface> netInfo{NetInfoInterface::MakeNetInfo()};
113+
std::shared_ptr<NetInfoInterface> netInfo{nullptr};
114114
uint160 platformNodeID{};
115115
uint16_t platformP2PPort{0};
116116
uint16_t platformHTTPPort{0};

src/evo/simplifiedmns.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CSimplifiedMNListEntry
3636
public:
3737
uint256 proRegTxHash;
3838
uint256 confirmedHash;
39-
std::shared_ptr<NetInfoInterface> netInfo{NetInfoInterface::MakeNetInfo()};
39+
std::shared_ptr<NetInfoInterface> netInfo{nullptr};
4040
CBLSLazyPublicKey pubKeyOperator;
4141
CKeyID keyIDVoting;
4242
bool isValid{false};

src/rpc/evo.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,7 @@ static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
687687
CProRegTx ptx;
688688
ptx.nType = mnType;
689689
ptx.nVersion = CProRegTx::GetMaxVersion(/*is_basic_scheme_active=*/!use_legacy);
690+
ptx.netInfo = NetInfoInterface::MakeNetInfo(ptx.nVersion);
690691

691692
if (action == ProTxRegisterAction::Fund) {
692693
CTxDestination collateralDest = DecodeDestination(request.params[paramIdx].get_str());
@@ -1013,6 +1014,7 @@ static UniValue protx_update_service_common_wrapper(const JSONRPCRequest& reques
10131014
}
10141015

10151016
ptx.nVersion = dmn->pdmnState->nVersion;
1017+
ptx.netInfo = NetInfoInterface::MakeNetInfo(ptx.nVersion);
10161018

10171019
if (auto entryRet = ptx.netInfo->AddEntry(request.params[1].get_str()); entryRet != NetInfoStatus::Success) {
10181020
throw std::runtime_error(strprintf("%s (%s)", NISToString(entryRet), request.params[1].get_str()));

src/test/block_reward_reallocation_tests.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ static CMutableTransaction CreateProRegTx(const CChain& active_chain, const CTxM
119119

120120
CProRegTx proTx;
121121
proTx.nVersion = CProRegTx::GetMaxVersion(!bls::bls_legacy_scheme);
122+
proTx.netInfo = NetInfoInterface::MakeNetInfo(proTx.nVersion);
122123
proTx.collateralOutpoint.n = 0;
123124
BOOST_CHECK_EQUAL(proTx.netInfo->AddEntry(strprintf("1.1.1.1:%d", port)), NetInfoStatus::Success);
124125
proTx.keyIDOwner = ownerKeyRet.GetPubKey().GetID();

src/test/evo_deterministicmns_tests.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ static CMutableTransaction CreateProRegTx(const CChain& active_chain, const CTxM
107107

108108
CProRegTx proTx;
109109
proTx.nVersion = CProRegTx::GetMaxVersion(!bls::bls_legacy_scheme);
110+
proTx.netInfo = NetInfoInterface::MakeNetInfo(proTx.nVersion);
110111
proTx.collateralOutpoint.n = 0;
111112
BOOST_CHECK_EQUAL(proTx.netInfo->AddEntry(strprintf("1.1.1.1:%d", port)), NetInfoStatus::Success);
112113
proTx.keyIDOwner = ownerKeyRet.GetPubKey().GetID();
@@ -129,6 +130,7 @@ static CMutableTransaction CreateProUpServTx(const CChain& active_chain, const C
129130
{
130131
CProUpServTx proTx;
131132
proTx.nVersion = CProUpServTx::GetMaxVersion(!bls::bls_legacy_scheme);
133+
proTx.netInfo = NetInfoInterface::MakeNetInfo(proTx.nVersion);
132134
proTx.proTxHash = proTxHash;
133135
BOOST_CHECK_EQUAL(proTx.netInfo->AddEntry(strprintf("1.1.1.1:%d", port)), NetInfoStatus::Success);
134136
proTx.scriptOperatorPayout = scriptOperatorPayout;
@@ -639,6 +641,7 @@ void FuncTestMempoolReorg(TestChainSetup& setup)
639641

640642
CProRegTx payload;
641643
payload.nVersion = CProRegTx::GetMaxVersion(!bls::bls_legacy_scheme);
644+
payload.netInfo = NetInfoInterface::MakeNetInfo(payload.nVersion);
642645
BOOST_CHECK_EQUAL(payload.netInfo->AddEntry("1.1.1.1:1"), NetInfoStatus::Success);
643646
payload.keyIDOwner = ownerKey.GetPubKey().GetID();
644647
payload.pubKeyOperator.Set(operatorKey.GetPublicKey(), bls::bls_legacy_scheme.load());
@@ -713,6 +716,8 @@ void FuncTestMempoolDualProregtx(TestChainSetup& setup)
713716
auto scriptPayout = GetScriptForDestination(PKHash(payoutKey.GetPubKey()));
714717

715718
CProRegTx payload;
719+
payload.nVersion = CProRegTx::GetMaxVersion(!bls::bls_legacy_scheme);
720+
payload.netInfo = NetInfoInterface::MakeNetInfo(payload.nVersion);
716721
BOOST_CHECK_EQUAL(payload.netInfo->AddEntry("1.1.1.1:2"), NetInfoStatus::Success);
717722
payload.keyIDOwner = ownerKey.GetPubKey().GetID();
718723
payload.pubKeyOperator.Set(operatorKey.GetPublicKey(), bls::bls_legacy_scheme.load());
@@ -781,6 +786,7 @@ void FuncVerifyDB(TestChainSetup& setup)
781786

782787
CProRegTx payload;
783788
payload.nVersion = CProRegTx::GetMaxVersion(!bls::bls_legacy_scheme);
789+
payload.netInfo = NetInfoInterface::MakeNetInfo(payload.nVersion);
784790
BOOST_CHECK_EQUAL(payload.netInfo->AddEntry("1.1.1.1:1"), NetInfoStatus::Success);
785791
payload.keyIDOwner = ownerKey.GetPubKey().GetID();
786792
payload.pubKeyOperator.Set(operatorKey.GetPublicKey(), bls::bls_legacy_scheme.load());

src/test/evo_simplifiedmns_tests.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ BOOST_AUTO_TEST_CASE(simplifiedmns_merkleroots)
1919
std::vector<CSimplifiedMNListEntry> entries;
2020
for (size_t i = 1; i < 16; i++) {
2121
CSimplifiedMNListEntry smle;
22+
smle.nVersion = CProRegTx::GetMaxVersion(!bls::bls_legacy_scheme);
23+
smle.netInfo = NetInfoInterface::MakeNetInfo(smle.nVersion);
2224
smle.proRegTxHash.SetHex(strprintf("%064x", i));
2325
smle.confirmedHash.SetHex(strprintf("%064x", i));
2426

0 commit comments

Comments
 (0)