20 #include <ripple/app/ledger/LedgerToJson.h>
21 #include <ripple/app/main/Application.h>
22 #include <ripple/app/misc/LoadFeeTrack.h>
23 #include <ripple/json/Object.h>
24 #include <ripple/protocol/ErrorCodes.h>
25 #include <ripple/protocol/jss.h>
26 #include <ripple/resource/Fees.h>
27 #include <ripple/rpc/GRPCHandlers.h>
28 #include <ripple/rpc/Role.h>
29 #include <ripple/rpc/handlers/LedgerHandler.h>
30 #include <ripple/rpc/impl/GRPCHelpers.h>
31 #include <ripple/rpc/impl/RPCHelpers.h>
44 bool needsLedger = params.
isMember(jss::ledger) ||
45 params.isMember(jss::ledger_hash) ||
53 bool const full = params[jss::full].asBool();
54 bool const transactions = params[jss::transactions].asBool();
55 bool const accounts = params[jss::accounts].asBool();
56 bool const expand = params[jss::expand].asBool();
57 bool const binary = params[jss::binary].asBool();
58 bool const owner_funds = params[jss::owner_funds].asBool();
59 bool const queue = params[jss::queue].asBool();
108 org::xrpl::rpc::v1::GetLedgerRequest& request = context.
params;
109 org::xrpl::rpc::v1::GetLedgerResponse response;
110 grpc::Status status = grpc::Status::OK;
115 grpc::Status errorStatus{
116 grpc::StatusCode::NOT_FOUND,
"ledger not found"};
117 return {response, errorStatus};
125 if (request.transactions())
127 for (
auto& i : ledger->
txs)
130 if (request.expand())
133 response.mutable_transactions_list()->add_transactions();
144 auto const& hash = i.first->getTransactionID();
145 response.mutable_hashes_list()->add_hashes(
146 hash.data(), hash.size());
151 if (request.get_objects())
157 std::dynamic_pointer_cast<Ledger const>(parent);
160 grpc::Status errorStatus{
161 grpc::StatusCode::NOT_FOUND,
"parent ledger not validated"};
162 return {response, errorStatus};
166 std::dynamic_pointer_cast<Ledger const>(ledger);
169 grpc::Status errorStatus{
170 grpc::StatusCode::NOT_FOUND,
"ledger not validated"};
171 return {response, errorStatus};
178 desired->
stateMap(), differences, maxDifferences);
181 grpc::Status errorStatus{
182 grpc::StatusCode::RESOURCE_EXHAUSTED,
183 "too many differences between specified ledgers"};
184 return {response, errorStatus};
187 for (
auto& [k, v] : differences)
189 auto obj = response.mutable_ledger_objects()->add_objects();
190 auto inBase = v.first;
191 auto inDesired = v.second;
193 obj->set_key(k.data(), k.size());
196 assert(inDesired->size() > 0);
197 obj->set_data(inDesired->data(), inDesired->size());
200 response.set_skiplist_included(
true);
203 response.set_validated(
206 return {response, status};