mirror of
https://github.com/XRPLF/clio.git
synced 2025-11-20 19:56:00 +00:00
add diff flag to ledger command
This commit is contained in:
@@ -36,6 +36,15 @@ doLedger(Context const& context)
|
||||
expand = params.at("expand").as_bool();
|
||||
}
|
||||
|
||||
bool diff = false;
|
||||
if (params.contains("diff"))
|
||||
{
|
||||
if (!params.at("diff").is_bool())
|
||||
return Status{Error::rpcINVALID_PARAMS, "diffFlagNotBool"};
|
||||
|
||||
diff = params.at("diff").as_bool();
|
||||
}
|
||||
|
||||
auto v = ledgerInfoFromRequest(context);
|
||||
if (auto status = std::get_if<Status>(&v))
|
||||
return *status;
|
||||
@@ -115,6 +124,30 @@ doLedger(Context const& context)
|
||||
}
|
||||
}
|
||||
|
||||
if (diff)
|
||||
{
|
||||
header["diff"] = boost::json::value(boost::json::array_kind);
|
||||
boost::json::array& jsonDiff = header.at("diff").as_array();
|
||||
auto diff = context.backend->fetchLedgerDiff(lgrInfo.seq);
|
||||
for (auto const& obj : diff)
|
||||
{
|
||||
boost::json::object entry;
|
||||
entry["id"] = ripple::strHex(obj.key);
|
||||
if (binary)
|
||||
entry["object"] = ripple::strHex(obj.blob);
|
||||
else if (obj.blob.size())
|
||||
{
|
||||
ripple::STLedgerEntry sle{
|
||||
ripple::SerialIter{obj.blob.data(), obj.blob.size()},
|
||||
obj.key};
|
||||
entry["object"] = toJson(sle);
|
||||
}
|
||||
else
|
||||
entry["object"] = "";
|
||||
jsonDiff.push_back(std::move(entry));
|
||||
}
|
||||
}
|
||||
|
||||
response["ledger"] = header;
|
||||
response["ledger_hash"] = ripple::strHex(lgrInfo.hash);
|
||||
response["ledger_index"] = lgrInfo.seq;
|
||||
|
||||
Reference in New Issue
Block a user