Change output structure of vault_info

This commit is contained in:
Bronek Kozicki
2025-04-02 17:09:49 +01:00
parent fa0b021fb8
commit 5f53e4d1f8
3 changed files with 20 additions and 54 deletions

View File

@@ -561,6 +561,7 @@ JSS(server_status); // out: NetworkOPs
JSS(server_version); // out: NetworkOPs JSS(server_version); // out: NetworkOPs
JSS(settle_delay); // out: AccountChannels JSS(settle_delay); // out: AccountChannels
JSS(severity); // in: LogLevel JSS(severity); // in: LogLevel
JSS(share); // out: VaultInfo
JSS(signature); // out: NetworkOPs, ChannelAuthorize JSS(signature); // out: NetworkOPs, ChannelAuthorize
JSS(signature_verified); // out: ChannelVerify JSS(signature_verified); // out: ChannelVerify
JSS(signing_key); // out: NetworkOPs JSS(signing_key); // out: NetworkOPs

View File

@@ -803,15 +803,16 @@ class Vault_test : public beast::unit_test::suite
auto const vaultAccount = // auto const vaultAccount = //
[&env, key = keylet.key, this]() -> AccountID { [&env, key = keylet.key, this]() -> AccountID {
auto jvVault = env.rpc("vault_info", strHex(key)); auto jvVault = env.rpc("vault_info", strHex(key));
BEAST_EXPECT( BEAST_EXPECT(
jvVault[jss::result][jss::nodes][0u][sfAssetsTotal] == "100"); jvVault[jss::result][jss::vault][sfAssetsTotal] == "100");
BEAST_EXPECT( BEAST_EXPECT(
jvVault[jss::result][jss::nodes][1u][sfOutstandingAmount] == jvVault[jss::result][jss::vault][jss::share]
"100"); [sfOutstandingAmount] == "100");
// Vault pseudo-account // Vault pseudo-account
return parseBase58<AccountID>( return parseBase58<AccountID>(
jvVault[jss::result][jss::nodes][0u][jss::Account] jvVault[jss::result][jss::vault][jss::Account]
.asString()) .asString())
.value(); .value();
}(); }();
@@ -843,10 +844,10 @@ class Vault_test : public beast::unit_test::suite
testcase("nontransferable shares balance check"); testcase("nontransferable shares balance check");
auto jvVault = env.rpc("vault_info", strHex(keylet.key)); auto jvVault = env.rpc("vault_info", strHex(keylet.key));
BEAST_EXPECT( BEAST_EXPECT(
jvVault[jss::result][jss::nodes][0u][sfAssetsTotal] == "50"); jvVault[jss::result][jss::vault][sfAssetsTotal] == "50");
BEAST_EXPECT( BEAST_EXPECT(
jvVault[jss::result][jss::nodes][1u][sfOutstandingAmount] == jvVault[jss::result][jss::vault][jss::share]
"50"); [sfOutstandingAmount] == "50");
} }
{ {
@@ -1552,15 +1553,10 @@ class Vault_test : public beast::unit_test::suite
env.rpc("vault_info", strHex(keylet.key), "validated"); env.rpc("vault_info", strHex(keylet.key), "validated");
BEAST_EXPECT(!jv[jss::result].isMember(jss::error)); BEAST_EXPECT(!jv[jss::result].isMember(jss::error));
BEAST_EXPECT(jv[jss::result].isMember(jss::nodes)); BEAST_EXPECT(jv[jss::result].isMember(jss::vault));
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);
check( check(
jv[jss::result][jss::nodes][0u], jv[jss::result][jss::vault],
jv[jss::result][jss::nodes][1u]); 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)); 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::error));
BEAST_EXPECT(jv[jss::result].isMember(jss::nodes)); BEAST_EXPECT(jv[jss::result].isMember(jss::vault));
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);
check( check(
jv[jss::result][jss::nodes][0u], jv[jss::result][jss::vault],
jv[jss::result][jss::nodes][1u]); jv[jss::result][jss::vault][jss::share]);
} }
{ {

View File

@@ -47,8 +47,6 @@ doVaultInfo(RPC::JsonContext& context)
return jvResult; return jvResult;
} }
bool const isBinary = context.params[jss::binary].asBool();
auto const sleVault = lpLedger->read(keylet::vault(uNodeIndex)); auto const sleVault = lpLedger->read(keylet::vault(uNodeIndex));
auto const sleIssuance = sleVault == nullptr // auto const sleIssuance = sleVault == nullptr //
? nullptr ? nullptr
@@ -59,36 +57,12 @@ doVaultInfo(RPC::JsonContext& context)
return jvResult; return jvResult;
} }
Json::Value directory = Json::objectValue; Json::Value& vault = jvResult[jss::vault];
// Some directory positions in nodes are hardcoded below, because the vault = sleVault->getJson(JsonOptions::none);
// order of writing these is hardcoded, but it may not stay like this auto& share = vault[jss::share];
// forever. If a given type can have any number of nodes, use an array share = sleIssuance->getJson(JsonOptions::none);
// rather than a number
directory[jss::vault] = 0;
directory[jss::mpt_issuance] = 1;
Json::Value nodes = Json::arrayValue; jvResult[jss::vault] = vault;
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;
return jvResult; return jvResult;
} }