Skip to content

har00ga/ethereumapis

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ethereum APIs

Build status Discord Gitter ETH2.0_Spec_Version 0.8.1

This repository hosts Prysm's service interface definitions for the Ethereum 2.0 API. These protocol buffer service definitions support gRPC as well as JSON over HTTP.

Need assistance?

More indepth descriptions of each service are available in this section of our official documentation. For more general information on the functionality of gRPC and protocol buffers, see the gRPC guide. If you still have questions, feel free to stop by either our Discord or Gitter and a member of the team or our community will be happy to assist you.

Services

Package Service Version Description
eth BeaconChain v1alpha1 This service is used to retrieve critical data relevant to the Ethereum 2.0 phase 0 beacon chain, including the most recent head block, current pending deposits, the chain state and more.
eth Node v1alpha1 The Node service returns information about the Ethereum node itself, including versioning and general information as well as network sync status and a list of services currently implemented on the node.
eth Validator v1alpha1 This API provides the information a validator needs to retrieve throughout its lifecycle, including recieved assignments from the network, its current index in the state, as well the rewards and penalties that have been applied to it.

Generating client libraries

Client libraries may be generated using protoc, a language-neutral tool for serializing structured data. Below are instructions for performing an installation and compiling a .proto file.

Dependencies

Compiling with protoc

  1. First, ensure you have the most recent version of protoc installed by issuing the command:
protoc --version
  1. To install the Go protocol buffers plugin, issue the command:
go get -u github.com/golang/protobuf/protoc-gen-go

The compiler plugin protoc-gen-go will be installed in $GOBIN, defaulting to $GOPATH/bin. It must be in your $PATH for protoc to locate it.

  1. The compiler can now be run. Note that this command requires a few parameters; namely a source directly, a destination directory and a path to the .proto file itself. Example:
protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/node.proto

The above command will generate a node.pb.go file in your specified destination directory.

Additional information

RESTful endpoints (gRPC Transcoding)

All of the gRPC services should define JSON over HTTP endpoints by specifying HTTPRules for such. Developers may choose to bundle a REST service of gRPC with their client implementation binaries, or alternatively, they may use a JSON encoding proxy such as Envoy Proxy, grpc-gateway, etc.

For more information on gRPC transcoding, see the examples found in google/api/http.proto.

An example:

service Messaging {
    rpc GetMessage(GetMessageRequest) returns (Message) {
        option (google.api.http) = {
            get: "/v1/{name=messages/*}"
        };
    }
    message GetMessageRequest {
        string name = 1; // Mapped to URL Path.
    }
    message Message {
        string text = 1; // The resource content.
    }
}

This enables an HTTP REST to gRPC mapping, as shown below:

HTTP gRPC
GET /v1/messages/123456 GetMessage(name: "messages/123456")

JSON mapping

The majority of field primative types for Ethereum are either bytes or uint64. The canonical JSON mapping for those fields are a Base64 encoded string for bytes, or a string representation of uint64. Since JavaScript loses precision for values over MAX_SAFE_INTEGER, uint64 must be a JSON string in order to accommodate those values. If the field value not changed and is still set to protobuf's default, this field will be omitted from the JSON encoding entirely.

For more details on JSON mapping for other types, view the relevent section in the proto3 language guide.

Helpful gRPC tooling and resources

Contributing

We have put all of our contribution guidelines into CONTRIBUTING.md! Check it out to get started.

License

GNU General Public License v3.0

About

A collection of public Ethereum APIs

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%