Skip to content

Commit aaabc35

Browse files
committed
refactor: section off masternode service to MnNetInfo
1 parent 2c6dd05 commit aaabc35

23 files changed

+133
-94
lines changed

src/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ BITCOIN_CORE_H = \
192192
evo/evodb.h \
193193
evo/mnauth.h \
194194
evo/mnhftx.h \
195+
evo/netinfo.h \
195196
evo/providertx.h \
196197
evo/simplifiedmns.h \
197198
evo/specialtx.h \

src/coinjoin/client.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ void CCoinJoinClientSession::ProcessMessage(CNode& peer, CChainState& active_cha
186186
if (!m_mn_sync.IsBlockchainSynced()) return;
187187

188188
if (!mixingMasternode) return;
189-
if (mixingMasternode->pdmnState->addr != peer.addr) return;
189+
if (mixingMasternode->pdmnState->netInfo.m_addr != peer.addr) return;
190190

191191
if (msg_type == NetMsgType::DSSTATUSUPDATE) {
192192
CCoinJoinStatusUpdate psssup;
@@ -1106,7 +1106,7 @@ bool CCoinJoinClientSession::JoinExistingQueue(CAmount nBalanceNeedsAnonymized,
11061106

11071107
m_clientman.AddUsedMasternode(dsq.masternodeOutpoint);
11081108

1109-
if (connman.IsMasternodeOrDisconnectRequested(dmn->pdmnState->addr)) {
1109+
if (connman.IsMasternodeOrDisconnectRequested(dmn->pdmnState->netInfo.m_addr)) {
11101110
WalletCJLogPrint(m_wallet, /* Continued */
11111111
"CCoinJoinClientSession::JoinExistingQueue -- skipping connection, masternode=%s\n", dmn->proTxHash.ToString());
11121112
continue;
@@ -1178,7 +1178,7 @@ bool CCoinJoinClientSession::StartNewQueue(CAmount nBalanceNeedsAnonymized, CCon
11781178
continue;
11791179
}
11801180

1181-
if (connman.IsMasternodeOrDisconnectRequested(dmn->pdmnState->addr)) {
1181+
if (connman.IsMasternodeOrDisconnectRequested(dmn->pdmnState->netInfo.m_addr)) {
11821182
WalletCJLogPrint(m_wallet, "CCoinJoinClientSession::StartNewQueue -- skipping connection, masternode=%s\n",
11831183
dmn->proTxHash.ToString());
11841184
nTries++;
@@ -1218,7 +1218,7 @@ bool CCoinJoinClientSession::ProcessPendingDsaRequest(CConnman& connman)
12181218

12191219
CService mn_addr;
12201220
if (auto dmn = m_dmnman.GetListAtChainTip().GetMN(pendingDsaRequest.GetProTxHash())) {
1221-
mn_addr = Assert(dmn->pdmnState)->addr;
1221+
mn_addr = Assert(dmn->pdmnState)->netInfo.m_addr;
12221222
} else {
12231223
WalletCJLogPrint(m_wallet, "CCoinJoinClientSession::%s -- cannot find address to connect, masternode=%s\n", __func__,
12241224
pendingDsaRequest.GetProTxHash().ToString());
@@ -1820,7 +1820,7 @@ void CCoinJoinClientSession::RelayIn(const CCoinJoinEntry& entry, CConnman& conn
18201820
{
18211821
if (!mixingMasternode) return;
18221822

1823-
connman.ForNode(mixingMasternode->pdmnState->addr, [&entry, &connman, this](CNode* pnode) {
1823+
connman.ForNode(mixingMasternode->pdmnState->netInfo.m_addr, [&entry, &connman, this](CNode* pnode) {
18241824
WalletCJLogPrint(m_wallet, "CCoinJoinClientSession::RelayIn -- found master, relaying message to %s\n",
18251825
pnode->addr.ToStringAddrPort());
18261826
CNetMsgMaker msgMaker(pnode->GetCommonVersion());
@@ -1876,7 +1876,7 @@ void CCoinJoinClientSession::GetJsonInfo(UniValue& obj) const
18761876
assert(mixingMasternode->pdmnState);
18771877
obj.pushKV("protxhash", mixingMasternode->proTxHash.ToString());
18781878
obj.pushKV("outpoint", mixingMasternode->collateralOutpoint.ToStringShort());
1879-
obj.pushKV("service", mixingMasternode->pdmnState->addr.ToStringAddrPort());
1879+
obj.pushKV("service", mixingMasternode->pdmnState->netInfo.m_addr.ToStringAddrPort());
18801880
}
18811881
obj.pushKV("denomination", ValueFromAmount(CoinJoin::DenominationToAmount(nSessionDenom)));
18821882
obj.pushKV("state", GetStateString());

src/evo/core_write.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <evo/assetlocktx.h>
77
#include <evo/cbtx.h>
88
#include <evo/mnhftx.h>
9+
#include <evo/netinfo.h>
910
#include <evo/providertx.h>
1011
#include <llmq/commitment.h>
1112

@@ -66,7 +67,7 @@
6667
ret.pushKV("type", ToUnderlying(nType));
6768
ret.pushKV("collateralHash", collateralOutpoint.hash.ToString());
6869
ret.pushKV("collateralIndex", (int)collateralOutpoint.n);
69-
ret.pushKV("service", addr.ToStringAddrPort());
70+
ret.pushKV("service", netInfo.m_addr.ToStringAddrPort());
7071
ret.pushKV("ownerAddress", EncodeDestination(PKHash(keyIDOwner)));
7172
ret.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
7273
if (CTxDestination dest; ExtractDestination(scriptPayout, dest)) {
@@ -113,7 +114,7 @@
113114
ret.pushKV("version", nVersion);
114115
ret.pushKV("type", ToUnderlying(nType));
115116
ret.pushKV("proTxHash", proTxHash.ToString());
116-
ret.pushKV("service", addr.ToStringAddrPort());
117+
ret.pushKV("service", netInfo.m_addr.ToStringAddrPort());
117118
if (CTxDestination dest; ExtractDestination(scriptOperatorPayout, dest)) {
118119
ret.pushKV("operatorPayoutAddress", EncodeDestination(dest));
119120
}

src/evo/deterministicmns.cpp

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -470,10 +470,10 @@ void CDeterministicMNList::AddMN(const CDeterministicMNCPtr& dmn, bool fBumpTota
470470
throw(std::runtime_error(strprintf("%s: Can't add a masternode %s with a duplicate collateralOutpoint=%s", __func__,
471471
dmn->proTxHash.ToString(), dmn->collateralOutpoint.ToStringShort())));
472472
}
473-
if (dmn->pdmnState->addr != CService() && !AddUniqueProperty(*dmn, dmn->pdmnState->addr)) {
473+
if (dmn->pdmnState->netInfo.m_addr != CService() && !AddUniqueProperty(*dmn, dmn->pdmnState->netInfo)) {
474474
mnUniquePropertyMap = mnUniquePropertyMapSaved;
475475
throw(std::runtime_error(strprintf("%s: Can't add a masternode %s with a duplicate address=%s", __func__,
476-
dmn->proTxHash.ToString(), dmn->pdmnState->addr.ToStringAddrPort())));
476+
dmn->proTxHash.ToString(), dmn->pdmnState->netInfo.m_addr.ToStringAddrPort())));
477477
}
478478
if (!AddUniqueProperty(*dmn, dmn->pdmnState->keyIDOwner)) {
479479
mnUniquePropertyMap = mnUniquePropertyMapSaved;
@@ -511,10 +511,10 @@ void CDeterministicMNList::UpdateMN(const CDeterministicMN& oldDmn, const std::s
511511
// Using this temporary map as a checkpoint to roll back to in case of any issues.
512512
decltype(mnUniquePropertyMap) mnUniquePropertyMapSaved = mnUniquePropertyMap;
513513

514-
if (!UpdateUniqueProperty(*dmn, oldState->addr, pdmnState->addr)) {
514+
if (!UpdateUniqueProperty(*dmn, oldState->netInfo, pdmnState->netInfo)) {
515515
mnUniquePropertyMap = mnUniquePropertyMapSaved;
516516
throw(std::runtime_error(strprintf("%s: Can't update a masternode %s with a duplicate address=%s", __func__,
517-
oldDmn.proTxHash.ToString(), pdmnState->addr.ToStringAddrPort())));
517+
oldDmn.proTxHash.ToString(), pdmnState->netInfo.m_addr.ToStringAddrPort())));
518518
}
519519
if (!UpdateUniqueProperty(*dmn, oldState->keyIDOwner, pdmnState->keyIDOwner)) {
520520
mnUniquePropertyMap = mnUniquePropertyMapSaved;
@@ -571,10 +571,10 @@ void CDeterministicMNList::RemoveMN(const uint256& proTxHash)
571571
throw(std::runtime_error(strprintf("%s: Can't delete a masternode %s with a collateralOutpoint=%s", __func__,
572572
proTxHash.ToString(), dmn->collateralOutpoint.ToStringShort())));
573573
}
574-
if (dmn->pdmnState->addr != CService() && !DeleteUniqueProperty(*dmn, dmn->pdmnState->addr)) {
574+
if (dmn->pdmnState->netInfo.m_addr != CService() && !DeleteUniqueProperty(*dmn, dmn->pdmnState->netInfo)) {
575575
mnUniquePropertyMap = mnUniquePropertyMapSaved;
576576
throw(std::runtime_error(strprintf("%s: Can't delete a masternode %s with a address=%s", __func__,
577-
proTxHash.ToString(), dmn->pdmnState->addr.ToStringAddrPort())));
577+
proTxHash.ToString(), dmn->pdmnState->netInfo.m_addr.ToStringAddrPort())));
578578
}
579579
if (!DeleteUniqueProperty(*dmn, dmn->pdmnState->keyIDOwner)) {
580580
mnUniquePropertyMap = mnUniquePropertyMapSaved;
@@ -789,7 +789,7 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
789789
}
790790
}
791791

792-
if (newList.HasUniqueProperty(proTx.addr)) {
792+
if (newList.HasUniqueProperty(proTx.netInfo)) {
793793
return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-protx-dup-addr");
794794
}
795795
if (newList.HasUniqueProperty(proTx.keyIDOwner) || newList.HasUniqueProperty(proTx.pubKeyOperator)) {
@@ -800,7 +800,7 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
800800

801801
auto dmnState = std::make_shared<CDeterministicMNState>(proTx);
802802
dmnState->nRegisteredHeight = nHeight;
803-
if (proTx.addr == CService()) {
803+
if (proTx.netInfo.m_addr == CService()) {
804804
// start in banned pdmnState as we need to wait for a ProUpServTx
805805
dmnState->BanIfNotBanned(nHeight);
806806
}
@@ -818,7 +818,8 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
818818
return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-protx-payload");
819819
}
820820

821-
if (newList.HasUniqueProperty(opt_proTx->addr) && newList.GetUniquePropertyMN(opt_proTx->addr)->proTxHash != opt_proTx->proTxHash) {
821+
if (newList.HasUniqueProperty(opt_proTx->netInfo) &&
822+
newList.GetUniquePropertyMN(opt_proTx->netInfo)->proTxHash != opt_proTx->proTxHash) {
822823
return state.Invalid(BlockValidationResult::BLOCK_CONSENSUS, "bad-protx-dup-addr");
823824
}
824825

@@ -834,7 +835,7 @@ bool CDeterministicMNManager::BuildNewListFromBlock(const CBlock& block, gsl::no
834835
}
835836

836837
auto newState = std::make_shared<CDeterministicMNState>(*dmn->pdmnState);
837-
newState->addr = opt_proTx->addr;
838+
newState->netInfo = opt_proTx->netInfo;
838839
newState->scriptOperatorPayout = opt_proTx->scriptOperatorPayout;
839840
if (opt_proTx->nType == MnType::Evo) {
840841
newState->platformNodeID = opt_proTx->platformNodeID;
@@ -1177,24 +1178,25 @@ void CDeterministicMNManager::CleanupCache(int nHeight)
11771178
template <typename ProTx>
11781179
static bool CheckService(const ProTx& proTx, TxValidationState& state)
11791180
{
1180-
if (!proTx.addr.IsValid()) {
1181+
const auto& addr{proTx.netInfo.m_addr};
1182+
if (!addr.IsValid()) {
11811183
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-ipaddr");
11821184
}
1183-
if (Params().RequireRoutableExternalIP() && !proTx.addr.IsRoutable()) {
1185+
if (Params().RequireRoutableExternalIP() && !addr.IsRoutable()) {
11841186
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-ipaddr");
11851187
}
11861188

11871189
// TODO: use real args here
11881190
static int mainnetDefaultPort = CreateChainParams(ArgsManager{}, CBaseChainParams::MAIN)->GetDefaultPort();
11891191
if (Params().NetworkIDString() == CBaseChainParams::MAIN) {
1190-
if (proTx.addr.GetPort() != mainnetDefaultPort) {
1192+
if (addr.GetPort() != mainnetDefaultPort) {
11911193
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-ipaddr-port");
11921194
}
1193-
} else if (proTx.addr.GetPort() == mainnetDefaultPort) {
1195+
} else if (addr.GetPort() == mainnetDefaultPort) {
11941196
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-ipaddr-port");
11951197
}
11961198

1197-
if (!proTx.addr.IsIPv4()) {
1199+
if (!addr.IsIPv4()) {
11981200
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-ipaddr");
11991201
}
12001202

@@ -1233,9 +1235,8 @@ static bool CheckPlatformFields(const ProTx& proTx, TxValidationState& state)
12331235
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-platform-http-port");
12341236
}
12351237

1236-
if (proTx.platformP2PPort == proTx.platformHTTPPort ||
1237-
proTx.platformP2PPort == proTx.addr.GetPort() ||
1238-
proTx.platformHTTPPort == proTx.addr.GetPort()) {
1238+
if (proTx.platformP2PPort == proTx.platformHTTPPort || proTx.platformP2PPort == proTx.netInfo.m_addr.GetPort() ||
1239+
proTx.platformHTTPPort == proTx.netInfo.m_addr.GetPort()) {
12391240
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-platform-dup-ports");
12401241
}
12411242

@@ -1300,7 +1301,7 @@ bool CheckProRegTx(CDeterministicMNManager& dmnman, const CTransaction& tx, gsl:
13001301

13011302
// It's allowed to set addr to 0, which will put the MN into PoSe-banned state and require a ProUpServTx to be issues later
13021303
// If any of both is set, it must be valid however
1303-
if (opt_ptx->addr != CService() && !CheckService(*opt_ptx, state)) {
1304+
if (opt_ptx->netInfo.m_addr != CService() && !CheckService(*opt_ptx, state)) {
13041305
// pass the state returned by the function above
13051306
return false;
13061307
}
@@ -1360,7 +1361,8 @@ bool CheckProRegTx(CDeterministicMNManager& dmnman, const CTransaction& tx, gsl:
13601361
auto mnList = dmnman.GetListForBlock(pindexPrev);
13611362

13621363
// only allow reusing of addresses when it's for the same collateral (which replaces the old MN)
1363-
if (mnList.HasUniqueProperty(opt_ptx->addr) && mnList.GetUniquePropertyMN(opt_ptx->addr)->collateralOutpoint != collateralOutpoint) {
1364+
if (mnList.HasUniqueProperty(opt_ptx->netInfo) &&
1365+
mnList.GetUniquePropertyMN(opt_ptx->netInfo)->collateralOutpoint != collateralOutpoint) {
13641366
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-dup-addr");
13651367
}
13661368

@@ -1430,7 +1432,8 @@ bool CheckProUpServTx(CDeterministicMNManager& dmnman, const CTransaction& tx, g
14301432
}
14311433

14321434
// don't allow updating to addresses already used by other MNs
1433-
if (mnList.HasUniqueProperty(opt_ptx->addr) && mnList.GetUniquePropertyMN(opt_ptx->addr)->proTxHash != opt_ptx->proTxHash) {
1435+
if (mnList.HasUniqueProperty(opt_ptx->netInfo) &&
1436+
mnList.GetUniquePropertyMN(opt_ptx->netInfo)->proTxHash != opt_ptx->proTxHash) {
14341437
return state.Invalid(TxValidationResult::TX_BAD_SPECIAL, "bad-protx-dup-addr");
14351438
}
14361439

src/evo/dmnstate.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@ std::string CDeterministicMNState::ToString() const
3131
"operatorPayoutAddress=%s)",
3232
nVersion, nRegisteredHeight, nLastPaidHeight, nPoSePenalty, nPoSeRevivedHeight, nPoSeBanHeight,
3333
nRevocationReason, EncodeDestination(PKHash(keyIDOwner)), pubKeyOperator.ToString(),
34-
EncodeDestination(PKHash(keyIDVoting)), addr.ToStringAddrPort(), payoutAddress,
34+
EncodeDestination(PKHash(keyIDVoting)), netInfo.m_addr.ToStringAddrPort(), payoutAddress,
3535
operatorPayoutAddress);
3636
}
3737

3838
UniValue CDeterministicMNState::ToJson(MnType nType) const
3939
{
4040
UniValue obj(UniValue::VOBJ);
4141
obj.pushKV("version", nVersion);
42-
obj.pushKV("service", addr.ToStringAddrPort());
42+
obj.pushKV("service", netInfo.m_addr.ToStringAddrPort());
4343
obj.pushKV("registeredHeight", nRegisteredHeight);
4444
obj.pushKV("lastPaidHeight", nLastPaidHeight);
4545
obj.pushKV("consecutivePayments", nConsecutivePayments);
@@ -72,8 +72,8 @@ UniValue CDeterministicMNStateDiff::ToJson(MnType nType) const
7272
if (fields & Field_nVersion) {
7373
obj.pushKV("version", state.nVersion);
7474
}
75-
if (fields & Field_addr) {
76-
obj.pushKV("service", state.addr.ToStringAddrPort());
75+
if (fields & Field_netInfo) {
76+
obj.pushKV("service", state.netInfo.m_addr.ToStringAddrPort());
7777
}
7878
if (fields & Field_nRegisteredHeight) {
7979
obj.pushKV("registeredHeight", state.nRegisteredHeight);

src/evo/dmnstate.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class CDeterministicMNState
5454
CKeyID keyIDOwner;
5555
CBLSLazyPublicKey pubKeyOperator;
5656
CKeyID keyIDVoting;
57-
CService addr;
57+
MnNetInfo netInfo;
5858
CScript scriptPayout;
5959
CScript scriptOperatorPayout;
6060

@@ -69,7 +69,7 @@ class CDeterministicMNState
6969
keyIDOwner(proTx.keyIDOwner),
7070
pubKeyOperator(proTx.pubKeyOperator),
7171
keyIDVoting(proTx.keyIDVoting),
72-
addr(proTx.addr),
72+
netInfo(proTx.netInfo),
7373
scriptPayout(proTx.scriptPayout),
7474
platformNodeID(proTx.platformNodeID),
7575
platformP2PPort(proTx.platformP2PPort),
@@ -100,7 +100,7 @@ class CDeterministicMNState
100100
READWRITE(CBLSLazyPublicKeyVersionWrapper(const_cast<CBLSLazyPublicKey&>(obj.pubKeyOperator), obj.nVersion == ProTxVersion::LegacyBLS));
101101
READWRITE(
102102
obj.keyIDVoting,
103-
obj.addr,
103+
obj.netInfo,
104104
obj.scriptPayout,
105105
obj.scriptOperatorPayout,
106106
obj.platformNodeID,
@@ -112,7 +112,7 @@ class CDeterministicMNState
112112
{
113113
nVersion = ProTxVersion::LegacyBLS;
114114
pubKeyOperator = CBLSLazyPublicKey();
115-
addr = CService();
115+
netInfo.m_addr = CService();
116116
scriptOperatorPayout = CScript();
117117
nRevocationReason = CProUpRevTx::REASON_NOT_SPECIFIED;
118118
platformNodeID = uint160();
@@ -166,7 +166,7 @@ class CDeterministicMNStateDiff
166166
Field_keyIDOwner = 0x0100,
167167
Field_pubKeyOperator = 0x0200,
168168
Field_keyIDVoting = 0x0400,
169-
Field_addr = 0x0800,
169+
Field_netInfo = 0x0800,
170170
Field_scriptPayout = 0x1000,
171171
Field_scriptOperatorPayout = 0x2000,
172172
Field_nConsecutivePayments = 0x4000,
@@ -198,7 +198,7 @@ class CDeterministicMNStateDiff
198198
DMN_STATE_MEMBER(keyIDOwner),
199199
DMN_STATE_MEMBER(pubKeyOperator),
200200
DMN_STATE_MEMBER(keyIDVoting),
201-
DMN_STATE_MEMBER(addr),
201+
DMN_STATE_MEMBER(netInfo),
202202
DMN_STATE_MEMBER(scriptPayout),
203203
DMN_STATE_MEMBER(scriptOperatorPayout),
204204
DMN_STATE_MEMBER(nConsecutivePayments),

src/evo/netinfo.h

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) 2025 The Dash Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#ifndef BITCOIN_EVO_NETINFO_H
6+
#define BITCOIN_EVO_NETINFO_H
7+
8+
#include <netaddress.h>
9+
#include <serialize.h>
10+
11+
class CService;
12+
13+
class MnNetInfo
14+
{
15+
public:
16+
CService m_addr{};
17+
18+
public:
19+
MnNetInfo() = default;
20+
~MnNetInfo() = default;
21+
22+
bool operator==(const MnNetInfo& rhs) const { return m_addr == rhs.m_addr; }
23+
bool operator!=(const MnNetInfo& rhs) const { return !(*this == rhs); }
24+
25+
SERIALIZE_METHODS(MnNetInfo, obj)
26+
{
27+
READWRITE(obj.m_addr);
28+
}
29+
};
30+
31+
#endif // BITCOIN_EVO_NETINFO_H

src/evo/providertx.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ std::string CProRegTx::ToString() const
9090
return strprintf("CProRegTx(nVersion=%d, nType=%d, collateralOutpoint=%s, addr=%s, nOperatorReward=%f, "
9191
"ownerAddress=%s, pubKeyOperator=%s, votingAddress=%s, scriptPayout=%s, platformNodeID=%s, "
9292
"platformP2PPort=%d, platformHTTPPort=%d)",
93-
nVersion, ToUnderlying(nType), collateralOutpoint.ToStringShort(), addr.ToStringAddrPort(),
93+
nVersion, ToUnderlying(nType), collateralOutpoint.ToStringShort(), netInfo.m_addr.ToStringAddrPort(),
9494
(double)nOperatorReward / 100, EncodeDestination(PKHash(keyIDOwner)), pubKeyOperator.ToString(),
9595
EncodeDestination(PKHash(keyIDVoting)), payee, platformNodeID.ToString(), platformP2PPort,
9696
platformHTTPPort);
@@ -118,7 +118,7 @@ std::string CProUpServTx::ToString() const
118118

119119
return strprintf("CProUpServTx(nVersion=%d, nType=%d, proTxHash=%s, addr=%s, operatorPayoutAddress=%s, "
120120
"platformNodeID=%s, platformP2PPort=%d, platformHTTPPort=%d)",
121-
nVersion, ToUnderlying(nType), proTxHash.ToString(), addr.ToStringAddrPort(), payee,
121+
nVersion, ToUnderlying(nType), proTxHash.ToString(), netInfo.m_addr.ToStringAddrPort(), payee,
122122
platformNodeID.ToString(), platformP2PPort, platformHTTPPort);
123123
}
124124

0 commit comments

Comments
 (0)