8 org::xrpl::rpc::v1::GetLedgerDiffRequest& request = context.
params;
9 org::xrpl::rpc::v1::GetLedgerDiffResponse response;
10 grpc::Status status = grpc::Status::OK;
17 grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND,
"base ledger not found"};
18 return {response, errorStatus};
23 grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND,
"desired ledger not found"};
24 return {response, errorStatus};
30 grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND,
"base ledger not validated"};
31 return {response, errorStatus};
37 grpc::Status errorStatus{grpc::StatusCode::NOT_FOUND,
"base ledger not validated"};
38 return {response, errorStatus};
45 bool res = baseLedger->stateMap().compare(desiredLedger->stateMap(), differences, maxDifferences);
48 grpc::Status errorStatus{
49 grpc::StatusCode::RESOURCE_EXHAUSTED,
"too many differences between specified ledgers"};
50 return {response, errorStatus};
53 for (
auto& [k, v] : differences)
55 auto diff = response.mutable_ledger_objects()->add_objects();
56 auto inBase = v.first;
57 auto inDesired = v.second;
62 diff->set_key(k.data(), k.size());
66 XRPL_ASSERT(inDesired->size() > 0,
"xrpl::doLedgerDiffGrpc : non-empty desired");
67 diff->set_key(k.data(), k.size());
68 if (request.include_blobs())
70 diff->set_data(inDesired->data(), inDesired->size());
74 return {response, status};