From 58f15307ba989fa91fe1f1d605dd5e1896cdf68a Mon Sep 17 00:00:00 2001 From: Bronek Kozicki Date: Fri, 21 Mar 2025 16:33:31 +0000 Subject: [PATCH] Add ShareTotal to ledger_entry output --- include/xrpl/protocol/jss.h | 1 + src/test/app/Vault_test.cpp | 1 + src/xrpld/rpc/handlers/LedgerEntry.cpp | 33 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index d297334a0a..0214f975e8 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -90,6 +90,7 @@ JSS(SendMax); // in: TransactionSign JSS(Sequence); // in/out: TransactionSign; field. JSS(SetFlag); // field. JSS(Share); // out: Vault +JSS(ShareTotal); // out: Vault JSS(Signer); // field. JSS(Signers); // field. JSS(SigningPubKey); // field. diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 0bb53670a2..25b7243862 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include diff --git a/src/xrpld/rpc/handlers/LedgerEntry.cpp b/src/xrpld/rpc/handlers/LedgerEntry.cpp index 64e54be6a9..fad2a02647 100644 --- a/src/xrpld/rpc/handlers/LedgerEntry.cpp +++ b/src/xrpld/rpc/handlers/LedgerEntry.cpp @@ -894,6 +894,37 @@ struct LedgerEntry LedgerEntryType expectedType; }; +template +static void +supplementJson( + ReadView const&, + std::shared_ptr const& sle, + Json::Value&) +{ + XRPL_ASSERT( + sle->getType() == Type, "ripple::supplementJson : matching type"); +} + +template <> +void +supplementJson( + ReadView const& view, + std::shared_ptr const& vault, + Json::Value& node) +{ + XRPL_ASSERT( + vault->getType() == ltVAULT, + "ripple::supplementJson : matching type"); + + auto const share = vault->at(sfMPTokenIssuanceID); + auto const sleIssuance = view.read(keylet::mptIssuance(share)); + if (!sleIssuance) + return; + + node[jss::ShareTotal] = + Number(sleIssuance->getFieldU64(sfOutstandingAmount)); +} + // { // ledger_hash : // ledger_index : @@ -1033,6 +1064,8 @@ doLedgerEntry(RPC::JsonContext& context) else { jvResult[jss::node] = sleNode->getJson(JsonOptions::none); + if (sleNode->getType() == ltVAULT) + supplementJson(*lpLedger, sleNode, jvResult[jss::node]); jvResult[jss::index] = to_string(uNodeIndex); }