Skip to content

Commit d9247ad

Browse files
committed
rpc: add new key "addresses" to allow reporting multiple entries
1 parent 33e5f6a commit d9247ad

File tree

12 files changed

+36
-4
lines changed

12 files changed

+36
-4
lines changed

contrib/seeds/makeseeds.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def main():
164164
mns = filtermulticollateraladdress(mns)
165165
mns = filtermultipayoutaddress(mns)
166166
# Extract IPs
167-
ips = [parseip(mn['state']['service']) for mn in mns]
167+
ips = [parseip(mn['state']['addresses'][0]) for mn in mns]
168168
for onion in onions:
169169
parsed = parseip(onion)
170170
if parsed is not None:

src/coinjoin/client.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,7 @@ void CCoinJoinClientSession::GetJsonInfo(UniValue& obj) const
18841884
obj.pushKV("protxhash", mixingMasternode->proTxHash.ToString());
18851885
obj.pushKV("outpoint", mixingMasternode->collateralOutpoint.ToStringShort());
18861886
obj.pushKV("service", mixingMasternode->pdmnState->netInfo->GetPrimary().ToStringAddrPort());
1887+
obj.pushKV("addresses", mixingMasternode->pdmnState->netInfo->ToJson());
18871888
}
18881889
obj.pushKV("denomination", ValueFromAmount(CoinJoin::DenominationToAmount(nSessionDenom)));
18891890
obj.pushKV("state", GetStateString());

src/evo/core_write.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
ret.pushKV("collateralHash", collateralOutpoint.hash.ToString());
6969
ret.pushKV("collateralIndex", (int)collateralOutpoint.n);
7070
ret.pushKV("service", netInfo->GetPrimary().ToStringAddrPort());
71+
ret.pushKV("addresses", netInfo->ToJson());
7172
ret.pushKV("ownerAddress", EncodeDestination(PKHash(keyIDOwner)));
7273
ret.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
7374
if (CTxDestination dest; ExtractDestination(scriptPayout, dest)) {
@@ -115,6 +116,7 @@
115116
ret.pushKV("type", ToUnderlying(nType));
116117
ret.pushKV("proTxHash", proTxHash.ToString());
117118
ret.pushKV("service", netInfo->GetPrimary().ToStringAddrPort());
119+
ret.pushKV("addresses", netInfo->ToJson());
118120
if (CTxDestination dest; ExtractDestination(scriptOperatorPayout, dest)) {
119121
ret.pushKV("operatorPayoutAddress", EncodeDestination(dest));
120122
}

src/evo/dmnstate.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ UniValue CDeterministicMNState::ToJson(MnType nType) const
3939
UniValue obj(UniValue::VOBJ);
4040
obj.pushKV("version", nVersion);
4141
obj.pushKV("service", netInfo->GetPrimary().ToStringAddrPort());
42+
obj.pushKV("addresses", netInfo->ToJson());
4243
obj.pushKV("registeredHeight", nRegisteredHeight);
4344
obj.pushKV("lastPaidHeight", nLastPaidHeight);
4445
obj.pushKV("consecutivePayments", nConsecutivePayments);
@@ -73,6 +74,7 @@ UniValue CDeterministicMNStateDiff::ToJson(MnType nType) const
7374
}
7475
if (fields & Field_netInfo) {
7576
obj.pushKV("service", state.netInfo->GetPrimary().ToStringAddrPort());
77+
obj.pushKV("addresses", state.netInfo->ToJson());
7678
}
7779
if (fields & Field_nRegisteredHeight) {
7880
obj.pushKV("registeredHeight", state.nRegisteredHeight);

src/evo/netinfo.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include <util/check.h>
1212
#include <util/system.h>
1313

14+
#include <univalue.h>
15+
1416
namespace {
1517
static std::unique_ptr<const CChainParams> g_main_params{nullptr};
1618
static std::once_flag g_main_params_flag;
@@ -33,6 +35,13 @@ bool MatchCharsFilter(std::string_view input, std::string_view filter)
3335
}
3436
} // anonymous namespace
3537

38+
UniValue ArrFromService(const CService& addr)
39+
{
40+
UniValue obj(UniValue::VARR);
41+
obj.push_back(addr.ToStringAddrPort());
42+
return obj;
43+
}
44+
3645
bool NetInfoEntry::operator==(const NetInfoEntry& rhs) const
3746
{
3847
if (m_type != rhs.m_type) return false;
@@ -227,6 +236,11 @@ NetInfoStatus MnNetInfo::Validate() const
227236
return ValidateService(GetPrimary());
228237
}
229238

239+
UniValue MnNetInfo::ToJson() const
240+
{
241+
return ArrFromService(GetPrimary());
242+
}
243+
230244
std::string MnNetInfo::ToString() const
231245
{
232246
// Extra padding to account for padding done by the calling function.

src/evo/netinfo.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
class CService;
1515

16+
class UniValue;
17+
1618
enum class NetInfoStatus : uint8_t {
1719
// Managing entries
1820
BadInput,
@@ -141,6 +143,7 @@ class NetInfoInterface
141143
virtual bool CanStorePlatform() const = 0;
142144
virtual bool IsEmpty() const = 0;
143145
virtual NetInfoStatus Validate() const = 0;
146+
virtual UniValue ToJson() const = 0;
144147
virtual std::string ToString() const = 0;
145148

146149
virtual void Clear() = 0;
@@ -197,6 +200,7 @@ class MnNetInfo final : public NetInfoInterface
197200
bool IsEmpty() const override { return m_addr.IsEmpty(); }
198201
bool CanStorePlatform() const override { return false; }
199202
NetInfoStatus Validate() const override;
203+
UniValue ToJson() const override;
200204
std::string ToString() const override;
201205

202206
void Clear() override { m_addr.Clear(); }

src/evo/simplifiedmns.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ UniValue CSimplifiedMNListEntry::ToJson(bool extended) const
8181
obj.pushKV("proRegTxHash", proRegTxHash.ToString());
8282
obj.pushKV("confirmedHash", confirmedHash.ToString());
8383
obj.pushKV("service", netInfo->GetPrimary().ToStringAddrPort());
84+
obj.pushKV("addresses", netInfo->ToJson());
8485
obj.pushKV("pubKeyOperator", pubKeyOperator.ToString());
8586
obj.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
8687
obj.pushKV("isValid", isValid);

src/rpc/coinjoin.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,12 @@ static RPCHelpMan getcoinjoininfo()
436436
{RPCResult::Type::STR_HEX, "protxhash", "The ProTxHash of the masternode"},
437437
{RPCResult::Type::STR_HEX, "outpoint", "The outpoint of the masternode"},
438438
{RPCResult::Type::STR, "service", "The IP address and port of the masternode"},
439+
{RPCResult::Type::ARR, "addresses", "Network addresses of the masternode",
440+
{
441+
{
442+
{RPCResult::Type::STR, "address", ""},
443+
}
444+
}},
439445
{RPCResult::Type::NUM, "denomination", "The denomination of the mixing session in " + CURRENCY_UNIT + ""},
440446
{RPCResult::Type::STR_HEX, "state", "Current state of the mixing session"},
441447
{RPCResult::Type::NUM, "entries_count", "The number of entries in the mixing session"},

src/rpc/masternode.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,7 @@ static RPCHelpMan masternodelist_helper(bool is_composite)
624624
UniValue objMN(UniValue::VOBJ);
625625
objMN.pushKV("proTxHash", dmn.proTxHash.ToString());
626626
objMN.pushKV("address", dmn.pdmnState->netInfo->GetPrimary().ToStringAddrPort());
627+
objMN.pushKV("addresses", dmn.pdmnState->netInfo->ToJson());
627628
objMN.pushKV("payee", payeeStr);
628629
objMN.pushKV("status", dmnToStatus(dmn));
629630
objMN.pushKV("type", std::string(GetMnType(dmn.nType).description));

src/rpc/quorums.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ static UniValue BuildQuorumInfo(const llmq::CQuorumBlockProcessor& quorum_block_
207207
UniValue mo(UniValue::VOBJ);
208208
mo.pushKV("proTxHash", dmn->proTxHash.ToString());
209209
mo.pushKV("service", dmn->pdmnState->netInfo->GetPrimary().ToStringAddrPort());
210+
mo.pushKV("addresses", dmn->pdmnState->netInfo->ToJson());
210211
mo.pushKV("pubKeyOperator", dmn->pdmnState->pubKeyOperator.ToString());
211212
mo.pushKV("valid", quorum->qc->validMembers[i]);
212213
if (quorum->qc->validMembers[i]) {

0 commit comments

Comments
 (0)