Add a gRPC gateway (#2604)

This commit is contained in:
Preston Van Loon 2019-06-02 11:33:44 -04:00 committed by terence tsao
parent 71b5d5beec
commit 9e98e914a1
20 changed files with 929 additions and 191 deletions

View File

@ -32,6 +32,24 @@ alias(
],
)
# Protobuf gRPC compiler without gogoproto. Required for gRPC gateway.
alias(
name = "grpc_nogogo_proto_compiler",
actual = "@io_bazel_rules_go//proto:go_grpc",
visibility = [
"//proto:__subpackages__",
],
)
# Protobuf gRPC gateway compiler
alias(
name = "grpc_gateway_proto_compiler",
actual = "@grpc_ecosystem_grpc_gateway//protoc-gen-grpc-gateway:go_gen_grpc_gateway",
visibility = [
"//proto:__subpackages__",
],
)
gometalinter(
name = "gometalinter",
config = "//:.gometalinter.json",
@ -44,8 +62,8 @@ gometalinter(
goimports(
name = "goimports",
display_diffs = True,
write = False,
prefix = prefix,
write = False,
)
workspace_binary(
@ -55,6 +73,8 @@ workspace_binary(
nogo(
name = "nogo",
config = "nogo_config.json",
visibility = ["//visibility:public"],
deps = [
"@org_golang_x_tools//go/analysis/passes/unsafeptr:go_tool_library",
"@org_golang_x_tools//go/analysis/passes/unreachable:go_tool_library",
@ -87,6 +107,4 @@ nogo(
"@org_golang_x_tools//go/analysis/passes/inspect:go_tool_library",
"@org_golang_x_tools//go/analysis/passes/asmdecl:go_tool_library",
],
visibility = ["//visibility:public"],
config = "nogo_config.json",
)

View File

@ -129,11 +129,21 @@ http_archive(
url = "https://github.com/kubernetes/repo-infra/archive/df02ded38f9506e5bbcbf21702034b4fef815f2f.tar.gz",
)
http_archive(
name = "com_github_bazelbuild_buildtools",
strip_prefix = "buildtools-bf564b4925ab5876a3f64d8b90fab7f769013d42",
url = "https://github.com/bazelbuild/buildtools/archive/bf564b4925ab5876a3f64d8b90fab7f769013d42.zip",
)
load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies")
buildifier_dependencies()
http_archive(
name = "com_github_prysmaticlabs_go_ssz",
sha256 = "9e753a6e5c4f6f7f3b4af584f326b1c650aee6af85fc98416fbe7d1579d6e4d7",
strip_prefix = "go-ssz-85eecc65d2c7a3b20501fe662210e5045f7bcbe1",
url = "https://github.com/prysmaticlabs/go-ssz/archive/85eecc65d2c7a3b20501fe662210e5045f7bcbe1.tar.gz",
sha256 = "9e753a6e5c4f6f7f3b4af584f326b1c650aee6af85fc98416fbe7d1579d6e4d7",
)
load("@com_github_prysmaticlabs_go_ssz//:deps.bzl", "go_ssz_dependencies")
@ -1101,3 +1111,15 @@ go_repository(
commit = "13fe31bbdd7a6f706b9114e188cdb53856be4d64",
importpath = "github.com/joonix/log",
)
go_repository(
name = "grpc_ecosystem_grpc_gateway",
commit = "8fd5fd9d19ce68183a6b0934519dfe7fe6269612",
importpath = "github.com/grpc-ecosystem/grpc-gateway",
)
go_repository(
name = "com_github_ghodss_yaml",
commit = "25d852aebe32c875e9c044af3eef9c7dc6bc777f",
importpath = "github.com/ghodss/yaml",
)

View File

@ -1,4 +1,4 @@
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
@ -8,6 +8,9 @@ go_library(
"main.go",
"usage.go",
],
data = [
"//proto/beacon/rpc/v1:swagger",
],
importpath = "github.com/prysmaticlabs/prysm/beacon-chain",
visibility = ["//beacon-chain:__subpackages__"],
deps = [
@ -69,3 +72,11 @@ go_binary(
embed = [":go_default_library"],
visibility = ["//beacon-chain:__subpackages__"],
)
go_test(
name = "go_default_test",
size = "small",
srcs = ["usage_test.go"],
embed = [":go_default_library"],
deps = ["@com_github_urfave_cli//:go_default_library"],
)

View File

@ -0,0 +1,23 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"gateway.go",
"handlers.go",
"log.go",
],
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/gateway",
visibility = [
"//beacon-chain/gateway/server:__pkg__",
"//beacon-chain/node:__pkg__",
],
deps = [
"//proto/beacon/rpc/v1:v1_grpc_gateway_proto",
"//shared:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@grpc_ecosystem_grpc_gateway//runtime:go_default_library",
"@org_golang_google_grpc//:go_default_library",
"@org_golang_google_grpc//connectivity:go_default_library",
],
)

View File

@ -0,0 +1,144 @@
package gateway
import (
"context"
"fmt"
"net"
"net/http"
"time"
gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1_gateway"
"github.com/prysmaticlabs/prysm/shared"
"google.golang.org/grpc"
"google.golang.org/grpc/connectivity"
)
var _ = shared.Service(&Gateway{})
// Gateway is the gRPC gateway to serve HTTP JSON traffic as a proxy and forward
// it to the beacon-chain gRPC server.
type Gateway struct {
conn *grpc.ClientConn
ctx context.Context
cancel context.CancelFunc
gatewayAddr string
remoteAddr string
server *http.Server
mux *http.ServeMux
startFailure error
}
// Start the gateway service. This serves the HTTP JSON traffic on the specified
// port.
func (g *Gateway) Start() {
ctx, cancel := context.WithCancel(g.ctx)
g.cancel = cancel
log.WithField("address", g.gatewayAddr).Info("Starting gRPC gateway.")
conn, err := dial(ctx, "tcp", g.remoteAddr)
if err != nil {
log.WithError(err).Error("Failed to connect to gRPC server")
g.startFailure = err
return
}
g.conn = conn
gwmux := gwruntime.NewServeMux()
for _, f := range []func(context.Context, *gwruntime.ServeMux, *grpc.ClientConn) error{
pb.RegisterBeaconServiceHandler,
} {
if err := f(ctx, gwmux, conn); err != nil {
log.WithError(err).Error("Failed to start gateway")
g.startFailure = err
return
}
}
g.mux.Handle("/", gwmux)
g.server = &http.Server{
Addr: g.gatewayAddr,
Handler: g.mux,
}
go func() {
if err := g.server.ListenAndServe(); err != http.ErrServerClosed {
log.WithError(err).Error("Failed to listen and serve")
g.startFailure = err
return
}
}()
return
}
// Status of grpc gateway. Returns an error if this service is unhealthy.
func (g *Gateway) Status() error {
if g.startFailure != nil {
return g.startFailure
}
if s := g.conn.GetState(); s != connectivity.Ready {
return fmt.Errorf("grpc server is %s", s)
}
return nil
}
// Stop the gateway with a graceful shutdown.
func (g *Gateway) Stop() error {
if err := g.server.Shutdown(g.ctx); err != nil {
log.WithError(err).Error("Failed to shut down server")
}
if g.cancel != nil {
g.cancel()
}
return nil
}
// New returns a new gateway server which translates HTTP into gRPC.
// Accepts a context and optional http.ServeMux.
func New(ctx context.Context, remoteAddress, gatewayAddress string, mux *http.ServeMux) *Gateway {
if mux == nil {
mux = http.NewServeMux()
}
return &Gateway{
remoteAddr: remoteAddress,
gatewayAddr: gatewayAddress,
ctx: ctx,
mux: mux,
}
}
// dial the gRPC server.
func dial(ctx context.Context, network, addr string) (*grpc.ClientConn, error) {
switch network {
case "tcp":
return dialTCP(ctx, addr)
case "unix":
return dialUnix(ctx, addr)
default:
return nil, fmt.Errorf("unsupported network type %q", network)
}
}
// dialTCP creates a client connection via TCP.
// "addr" must be a valid TCP address with a port number.
func dialTCP(ctx context.Context, addr string) (*grpc.ClientConn, error) {
return grpc.DialContext(ctx, addr, grpc.WithInsecure())
}
// dialUnix creates a client connection via a unix domain socket.
// "addr" must be a valid path to the socket.
func dialUnix(ctx context.Context, addr string) (*grpc.ClientConn, error) {
d := func(addr string, timeout time.Duration) (net.Conn, error) {
return net.DialTimeout("unix", addr, timeout)
}
return grpc.DialContext(ctx, addr, grpc.WithInsecure(), grpc.WithDialer(d))
}

View File

@ -0,0 +1,26 @@
package gateway
import (
"net/http"
"path"
"strings"
)
// Swagger directory for the runtime files provided by bazel data.
const swaggerDir = "proto/beacon/rpc/v1/"
// SwaggerServer returns swagger specification files located under "/swagger/"
func SwaggerServer() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if !strings.HasSuffix(r.URL.Path, ".swagger.json") {
log.Debugf("Not Found: %s", r.URL.Path)
http.NotFound(w, r)
return
}
log.Debugf("Serving %s\n", r.URL.Path)
p := strings.TrimPrefix(r.URL.Path, "/swagger/")
p = path.Join(swaggerDir, p)
http.ServeFile(w, r, p)
}
}

View File

@ -0,0 +1,5 @@
package gateway
import "github.com/sirupsen/logrus"
var log = logrus.WithField("prefix", "gateway")

View File

@ -0,0 +1,52 @@
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
go_library(
name = "go_default_library",
srcs = ["main.go"],
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/gateway/server",
visibility = ["//visibility:private"],
deps = [
"//beacon-chain/gateway:go_default_library",
"@com_github_joonix_log//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@grpc_ecosystem_grpc_gateway//runtime:go_default_library",
],
)
go_binary(
name = "server",
embed = [":go_default_library"],
visibility = ["//visibility:private"],
)
go_image(
name = "image",
srcs = [
"main.go",
],
goarch = "amd64",
goos = "linux",
importpath = "github.com/prysmaticlabs/prysm/beacon-chain/gateway/server",
race = "off",
tags = ["manual"],
visibility = ["//visibility:private"],
deps = [
"//beacon-chain/gateway:go_default_library",
"@com_github_joonix_log//:go_default_library",
"@com_github_sirupsen_logrus//:go_default_library",
"@grpc_ecosystem_grpc_gateway//runtime:go_default_library",
],
)
container_push(
name = "push_image",
format = "Docker",
image = ":image",
registry = "gcr.io",
repository = "prysmaticlabs/prysm/beacon-chain/gateway",
tag = "latest",
tags = ["manual"],
visibility = ["//visibility:private"],
)

View File

@ -0,0 +1,75 @@
package main
import (
"context"
"flag"
"fmt"
"net/http"
gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime"
joonix "github.com/joonix/log"
"github.com/prysmaticlabs/prysm/beacon-chain/gateway"
"github.com/sirupsen/logrus"
)
// Endpoint describes a gRPC endpoint
type Endpoint struct {
Network, Addr string
}
// Options is a set of options to be passed to Run
type Options struct {
// Addr is the address to listen
Addr string
// GRPCServer defines an endpoint of a gRPC service
GRPCServer Endpoint
// SwaggerDir is a path to a directory from which the server
// serves swagger specs.
SwaggerDir string
// Mux is a list of options to be passed to the grpc-gateway multiplexer
Mux []gwruntime.ServeMuxOption
}
var (
beaconRPC = flag.String("beacon-rpc", "localhost:4000", "Beacon chain gRPC endpoint")
port = flag.Int("port", 8000, "Port to serve on")
debug = flag.Bool("debug", false, "Enable debug logging")
)
func init() {
logrus.SetFormatter(joonix.NewFormatter())
}
var log = logrus.New()
func main() {
flag.Parse()
if *debug {
log.SetLevel(logrus.DebugLevel)
}
mux := http.NewServeMux()
gw := gateway.New(context.Background(), *beaconRPC, fmt.Sprintf("0.0.0.0:%d", *port), mux)
mux.HandleFunc("/swagger/", gateway.SwaggerServer())
mux.HandleFunc("/healthz", healthzServer(gw))
gw.Start()
select {}
}
// healthzServer returns a simple health handler which returns ok.
func healthzServer(gw *gateway.Gateway) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
if err := gw.Status(); err != nil {
http.Error(w, err.Error(), http.StatusBadGateway)
return
}
if _, err := fmt.Fprintln(w, "ok"); err != nil {
log.WithError(err).Error("failed to respond to healthz")
}
}
}

View File

@ -7,6 +7,10 @@ import (
"runtime"
joonix "github.com/joonix/log"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
"github.com/x-cray/logrus-prefixed-formatter"
"github.com/prysmaticlabs/prysm/beacon-chain/node"
"github.com/prysmaticlabs/prysm/beacon-chain/utils"
"github.com/prysmaticlabs/prysm/shared/cmd"
@ -14,25 +18,49 @@ import (
"github.com/prysmaticlabs/prysm/shared/featureconfig"
"github.com/prysmaticlabs/prysm/shared/logutil"
"github.com/prysmaticlabs/prysm/shared/version"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
prefixed "github.com/x-cray/logrus-prefixed-formatter"
)
func startNode(ctx *cli.Context) error {
verbosity := ctx.GlobalString(cmd.VerbosityFlag.Name)
level, err := logrus.ParseLevel(verbosity)
if err != nil {
return err
}
logrus.SetLevel(level)
var appFlags = []cli.Flag{
utils.NoCustomConfigFlag,
utils.DepositContractFlag,
utils.Web3ProviderFlag,
utils.HTTPWeb3ProviderFlag,
utils.RPCPort,
utils.CertFlag,
utils.KeyFlag,
utils.EnableDBCleanup,
utils.GRPCGatewayPort,
cmd.BootstrapNode,
cmd.NoDiscovery,
cmd.StaticPeers,
cmd.RelayNode,
cmd.P2PPort,
cmd.P2PHost,
cmd.P2PMaxPeers,
cmd.P2PPrivKey,
cmd.P2PWhitelist,
cmd.DataDirFlag,
cmd.VerbosityFlag,
cmd.EnableTracingFlag,
cmd.TracingProcessNameFlag,
cmd.TracingEndpointFlag,
cmd.TraceSampleFractionFlag,
cmd.MonitoringPortFlag,
cmd.DisableMonitoringFlag,
cmd.ClearDB,
cmd.LogFormat,
cmd.MaxGoroutines,
debug.PProfFlag,
debug.PProfAddrFlag,
debug.PProfPortFlag,
debug.MemProfileRateFlag,
debug.CPUProfileFlag,
debug.TraceFlag,
cmd.LogFileName,
}
beacon, err := node.NewBeaconNode(ctx)
if err != nil {
return err
}
beacon.Start()
return nil
func init() {
appFlags = append(appFlags, featureconfig.BeaconChainFlags...)
}
func main() {
@ -43,45 +71,7 @@ func main() {
app.Action = startNode
app.Version = version.GetVersion()
app.Flags = []cli.Flag{
utils.NoCustomConfigFlag,
utils.DepositContractFlag,
utils.Web3ProviderFlag,
utils.HTTPWeb3ProviderFlag,
utils.RPCPort,
utils.CertFlag,
utils.KeyFlag,
utils.EnableDBCleanup,
cmd.BootstrapNode,
cmd.NoDiscovery,
cmd.StaticPeers,
cmd.RelayNode,
cmd.P2PPort,
cmd.P2PHost,
cmd.P2PMaxPeers,
cmd.P2PPrivKey,
cmd.P2PWhitelist,
cmd.DataDirFlag,
cmd.VerbosityFlag,
cmd.EnableTracingFlag,
cmd.TracingProcessNameFlag,
cmd.TracingEndpointFlag,
cmd.TraceSampleFractionFlag,
cmd.MonitoringPortFlag,
cmd.DisableMonitoringFlag,
cmd.ClearDB,
cmd.LogFormat,
cmd.MaxGoroutines,
debug.PProfFlag,
debug.PProfAddrFlag,
debug.PProfPortFlag,
debug.MemProfileRateFlag,
debug.CPUProfileFlag,
debug.TraceFlag,
cmd.LogFileName,
}
app.Flags = append(app.Flags, featureconfig.BeaconChainFlags...)
app.Flags = appFlags
app.Before = func(ctx *cli.Context) error {
format := ctx.GlobalString(cmd.LogFormat.Name)
@ -121,3 +111,19 @@ func main() {
os.Exit(1)
}
}
func startNode(ctx *cli.Context) error {
verbosity := ctx.GlobalString(cmd.VerbosityFlag.Name)
level, err := logrus.ParseLevel(verbosity)
if err != nil {
return err
}
logrus.SetLevel(level)
beacon, err := node.NewBeaconNode(ctx)
if err != nil {
return err
}
beacon.Start()
return nil
}

View File

@ -13,6 +13,7 @@ go_library(
"//beacon-chain/attestation:go_default_library",
"//beacon-chain/blockchain:go_default_library",
"//beacon-chain/db:go_default_library",
"//beacon-chain/gateway:go_default_library",
"//beacon-chain/operations:go_default_library",
"//beacon-chain/powchain:go_default_library",
"//beacon-chain/rpc:go_default_library",

View File

@ -16,6 +16,7 @@ import (
"github.com/prysmaticlabs/prysm/beacon-chain/attestation"
"github.com/prysmaticlabs/prysm/beacon-chain/blockchain"
"github.com/prysmaticlabs/prysm/beacon-chain/db"
"github.com/prysmaticlabs/prysm/beacon-chain/gateway"
"github.com/prysmaticlabs/prysm/beacon-chain/operations"
"github.com/prysmaticlabs/prysm/beacon-chain/powchain"
"github.com/prysmaticlabs/prysm/beacon-chain/rpc"
@ -110,6 +111,10 @@ func NewBeaconNode(ctx *cli.Context) (*BeaconNode, error) {
return nil, err
}
if err := beacon.registerGRPCGateway(ctx); err != nil {
return nil, err
}
if !ctx.GlobalBool(cmd.DisableMonitoringFlag.Name) {
if err := beacon.registerPrometheusService(ctx); err != nil {
return nil, err
@ -397,3 +402,13 @@ func (b *BeaconNode) registerAttestationService() error {
return b.services.RegisterService(attsService)
}
func (b *BeaconNode) registerGRPCGateway(ctx *cli.Context) error {
gatewayPort := ctx.GlobalInt(utils.GRPCGatewayPort.Name)
if gatewayPort > 0 {
selfAddress := fmt.Sprintf("127.0.0.1:%d", ctx.GlobalInt(utils.RPCPort.Name))
gatewayAddress := fmt.Sprintf("127.0.0.1:%d", gatewayPort)
return b.services.RegisterService(gateway.New(context.Background(), selfAddress, gatewayAddress, nil /*optional mux*/))
}
return nil
}

View File

@ -57,6 +57,7 @@ var appHelpFlagGroups = []flagGroup{
cmd.MonitoringPortFlag,
cmd.DisableMonitoringFlag,
cmd.MaxGoroutines,
cmd.ClearDB,
},
},
{
@ -80,6 +81,25 @@ var appHelpFlagGroups = []flagGroup{
utils.CertFlag,
utils.KeyFlag,
utils.EnableDBCleanup,
utils.GRPCGatewayPort,
utils.HTTPWeb3ProviderFlag,
},
},
{
Name: "p2p",
Flags: []cli.Flag{
cmd.P2PHost,
cmd.P2PMaxPeers,
cmd.P2PPrivKey,
cmd.P2PWhitelist,
cmd.StaticPeers,
},
},
{
Name: "log",
Flags: []cli.Flag{
cmd.LogFormat,
cmd.LogFileName,
},
},
{

View File

@ -0,0 +1,41 @@
package main
import (
"testing"
"github.com/urfave/cli"
)
func TestAllFlagsExistInHelp(t *testing.T) {
// If this test is failing, it is because you've recently added/removed a
// flag in beacon chain main.go, but did not add/remove it to the usage.go
// flag grouping (appHelpFlagGroups).
var helpFlags []cli.Flag
for _, group := range appHelpFlagGroups {
helpFlags = append(helpFlags, group.Flags...)
}
for _, flag := range appFlags {
if !doesFlagExist(flag, helpFlags) {
t.Errorf("Flag %s does not exist in help/usage flags.", flag.GetName())
}
}
for _, flag := range helpFlags {
if !doesFlagExist(flag, appFlags) {
t.Errorf("Flag %s does not exist in main.go, "+
"but exists in help flags", flag.GetName())
}
}
}
func doesFlagExist(flag cli.Flag, flags []cli.Flag) bool {
for _, f := range flags {
if f == flag {
return true
}
}
return false
}

View File

@ -28,10 +28,10 @@ var (
Usage: "Deposit contract address. Beacon chain node will listen logs coming from the deposit contract to determine when validator is eligible to participate.",
}
// RPCPort defines a beacon node RPC port to open.
RPCPort = cli.StringFlag{
RPCPort = cli.IntFlag{
Name: "rpc-port",
Usage: "RPC port exposed by a beacon node",
Value: "4000",
Value: 4000,
}
// CertFlag defines a flag for the node's TLS certificate.
CertFlag = cli.StringFlag{
@ -48,4 +48,9 @@ var (
Name: "enable-db-cleanup",
Usage: "Enable automatic DB cleanup routine",
}
// GRPCGatewayPort enables a gRPC gateway to be exposed for Prysm.
GRPCGatewayPort = cli.IntFlag{
Name: "grpc-gateway-port",
Usage: "Enable gRPC gateway for JSON requests",
}
)

View File

@ -9,6 +9,23 @@ spec:
gateways:
- prylabs-wildcard-gateway
http:
- match:
- uri:
prefix: /v1/beacon
- uri:
prefix: /swagger/
route:
- destination:
port:
number: 8000
host: public-api-gateway.beacon-chain.svc.cluster.local
corsPolicy:
allowOrigin:
- "*"
allowHeaders:
- content-type
allowMethods:
- GET
- match:
- uri:
prefix: /faucet.FaucetService
@ -76,4 +93,19 @@ spec:
- grpc-status
- grpc-message
retries:
attempts: 3
attempts: 3
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 8080
host: public-api-ui.beacon-chain.svc.cluster.local
corsPolicy:
allowOrigin:
- "*"
allowHeaders:
- content-type
allowMethods:
- GET

View File

@ -0,0 +1,151 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: public-api-swagger-ui
namespace: beacon-chain
labels:
app: beacon-chain
component: public-api-swagger-ui
version: production
spec:
replicas: 1
selector:
matchLabels:
app: beacon-chain
component: public-api-swagger-ui
version: production
template:
metadata:
labels:
app: beacon-chain
component: public-api-swagger-ui
version: production
spec:
priorityClassName: production-priority
containers:
- name: ui
image: swaggerapi/swagger-ui:v3.0.5
ports:
- containerPort: 8080
name: http-ui
env:
- name: API_URL
value: https://api.prylabs.net/swagger/services.swagger.json
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 3
periodSeconds: 15
resources:
requests:
cpu: "100m"
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: public-api-swagger-ui
namespace: beacon-chain
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: public-api-swagger-ui
minReplicas: 1
maxReplicas: 3
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 80
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: public-api-gateway
namespace: beacon-chain
labels:
app: beacon-chain
component: public-api-gateway
version: production
spec:
replicas: 1
selector:
matchLabels:
app: beacon-chain
component: public-api-gateway
version: production
template:
metadata:
labels:
app: beacon-chain
component: public-api-gateway
version: production
spec:
priorityClassName: production-priority
containers:
- name: server
image: gcr.io/prysmaticlabs/prysm/beacon-chain/gateway:latest
args:
- --beacon-rpc=beacon-chain.beacon-chain.svc.cluster.local:4000
- --port=8000
ports:
- containerPort: 8000
name: http-gateway
livenessProbe:
httpGet:
path: /healthz
port: 8000
initialDelaySeconds: 3
periodSeconds: 15
resources:
requests:
cpu: "100m"
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: public-api-gateway
namespace: beacon-chain
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: public-api-gateway
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 80
---
kind: Service
apiVersion: v1
metadata:
name: public-api-gateway
namespace: beacon-chain
spec:
selector:
app: beacon-chain
component: public-api-gateway
ports:
- port: 8000
targetPort: 8000
name: http
type: ClusterIP
---
kind: Service
apiVersion: v1
metadata:
name: public-api-ui
namespace: beacon-chain
spec:
selector:
app: beacon-chain
component: public-api-swagger-ui
ports:
- port: 8080
targetPort: 8080
name: http
type: ClusterIP

View File

@ -1,17 +1,37 @@
# gazelle:ignore
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
load("@grpc_ecosystem_grpc_gateway//protoc-gen-swagger:defs.bzl", "protoc_gen_swagger")
go_proto_library(
name = "v1_go_proto",
compiler = "//:grpc_proto_compiler",
importpath = "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1",
proto = ":v1_proto",
visibility = ["//visibility:public"],
deps = [
"//proto/beacon/p2p/v1:go_default_library",
"//proto/sharding/p2p/v1:go_default_library",
"@go_googleapis//google/api:annotations_go_proto",
"@grpc_ecosystem_grpc_gateway//protoc-gen-swagger/options:options_go_proto",
],
)
go_proto_library(
name = "v1_grpc_gateway_proto",
compilers = [
"//:grpc_nogogo_proto_compiler",
"//:grpc_gateway_proto_compiler",
],
importpath = "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1_gateway",
proto = ":v1_proto",
visibility = ["//visibility:public"],
deps = [
"//proto/beacon/p2p/v1:go_default_library",
"//proto/sharding/p2p/v1:go_default_library",
"@go_googleapis//google/api:annotations_go_proto",
"@grpc_ecosystem_grpc_gateway//protoc-gen-swagger/options:options_go_proto",
],
compiler = "//:grpc_proto_compiler",
)
go_library(
@ -23,12 +43,22 @@ go_library(
proto_library(
name = "v1_proto",
srcs = ["services.proto"],
srcs = [
"services.proto",
],
visibility = ["//visibility:public"],
deps = [
"//proto/beacon/p2p/v1:v1_proto",
"//proto/sharding/p2p/v1:v1_proto",
"@com_google_protobuf//:empty_proto",
"@com_google_protobuf//:timestamp_proto",
"@go_googleapis//google/api:annotations_proto",
"@grpc_ecosystem_grpc_gateway//protoc-gen-swagger/options:options_proto",
],
)
protoc_gen_swagger(
name = "swagger",
proto = ":v1_proto",
visibility = ["//visibility:public"],
)

View File

@ -9,7 +9,9 @@ import (
fmt "fmt"
proto "github.com/gogo/protobuf/proto"
types "github.com/gogo/protobuf/types"
_ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options"
v1 "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
io "io"
math "math"
@ -1763,130 +1765,150 @@ func init() {
func init() { proto.RegisterFile("proto/beacon/rpc/v1/services.proto", fileDescriptor_9eb4e94b85965285) }
var fileDescriptor_9eb4e94b85965285 = []byte{
// 1967 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4b, 0x6f, 0xdb, 0xc8,
0x1d, 0x5f, 0xca, 0xb2, 0x23, 0xff, 0x25, 0x5b, 0xf4, 0xf8, 0x21, 0x45, 0xce, 0xc3, 0xcb, 0x05,
0x1a, 0x27, 0x68, 0xe4, 0x44, 0x59, 0x64, 0x77, 0x13, 0x04, 0x5b, 0xc9, 0x96, 0x13, 0x75, 0x0d,
0xc5, 0xa1, 0xb4, 0x4e, 0x5b, 0x14, 0x20, 0x46, 0xd2, 0x58, 0x66, 0x2d, 0x71, 0x18, 0x72, 0x64,
0xc4, 0x97, 0x2d, 0x7a, 0x2c, 0x7a, 0xeb, 0x07, 0x68, 0xbf, 0x44, 0x8b, 0x9e, 0x7b, 0xeb, 0xb1,
0x9f, 0xa0, 0x28, 0x82, 0xa2, 0xbd, 0xf7, 0x13, 0x14, 0xf3, 0x20, 0x45, 0x51, 0xa2, 0x2d, 0xf7,
0x46, 0xfe, 0x9f, 0x33, 0xbf, 0xf9, 0xbf, 0x66, 0xc0, 0x70, 0x3d, 0xca, 0xe8, 0x5e, 0x87, 0xe0,
0x2e, 0x75, 0xf6, 0x3c, 0xb7, 0xbb, 0x77, 0xf1, 0x74, 0xcf, 0x27, 0xde, 0x85, 0xdd, 0x25, 0x7e,
0x59, 0x30, 0xd1, 0x16, 0x61, 0x67, 0xc4, 0x23, 0xa3, 0x61, 0x59, 0x8a, 0x95, 0x3d, 0xb7, 0x5b,
0xbe, 0x78, 0x5a, 0xda, 0xee, 0x53, 0xda, 0x1f, 0x90, 0x3d, 0x21, 0xd5, 0x19, 0x9d, 0xee, 0x91,
0xa1, 0xcb, 0x2e, 0xa5, 0x52, 0xe9, 0x7e, 0x9c, 0xc9, 0xec, 0x21, 0xf1, 0x19, 0x1e, 0xba, 0x81,
0xc0, 0x84, 0x67, 0xb7, 0xe2, 0x72, 0xcf, 0xec, 0xd2, 0x0d, 0xdc, 0x1a, 0xc7, 0xb0, 0x7d, 0x82,
0x07, 0x76, 0x0f, 0x33, 0xea, 0x1d, 0x13, 0xef, 0x94, 0x7a, 0x43, 0xec, 0x74, 0x89, 0x49, 0x3e,
0x8c, 0x88, 0xcf, 0x10, 0x82, 0xb4, 0x3f, 0xa0, 0xac, 0xa8, 0xed, 0x68, 0xbb, 0x69, 0x53, 0x7c,
0xa3, 0xbb, 0x00, 0xee, 0xa8, 0x33, 0xb0, 0xbb, 0xd6, 0x39, 0xb9, 0x2c, 0xa6, 0x76, 0xb4, 0xdd,
0x9c, 0xb9, 0x2c, 0x29, 0xdf, 0x91, 0x4b, 0xe3, 0x5f, 0x1a, 0xdc, 0x99, 0x6d, 0xd2, 0x77, 0xa9,
0xe3, 0x13, 0x54, 0x84, 0x5b, 0x1d, 0x3c, 0xe0, 0x24, 0x65, 0x36, 0xf8, 0x45, 0x0f, 0x41, 0x67,
0x94, 0xe1, 0x81, 0x75, 0x11, 0xe8, 0xfb, 0xc2, 0x7e, 0xda, 0xcc, 0x0b, 0x7a, 0x68, 0xd6, 0x47,
0xcf, 0xa1, 0x20, 0x45, 0x71, 0x97, 0xd9, 0x17, 0x24, 0xaa, 0xb1, 0x20, 0x34, 0x36, 0x05, 0xbb,
0x2a, 0xb8, 0x11, 0xbd, 0xd7, 0xb0, 0x83, 0x2f, 0x88, 0x87, 0xfb, 0x64, 0x4a, 0xd3, 0x0a, 0x56,
0x95, 0xde, 0xd1, 0x76, 0x53, 0xe6, 0x5d, 0x25, 0x17, 0x33, 0x51, 0x93, 0x42, 0xc6, 0x2b, 0x28,
0x85, 0x34, 0x21, 0x82, 0x99, 0x4d, 0x9d, 0x00, 0xb7, 0xfb, 0x90, 0x1d, 0x63, 0xe4, 0x17, 0xb5,
0x9d, 0x85, 0xdd, 0x9c, 0x09, 0x21, 0x48, 0xbe, 0xf1, 0xc7, 0x54, 0x04, 0xf8, 0xa8, 0xbe, 0x02,
0xe9, 0x39, 0x6c, 0x62, 0x49, 0x25, 0x3d, 0x6b, 0xca, 0x54, 0x2d, 0x55, 0xd4, 0xcc, 0xf5, 0x50,
0xe0, 0x38, 0xb4, 0x8b, 0x4e, 0x20, 0xe3, 0x33, 0xcc, 0x46, 0x3e, 0xe1, 0xd0, 0x2d, 0xec, 0x66,
0x2b, 0x2f, 0xca, 0xb3, 0x23, 0xab, 0x7c, 0x85, 0xfb, 0x72, 0x4b, 0xd8, 0x30, 0x43, 0x5b, 0x25,
0x17, 0x96, 0x24, 0x2d, 0x76, 0xfc, 0x5a, 0xec, 0xf8, 0xd1, 0x6b, 0x58, 0x92, 0x4a, 0xe2, 0xe4,
0xb2, 0x95, 0xbd, 0x6b, 0xdd, 0x2b, 0x5f, 0xca, 0xb5, 0xa9, 0xd4, 0x8d, 0x17, 0x50, 0xa8, 0x7f,
0xb4, 0x19, 0xe9, 0x8d, 0x4f, 0x6f, 0x6e, 0x74, 0x5f, 0x42, 0x71, 0x5a, 0x57, 0x21, 0x7b, 0xad,
0x72, 0x0d, 0xb6, 0xaa, 0x8c, 0xf1, 0x34, 0xe2, 0x90, 0x1c, 0x60, 0x86, 0x03, 0xbf, 0x1b, 0xb0,
0xe8, 0x9f, 0x61, 0xaf, 0xa7, 0xe2, 0x56, 0xfe, 0x84, 0x39, 0x92, 0x1a, 0xe7, 0x88, 0xf1, 0x29,
0x05, 0x85, 0x29, 0x23, 0x6a, 0x01, 0x5f, 0x41, 0x51, 0x22, 0x61, 0x75, 0x06, 0xb4, 0x7b, 0x6e,
0x79, 0x94, 0x32, 0xeb, 0x0c, 0xfb, 0x67, 0xcf, 0x2a, 0x0a, 0xce, 0x4d, 0xc9, 0xaf, 0x71, 0xb6,
0x49, 0x29, 0x7b, 0x23, 0x98, 0xe8, 0x25, 0x94, 0x88, 0x4b, 0xbb, 0x67, 0x56, 0x87, 0x8e, 0x9c,
0x1e, 0xf6, 0x2e, 0x27, 0x54, 0x65, 0x22, 0x16, 0x84, 0x44, 0x4d, 0x09, 0x44, 0x94, 0x1f, 0x40,
0xfe, 0x57, 0x23, 0x9f, 0xd9, 0xa7, 0x36, 0xe9, 0x59, 0x42, 0x48, 0x25, 0xca, 0x6a, 0x48, 0xae,
0x73, 0x2a, 0x7a, 0x05, 0xdb, 0x63, 0xc1, 0xe9, 0x15, 0xa6, 0x85, 0x9b, 0x62, 0x28, 0x12, 0x5f,
0xe4, 0x11, 0xe8, 0x03, 0xcc, 0x37, 0x6e, 0x75, 0x3d, 0xea, 0xfb, 0x03, 0xdb, 0x39, 0x2f, 0x2e,
0x8a, 0x48, 0xf8, 0x7c, 0x2a, 0x12, 0xdc, 0x8a, 0xcb, 0x23, 0x61, 0x3f, 0x10, 0x34, 0xf3, 0x52,
0x35, 0x24, 0xa0, 0x6d, 0x58, 0x3e, 0x23, 0xb8, 0x67, 0x09, 0x80, 0x97, 0xc4, 0x7a, 0x33, 0x9c,
0xd0, 0xe2, 0x20, 0xff, 0x56, 0x83, 0xd2, 0x31, 0x71, 0x7a, 0xb6, 0xd3, 0x8f, 0x60, 0x1d, 0x46,
0xc9, 0x4b, 0x28, 0x9d, 0xda, 0x03, 0x46, 0x3c, 0xcb, 0x23, 0xb8, 0x77, 0x69, 0x9d, 0x52, 0xcf,
0xb2, 0x9d, 0xee, 0x60, 0xe4, 0xdb, 0xd4, 0x11, 0x48, 0x67, 0xcc, 0x82, 0x94, 0x30, 0xb9, 0xc0,
0x21, 0xf5, 0x1a, 0x01, 0x1b, 0x95, 0x61, 0xdd, 0xf5, 0xa8, 0x4b, 0x7d, 0x3c, 0x50, 0x20, 0x44,
0xce, 0x78, 0x2d, 0x60, 0x89, 0xcd, 0x8b, 0xb5, 0x8c, 0x60, 0x7b, 0xe6, 0x52, 0xd4, 0x99, 0x9f,
0xc0, 0x86, 0x2b, 0xd9, 0x16, 0x8e, 0xf0, 0x45, 0xf4, 0x65, 0x2b, 0x5f, 0x24, 0x21, 0x13, 0xb1,
0x65, 0xae, 0xbb, 0xd3, 0xf6, 0x8d, 0x77, 0x80, 0xf6, 0xcf, 0xb0, 0xed, 0xb4, 0x18, 0xf6, 0x58,
0xb4, 0xc2, 0xfa, 0x9c, 0x40, 0x7a, 0x6a, 0x9b, 0xc1, 0x2f, 0xfa, 0x1c, 0x72, 0x7d, 0xe2, 0x10,
0xdf, 0xf6, 0x2d, 0xde, 0x2a, 0xd4, 0x7e, 0xb2, 0x8a, 0xd6, 0xb6, 0x87, 0xc4, 0xf8, 0x43, 0x0a,
0x56, 0x8f, 0xc5, 0xfe, 0x48, 0x34, 0xdf, 0xb0, 0x47, 0x1c, 0x19, 0x04, 0x2a, 0x48, 0x41, 0x92,
0xf8, 0xb1, 0x73, 0x01, 0x0e, 0x8f, 0xe5, 0x8c, 0x86, 0x1d, 0xe2, 0x29, 0xab, 0xc0, 0x49, 0x4d,
0x41, 0x41, 0x5f, 0xc0, 0x8a, 0x87, 0x9d, 0x1e, 0xa6, 0x96, 0x47, 0x2e, 0x08, 0x1e, 0x88, 0xd8,
0xcb, 0x99, 0x39, 0x49, 0x34, 0x05, 0x0d, 0xed, 0xc1, 0x7a, 0x04, 0x1c, 0xab, 0x63, 0xb3, 0x21,
0xf6, 0xcf, 0x55, 0xc4, 0xa1, 0x08, 0xab, 0x26, 0x39, 0xe8, 0x05, 0xdc, 0x8e, 0x2a, 0xe0, 0x7e,
0xdf, 0x23, 0x7d, 0xcc, 0x88, 0xe5, 0xdb, 0xfd, 0xe2, 0xe2, 0xce, 0xc2, 0x6e, 0xda, 0x2c, 0x44,
0x04, 0xaa, 0x01, 0xbf, 0x65, 0xf7, 0xd1, 0xd7, 0xb0, 0x1c, 0x36, 0x4b, 0x11, 0x59, 0xd9, 0x4a,
0xa9, 0x2c, 0xdb, 0x69, 0x39, 0x68, 0xa7, 0xe5, 0x76, 0x20, 0x61, 0x8e, 0x85, 0x8d, 0x57, 0x90,
0x0f, 0xf1, 0x51, 0x80, 0x3f, 0x82, 0xb5, 0xa4, 0x5c, 0xce, 0x77, 0x26, 0x13, 0xc4, 0xf8, 0x0a,
0x36, 0x94, 0xba, 0xd7, 0x70, 0x7a, 0xe4, 0x63, 0x04, 0xe4, 0x28, 0x86, 0x5a, 0x1c, 0x43, 0xe3,
0x31, 0x6c, 0xc6, 0x14, 0x95, 0xf7, 0x0d, 0x58, 0xb4, 0x39, 0x21, 0x28, 0x4b, 0xe2, 0xc7, 0xa8,
0xc0, 0x1a, 0xaf, 0xac, 0x84, 0xbb, 0x0e, 0x45, 0xef, 0x02, 0x70, 0x30, 0x88, 0x58, 0x68, 0x50,
0xbc, 0xfd, 0x40, 0xcc, 0x78, 0x09, 0xab, 0x32, 0xbc, 0x42, 0x85, 0x87, 0xa0, 0x47, 0x21, 0x8e,
0x9c, 0x7f, 0x3e, 0x42, 0xe7, 0x5b, 0x33, 0x9e, 0xc3, 0x66, 0x58, 0x6e, 0x27, 0x76, 0x76, 0x75,
0xc7, 0x30, 0xca, 0xb0, 0x15, 0xd7, 0xbb, 0x72, 0x63, 0x16, 0x6c, 0xef, 0xd3, 0xe1, 0xd0, 0x66,
0x8c, 0x90, 0xaa, 0xef, 0xdb, 0x7d, 0x67, 0x48, 0x1c, 0x16, 0x6d, 0x0e, 0xb2, 0x4a, 0x8a, 0x98,
0x0f, 0x70, 0x14, 0x24, 0x91, 0x25, 0xf1, 0x06, 0x90, 0x9a, 0x6a, 0x00, 0x04, 0x0a, 0x2a, 0x97,
0x0f, 0x88, 0x4b, 0x7d, 0x9b, 0x8d, 0xf3, 0xf8, 0xa7, 0xa0, 0x07, 0x79, 0xdc, 0x53, 0x3c, 0x95,
0xc3, 0xf7, 0x93, 0x72, 0x58, 0xd9, 0x30, 0xf3, 0xee, 0xa4, 0x4d, 0xe3, 0x3f, 0xa9, 0x99, 0x1b,
0x09, 0x7d, 0xf5, 0x01, 0x70, 0x48, 0x55, 0x5e, 0x5e, 0x27, 0x75, 0xd3, 0x2b, 0x0c, 0xcd, 0xe4,
0x45, 0x4c, 0x97, 0xfe, 0xa1, 0xc1, 0xfa, 0x0c, 0x19, 0x74, 0x07, 0x96, 0xbb, 0x01, 0x59, 0xf8,
0x4f, 0x9b, 0x63, 0xc2, 0xb8, 0x19, 0xa6, 0x66, 0x35, 0xc3, 0x85, 0xc8, 0xc0, 0x78, 0x1f, 0xb2,
0xb6, 0x6f, 0xb9, 0x2a, 0x76, 0x45, 0x3e, 0x67, 0x4c, 0xb0, 0xfd, 0x20, 0x9a, 0x63, 0x01, 0xb2,
0x18, 0x1f, 0x29, 0xbe, 0x0d, 0x47, 0x0a, 0x9e, 0xa7, 0xab, 0x95, 0x07, 0xf3, 0x8e, 0x14, 0xc1,
0x28, 0xf1, 0x97, 0x14, 0x14, 0x12, 0xc6, 0x8d, 0x88, 0x71, 0xed, 0xff, 0x32, 0x8e, 0xbe, 0x81,
0xdb, 0x84, 0x9d, 0x3d, 0x0d, 0xe2, 0x41, 0x75, 0x8b, 0x89, 0x4a, 0xc8, 0x67, 0xfb, 0xa7, 0xea,
0xdc, 0x45, 0xcb, 0x50, 0x55, 0xf1, 0x4b, 0xd8, 0x0a, 0xb4, 0xc2, 0xc6, 0x64, 0x45, 0xe0, 0xdb,
0x50, 0xdc, 0xb0, 0x2d, 0xf1, 0x56, 0x23, 0x52, 0x32, 0x9c, 0xd8, 0x54, 0x2b, 0x4f, 0xcb, 0x29,
0x79, 0x4c, 0x97, 0xbd, 0xfc, 0x5b, 0xb8, 0x23, 0x0c, 0x70, 0x41, 0xdb, 0xb1, 0x22, 0x6a, 0x1f,
0x46, 0x64, 0x44, 0x04, 0xd4, 0x69, 0xf3, 0x76, 0x20, 0xd3, 0x70, 0xc6, 0xa3, 0xe0, 0x3b, 0x2e,
0x60, 0xbc, 0x03, 0xbd, 0xce, 0xd7, 0x1e, 0x9d, 0x5f, 0x5e, 0xc1, 0xb2, 0xdc, 0x30, 0x66, 0x58,
0x80, 0x96, 0xad, 0xec, 0x24, 0x05, 0x7f, 0xa8, 0x9c, 0x21, 0xea, 0xcb, 0xf8, 0x7d, 0x0a, 0xd6,
0x04, 0x08, 0x6d, 0x8f, 0x8c, 0x2b, 0xe8, 0x21, 0xa4, 0x99, 0xa7, 0xc2, 0x2c, 0x5b, 0xa9, 0x24,
0x1d, 0xc2, 0x94, 0x62, 0x99, 0xff, 0x34, 0x69, 0x8f, 0x98, 0x42, 0xbf, 0xf4, 0x27, 0x0d, 0x32,
0x01, 0x09, 0x7d, 0x03, 0x8b, 0xe2, 0x34, 0xd4, 0x2a, 0x13, 0xdb, 0x6c, 0x2d, 0x32, 0x6e, 0x49,
0x0d, 0x1e, 0x92, 0xe3, 0x8a, 0x1e, 0x5c, 0x72, 0xc2, 0x52, 0x8e, 0x1e, 0x03, 0x72, 0xb1, 0xc7,
0xec, 0xae, 0xed, 0x8a, 0x09, 0xfd, 0x82, 0x32, 0x12, 0xdc, 0x3c, 0xd6, 0xa2, 0x9c, 0x13, 0xce,
0xe0, 0x19, 0xa0, 0x2e, 0x36, 0x42, 0x4e, 0x9e, 0x16, 0xc8, 0x3b, 0x0d, 0xa7, 0x18, 0x47, 0xb0,
0xc1, 0x57, 0x1d, 0xce, 0x13, 0x41, 0x31, 0xdb, 0x86, 0x65, 0xd1, 0x14, 0x4e, 0x3d, 0x3a, 0x54,
0xa5, 0x2c, 0xc3, 0x09, 0x87, 0x1e, 0x1d, 0xa2, 0x02, 0xdc, 0x12, 0x4c, 0x46, 0x55, 0x9c, 0x2d,
0xf1, 0xdf, 0x36, 0x7d, 0xf4, 0x35, 0xac, 0x84, 0xd1, 0x6a, 0xd2, 0x01, 0x41, 0x59, 0xb8, 0xf5,
0x7d, 0xf3, 0xbb, 0xe6, 0xdb, 0xf7, 0x4d, 0xfd, 0x33, 0x94, 0x83, 0x4c, 0xb5, 0xdd, 0xae, 0xb7,
0xda, 0x75, 0x53, 0xd7, 0xf8, 0xdf, 0xb1, 0xf9, 0xf6, 0xf8, 0x6d, 0xab, 0x6e, 0xea, 0xa9, 0x47,
0xbf, 0xd3, 0x20, 0x1f, 0x0b, 0x74, 0x84, 0x60, 0x55, 0x29, 0x5b, 0xad, 0x76, 0xb5, 0xfd, 0x7d,
0x4b, 0xff, 0x8c, 0xd3, 0x8e, 0xeb, 0xcd, 0x83, 0x46, 0xf3, 0xb5, 0x55, 0xdd, 0x6f, 0x37, 0x4e,
0xea, 0xba, 0x86, 0x00, 0x96, 0xd4, 0x77, 0x8a, 0xf3, 0x1b, 0xcd, 0x46, 0xbb, 0x51, 0x6d, 0xd7,
0x0f, 0xac, 0xfa, 0xcf, 0x1a, 0x6d, 0x7d, 0x01, 0xe9, 0x90, 0x7b, 0xdf, 0x68, 0xbf, 0x39, 0x30,
0xab, 0xef, 0xab, 0xb5, 0xa3, 0xba, 0x9e, 0xe6, 0x1a, 0x9c, 0x57, 0x3f, 0xd0, 0x17, 0xb9, 0x86,
0xfc, 0xb6, 0x5a, 0x47, 0xd5, 0xd6, 0x9b, 0xfa, 0x81, 0xbe, 0x54, 0xf9, 0xf3, 0x22, 0xac, 0xc8,
0xb3, 0x69, 0xc9, 0xcb, 0x32, 0xfa, 0x39, 0xac, 0xbd, 0xc7, 0x36, 0x3b, 0xa4, 0xde, 0x78, 0xec,
0x41, 0x5b, 0x53, 0x7d, 0xbb, 0xce, 0xef, 0xc8, 0xa5, 0x47, 0x89, 0xc5, 0x72, 0x6a, 0x64, 0x7a,
0xa2, 0xa1, 0x23, 0x58, 0xd9, 0xc7, 0x0e, 0x75, 0xec, 0x2e, 0x1e, 0xbc, 0x21, 0xb8, 0x97, 0x68,
0x76, 0x9e, 0x30, 0x42, 0x26, 0xac, 0x1d, 0x89, 0x59, 0x36, 0x32, 0xae, 0xdd, 0xdc, 0x62, 0x44,
0xf9, 0x89, 0x86, 0x7e, 0x01, 0xf9, 0x58, 0x5f, 0x4a, 0xb4, 0x98, 0x78, 0xeb, 0x4a, 0x6a, 0x6c,
0x47, 0x90, 0x09, 0x72, 0x35, 0xd1, 0xe8, 0x6e, 0x92, 0xd1, 0xa9, 0x12, 0xf1, 0x13, 0xc8, 0x1c,
0x52, 0xef, 0xfc, 0x4a, 0x6b, 0x77, 0x92, 0x36, 0xcd, 0x35, 0x51, 0x13, 0x96, 0xc3, 0x5c, 0x4f,
0x34, 0xf1, 0x70, 0xee, 0x32, 0x81, 0xce, 0x41, 0x0f, 0x89, 0xb5, 0x4b, 0x9e, 0x62, 0x3e, 0xfa,
0x71, 0x92, 0xfa, 0xac, 0x54, 0xbc, 0x81, 0xb3, 0xca, 0xbf, 0x35, 0xc8, 0xcb, 0xa3, 0x23, 0xde,
0x38, 0x72, 0x41, 0x92, 0x44, 0x6c, 0xcd, 0x73, 0xe2, 0xa5, 0x1f, 0x25, 0x79, 0x8c, 0xcd, 0x68,
0x1f, 0x61, 0x33, 0x76, 0xd7, 0xac, 0x32, 0xd1, 0x29, 0xca, 0x57, 0x1b, 0x88, 0xdf, 0x6f, 0x93,
0xa3, 0x26, 0xe1, 0x2a, 0x5b, 0xf9, 0xeb, 0x42, 0x38, 0x0b, 0x87, 0x1b, 0x1d, 0xc0, 0xca, 0xc4,
0x98, 0x9a, 0x0c, 0xf3, 0xac, 0x31, 0xb8, 0xf4, 0x78, 0x4e, 0x69, 0xb5, 0xf7, 0x1f, 0x60, 0x7d,
0xc6, 0xbd, 0x0b, 0x55, 0xae, 0x89, 0xff, 0x19, 0xf7, 0xc5, 0xd2, 0xb3, 0x1b, 0xe9, 0x28, 0xff,
0xbf, 0x84, 0x9c, 0x5a, 0x98, 0xcc, 0xfb, 0x79, 0x8a, 0x43, 0xe9, 0xc1, 0x35, 0x7b, 0x0c, 0xad,
0x77, 0x40, 0xdf, 0xa7, 0x43, 0x77, 0xc4, 0x48, 0x38, 0xca, 0xcf, 0xe7, 0x21, 0x31, 0x58, 0xa7,
0xae, 0x04, 0x95, 0xff, 0x2e, 0x82, 0x3e, 0x2e, 0xf9, 0xea, 0x10, 0x7f, 0x08, 0xeb, 0xec, 0x78,
0x22, 0x48, 0x06, 0x35, 0xf9, 0x21, 0x2c, 0x19, 0xd4, 0x2b, 0x5e, 0x9f, 0x9e, 0x68, 0x88, 0xc2,
0xea, 0xe4, 0x9d, 0x00, 0x3d, 0xbe, 0xd6, 0xd0, 0x44, 0x18, 0x95, 0xe7, 0x15, 0x57, 0x48, 0xff,
0x7a, 0xf6, 0x08, 0xfc, 0xec, 0x06, 0xf3, 0xf6, 0xf5, 0x81, 0x74, 0xd5, 0xb4, 0xff, 0x61, 0xba,
0xf1, 0xde, 0x70, 0xcb, 0x37, 0x7d, 0x69, 0x43, 0xbf, 0xd1, 0x60, 0x63, 0xd6, 0x4b, 0x2d, 0xba,
0xfe, 0xd0, 0xa6, 0x9f, 0x8a, 0x4b, 0x5f, 0xde, 0x4c, 0x49, 0xad, 0x61, 0x04, 0x7a, 0xfc, 0xa5,
0x0e, 0x25, 0x6e, 0x24, 0xe1, 0x3d, 0xb0, 0xf4, 0x64, 0x7e, 0x05, 0xe9, 0xb6, 0x96, 0xfb, 0xdb,
0xa7, 0x7b, 0xda, 0xdf, 0x3f, 0xdd, 0xd3, 0xfe, 0xf9, 0xe9, 0x9e, 0xd6, 0x59, 0x12, 0x7d, 0xe5,
0xd9, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x2c, 0xec, 0x2c, 0x7e, 0xa8, 0x17, 0x00, 0x00,
// 2278 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x59, 0x4d, 0x6f, 0x1b, 0xc7,
0xf9, 0xcf, 0x52, 0x94, 0x22, 0x3d, 0x92, 0x45, 0x6a, 0xf4, 0x6a, 0xca, 0x2f, 0x9b, 0xcd, 0x1f,
0xb1, 0x2c, 0x44, 0x4b, 0x99, 0x0e, 0x9c, 0x44, 0x86, 0x91, 0x50, 0x12, 0x25, 0x33, 0x11, 0x68,
0x79, 0x49, 0xdb, 0xff, 0x16, 0x05, 0xb6, 0xc3, 0xe5, 0x88, 0xdc, 0x88, 0xdc, 0x59, 0xef, 0x0e,
0x19, 0xb3, 0x87, 0x14, 0xed, 0xa5, 0x28, 0x7a, 0x73, 0xef, 0xcd, 0x97, 0x28, 0x50, 0xa0, 0xb7,
0xde, 0x8a, 0x9e, 0x0a, 0xf4, 0x58, 0xa0, 0x28, 0x8c, 0xa0, 0xbd, 0xf7, 0x13, 0x14, 0x33, 0x3b,
0xbb, 0x5c, 0x91, 0x5c, 0x89, 0xea, 0x49, 0xdc, 0xe7, 0x75, 0xe6, 0x37, 0xcf, 0xdb, 0x8c, 0x40,
0x73, 0x3d, 0xca, 0x68, 0xbe, 0x4e, 0xb0, 0x45, 0x9d, 0xbc, 0xe7, 0x5a, 0xf9, 0xde, 0x83, 0xbc,
0x4f, 0xbc, 0x9e, 0x6d, 0x11, 0x5f, 0x17, 0x4c, 0xb4, 0x46, 0x58, 0x8b, 0x78, 0xa4, 0xdb, 0xd1,
0x03, 0x31, 0xdd, 0x73, 0x2d, 0xbd, 0xf7, 0x20, 0xb7, 0xd9, 0xa4, 0xb4, 0xd9, 0x26, 0x79, 0x21,
0x55, 0xef, 0x9e, 0xe5, 0x49, 0xc7, 0x65, 0xfd, 0x40, 0x29, 0x77, 0x77, 0x98, 0xc9, 0xec, 0x0e,
0xf1, 0x19, 0xee, 0xb8, 0xa1, 0xc0, 0x05, 0xcf, 0x6e, 0xc1, 0xe5, 0x9e, 0x59, 0xdf, 0x0d, 0xdd,
0xe6, 0x6e, 0x49, 0x0b, 0xd8, 0xb5, 0xf3, 0xd8, 0x71, 0x28, 0xc3, 0xcc, 0xa6, 0x4e, 0xc8, 0xfd,
0x58, 0xfc, 0xb1, 0x76, 0x9a, 0xc4, 0xd9, 0xf1, 0xbf, 0xc5, 0xcd, 0x26, 0xf1, 0xf2, 0xd4, 0x15,
0x12, 0xa3, 0xd2, 0xda, 0x29, 0x6c, 0xbe, 0xc4, 0x6d, 0xbb, 0x81, 0x19, 0xf5, 0x4e, 0x89, 0x77,
0x46, 0xbd, 0x0e, 0x76, 0x2c, 0x62, 0x90, 0xd7, 0x5d, 0xe2, 0x33, 0x84, 0x20, 0xed, 0xb7, 0x29,
0xdb, 0x50, 0x54, 0x65, 0x2b, 0x6d, 0x88, 0xdf, 0xe8, 0x36, 0x80, 0xdb, 0xad, 0xb7, 0x6d, 0xcb,
0x3c, 0x27, 0xfd, 0x8d, 0x94, 0xaa, 0x6c, 0x2d, 0x18, 0x73, 0x01, 0xe5, 0x6b, 0xd2, 0xd7, 0x7e,
0x50, 0xe0, 0xd6, 0x78, 0x93, 0xbe, 0x4b, 0x1d, 0x9f, 0xa0, 0x0d, 0x78, 0xbf, 0x8e, 0xdb, 0x9c,
0x24, 0xcd, 0x86, 0x9f, 0xe8, 0x3e, 0x64, 0x19, 0x65, 0xb8, 0x6d, 0xf6, 0x42, 0x7d, 0x5f, 0xd8,
0x4f, 0x1b, 0x19, 0x41, 0x8f, 0xcc, 0xfa, 0xe8, 0x11, 0xac, 0x07, 0xa2, 0xd8, 0x62, 0x76, 0x8f,
0xc4, 0x35, 0xa6, 0x84, 0xc6, 0xaa, 0x60, 0x17, 0x05, 0x37, 0xa6, 0x77, 0x0c, 0x2a, 0xee, 0x11,
0x0f, 0x37, 0xc9, 0x88, 0xa6, 0x19, 0xae, 0x2a, 0xad, 0x2a, 0x5b, 0x29, 0xe3, 0xb6, 0x94, 0x1b,
0x32, 0xb1, 0x1f, 0x08, 0x69, 0x4f, 0x20, 0x17, 0xd1, 0x84, 0x88, 0x80, 0x35, 0xc4, 0xed, 0x2e,
0xcc, 0x0f, 0x30, 0xf2, 0x37, 0x14, 0x75, 0x6a, 0x6b, 0xc1, 0x80, 0x08, 0x24, 0x5f, 0xfb, 0x3e,
0x15, 0x03, 0x3e, 0xae, 0x2f, 0x41, 0x7a, 0x04, 0xab, 0x38, 0xa0, 0x92, 0x86, 0x39, 0x62, 0x6a,
0x3f, 0xb5, 0xa1, 0x18, 0xcb, 0x91, 0xc0, 0x69, 0x64, 0x17, 0xbd, 0x84, 0x59, 0x9f, 0x61, 0xd6,
0xf5, 0x09, 0x87, 0x6e, 0x6a, 0x6b, 0xbe, 0xb0, 0xa7, 0x8f, 0x8f, 0x52, 0xfd, 0x12, 0xf7, 0x7a,
0x55, 0xd8, 0x30, 0x22, 0x5b, 0x39, 0x17, 0x66, 0x02, 0xda, 0xd0, 0xf1, 0x2b, 0x43, 0xc7, 0x8f,
0x8e, 0x61, 0x26, 0x50, 0x12, 0x27, 0x37, 0x5f, 0xc8, 0x5f, 0xe9, 0x5e, 0xfa, 0x92, 0xae, 0x0d,
0xa9, 0xae, 0xed, 0xc1, 0x7a, 0xe9, 0x8d, 0xcd, 0x48, 0x63, 0x70, 0x7a, 0x13, 0xa3, 0xfb, 0x18,
0x36, 0x46, 0x75, 0x25, 0xb2, 0x57, 0x2a, 0xef, 0xc3, 0x5a, 0x91, 0x31, 0x9e, 0x92, 0x1c, 0x92,
0x43, 0xcc, 0x70, 0xe8, 0x77, 0x05, 0xa6, 0xfd, 0x16, 0xf6, 0x1a, 0x32, 0x6e, 0x83, 0x8f, 0x28,
0x47, 0x52, 0x83, 0x1c, 0xd1, 0xde, 0xa5, 0x60, 0x7d, 0xc4, 0x88, 0x5c, 0xc0, 0xa7, 0xb0, 0x11,
0x20, 0x61, 0xd6, 0xdb, 0xd4, 0x3a, 0x37, 0x3d, 0x4a, 0x99, 0xd9, 0xc2, 0x7e, 0xeb, 0x61, 0x41,
0xc2, 0xb9, 0x1a, 0xf0, 0xf7, 0x39, 0xdb, 0xa0, 0x94, 0x3d, 0x15, 0x4c, 0xf4, 0x18, 0x72, 0xc4,
0xa5, 0x56, 0xcb, 0xac, 0xd3, 0xae, 0xd3, 0xc0, 0x5e, 0xff, 0x82, 0x6a, 0x90, 0x88, 0xeb, 0x42,
0x62, 0x5f, 0x0a, 0xc4, 0x94, 0xef, 0x41, 0xe6, 0x9b, 0xae, 0xcf, 0xec, 0x33, 0x9b, 0x34, 0x4c,
0x21, 0x24, 0x13, 0x65, 0x31, 0x22, 0x97, 0x38, 0x15, 0x3d, 0x81, 0xcd, 0x81, 0xe0, 0xe8, 0x0a,
0xd3, 0xc2, 0xcd, 0x46, 0x24, 0x32, 0xbc, 0xc8, 0x13, 0xc8, 0xb6, 0x31, 0xdf, 0xb8, 0x69, 0x79,
0xd4, 0xf7, 0xdb, 0xb6, 0x73, 0xbe, 0x31, 0x2d, 0x22, 0xe1, 0x83, 0x91, 0x48, 0x70, 0x0b, 0x2e,
0x8f, 0x84, 0x83, 0x50, 0xd0, 0xc8, 0x04, 0xaa, 0x11, 0x01, 0x6d, 0xc2, 0x5c, 0x8b, 0xe0, 0x86,
0x29, 0x00, 0x9e, 0x11, 0xeb, 0x9d, 0xe5, 0x84, 0x2a, 0x07, 0xf9, 0xd7, 0x0a, 0xe4, 0x4e, 0x89,
0xd3, 0xb0, 0x9d, 0x66, 0x0c, 0xeb, 0x28, 0x4a, 0x1e, 0x43, 0xee, 0xcc, 0x6e, 0x33, 0xe2, 0x99,
0x1e, 0xc1, 0x8d, 0xbe, 0x79, 0x46, 0x3d, 0xd3, 0x76, 0xac, 0x76, 0xd7, 0xb7, 0xa9, 0x23, 0x90,
0x9e, 0x35, 0xd6, 0x03, 0x09, 0x83, 0x0b, 0x1c, 0x51, 0xaf, 0x1c, 0xb2, 0x91, 0x0e, 0xcb, 0xae,
0x47, 0x5d, 0xea, 0xe3, 0xb6, 0x04, 0x21, 0x76, 0xc6, 0x4b, 0x21, 0x4b, 0x6c, 0x5e, 0xac, 0xa5,
0x0b, 0x9b, 0x63, 0x97, 0x22, 0xcf, 0xfc, 0x25, 0xac, 0xb8, 0x01, 0xdb, 0xc4, 0x31, 0xbe, 0x88,
0xbe, 0xf9, 0xc2, 0x87, 0x49, 0xc8, 0xc4, 0x6c, 0x19, 0xcb, 0xee, 0xa8, 0x7d, 0xed, 0x39, 0xa0,
0x83, 0x16, 0xb6, 0x9d, 0x2a, 0xc3, 0x1e, 0x8b, 0x57, 0x58, 0x9f, 0x13, 0x48, 0x43, 0x6e, 0x33,
0xfc, 0x44, 0x1f, 0xc0, 0x42, 0x93, 0x38, 0xc4, 0xb7, 0x7d, 0x93, 0xb7, 0x1d, 0xb9, 0x9f, 0x79,
0x49, 0xab, 0xd9, 0x1d, 0xa2, 0xfd, 0x2e, 0x05, 0x8b, 0xa7, 0x62, 0x7f, 0x24, 0x9e, 0x6f, 0xd8,
0x23, 0x4e, 0x10, 0x04, 0x32, 0x48, 0x21, 0x20, 0xf1, 0x63, 0xe7, 0x02, 0x1c, 0x1e, 0xd3, 0xe9,
0x76, 0xea, 0xc4, 0x93, 0x56, 0x81, 0x93, 0x2a, 0x82, 0x82, 0x3e, 0x84, 0x1b, 0x1e, 0x76, 0x1a,
0x98, 0x9a, 0x1e, 0xe9, 0x11, 0xdc, 0x16, 0xb1, 0xb7, 0x60, 0x2c, 0x04, 0x44, 0x43, 0xd0, 0x50,
0x1e, 0x96, 0x63, 0xe0, 0x98, 0x75, 0x9b, 0x75, 0xb0, 0x7f, 0x2e, 0x23, 0x0e, 0xc5, 0x58, 0xfb,
0x01, 0x07, 0xed, 0xc1, 0xcd, 0xb8, 0x02, 0x6e, 0x36, 0x3d, 0xd2, 0xc4, 0x8c, 0x98, 0xbe, 0xdd,
0xdc, 0x98, 0x56, 0xa7, 0xb6, 0xd2, 0xc6, 0x7a, 0x4c, 0xa0, 0x18, 0xf2, 0xab, 0x76, 0x13, 0x7d,
0x06, 0x73, 0x51, 0xe3, 0x15, 0x91, 0x35, 0x5f, 0xc8, 0xe9, 0x41, 0x63, 0xd5, 0xc3, 0xd6, 0xac,
0xd7, 0x42, 0x09, 0x63, 0x20, 0xac, 0x3d, 0x81, 0x4c, 0x84, 0x8f, 0x04, 0x7c, 0x1b, 0x96, 0x92,
0x72, 0x39, 0x53, 0xbf, 0x98, 0x20, 0xda, 0xa7, 0xb0, 0x22, 0xd5, 0xbd, 0xb2, 0xd3, 0x20, 0x6f,
0x62, 0x20, 0xc7, 0x31, 0x54, 0x86, 0x31, 0xd4, 0x76, 0x60, 0x75, 0x48, 0x51, 0x7a, 0x5f, 0x81,
0x69, 0x9b, 0x13, 0xc2, 0xb2, 0x24, 0x3e, 0xb4, 0x02, 0x2c, 0xf1, 0xca, 0x4a, 0xb8, 0xeb, 0x48,
0xf4, 0x36, 0x00, 0x07, 0x83, 0x88, 0x85, 0x86, 0xc5, 0xdb, 0x0f, 0xc5, 0xb4, 0xc7, 0xb0, 0x18,
0x84, 0x57, 0xa4, 0x70, 0x1f, 0xb2, 0x71, 0x88, 0x63, 0xe7, 0x9f, 0x89, 0xd1, 0xf9, 0xd6, 0xb4,
0x47, 0xb0, 0x1a, 0x95, 0xdb, 0x0b, 0x3b, 0xbb, 0xbc, 0x63, 0x68, 0x3a, 0xac, 0x0d, 0xeb, 0x5d,
0xba, 0x31, 0x13, 0x36, 0x0f, 0x68, 0xa7, 0x63, 0x33, 0x46, 0x48, 0xd1, 0xf7, 0xed, 0xa6, 0xd3,
0x21, 0x0e, 0x8b, 0x37, 0x87, 0xa0, 0x4a, 0x8a, 0x98, 0x0f, 0x71, 0x14, 0x24, 0x91, 0x25, 0xc3,
0x0d, 0x20, 0x35, 0xd2, 0x00, 0x08, 0xac, 0xcb, 0x5c, 0x3e, 0x24, 0x2e, 0xf5, 0x6d, 0x36, 0xc8,
0xe3, 0xaf, 0x20, 0x1b, 0xe6, 0x71, 0x43, 0xf2, 0x64, 0x0e, 0xdf, 0x4d, 0xca, 0x61, 0x69, 0xc3,
0xc8, 0xb8, 0x17, 0x6d, 0x6a, 0xff, 0x4e, 0x8d, 0xdd, 0x48, 0xe4, 0xab, 0x09, 0x80, 0x23, 0xaa,
0xf4, 0x72, 0x9c, 0xd4, 0x4d, 0x2f, 0x31, 0x34, 0x96, 0x17, 0x33, 0x9d, 0xfb, 0x87, 0x02, 0xcb,
0x63, 0x64, 0xd0, 0x2d, 0x98, 0xb3, 0x42, 0xb2, 0xf0, 0x9f, 0x36, 0x06, 0x84, 0x41, 0x33, 0x4c,
0x8d, 0x6b, 0x86, 0x53, 0xb1, 0x81, 0xf1, 0x2e, 0xcc, 0xdb, 0xbe, 0xe9, 0xca, 0xd8, 0x15, 0xf9,
0x3c, 0x6b, 0x80, 0xed, 0x87, 0xd1, 0x3c, 0x14, 0x20, 0xd3, 0xc3, 0x23, 0xc5, 0x17, 0xd1, 0x48,
0xc1, 0xf3, 0x74, 0xb1, 0x70, 0x6f, 0xd2, 0x91, 0x22, 0x1c, 0x25, 0xfe, 0x90, 0x82, 0xf5, 0x84,
0x71, 0x23, 0x66, 0x5c, 0xf9, 0x9f, 0x8c, 0xa3, 0xcf, 0xe1, 0x26, 0x61, 0xad, 0x07, 0x61, 0x3c,
0xc8, 0x6e, 0x71, 0xa1, 0x12, 0xf2, 0x7b, 0xc2, 0x03, 0x79, 0xee, 0xa2, 0x65, 0xc8, 0xaa, 0xf8,
0x09, 0xac, 0x85, 0x5a, 0x51, 0x63, 0x32, 0x63, 0xf0, 0xad, 0x48, 0x6e, 0xd4, 0x96, 0x78, 0xab,
0x11, 0x29, 0x19, 0x4d, 0x6c, 0xb2, 0x95, 0xa7, 0x83, 0x29, 0x79, 0x40, 0x0f, 0x7a, 0xf9, 0x17,
0x70, 0x4b, 0x18, 0xe0, 0x82, 0xb6, 0x63, 0xc6, 0xd4, 0x5e, 0x77, 0x49, 0x97, 0x08, 0xa8, 0xd3,
0xc6, 0xcd, 0x50, 0xa6, 0xec, 0x0c, 0x46, 0xc1, 0xe7, 0x5c, 0x40, 0x7b, 0x0e, 0xd9, 0x12, 0x5f,
0x7b, 0x7c, 0x7e, 0x79, 0x02, 0x73, 0xc1, 0x86, 0x31, 0xc3, 0x02, 0xb4, 0xf9, 0x82, 0x9a, 0x14,
0xfc, 0x91, 0xf2, 0x2c, 0x91, 0xbf, 0xb4, 0xb7, 0x29, 0x58, 0x12, 0x20, 0xd4, 0x3c, 0x32, 0xa8,
0xa0, 0x47, 0x90, 0x66, 0x9e, 0x0c, 0xb3, 0xf9, 0x42, 0x21, 0xe9, 0x10, 0x46, 0x14, 0x75, 0xfe,
0x51, 0xa1, 0x0d, 0x62, 0x08, 0xfd, 0xdc, 0xef, 0x15, 0x98, 0x0d, 0x49, 0xe8, 0x73, 0x98, 0x16,
0xa7, 0x21, 0x57, 0x99, 0xd8, 0x66, 0xf7, 0x63, 0xe3, 0x56, 0xa0, 0xc1, 0x43, 0x72, 0x50, 0xd1,
0xc3, 0x4b, 0x4e, 0x54, 0xca, 0xd1, 0x0e, 0x20, 0x17, 0x7b, 0xcc, 0xb6, 0x6c, 0x57, 0x4c, 0xe8,
0x3d, 0xca, 0x48, 0x78, 0xf3, 0x58, 0x8a, 0x73, 0x5e, 0x72, 0x06, 0xcf, 0x00, 0x79, 0xb1, 0x11,
0x72, 0xc1, 0x69, 0x41, 0x70, 0xa7, 0xe1, 0x14, 0xed, 0x04, 0x56, 0xf8, 0xaa, 0xa3, 0x79, 0x22,
0x2c, 0x66, 0x9b, 0x30, 0x27, 0x9a, 0xc2, 0x99, 0x47, 0x3b, 0xb2, 0x94, 0xcd, 0x72, 0xc2, 0x91,
0x47, 0x3b, 0x68, 0x1d, 0xde, 0x17, 0x4c, 0x46, 0x65, 0x9c, 0xcd, 0xf0, 0xcf, 0x1a, 0xdd, 0xfe,
0x0c, 0x6e, 0x44, 0xd1, 0x6a, 0xd0, 0x36, 0x41, 0xf3, 0xf0, 0xfe, 0x8b, 0xca, 0xd7, 0x95, 0x67,
0xaf, 0x2a, 0xd9, 0xf7, 0xd0, 0x02, 0xcc, 0x16, 0x6b, 0xb5, 0x52, 0xb5, 0x56, 0x32, 0xb2, 0x0a,
0xff, 0x3a, 0x35, 0x9e, 0x9d, 0x3e, 0xab, 0x96, 0x8c, 0x6c, 0x6a, 0xfb, 0x37, 0x0a, 0x64, 0x86,
0x02, 0x1d, 0x21, 0x58, 0x94, 0xca, 0x66, 0xb5, 0x56, 0xac, 0xbd, 0xa8, 0x66, 0xdf, 0xe3, 0xb4,
0xd3, 0x52, 0xe5, 0xb0, 0x5c, 0x39, 0x36, 0x8b, 0x07, 0xb5, 0xf2, 0xcb, 0x52, 0x56, 0x41, 0x00,
0x33, 0xf2, 0x77, 0x8a, 0xf3, 0xcb, 0x95, 0x72, 0xad, 0x5c, 0xac, 0x95, 0x0e, 0xcd, 0xd2, 0xff,
0x97, 0x6b, 0xd9, 0x29, 0x94, 0x85, 0x85, 0x57, 0xe5, 0xda, 0xd3, 0x43, 0xa3, 0xf8, 0xaa, 0xb8,
0x7f, 0x52, 0xca, 0xa6, 0xb9, 0x06, 0xe7, 0x95, 0x0e, 0xb3, 0xd3, 0x5c, 0x23, 0xf8, 0x6d, 0x56,
0x4f, 0x8a, 0xd5, 0xa7, 0xa5, 0xc3, 0xec, 0x4c, 0xe1, 0x57, 0x33, 0x70, 0x23, 0x38, 0x9b, 0x6a,
0x70, 0xf1, 0x46, 0x3f, 0x82, 0xa5, 0x57, 0xd8, 0x66, 0x47, 0xd4, 0x1b, 0x8c, 0x3d, 0x68, 0x6d,
0xa4, 0x6f, 0x97, 0xf8, 0x7d, 0x3b, 0xb7, 0x9d, 0x58, 0x2c, 0x47, 0x46, 0xa6, 0x5d, 0x05, 0x9d,
0xc0, 0x8d, 0x03, 0xec, 0x50, 0xc7, 0xb6, 0x70, 0xfb, 0x29, 0xc1, 0x8d, 0x44, 0xb3, 0x93, 0x84,
0x11, 0x32, 0x60, 0xe9, 0x44, 0xcc, 0xb2, 0xb1, 0x71, 0xed, 0xfa, 0x16, 0x63, 0xca, 0xbb, 0x0a,
0xfa, 0x31, 0x64, 0x86, 0xfa, 0x52, 0xa2, 0xc5, 0xc4, 0x5b, 0x57, 0x52, 0x63, 0x3b, 0x81, 0xd9,
0x30, 0x57, 0x13, 0x8d, 0x6e, 0x25, 0x19, 0x1d, 0x29, 0x11, 0x5f, 0xc2, 0xec, 0x11, 0xf5, 0xce,
0x2f, 0xb5, 0x76, 0x2b, 0x69, 0xd3, 0x5c, 0x13, 0x7d, 0xaf, 0xc0, 0x5c, 0x94, 0xec, 0x89, 0x36,
0xee, 0x4f, 0x5c, 0x27, 0xb4, 0x67, 0x6f, 0x8b, 0xbb, 0x48, 0x3f, 0x22, 0xcc, 0x6a, 0x11, 0x5f,
0x15, 0x99, 0xac, 0xf2, 0x8a, 0xa1, 0xfa, 0xb6, 0x63, 0x11, 0xb5, 0x8d, 0x7d, 0xa6, 0x9e, 0xd9,
0x0e, 0x6e, 0xdb, 0x3f, 0x23, 0x8d, 0x80, 0xaf, 0xff, 0xf2, 0x6f, 0x3f, 0xfc, 0x36, 0xb5, 0x86,
0x56, 0xf2, 0xbd, 0x07, 0xe1, 0x73, 0x8c, 0x60, 0x70, 0x3d, 0x74, 0x0e, 0xd9, 0xc8, 0xcb, 0x7e,
0x9f, 0x27, 0xad, 0x8f, 0x3e, 0x4e, 0x5a, 0xcf, 0xb8, 0xe4, 0xbe, 0xc6, 0xea, 0x0b, 0xff, 0x52,
0x20, 0x13, 0x04, 0x03, 0xf1, 0x06, 0xb9, 0x00, 0x01, 0x49, 0x44, 0xeb, 0x24, 0x31, 0x94, 0xfb,
0x28, 0xc9, 0xe3, 0xd0, 0xd4, 0xf7, 0x06, 0x56, 0x87, 0x6e, 0xaf, 0x45, 0x26, 0x7a, 0x8f, 0x7e,
0xb9, 0x81, 0xe1, 0x1b, 0x73, 0x72, 0x1c, 0x26, 0x5c, 0x8e, 0x0b, 0x7f, 0x9a, 0x8a, 0xa6, 0xeb,
0x68, 0xa3, 0x6d, 0xb8, 0x71, 0x61, 0xf0, 0x4d, 0x86, 0x79, 0xdc, 0x60, 0x9d, 0xdb, 0x99, 0x50,
0x5a, 0xee, 0xfd, 0x3b, 0x58, 0x1e, 0x73, 0x93, 0x43, 0x85, 0x2b, 0x32, 0x6a, 0xcc, 0x0d, 0x34,
0xf7, 0xf0, 0x5a, 0x3a, 0xd2, 0xff, 0x4f, 0x60, 0x41, 0x2e, 0x2c, 0xa8, 0x24, 0x93, 0x94, 0x9b,
0xdc, 0xbd, 0x2b, 0xf6, 0x18, 0x59, 0xaf, 0x43, 0xf6, 0x80, 0x76, 0xdc, 0x2e, 0x23, 0xd1, 0xe5,
0x60, 0x32, 0x0f, 0x89, 0xc1, 0x3a, 0x72, 0xc9, 0x28, 0xfc, 0x67, 0x1a, 0xb2, 0x83, 0x26, 0x22,
0x0f, 0xf1, 0xbb, 0xa8, 0x72, 0x0f, 0x66, 0x8c, 0x64, 0x50, 0x93, 0x9f, 0xd6, 0x92, 0x41, 0xbd,
0xe4, 0x3d, 0x6b, 0x57, 0x41, 0x14, 0x16, 0x2f, 0xde, 0x32, 0xd0, 0xce, 0x95, 0x86, 0x2e, 0x84,
0x91, 0x3e, 0xa9, 0xb8, 0x44, 0xfa, 0xe7, 0xe3, 0x87, 0xea, 0x87, 0xd7, 0x98, 0xe0, 0xaf, 0x0e,
0xa4, 0xcb, 0xee, 0x0f, 0xaf, 0x47, 0x5b, 0xf9, 0x35, 0xb7, 0x7c, 0xdd, 0xb7, 0x3b, 0xf4, 0x0b,
0x05, 0x56, 0xc6, 0xbd, 0xfd, 0xa2, 0xab, 0x0f, 0x6d, 0xf4, 0xf1, 0x39, 0xf7, 0xc9, 0xf5, 0x94,
0xe4, 0x1a, 0xba, 0x90, 0x1d, 0x7e, 0xfb, 0x43, 0x89, 0x1b, 0x49, 0x78, 0x61, 0xcc, 0xed, 0x4e,
0xae, 0x10, 0xb8, 0xdd, 0xff, 0xcb, 0xd4, 0xdb, 0xe2, 0x1f, 0xa7, 0xd0, 0xdf, 0x15, 0x98, 0x3e,
0xf5, 0xfa, 0x7e, 0x07, 0xfd, 0xdf, 0x57, 0xd5, 0x67, 0x15, 0xd5, 0x38, 0x3d, 0x50, 0xc3, 0xff,
0x1a, 0xa8, 0xae, 0x47, 0x7b, 0x76, 0x83, 0xb7, 0x97, 0xbe, 0x2a, 0x84, 0x74, 0xed, 0x00, 0x16,
0xc5, 0x2f, 0xcc, 0x6c, 0x4b, 0x3d, 0xc1, 0x75, 0x1f, 0xdd, 0x6c, 0x31, 0xe6, 0xfa, 0x7b, 0xf9,
0xbc, 0x1b, 0xd2, 0xdb, 0xb8, 0xee, 0xeb, 0x16, 0xed, 0xe4, 0xd6, 0x18, 0xc1, 0x9d, 0x2f, 0x47,
0xe8, 0xdb, 0x3f, 0x85, 0xbb, 0xc7, 0x95, 0x17, 0xea, 0x31, 0x71, 0x88, 0x87, 0xdb, 0x6a, 0xf0,
0x1c, 0xac, 0x9e, 0xd8, 0x16, 0x71, 0x7c, 0xa2, 0xf6, 0x1e, 0xea, 0xbb, 0xe8, 0x49, 0x68, 0xb5,
0x69, 0xb3, 0x56, 0xb7, 0xce, 0xd5, 0x2e, 0x3a, 0x08, 0xbe, 0x78, 0x7f, 0xab, 0xe7, 0x3b, 0x98,
0xf7, 0x99, 0xfc, 0x49, 0xf9, 0xa0, 0x54, 0xa9, 0x96, 0xf4, 0x4e, 0xa3, 0x30, 0xbd, 0xab, 0xef,
0xea, 0xbb, 0xb9, 0x0c, 0x76, 0x6d, 0xdd, 0xf5, 0xfa, 0xc2, 0xb3, 0x43, 0xd8, 0xb6, 0x92, 0x2a,
0x64, 0xb1, 0xeb, 0xb6, 0x6d, 0x4b, 0xe4, 0x5b, 0xfe, 0x1b, 0x9f, 0x3a, 0x85, 0x9b, 0x71, 0x4a,
0xd3, 0x73, 0xad, 0x9d, 0x6f, 0x49, 0x7d, 0x87, 0x91, 0x37, 0x2c, 0x81, 0x75, 0x89, 0x16, 0x67,
0xed, 0x8d, 0xb8, 0xd8, 0x4b, 0x76, 0xe1, 0x3d, 0xe2, 0xf5, 0xb3, 0xef, 0x77, 0xd4, 0x63, 0xb1,
0x53, 0xf4, 0xd1, 0x64, 0x3b, 0xff, 0xf3, 0xbb, 0x3b, 0xca, 0x5f, 0xdf, 0xdd, 0x51, 0xfe, 0xf9,
0xee, 0x8e, 0x52, 0x9f, 0x11, 0x73, 0xc6, 0xc3, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x36,
0x39, 0x4a, 0x05, 0x1a, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -5,6 +5,38 @@ package ethereum.beacon.rpc.v1;
import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";
import "proto/beacon/p2p/v1/types.proto";
import "google/api/annotations.proto";
import "protoc-gen-swagger/options/annotations.proto";
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
info: {
title: "Prysm";
version: "0.0.0";
contact: {
name: "Prysmatic Labs";
url: "https://prysmaticlabs.com";
email: "team@prysmaticlabs.com";
};
license: {
name: "GNU General Public License v3.0";
url: "https://github.com/prysmaticlabs/prysm/blob/master/LICENSE.md";
};
description: "JSON RPC services provided by Prysm."
};
external_docs: {
url: "https://github.com/prysmaticlabs/prysm";
description : "Prysm Github";
};
host: "api.prylabs.net",
schemes: HTTPS;
consumes: "application/json";
consumes: "application/grpc-web-text";
consumes: "application/grpc-web-json";
produces: "application/json";
produces: "application/grpc-web-text";
consumes: "application/grpc-web-json";
};
service BeaconService {
rpc WaitForChainStart(google.protobuf.Empty) returns (stream ChainStartResponse);
@ -15,7 +47,14 @@ service BeaconService {
rpc PendingDeposits(google.protobuf.Empty) returns (PendingDepositsResponse);
rpc Eth1Data(google.protobuf.Empty) returns (Eth1DataResponse);
rpc ForkData(google.protobuf.Empty) returns (ethereum.beacon.p2p.v1.Fork);
rpc BlockTree(google.protobuf.Empty) returns (BlockTreeResponse);
rpc BlockTree(google.protobuf.Empty) returns (BlockTreeResponse) {
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = {
summary: "Fetches block tree since last finalized block.";
};
option (google.api.http) = {
get: "/v1/beacon/blocktree";
};
}
rpc BlockTreeBySlots(TreeBlockSlotRequest) returns (BlockTreeResponse);
}
@ -201,4 +240,4 @@ enum ValidatorStatus {
message TreeBlockSlotRequest {
uint64 slot_from = 1 ;
uint64 slot_to = 2 ;
}
}