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(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

View File

@@ -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<AccountID>(
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]);
}
{

View File

@@ -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;
}