1 #include <ripple/rpc/GRPCHandlers.h>
2 #include <ripple/rpc/impl/RPCHelpers.h>
9 org::xrpl::rpc::v1::GetLedgerDiffRequest& request = context.
params;
10 org::xrpl::rpc::v1::GetLedgerDiffResponse response;
11 grpc::Status status = grpc::Status::OK;
18 grpc::Status errorStatus{
19 grpc::StatusCode::NOT_FOUND,
"base ledger not found"};
20 return {response, errorStatus};
24 desiredLedgerRv, request.desired_ledger(), context))
26 grpc::Status errorStatus{
27 grpc::StatusCode::NOT_FOUND,
"desired ledger not found"};
28 return {response, errorStatus};
32 std::dynamic_pointer_cast<Ledger const>(baseLedgerRv);
35 grpc::Status errorStatus{
36 grpc::StatusCode::NOT_FOUND,
"base ledger not validated"};
37 return {response, errorStatus};
41 std::dynamic_pointer_cast<Ledger const>(desiredLedgerRv);
44 grpc::Status errorStatus{
45 grpc::StatusCode::NOT_FOUND,
"base ledger not validated"};
46 return {response, errorStatus};
54 desiredLedger->
stateMap(), differences, maxDifferences);
57 grpc::Status errorStatus{
58 grpc::StatusCode::RESOURCE_EXHAUSTED,
59 "too many differences between specified ledgers"};
60 return {response, errorStatus};
63 for (
auto& [k, v] : differences)
65 auto diff = response.mutable_ledger_objects()->add_objects();
66 auto inBase = v.first;
67 auto inDesired = v.second;
72 diff->set_key(k.data(), k.size());
76 assert(inDesired->size() > 0);
77 diff->set_key(k.data(), k.size());
78 if (request.include_blobs())
80 diff->set_data(inDesired->data(), inDesired->size());
84 return {response, status};