20 org::xrpl::rpc::v1::GetLedgerDiffRequest
const& request = context.
params;
21 org::xrpl::rpc::v1::GetLedgerDiffResponse response;
22 grpc::Status
const status = grpc::Status::OK;
29 grpc::Status
const errorStatus{grpc::StatusCode::NOT_FOUND,
"base ledger not found"};
30 return {response, errorStatus};
35 grpc::Status
const errorStatus{grpc::StatusCode::NOT_FOUND,
"desired ledger not found"};
36 return {response, errorStatus};
43 grpc::Status
const errorStatus{grpc::StatusCode::NOT_FOUND,
"base ledger not validated"};
44 return {response, errorStatus};
51 grpc::Status
const errorStatus{grpc::StatusCode::NOT_FOUND,
"desired ledger not validated"};
52 return {response, errorStatus};
60 baseLedger->stateMap().compare(desiredLedger->stateMap(), differences, maxDifferences);
63 grpc::Status
const errorStatus{
64 grpc::StatusCode::RESOURCE_EXHAUSTED,
"too many differences between specified ledgers"};
65 return {response, errorStatus};
68 for (
auto& [k, v] : differences)
70 auto diff = response.mutable_ledger_objects()->add_objects();
71 auto inBase = v.first;
72 auto inDesired = v.second;
77 diff->set_key(k.data(), k.size());
81 XRPL_ASSERT(inDesired->size() > 0,
"xrpl::doLedgerDiffGrpc : non-empty desired");
82 diff->set_key(k.data(), k.size());
83 if (request.include_blobs())
85 diff->set_data(inDesired->data(), inDesired->size());
89 return {response, status};