#include #include #include #include #include // { // ledger_hash : // ledger_index : // ... // } boost::json::object doLedgerEntry( boost::json::object const& request, BackendInterface const& backend) { boost::json::object response; bool binary = request.contains("binary") ? request.at("binary").as_bool() : false; auto ledgerSequence = ledgerSequenceFromRequest(request, backend); if (!ledgerSequence) { response["error"] = "Empty database"; return response; } ripple::uint256 key; if (!key.parseHex(request.at("index").as_string().c_str())) { response["error"] = "Error parsing index"; return response; } auto start = std::chrono::system_clock::now(); auto dbResponse = backend.fetchLedgerObject(key, *ledgerSequence); auto end = std::chrono::system_clock::now(); auto time = std::chrono::duration_cast(end - start) .count(); if (!dbResponse or dbResponse->size() == 0) { response["error"] = "Object not found"; return response; } if (binary) { response["object"] = ripple::strHex(*dbResponse); } else { ripple::STLedgerEntry sle{ ripple::SerialIter{dbResponse->data(), dbResponse->size()}, key}; response["object"] = getJson(sle); } return response; }