Removing error codes from proto files (#15518)

This commit is contained in:
Sergey Kisel 2022-11-11 13:00:24 +01:00 committed by GitHub
parent 7abbb694b9
commit da0f63d3f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 3 additions and 217 deletions

View File

@ -19,11 +19,6 @@ service ActiveContractsService {
// If there are no active contracts, the stream returns a single GetActiveContractsResponse message with the offset at which the snapshot has been taken.
// Clients SHOULD use the offset in the last GetActiveContractsResponse message to continue streaming transactions with the transaction service.
// Clients SHOULD NOT assume that the set of active contracts they receive reflects the state at the ledger end.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (filters by party cannot be empty)
rpc GetActiveContracts (GetActiveContractsRequest) returns (stream GetActiveContractsResponse);
}

View File

@ -21,24 +21,9 @@ import "google/protobuf/timestamp.proto";
service ConfigManagementService {
// Return the currently active time model and the current configuration generation.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
rpc GetTimeModel (GetTimeModelRequest) returns (GetTimeModelResponse);
// Set the ledger time model.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if arguments are invalid, or the provided configuration generation
// does not match the current active configuration generation. The caller is expected
// to retry by again fetching current time model using 'GetTimeModel', applying changes
// and resubmitting.
// - ``DEADLINE_EXCEEDED``: if the request times out. Note that a timed out request may
// have still been committed to the ledger. Application should re-query the current
// time model before retrying.
// - ``FAILED_PRECONDITION``: if the request is rejected.
// - ``UNIMPLEMENTED``: if this method is not supported by the backing ledger.
rpc SetTimeModel (SetTimeModelRequest) returns (SetTimeModelResponse);
}

View File

@ -20,9 +20,6 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1.Admin";
service PackageManagementService {
// Returns the details of all Daml-LF packages known to the backing participant.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
rpc ListKnownPackages (ListKnownPackagesRequest) returns
(ListKnownPackagesResponse);
@ -35,11 +32,6 @@ service PackageManagementService {
// - Succeed, if the package was successfully uploaded, or if the same package
// was already uploaded before.
// - Respond with a gRPC error
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``UNIMPLEMENTED``: if DAR package uploading is not supported by the backing participant
// - ``INVALID_ARGUMENT``: if the DAR file is too big or malformed. The maximum supported size is implementation specific.
rpc UploadDarFile (UploadDarFileRequest) returns (UploadDarFileResponse);
}

View File

@ -22,14 +22,7 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1.Admin";
service ParticipantPruningService {
// Prune the ledger specifying the offset before and at which ledger transactions should be removed. Only returns when
// the potentially long-running prune request ends successfully or with one of the following errors:
// - ``INVALID_ARGUMENT``: if the payload, particularly the offset is malformed or missing
// - ``UNIMPLEMENTED``: if the participant is based on a ledger that has not implemented pruning
// - ``INTERNAL``: if the participant has encountered a failure and has potentially applied pruning partially. Such cases
// warrant verifying the participant health before retrying the prune with the same (or a larger, valid) offset.
// Successful retries after such errors ensure that different components reach a consistent pruning state.
// - ``FAILED_PRECONDITION``: if the participant is not yet able to prune at the specified offset.
//
// the potentially long-running prune request ends successfully or with an error.
rpc Prune (PruneRequest) returns (PruneResponse);
}

View File

@ -32,24 +32,15 @@ service PartyManagementService {
// All horizontally scaled replicas should return the same id.
// daml-on-kv-ledger: returns an identifier supplied on command line at launch time
// canton: returns globally unique identifier of the participant
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
rpc GetParticipantId (GetParticipantIdRequest) returns (GetParticipantIdResponse);
// Get the party details of the given parties. Only known parties will be
// returned in the list.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
rpc GetParties (GetPartiesRequest) returns (GetPartiesResponse);
// List the parties known by the participant.
// The list returned contains parties whose ledger access is facilitated by
// the participant and the ones maintained elsewhere.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
rpc ListKnownParties (ListKnownPartiesRequest) returns (ListKnownPartiesResponse);
// Allocates a new party on a ledger and adds it to the set managed by the participant.
@ -60,12 +51,6 @@ service PartyManagementService {
// - Succeed, in which case the actual allocated identifier is visible in
// the response.
// - Respond with a gRPC error
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``UNIMPLEMENTED``: if synchronous party allocation is not supported by the participant
// - ``DEADLINE_EXCEEDED``: if the request times out
// - ``INVALID_ARGUMENT``: if the provided hint and/or display name is invalid on the given ledger (see below).
// daml-on-kv-ledger: suggestion's uniqueness is checked by the validators in
// the consensus layer and call rejected if the identifier is already present.
// canton: completely different globally unique identifier is allocated.

View File

@ -35,63 +35,29 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1.Admin";
service UserManagementService {
// Create a new user.
// Errors:
// - ``ALREADY_EXISTS``: if the user already exists
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc CreateUser (CreateUserRequest) returns (CreateUserResponse);
// Get the user data of a specific user or the authenticated user.
// Errors:
// - ``NOT_FOUND``: if the user doesn't exist
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc GetUser (GetUserRequest) returns (GetUserResponse);
// Update selected modifiable attribute of a user resource described by the ``User`` message.
rpc UpdateUser (UpdateUserRequest) returns (UpdateUserResponse);
// Delete an existing user and all its rights.
// Errors:
// - ``NOT_FOUND``: if the user doesn't exist
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc DeleteUser (DeleteUserRequest) returns (DeleteUserResponse);
// List all existing users.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc ListUsers (ListUsersRequest) returns (ListUsersResponse);
// Grant rights to a user.
// Granting rights does not affect the resource version of the corresponding user.
// Errors:
// - ``NOT_FOUND``: if the user doesn't exist
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc GrantUserRights (GrantUserRightsRequest) returns (GrantUserRightsResponse);
// Revoke rights from a user.
// Revoking rights does not affect the resource version of the corresponding user.
// Errors:
// - ``NOT_FOUND``: if the user doesn't exist
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc RevokeUserRights (RevokeUserRightsRequest) returns (RevokeUserRightsResponse);
// List the set of all rights granted to a user.
// Errors:
// - ``NOT_FOUND``: if the user doesn't exist
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
rpc ListUserRights (ListUserRightsRequest) returns (ListUserRightsResponse);
}
@ -209,7 +175,7 @@ message UpdateUserRequest {
// Fields that can be updated are marked as ``Modifiable``.
// An update path can also point to a non-``Modifiable`` fields such as 'id' and 'metadata.resource_version'
// because they are used:
// (1) to identify the user resource subject to the update,
// (1) to identify the user resource subject to the update,
// (2) for concurrent change control.
// Examples of valid update paths: 'primary_party', 'metadata', 'metadata.annotations'.
// For additional information see the documentation for standard protobuf3's ``google.protobuf.FieldMask``.

View File

@ -30,20 +30,9 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1";
service CommandCompletionService {
// Subscribe to command completion events.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
// - ``FAILED_PRECONDITION``: if the ledger has been pruned after the subscription start offset
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
// - ``OUT_OF_RANGE``: if the absolute offset is after the end of the ledger
rpc CompletionStream (CompletionStreamRequest) returns (stream CompletionStreamResponse);
// Returns the offset after the latest completion.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
rpc CompletionEnd (CompletionEndRequest) returns (CompletionEndResponse);
}

View File

@ -21,66 +21,18 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1";
service CommandService {
// Submits a single composite command and waits for its result.
// Propagates the gRPC error of failed submissions including Daml interpretation errors.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or if a resource is missing (e.g. contract key)
// due to for example contention on resources
// - ``ALREADY_EXISTS`` if a resource is duplicated (e.g. contract key)
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
// - ``ABORTED``: if the number of in-flight commands reached the maximum (if a limit is configured)
// - ``FAILED_PRECONDITION``: on consistency errors (e.g. the contract key has changed since the submission)
// or if an interpretation error occurred
// - ``UNAVAILABLE``: if the participant is not yet ready to submit commands or if the service has been shut down.
// - ``DEADLINE_EXCEEDED``: if the request failed to receive its completion within the predefined timeout.
rpc SubmitAndWait (SubmitAndWaitRequest) returns (google.protobuf.Empty);
// Submits a single composite command, waits for its result, and returns the transaction id.
// Propagates the gRPC error of failed submissions including Daml interpretation errors.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or if a resource is missing (e.g. contract key)
// due to for example contention on resources
// - ``ALREADY_EXISTS`` if a resource is duplicated (e.g. contract key)
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
// - ``ABORTED``: if the number of in-flight commands reached the maximum (if a limit is configured)
// - ``FAILED_PRECONDITION``: on consistency errors (e.g. the contract key has changed since the submission)
// or if an interpretation error occurred
// - ``UNAVAILABLE``: if the participant is not yet ready to submit commands or if the service has been shut down.
// - ``DEADLINE_EXCEEDED``: if the request failed to receive its completion within the predefined timeout.
rpc SubmitAndWaitForTransactionId (SubmitAndWaitRequest) returns (SubmitAndWaitForTransactionIdResponse);
// Submits a single composite command, waits for its result, and returns the transaction.
// Propagates the gRPC error of failed submissions including Daml interpretation errors.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or if a resource is missing (e.g. contract key)
// due to for example contention on resources
// - ``ALREADY_EXISTS`` if a resource is duplicated (e.g. contract key)
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
// - ``ABORTED``: if the number of in-flight commands reached the maximum (if a limit is configured)
// - ``FAILED_PRECONDITION``: on consistency errors (e.g. the contract key has changed since the submission)
// or if an interpretation error occurred
// - ``UNAVAILABLE``: if the participant is not yet ready to submit commands or if the service has been shut down.
// - ``DEADLINE_EXCEEDED``: if the request failed to receive its completion within the predefined timeout.
rpc SubmitAndWaitForTransaction (SubmitAndWaitRequest) returns (SubmitAndWaitForTransactionResponse);
// Submits a single composite command, waits for its result, and returns the transaction tree.
// Propagates the gRPC error of failed submissions including Daml interpretation errors.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or if a resource is missing (e.g. contract key)
// due to for example contention on resources
// - ``ALREADY_EXISTS`` if a resource is duplicated (e.g. contract key)
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
// - ``ABORTED``: if the number of in-flight commands reached the maximum (if a limit is configured)
// - ``FAILED_PRECONDITION``: on consistency errors (e.g. the contract key has changed since the submission)
// or if an interpretation error occurred
// - ``UNAVAILABLE``: if the participant is not yet ready to submit commands or if the service has been shut down.
// - ``DEADLINE_EXCEEDED``: if the request failed to receive its completion within the predefined timeout.
rpc SubmitAndWaitForTransactionTree (SubmitAndWaitRequest) returns (SubmitAndWaitForTransactionTreeResponse);
}

View File

@ -29,17 +29,6 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1";
service CommandSubmissionService {
// Submit a single composite command.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or if a resource is missing (e.g. contract key)
// due to for example contention on resources
// - ``ALREADY_EXISTS`` if a resource is duplicated (e.g. contract key)
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields
// - ``ABORTED``: if the number of in-flight commands reached the maximum (if a limit is configured)
// - ``FAILED_PRECONDITION``: on consistency errors (e.g. the contract key has changed since the submission)
// or if an interpretation error occurred
// - ``UNAVAILABLE``: if the participant is not yet ready to submit commands or if the service has been shut down.
rpc Submit (SubmitRequest) returns (google.protobuf.Empty);
}

View File

@ -20,8 +20,7 @@ message Completion {
string command_id = 1;
// Identifies the exact type of the error.
// For example, malformed or double spend transactions will result in a ``INVALID_ARGUMENT`` status.
// Transactions with invalid time time windows (which may be valid at a later date) will result in an ``ABORTED`` error.
// It uses the same format of conveying error details as it is used for the RPC responses of the APIs.
// Optional
google.rpc.Status status = 2;

View File

@ -15,10 +15,6 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1";
service LedgerConfigurationService {
// Returns the latest configuration as the first response, and publishes configuration updates in the same stream.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
rpc GetLedgerConfiguration (GetLedgerConfigurationRequest) returns (stream GetLedgerConfigurationResponse);
}

View File

@ -16,9 +16,6 @@ service LedgerIdentityService {
option deprecated = true;
// Clients may call this RPC to return the identifier of the ledger they are connected to.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
rpc GetLedgerIdentity (GetLedgerIdentityRequest) returns (GetLedgerIdentityResponse) {
option deprecated = true;
};

View File

@ -13,24 +13,12 @@ option csharp_namespace = "Com.Daml.Ledger.Api.V1";
service PackageService {
// Returns the identifiers of all supported packages.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
rpc ListPackages (ListPackagesRequest) returns (ListPackagesResponse);
// Returns the contents of a single package.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the requested package is unknown
rpc GetPackage (GetPackageRequest) returns (GetPackageResponse);
// Returns the status of a single package.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the requested package is unknown
rpc GetPackageStatus (GetPackageStatusRequest) returns (GetPackageStatusResponse);
}

View File

@ -22,8 +22,6 @@ service TimeService {
rpc GetTime (GetTimeRequest) returns (stream GetTimeResponse);
// Allows clients to change the ledger's clock in an atomic get-and-set operation.
// Errors:
// - ``INVALID_ARGUMENT``: if ``current_time`` is invalid (it MUST precisely match the current time as it's known to the ledger server)
rpc SetTime (SetTimeRequest) returns (google.protobuf.Empty);
}

View File

@ -19,66 +19,28 @@ service TransactionService {
// Read the ledger's filtered transaction stream for a set of parties.
// Lists only creates and archives, but not other events.
// Omits all events on transient contracts, i.e., contracts that were both created and archived in the same transaction.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (e.g. if ``before`` is not before ``end``)
// - ``FAILED_PRECONDITION``: if the ledger has been pruned after the subscription start offset
// - ``OUT_OF_RANGE``: if the ``begin`` parameter value is not before the end of the ledger
rpc GetTransactions (GetTransactionsRequest) returns (stream GetTransactionsResponse);
// Read the ledger's complete transaction tree stream for a set of parties.
// The stream can be filtered only by parties, but not templates (template filter must be empty).
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (e.g. if ``before`` is not before ``end``)
// - ``FAILED_PRECONDITION``: if the ledger has been pruned after the subscription start offset
// - ``OUT_OF_RANGE``: if the ``begin`` parameter value is not before the end of the ledger
rpc GetTransactionTrees (GetTransactionsRequest) returns (stream GetTransactionTreesResponse);
// Lookup a transaction tree by the ID of an event that appears within it.
// For looking up a transaction instead of a transaction tree, please see GetFlatTransactionByEventId
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or no such transaction exists
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (e.g. if requesting parties are invalid or empty)
rpc GetTransactionByEventId (GetTransactionByEventIdRequest) returns (GetTransactionResponse);
// Lookup a transaction tree by its ID.
// For looking up a transaction instead of a transaction tree, please see GetFlatTransactionById
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or no such transaction exists
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (e.g. if requesting parties are invalid or empty)
rpc GetTransactionById (GetTransactionByIdRequest) returns (GetTransactionResponse);
// Lookup a transaction by the ID of an event that appears within it.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or no such transaction exists
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (e.g. if requesting parties are invalid or empty)
rpc GetFlatTransactionByEventId (GetTransactionByEventIdRequest) returns (GetFlatTransactionResponse);
// Lookup a transaction by its ID.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id or no such transaction exists
// - ``INVALID_ARGUMENT``: if the payload is malformed or is missing required fields (e.g. if requesting parties are invalid or empty)
rpc GetFlatTransactionById (GetTransactionByIdRequest) returns (GetFlatTransactionResponse);
// Get the current ledger end.
// Subscriptions started with the returned offset will serve transactions created after this RPC was called.
// Errors:
// - ``UNAUTHENTICATED``: if the request does not include a valid access token
// - ``PERMISSION_DENIED``: if the claims in the token are insufficient to perform a given operation
// - ``NOT_FOUND``: if the request does not include a valid ledger id
rpc GetLedgerEnd (GetLedgerEndRequest) returns (GetLedgerEndResponse);
}