From 5f53e4d1f8a00beb21f962efaf4df2eafe86c5aa Mon Sep 17 00:00:00 2001 From: Bronek Kozicki Date: Wed, 2 Apr 2025 17:09:49 +0100 Subject: [PATCH] Change output structure of vault_info --- include/xrpl/protocol/jss.h | 1 + src/test/app/Vault_test.cpp | 37 +++++++++++----------------- src/xrpld/rpc/handlers/VaultInfo.cpp | 36 ++++----------------------- 3 files changed, 20 insertions(+), 54 deletions(-) diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index c363de7d89..28d2f22677 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -561,6 +561,7 @@ JSS(server_status); // out: NetworkOPs JSS(server_version); // out: NetworkOPs JSS(settle_delay); // out: AccountChannels JSS(severity); // in: LogLevel +JSS(share); // out: VaultInfo JSS(signature); // out: NetworkOPs, ChannelAuthorize JSS(signature_verified); // out: ChannelVerify JSS(signing_key); // out: NetworkOPs diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 33ac33e2cc..2bbd13cbc3 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -803,15 +803,16 @@ class Vault_test : public beast::unit_test::suite auto const vaultAccount = // [&env, key = keylet.key, this]() -> AccountID { auto jvVault = env.rpc("vault_info", strHex(key)); + BEAST_EXPECT( - jvVault[jss::result][jss::nodes][0u][sfAssetsTotal] == "100"); + jvVault[jss::result][jss::vault][sfAssetsTotal] == "100"); BEAST_EXPECT( - jvVault[jss::result][jss::nodes][1u][sfOutstandingAmount] == - "100"); + jvVault[jss::result][jss::vault][jss::share] + [sfOutstandingAmount] == "100"); // Vault pseudo-account return parseBase58( - jvVault[jss::result][jss::nodes][0u][jss::Account] + jvVault[jss::result][jss::vault][jss::Account] .asString()) .value(); }(); @@ -843,10 +844,10 @@ class Vault_test : public beast::unit_test::suite testcase("nontransferable shares balance check"); auto jvVault = env.rpc("vault_info", strHex(keylet.key)); BEAST_EXPECT( - jvVault[jss::result][jss::nodes][0u][sfAssetsTotal] == "50"); + jvVault[jss::result][jss::vault][sfAssetsTotal] == "50"); BEAST_EXPECT( - jvVault[jss::result][jss::nodes][1u][sfOutstandingAmount] == - "50"); + jvVault[jss::result][jss::vault][jss::share] + [sfOutstandingAmount] == "50"); } { @@ -1552,15 +1553,10 @@ class Vault_test : public beast::unit_test::suite env.rpc("vault_info", strHex(keylet.key), "validated"); BEAST_EXPECT(!jv[jss::result].isMember(jss::error)); - BEAST_EXPECT(jv[jss::result].isMember(jss::nodes)); - BEAST_EXPECT(jv[jss::result][jss::nodes].isArray()); - BEAST_EXPECT(jv[jss::result].isMember(jss::directory)); - BEAST_EXPECT(jv[jss::result][jss::directory][jss::vault] == 0); - BEAST_EXPECT( - jv[jss::result][jss::directory][jss::mpt_issuance] == 1); + BEAST_EXPECT(jv[jss::result].isMember(jss::vault)); check( - jv[jss::result][jss::nodes][0u], - jv[jss::result][jss::nodes][1u]); + jv[jss::result][jss::vault], + jv[jss::result][jss::vault][jss::share]); } { @@ -1572,15 +1568,10 @@ class Vault_test : public beast::unit_test::suite auto jv = env.rpc("json", "vault_info", to_string(jvParams)); BEAST_EXPECT(!jv[jss::result].isMember(jss::error)); - BEAST_EXPECT(jv[jss::result].isMember(jss::nodes)); - BEAST_EXPECT(jv[jss::result][jss::nodes].isArray()); - BEAST_EXPECT(jv[jss::result].isMember(jss::directory)); - BEAST_EXPECT(jv[jss::result][jss::directory][jss::vault] == 0); - BEAST_EXPECT( - jv[jss::result][jss::directory][jss::mpt_issuance] == 1); + BEAST_EXPECT(jv[jss::result].isMember(jss::vault)); check( - jv[jss::result][jss::nodes][0u], - jv[jss::result][jss::nodes][1u]); + jv[jss::result][jss::vault], + jv[jss::result][jss::vault][jss::share]); } { diff --git a/src/xrpld/rpc/handlers/VaultInfo.cpp b/src/xrpld/rpc/handlers/VaultInfo.cpp index ff8a5c6091..3b8ca429b7 100644 --- a/src/xrpld/rpc/handlers/VaultInfo.cpp +++ b/src/xrpld/rpc/handlers/VaultInfo.cpp @@ -47,8 +47,6 @@ doVaultInfo(RPC::JsonContext& context) return jvResult; } - bool const isBinary = context.params[jss::binary].asBool(); - auto const sleVault = lpLedger->read(keylet::vault(uNodeIndex)); auto const sleIssuance = sleVault == nullptr // ? nullptr @@ -59,36 +57,12 @@ doVaultInfo(RPC::JsonContext& context) return jvResult; } - Json::Value directory = Json::objectValue; - // Some directory positions in nodes are hardcoded below, because the - // order of writing these is hardcoded, but it may not stay like this - // forever. If a given type can have any number of nodes, use an array - // rather than a number - directory[jss::vault] = 0; - directory[jss::mpt_issuance] = 1; + Json::Value& vault = jvResult[jss::vault]; + vault = sleVault->getJson(JsonOptions::none); + auto& share = vault[jss::share]; + share = sleIssuance->getJson(JsonOptions::none); - Json::Value nodes = Json::arrayValue; - if (!isBinary) - { - auto& vault = nodes.append(Json::objectValue); - vault = sleVault->getJson(JsonOptions::none); - - auto& issuance = nodes.append(Json::objectValue); - issuance = sleIssuance->getJson(JsonOptions::none); - } - else - { - auto& vault = nodes.append(Json::objectValue); - vault[jss::data] = serializeHex(*sleVault); - vault[jss::index] = to_string(sleVault->key()); - - auto& issuance = nodes.append(Json::objectValue); - issuance[jss::data] = serializeHex(*sleIssuance); - issuance[jss::index] = to_string(sleIssuance->key()); - } - - jvResult[jss::directory] = directory; - jvResult[jss::nodes] = nodes; + jvResult[jss::vault] = vault; return jvResult; }