Skip to content

Commit 427be61

Browse files
committed
rpc: add new key "addresses" to allow reporting multiple entries
1 parent 570e308 commit 427be61

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
@@ -1877,6 +1877,7 @@ void CCoinJoinClientSession::GetJsonInfo(UniValue& obj) const
18771877
obj.pushKV("protxhash", mixingMasternode->proTxHash.ToString());
18781878
obj.pushKV("outpoint", mixingMasternode->collateralOutpoint.ToStringShort());
18791879
obj.pushKV("service", mixingMasternode->pdmnState->netInfo->GetPrimary().ToStringAddrPort());
1880+
obj.pushKV("addresses", mixingMasternode->pdmnState->netInfo->ToJson());
18801881
}
18811882
obj.pushKV("denomination", ValueFromAmount(CoinJoin::DenominationToAmount(nSessionDenom)));
18821883
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
@@ -40,6 +40,7 @@ UniValue CDeterministicMNState::ToJson(MnType nType) const
4040
UniValue obj(UniValue::VOBJ);
4141
obj.pushKV("version", nVersion);
4242
obj.pushKV("service", netInfo->GetPrimary().ToStringAddrPort());
43+
obj.pushKV("addresses", netInfo->ToJson());
4344
obj.pushKV("registeredHeight", nRegisteredHeight);
4445
obj.pushKV("lastPaidHeight", nLastPaidHeight);
4546
obj.pushKV("consecutivePayments", nConsecutivePayments);
@@ -74,6 +75,7 @@ UniValue CDeterministicMNStateDiff::ToJson(MnType nType) const
7475
}
7576
if (fields & Field_netInfo) {
7677
obj.pushKV("service", state.netInfo->GetPrimary().ToStringAddrPort());
78+
obj.pushKV("addresses", state.netInfo->ToJson());
7779
}
7880
if (fields & Field_nRegisteredHeight) {
7981
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
@@ -79,6 +79,7 @@ UniValue CSimplifiedMNListEntry::ToJson(bool extended) const
7979
obj.pushKV("proRegTxHash", proRegTxHash.ToString());
8080
obj.pushKV("confirmedHash", confirmedHash.ToString());
8181
obj.pushKV("service", netInfo->GetPrimary().ToStringAddrPort());
82+
obj.pushKV("addresses", netInfo->ToJson());
8283
obj.pushKV("pubKeyOperator", pubKeyOperator.ToString());
8384
obj.pushKV("votingAddress", EncodeDestination(PKHash(keyIDVoting)));
8485
obj.pushKV("isValid", isValid);

src/rpc/coinjoin.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,12 @@ static RPCHelpMan getcoinjoininfo()
428428
{RPCResult::Type::STR_HEX, "protxhash", "The ProTxHash of the masternode"},
429429
{RPCResult::Type::STR_HEX, "outpoint", "The outpoint of the masternode"},
430430
{RPCResult::Type::STR, "service", "The IP address and port of the masternode"},
431+
{RPCResult::Type::ARR, "addresses", "Network addresses of the masternode",
432+
{
433+
{
434+
{RPCResult::Type::STR, "address", ""},
435+
}
436+
}},
431437
{RPCResult::Type::NUM, "denomination", "The denomination of the mixing session in " + CURRENCY_UNIT + ""},
432438
{RPCResult::Type::STR_HEX, "state", "Current state of the mixing session"},
433439
{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
@@ -613,6 +613,7 @@ static RPCHelpMan masternodelist_helper(bool is_composite)
613613
UniValue objMN(UniValue::VOBJ);
614614
objMN.pushKV("proTxHash", dmn.proTxHash.ToString());
615615
objMN.pushKV("address", dmn.pdmnState->netInfo->GetPrimary().ToStringAddrPort());
616+
objMN.pushKV("addresses", dmn.pdmnState->netInfo->ToJson());
616617
objMN.pushKV("payee", payeeStr);
617618
objMN.pushKV("status", dmnToStatus(dmn));
618619
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
@@ -204,6 +204,7 @@ static UniValue BuildQuorumInfo(const llmq::CQuorumBlockProcessor& quorum_block_
204204
UniValue mo(UniValue::VOBJ);
205205
mo.pushKV("proTxHash", dmn->proTxHash.ToString());
206206
mo.pushKV("service", dmn->pdmnState->netInfo->GetPrimary().ToStringAddrPort());
207+
mo.pushKV("addresses", dmn->pdmnState->netInfo->ToJson());
207208
mo.pushKV("pubKeyOperator", dmn->pdmnState->pubKeyOperator.ToString());
208209
mo.pushKV("valid", quorum->qc->validMembers[i]);
209210
if (quorum->qc->validMembers[i]) {

0 commit comments

Comments
 (0)