From 4ebb008bc9a1f6a89ac45929d87d180aa25ffd1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Kapka?= Date: Mon, 12 Jul 2021 17:38:55 +0200 Subject: [PATCH] Protos and stubs for validator API endpoints (#9174) * match proto definitions with spec * stubs for grpc server's functions --- beacon-chain/rpc/eth/v1/validator/BUILD.bazel | 16 + beacon-chain/rpc/eth/v1/validator/server.go | 6 + .../rpc/eth/v1/validator/validator.go | 47 ++ proto/eth/v1/validator_service.pb.go | 597 +++++++++--------- proto/eth/v1/validator_service.pb.gw.go | 130 ++-- proto/eth/v1/validator_service.proto | 89 ++- 6 files changed, 494 insertions(+), 391 deletions(-) create mode 100644 beacon-chain/rpc/eth/v1/validator/BUILD.bazel create mode 100644 beacon-chain/rpc/eth/v1/validator/server.go create mode 100644 beacon-chain/rpc/eth/v1/validator/validator.go diff --git a/beacon-chain/rpc/eth/v1/validator/BUILD.bazel b/beacon-chain/rpc/eth/v1/validator/BUILD.bazel new file mode 100644 index 0000000000..d23f4849ac --- /dev/null +++ b/beacon-chain/rpc/eth/v1/validator/BUILD.bazel @@ -0,0 +1,16 @@ +load("@prysm//tools/go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "server.go", + "validator.go", + ], + importpath = "github.com/prysmaticlabs/prysm/beacon-chain/rpc/eth/v1/validator", + visibility = ["//beacon-chain:__subpackages__"], + deps = [ + "//proto/eth/v1:go_default_library", + "@com_github_pkg_errors//:go_default_library", + "@io_bazel_rules_go//proto/wkt:empty_go_proto", + ], +) diff --git a/beacon-chain/rpc/eth/v1/validator/server.go b/beacon-chain/rpc/eth/v1/validator/server.go new file mode 100644 index 0000000000..bccda54f4b --- /dev/null +++ b/beacon-chain/rpc/eth/v1/validator/server.go @@ -0,0 +1,6 @@ +package validator + +// Server defines a server implementation of the gRPC Validator service, +// providing RPC endpoints intended for validator clients. +type Server struct { +} diff --git a/beacon-chain/rpc/eth/v1/validator/validator.go b/beacon-chain/rpc/eth/v1/validator/validator.go new file mode 100644 index 0000000000..a568ae0d58 --- /dev/null +++ b/beacon-chain/rpc/eth/v1/validator/validator.go @@ -0,0 +1,47 @@ +package validator + +import ( + "context" + + emptypb "github.com/golang/protobuf/ptypes/empty" + "github.com/pkg/errors" + ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1" +) + +// GetAttesterDuties requests the beacon node to provide a set of attestation duties, +// which should be performed by validators, for a particular epoch. +func (vs *Server) GetAttesterDuties(ctx context.Context, req *ethpb.AttesterDutiesRequest) (*ethpb.AttesterDutiesResponse, error) { + return nil, errors.New("Unimplemented") +} + +// GetProposerDuties requests beacon node to provide all validators that are scheduled to propose a block in the given epoch. +func (vs *Server) GetProposerDuties(ctx context.Context, req *ethpb.ProposerDutiesRequest) (*ethpb.ProposerDutiesResponse, error) { + return nil, errors.New("Unimplemented") +} + +// ProduceBlock requests the beacon node to produce a valid unsigned beacon block, which can then be signed by a proposer and submitted. +func (vs *Server) ProduceBlock(ctx context.Context, req *ethpb.ProduceBlockRequest) (*ethpb.ProduceBlockResponse, error) { + return nil, errors.New("Unimplemented") +} + +// ProduceAttestationData requests that the beacon node produces attestation data for +// the requested committee index and slot based on the nodes current head. +func (vs *Server) ProduceAttestationData(ctx context.Context, req *ethpb.ProduceAttestationDataRequest) (*ethpb.ProduceAttestationDataResponse, error) { + return nil, errors.New("Unimplemented") +} + +// GetAggregateAttestation aggregates all attestations matching the given attestation data root and slot, returning the aggregated result. +func (vs *Server) GetAggregateAttestation(ctx context.Context, req *ethpb.AggregateAttestationRequest) (*ethpb.AggregateAttestationResponse, error) { + return nil, errors.New("Unimplemented") +} + +// SubmitAggregateAndProofs verifies given aggregate and proofs and publishes them on appropriate gossipsub topic. +func (vs *Server) SubmitAggregateAndProofs(ctx context.Context, req *ethpb.SubmitAggregateAndProofsRequest) (*emptypb.Empty, error) { + return nil, errors.New("Unimplemented") +} + +// SubmitBeaconCommitteeSubscription searches using discv5 for peers related to the provided subnet information +// and replaces current peers with those ones if necessary. +func (vs *Server) SubmitBeaconCommitteeSubscription(ctx context.Context, req *ethpb.SubmitBeaconCommitteeSubscriptionsRequest) (*emptypb.Empty, error) { + return nil, errors.New("Unimplemented") +} diff --git a/proto/eth/v1/validator_service.pb.go b/proto/eth/v1/validator_service.pb.go index 499f0d89bb..be2640d646 100755 --- a/proto/eth/v1/validator_service.pb.go +++ b/proto/eth/v1/validator_service.pb.go @@ -405,18 +405,18 @@ func (x *ProposerDuty) GetSlot() github_com_prysmaticlabs_eth2_types.Slot { return github_com_prysmaticlabs_eth2_types.Slot(0) } -type ProposerBlockRequest struct { +type ProduceBlockRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Slot github_com_prysmaticlabs_eth2_types.Slot `protobuf:"varint,1,opt,name=slot,proto3" json:"slot,omitempty" cast-type:"github.com/prysmaticlabs/eth2-types.Slot"` RandaoReveal []byte `protobuf:"bytes,2,opt,name=randao_reveal,json=randaoReveal,proto3" json:"randao_reveal,omitempty" ssz-size:"96"` - Graffiti []byte `protobuf:"bytes,3,opt,name=graffiti,proto3" json:"graffiti,omitempty" ssz-size:"32"` + Graffiti []byte `protobuf:"bytes,3,opt,name=graffiti,proto3,oneof" json:"graffiti,omitempty" ssz-size:"32"` } -func (x *ProposerBlockRequest) Reset() { - *x = ProposerBlockRequest{} +func (x *ProduceBlockRequest) Reset() { + *x = ProduceBlockRequest{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -424,13 +424,13 @@ func (x *ProposerBlockRequest) Reset() { } } -func (x *ProposerBlockRequest) String() string { +func (x *ProduceBlockRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProposerBlockRequest) ProtoMessage() {} +func (*ProduceBlockRequest) ProtoMessage() {} -func (x *ProposerBlockRequest) ProtoReflect() protoreflect.Message { +func (x *ProduceBlockRequest) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -442,33 +442,33 @@ func (x *ProposerBlockRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProposerBlockRequest.ProtoReflect.Descriptor instead. -func (*ProposerBlockRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProduceBlockRequest.ProtoReflect.Descriptor instead. +func (*ProduceBlockRequest) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{6} } -func (x *ProposerBlockRequest) GetSlot() github_com_prysmaticlabs_eth2_types.Slot { +func (x *ProduceBlockRequest) GetSlot() github_com_prysmaticlabs_eth2_types.Slot { if x != nil { return x.Slot } return github_com_prysmaticlabs_eth2_types.Slot(0) } -func (x *ProposerBlockRequest) GetRandaoReveal() []byte { +func (x *ProduceBlockRequest) GetRandaoReveal() []byte { if x != nil { return x.RandaoReveal } return nil } -func (x *ProposerBlockRequest) GetGraffiti() []byte { +func (x *ProduceBlockRequest) GetGraffiti() []byte { if x != nil { return x.Graffiti } return nil } -type ProposerBlockResponse struct { +type ProduceBlockResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -476,8 +476,8 @@ type ProposerBlockResponse struct { Data *BeaconBlock `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (x *ProposerBlockResponse) Reset() { - *x = ProposerBlockResponse{} +func (x *ProduceBlockResponse) Reset() { + *x = ProduceBlockResponse{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -485,13 +485,13 @@ func (x *ProposerBlockResponse) Reset() { } } -func (x *ProposerBlockResponse) String() string { +func (x *ProduceBlockResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProposerBlockResponse) ProtoMessage() {} +func (*ProduceBlockResponse) ProtoMessage() {} -func (x *ProposerBlockResponse) ProtoReflect() protoreflect.Message { +func (x *ProduceBlockResponse) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -503,19 +503,19 @@ func (x *ProposerBlockResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProposerBlockResponse.ProtoReflect.Descriptor instead. -func (*ProposerBlockResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ProduceBlockResponse.ProtoReflect.Descriptor instead. +func (*ProduceBlockResponse) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{7} } -func (x *ProposerBlockResponse) GetData() *BeaconBlock { +func (x *ProduceBlockResponse) GetData() *BeaconBlock { if x != nil { return x.Data } return nil } -type AttestationDataRequest struct { +type ProduceAttestationDataRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -524,8 +524,8 @@ type AttestationDataRequest struct { CommitteeIndex github_com_prysmaticlabs_eth2_types.CommitteeIndex `protobuf:"varint,2,opt,name=committee_index,json=committeeIndex,proto3" json:"committee_index,omitempty" cast-type:"github.com/prysmaticlabs/eth2-types.CommitteeIndex"` } -func (x *AttestationDataRequest) Reset() { - *x = AttestationDataRequest{} +func (x *ProduceAttestationDataRequest) Reset() { + *x = ProduceAttestationDataRequest{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -533,13 +533,13 @@ func (x *AttestationDataRequest) Reset() { } } -func (x *AttestationDataRequest) String() string { +func (x *ProduceAttestationDataRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AttestationDataRequest) ProtoMessage() {} +func (*ProduceAttestationDataRequest) ProtoMessage() {} -func (x *AttestationDataRequest) ProtoReflect() protoreflect.Message { +func (x *ProduceAttestationDataRequest) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -551,26 +551,26 @@ func (x *AttestationDataRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AttestationDataRequest.ProtoReflect.Descriptor instead. -func (*AttestationDataRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ProduceAttestationDataRequest.ProtoReflect.Descriptor instead. +func (*ProduceAttestationDataRequest) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{8} } -func (x *AttestationDataRequest) GetSlot() github_com_prysmaticlabs_eth2_types.Slot { +func (x *ProduceAttestationDataRequest) GetSlot() github_com_prysmaticlabs_eth2_types.Slot { if x != nil { return x.Slot } return github_com_prysmaticlabs_eth2_types.Slot(0) } -func (x *AttestationDataRequest) GetCommitteeIndex() github_com_prysmaticlabs_eth2_types.CommitteeIndex { +func (x *ProduceAttestationDataRequest) GetCommitteeIndex() github_com_prysmaticlabs_eth2_types.CommitteeIndex { if x != nil { return x.CommitteeIndex } return github_com_prysmaticlabs_eth2_types.CommitteeIndex(0) } -type AttestationDataResponse struct { +type ProduceAttestationDataResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -578,8 +578,8 @@ type AttestationDataResponse struct { Data *AttestationData `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (x *AttestationDataResponse) Reset() { - *x = AttestationDataResponse{} +func (x *ProduceAttestationDataResponse) Reset() { + *x = ProduceAttestationDataResponse{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -587,13 +587,13 @@ func (x *AttestationDataResponse) Reset() { } } -func (x *AttestationDataResponse) String() string { +func (x *ProduceAttestationDataResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AttestationDataResponse) ProtoMessage() {} +func (*ProduceAttestationDataResponse) ProtoMessage() {} -func (x *AttestationDataResponse) ProtoReflect() protoreflect.Message { +func (x *ProduceAttestationDataResponse) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -605,12 +605,12 @@ func (x *AttestationDataResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AttestationDataResponse.ProtoReflect.Descriptor instead. -func (*AttestationDataResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ProduceAttestationDataResponse.ProtoReflect.Descriptor instead. +func (*ProduceAttestationDataResponse) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{9} } -func (x *AttestationDataResponse) GetData() *AttestationData { +func (x *ProduceAttestationDataResponse) GetData() *AttestationData { if x != nil { return x.Data } @@ -672,7 +672,7 @@ func (x *AggregateAttestationRequest) GetSlot() github_com_prysmaticlabs_eth2_ty return github_com_prysmaticlabs_eth2_types.Slot(0) } -type AttestationResponse struct { +type AggregateAttestationResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -680,8 +680,8 @@ type AttestationResponse struct { Data *Attestation `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` } -func (x *AttestationResponse) Reset() { - *x = AttestationResponse{} +func (x *AggregateAttestationResponse) Reset() { + *x = AggregateAttestationResponse{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -689,13 +689,13 @@ func (x *AttestationResponse) Reset() { } } -func (x *AttestationResponse) String() string { +func (x *AggregateAttestationResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AttestationResponse) ProtoMessage() {} +func (*AggregateAttestationResponse) ProtoMessage() {} -func (x *AttestationResponse) ProtoReflect() protoreflect.Message { +func (x *AggregateAttestationResponse) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -707,19 +707,19 @@ func (x *AttestationResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AttestationResponse.ProtoReflect.Descriptor instead. -func (*AttestationResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use AggregateAttestationResponse.ProtoReflect.Descriptor instead. +func (*AggregateAttestationResponse) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{11} } -func (x *AttestationResponse) GetData() *Attestation { +func (x *AggregateAttestationResponse) GetData() *Attestation { if x != nil { return x.Data } return nil } -type AggregateAndProofsSubmit struct { +type SubmitAggregateAndProofsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -727,8 +727,8 @@ type AggregateAndProofsSubmit struct { Data []*SignedAggregateAttestationAndProof `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` } -func (x *AggregateAndProofsSubmit) Reset() { - *x = AggregateAndProofsSubmit{} +func (x *SubmitAggregateAndProofsRequest) Reset() { + *x = SubmitAggregateAndProofsRequest{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -736,13 +736,13 @@ func (x *AggregateAndProofsSubmit) Reset() { } } -func (x *AggregateAndProofsSubmit) String() string { +func (x *SubmitAggregateAndProofsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AggregateAndProofsSubmit) ProtoMessage() {} +func (*SubmitAggregateAndProofsRequest) ProtoMessage() {} -func (x *AggregateAndProofsSubmit) ProtoReflect() protoreflect.Message { +func (x *SubmitAggregateAndProofsRequest) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -754,19 +754,19 @@ func (x *AggregateAndProofsSubmit) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AggregateAndProofsSubmit.ProtoReflect.Descriptor instead. -func (*AggregateAndProofsSubmit) Descriptor() ([]byte, []int) { +// Deprecated: Use SubmitAggregateAndProofsRequest.ProtoReflect.Descriptor instead. +func (*SubmitAggregateAndProofsRequest) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{12} } -func (x *AggregateAndProofsSubmit) GetData() []*SignedAggregateAttestationAndProof { +func (x *SubmitAggregateAndProofsRequest) GetData() []*SignedAggregateAttestationAndProof { if x != nil { return x.Data } return nil } -type BeaconCommitteeSubscribeSubmit struct { +type SubmitBeaconCommitteeSubscriptionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -774,8 +774,8 @@ type BeaconCommitteeSubscribeSubmit struct { Data []*BeaconCommitteeSubscribe `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` } -func (x *BeaconCommitteeSubscribeSubmit) Reset() { - *x = BeaconCommitteeSubscribeSubmit{} +func (x *SubmitBeaconCommitteeSubscriptionsRequest) Reset() { + *x = SubmitBeaconCommitteeSubscriptionsRequest{} if protoimpl.UnsafeEnabled { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -783,13 +783,13 @@ func (x *BeaconCommitteeSubscribeSubmit) Reset() { } } -func (x *BeaconCommitteeSubscribeSubmit) String() string { +func (x *SubmitBeaconCommitteeSubscriptionsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BeaconCommitteeSubscribeSubmit) ProtoMessage() {} +func (*SubmitBeaconCommitteeSubscriptionsRequest) ProtoMessage() {} -func (x *BeaconCommitteeSubscribeSubmit) ProtoReflect() protoreflect.Message { +func (x *SubmitBeaconCommitteeSubscriptionsRequest) ProtoReflect() protoreflect.Message { mi := &file_proto_eth_v1_validator_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -801,12 +801,12 @@ func (x *BeaconCommitteeSubscribeSubmit) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BeaconCommitteeSubscribeSubmit.ProtoReflect.Descriptor instead. -func (*BeaconCommitteeSubscribeSubmit) Descriptor() ([]byte, []int) { +// Deprecated: Use SubmitBeaconCommitteeSubscriptionsRequest.ProtoReflect.Descriptor instead. +func (*SubmitBeaconCommitteeSubscriptionsRequest) Descriptor() ([]byte, []int) { return file_proto_eth_v1_validator_service_proto_rawDescGZIP(), []int{13} } -func (x *BeaconCommitteeSubscribeSubmit) GetData() []*BeaconCommitteeSubscribe { +func (x *SubmitBeaconCommitteeSubscriptionsRequest) GetData() []*BeaconCommitteeSubscribe { if x != nil { return x.Data } @@ -987,167 +987,173 @@ var file_proto_eth_v1_validator_service_proto_rawDesc = []byte{ 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x22, 0xa9, 0x01, 0x0a, 0x14, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x22, 0xba, 0x01, 0x0a, 0x13, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, + 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, + 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x2b, 0x0a, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x5f, + 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, + 0x18, 0x02, 0x39, 0x36, 0x52, 0x0c, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x66, 0x66, 0x69, 0x74, 0x69, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x48, 0x00, 0x52, 0x08, + 0x67, 0x72, 0x61, 0x66, 0x66, 0x69, 0x74, 0x69, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, + 0x67, 0x72, 0x61, 0x66, 0x66, 0x69, 0x74, 0x69, 0x22, 0x48, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xc2, 0x01, 0x0a, 0x1d, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, - 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x2b, 0x0a, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, - 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, - 0xb5, 0x18, 0x02, 0x39, 0x36, 0x52, 0x0c, 0x72, 0x61, 0x6e, 0x64, 0x61, 0x6f, 0x52, 0x65, 0x76, - 0x65, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x08, 0x67, 0x72, 0x61, 0x66, 0x66, 0x69, 0x74, 0x69, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x08, 0x67, - 0x72, 0x61, 0x66, 0x66, 0x69, 0x74, 0x69, 0x22, 0x49, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0xbb, 0x01, 0x0a, 0x16, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, - 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, - 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, - 0x5f, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x36, 0x82, 0xb5, 0x18, 0x32, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, - 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x22, 0x4f, 0x0a, 0x17, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x9b, 0x01, 0x0a, 0x1b, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3a, 0x0a, 0x15, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x06, 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x40, 0x0a, - 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, - 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, - 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x22, - 0x47, 0x0a, 0x13, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x63, 0x0a, 0x18, 0x41, 0x67, 0x67, 0x72, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, - 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5f, 0x0a, - 0x1e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, - 0x3d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf1, - 0x02, 0x0a, 0x18, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x5f, 0x0a, 0x0f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x42, 0x36, 0x82, 0xb5, 0x18, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, - 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x5f, 0x0a, 0x0f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x36, 0x82, 0xb5, 0x18, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, - 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2c, 0x0a, - 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x73, - 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x65, 0x73, 0x41, 0x74, 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, - 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, 0x28, 0x67, + 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x5f, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, + 0x36, 0x82, 0xb5, 0x18, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, + 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x56, 0x0a, 0x1e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x9b, 0x01, 0x0a, 0x1b, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x3a, 0x0a, 0x15, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x06, + 0x8a, 0xb5, 0x18, 0x02, 0x33, 0x32, 0x52, 0x13, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, + 0x6c, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x32, 0xc6, 0x08, 0x0a, 0x0f, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x97, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, - 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x7d, - 0x12, 0x97, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, - 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, - 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, - 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x2f, 0x7b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x7d, 0x12, 0x82, 0x01, 0x0a, 0x08, 0x47, - 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, + 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x22, 0x50, 0x0a, + 0x1c, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x6a, 0x0a, 0x1f, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x6e, 0x64, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6a, 0x0a, 0x29, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xf1, 0x02, 0x0a, 0x18, 0x42, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x12, 0x5f, 0x0a, 0x0f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x36, 0x82, + 0xb5, 0x18, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, + 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, 0x32, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x5f, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x36, + 0x82, 0xb5, 0x18, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x74, 0x68, + 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x73, 0x41, 0x74, + 0x53, 0x6c, 0x6f, 0x74, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x42, 0x2c, 0x82, 0xb5, 0x18, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, + 0x2f, 0x65, 0x74, 0x68, 0x32, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x53, 0x6c, 0x6f, 0x74, + 0x52, 0x04, 0x73, 0x6c, 0x6f, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x67, + 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, + 0x73, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x32, 0xf2, 0x08, 0x0a, 0x0f, + 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x9a, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, + 0x75, 0x74, 0x69, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, + 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x29, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x7b, 0x73, 0x6c, 0x6f, 0x74, 0x7d, 0x12, - 0x93, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x72, 0x2f, 0x64, 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x65, + 0x72, 0x2f, 0x7b, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x7d, 0x3a, 0x01, 0x2a, 0x12, 0x97, 0x01, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x26, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x65, 0x72, 0x44, 0x75, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x64, + 0x75, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x7b, + 0x65, 0x70, 0x6f, 0x63, 0x68, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x65, + 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x2f, 0x7b, 0x73, 0x6c, 0x6f, 0x74, 0x7d, 0x12, 0xa5, 0x01, + 0x0a, 0x16, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x9e, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x67, 0x67, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0xa7, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, - 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x93, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, - 0x6f, 0x66, 0x73, 0x12, 0x29, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, - 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x1a, 0x16, + 0x2d, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x97, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x12, 0x30, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x41, 0x6e, + 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x26, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x26, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x6e, 0x64, 0x5f, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0xac, 0x01, 0x0a, - 0x21, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x3e, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x38, 0x22, 0x30, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x42, 0x7f, 0x0a, 0x13, 0x6f, - 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x42, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x61, 0x74, 0x69, - 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x76, 0x31, 0xca, 0x02, 0x0f, 0x45, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0xb4, 0x01, 0x0a, 0x21, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3a, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, 0x2f, 0x65, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x65, 0x5f, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, + 0x42, 0x7f, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x72, 0x79, + 0x73, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0xaa, 0x02, 0x0f, + 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x76, 0x31, 0xca, + 0x02, 0x0f, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1164,47 +1170,47 @@ func file_proto_eth_v1_validator_service_proto_rawDescGZIP() []byte { var file_proto_eth_v1_validator_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_proto_eth_v1_validator_service_proto_goTypes = []interface{}{ - (*AttesterDutiesRequest)(nil), // 0: ethereum.eth.v1.AttesterDutiesRequest - (*AttesterDutiesResponse)(nil), // 1: ethereum.eth.v1.AttesterDutiesResponse - (*AttesterDuty)(nil), // 2: ethereum.eth.v1.AttesterDuty - (*ProposerDutiesRequest)(nil), // 3: ethereum.eth.v1.ProposerDutiesRequest - (*ProposerDutiesResponse)(nil), // 4: ethereum.eth.v1.ProposerDutiesResponse - (*ProposerDuty)(nil), // 5: ethereum.eth.v1.ProposerDuty - (*ProposerBlockRequest)(nil), // 6: ethereum.eth.v1.ProposerBlockRequest - (*ProposerBlockResponse)(nil), // 7: ethereum.eth.v1.ProposerBlockResponse - (*AttestationDataRequest)(nil), // 8: ethereum.eth.v1.AttestationDataRequest - (*AttestationDataResponse)(nil), // 9: ethereum.eth.v1.AttestationDataResponse - (*AggregateAttestationRequest)(nil), // 10: ethereum.eth.v1.AggregateAttestationRequest - (*AttestationResponse)(nil), // 11: ethereum.eth.v1.AttestationResponse - (*AggregateAndProofsSubmit)(nil), // 12: ethereum.eth.v1.AggregateAndProofsSubmit - (*BeaconCommitteeSubscribeSubmit)(nil), // 13: ethereum.eth.v1.BeaconCommitteeSubscribeSubmit - (*BeaconCommitteeSubscribe)(nil), // 14: ethereum.eth.v1.BeaconCommitteeSubscribe - (*BeaconBlock)(nil), // 15: ethereum.eth.v1.BeaconBlock - (*AttestationData)(nil), // 16: ethereum.eth.v1.AttestationData - (*Attestation)(nil), // 17: ethereum.eth.v1.Attestation - (*SignedAggregateAttestationAndProof)(nil), // 18: ethereum.eth.v1.SignedAggregateAttestationAndProof - (*empty.Empty)(nil), // 19: google.protobuf.Empty + (*AttesterDutiesRequest)(nil), // 0: ethereum.eth.v1.AttesterDutiesRequest + (*AttesterDutiesResponse)(nil), // 1: ethereum.eth.v1.AttesterDutiesResponse + (*AttesterDuty)(nil), // 2: ethereum.eth.v1.AttesterDuty + (*ProposerDutiesRequest)(nil), // 3: ethereum.eth.v1.ProposerDutiesRequest + (*ProposerDutiesResponse)(nil), // 4: ethereum.eth.v1.ProposerDutiesResponse + (*ProposerDuty)(nil), // 5: ethereum.eth.v1.ProposerDuty + (*ProduceBlockRequest)(nil), // 6: ethereum.eth.v1.ProduceBlockRequest + (*ProduceBlockResponse)(nil), // 7: ethereum.eth.v1.ProduceBlockResponse + (*ProduceAttestationDataRequest)(nil), // 8: ethereum.eth.v1.ProduceAttestationDataRequest + (*ProduceAttestationDataResponse)(nil), // 9: ethereum.eth.v1.ProduceAttestationDataResponse + (*AggregateAttestationRequest)(nil), // 10: ethereum.eth.v1.AggregateAttestationRequest + (*AggregateAttestationResponse)(nil), // 11: ethereum.eth.v1.AggregateAttestationResponse + (*SubmitAggregateAndProofsRequest)(nil), // 12: ethereum.eth.v1.SubmitAggregateAndProofsRequest + (*SubmitBeaconCommitteeSubscriptionsRequest)(nil), // 13: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest + (*BeaconCommitteeSubscribe)(nil), // 14: ethereum.eth.v1.BeaconCommitteeSubscribe + (*BeaconBlock)(nil), // 15: ethereum.eth.v1.BeaconBlock + (*AttestationData)(nil), // 16: ethereum.eth.v1.AttestationData + (*Attestation)(nil), // 17: ethereum.eth.v1.Attestation + (*SignedAggregateAttestationAndProof)(nil), // 18: ethereum.eth.v1.SignedAggregateAttestationAndProof + (*empty.Empty)(nil), // 19: google.protobuf.Empty } var file_proto_eth_v1_validator_service_proto_depIdxs = []int32{ 2, // 0: ethereum.eth.v1.AttesterDutiesResponse.data:type_name -> ethereum.eth.v1.AttesterDuty 5, // 1: ethereum.eth.v1.ProposerDutiesResponse.data:type_name -> ethereum.eth.v1.ProposerDuty - 15, // 2: ethereum.eth.v1.ProposerBlockResponse.data:type_name -> ethereum.eth.v1.BeaconBlock - 16, // 3: ethereum.eth.v1.AttestationDataResponse.data:type_name -> ethereum.eth.v1.AttestationData - 17, // 4: ethereum.eth.v1.AttestationResponse.data:type_name -> ethereum.eth.v1.Attestation - 18, // 5: ethereum.eth.v1.AggregateAndProofsSubmit.data:type_name -> ethereum.eth.v1.SignedAggregateAttestationAndProof - 14, // 6: ethereum.eth.v1.BeaconCommitteeSubscribeSubmit.data:type_name -> ethereum.eth.v1.BeaconCommitteeSubscribe + 15, // 2: ethereum.eth.v1.ProduceBlockResponse.data:type_name -> ethereum.eth.v1.BeaconBlock + 16, // 3: ethereum.eth.v1.ProduceAttestationDataResponse.data:type_name -> ethereum.eth.v1.AttestationData + 17, // 4: ethereum.eth.v1.AggregateAttestationResponse.data:type_name -> ethereum.eth.v1.Attestation + 18, // 5: ethereum.eth.v1.SubmitAggregateAndProofsRequest.data:type_name -> ethereum.eth.v1.SignedAggregateAttestationAndProof + 14, // 6: ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest.data:type_name -> ethereum.eth.v1.BeaconCommitteeSubscribe 0, // 7: ethereum.eth.v1.BeaconValidator.GetAttesterDuties:input_type -> ethereum.eth.v1.AttesterDutiesRequest 3, // 8: ethereum.eth.v1.BeaconValidator.GetProposerDuties:input_type -> ethereum.eth.v1.ProposerDutiesRequest - 6, // 9: ethereum.eth.v1.BeaconValidator.GetBlock:input_type -> ethereum.eth.v1.ProposerBlockRequest - 8, // 10: ethereum.eth.v1.BeaconValidator.GetAttestationData:input_type -> ethereum.eth.v1.AttestationDataRequest + 6, // 9: ethereum.eth.v1.BeaconValidator.ProduceBlock:input_type -> ethereum.eth.v1.ProduceBlockRequest + 8, // 10: ethereum.eth.v1.BeaconValidator.ProduceAttestationData:input_type -> ethereum.eth.v1.ProduceAttestationDataRequest 10, // 11: ethereum.eth.v1.BeaconValidator.GetAggregateAttestation:input_type -> ethereum.eth.v1.AggregateAttestationRequest - 12, // 12: ethereum.eth.v1.BeaconValidator.SubmitAggregateAndProofs:input_type -> ethereum.eth.v1.AggregateAndProofsSubmit - 13, // 13: ethereum.eth.v1.BeaconValidator.SubmitBeaconCommitteeSubscription:input_type -> ethereum.eth.v1.BeaconCommitteeSubscribeSubmit + 12, // 12: ethereum.eth.v1.BeaconValidator.SubmitAggregateAndProofs:input_type -> ethereum.eth.v1.SubmitAggregateAndProofsRequest + 13, // 13: ethereum.eth.v1.BeaconValidator.SubmitBeaconCommitteeSubscription:input_type -> ethereum.eth.v1.SubmitBeaconCommitteeSubscriptionsRequest 1, // 14: ethereum.eth.v1.BeaconValidator.GetAttesterDuties:output_type -> ethereum.eth.v1.AttesterDutiesResponse 4, // 15: ethereum.eth.v1.BeaconValidator.GetProposerDuties:output_type -> ethereum.eth.v1.ProposerDutiesResponse - 7, // 16: ethereum.eth.v1.BeaconValidator.GetBlock:output_type -> ethereum.eth.v1.ProposerBlockResponse - 9, // 17: ethereum.eth.v1.BeaconValidator.GetAttestationData:output_type -> ethereum.eth.v1.AttestationDataResponse - 11, // 18: ethereum.eth.v1.BeaconValidator.GetAggregateAttestation:output_type -> ethereum.eth.v1.AttestationResponse + 7, // 16: ethereum.eth.v1.BeaconValidator.ProduceBlock:output_type -> ethereum.eth.v1.ProduceBlockResponse + 9, // 17: ethereum.eth.v1.BeaconValidator.ProduceAttestationData:output_type -> ethereum.eth.v1.ProduceAttestationDataResponse + 11, // 18: ethereum.eth.v1.BeaconValidator.GetAggregateAttestation:output_type -> ethereum.eth.v1.AggregateAttestationResponse 19, // 19: ethereum.eth.v1.BeaconValidator.SubmitAggregateAndProofs:output_type -> google.protobuf.Empty 19, // 20: ethereum.eth.v1.BeaconValidator.SubmitBeaconCommitteeSubscription:output_type -> google.protobuf.Empty 14, // [14:21] is the sub-list for method output_type @@ -1295,7 +1301,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposerBlockRequest); i { + switch v := v.(*ProduceBlockRequest); i { case 0: return &v.state case 1: @@ -1307,7 +1313,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposerBlockResponse); i { + switch v := v.(*ProduceBlockResponse); i { case 0: return &v.state case 1: @@ -1319,7 +1325,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationDataRequest); i { + switch v := v.(*ProduceAttestationDataRequest); i { case 0: return &v.state case 1: @@ -1331,7 +1337,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationDataResponse); i { + switch v := v.(*ProduceAttestationDataResponse); i { case 0: return &v.state case 1: @@ -1355,7 +1361,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationResponse); i { + switch v := v.(*AggregateAttestationResponse); i { case 0: return &v.state case 1: @@ -1367,7 +1373,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggregateAndProofsSubmit); i { + switch v := v.(*SubmitAggregateAndProofsRequest); i { case 0: return &v.state case 1: @@ -1379,7 +1385,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } file_proto_eth_v1_validator_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BeaconCommitteeSubscribeSubmit); i { + switch v := v.(*SubmitBeaconCommitteeSubscriptionsRequest); i { case 0: return &v.state case 1: @@ -1403,6 +1409,7 @@ func file_proto_eth_v1_validator_service_proto_init() { } } } + file_proto_eth_v1_validator_service_proto_msgTypes[6].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ @@ -1437,11 +1444,11 @@ const _ = grpc.SupportPackageIsVersion6 type BeaconValidatorClient interface { GetAttesterDuties(ctx context.Context, in *AttesterDutiesRequest, opts ...grpc.CallOption) (*AttesterDutiesResponse, error) GetProposerDuties(ctx context.Context, in *ProposerDutiesRequest, opts ...grpc.CallOption) (*ProposerDutiesResponse, error) - GetBlock(ctx context.Context, in *ProposerBlockRequest, opts ...grpc.CallOption) (*ProposerBlockResponse, error) - GetAttestationData(ctx context.Context, in *AttestationDataRequest, opts ...grpc.CallOption) (*AttestationDataResponse, error) - GetAggregateAttestation(ctx context.Context, in *AggregateAttestationRequest, opts ...grpc.CallOption) (*AttestationResponse, error) - SubmitAggregateAndProofs(ctx context.Context, in *AggregateAndProofsSubmit, opts ...grpc.CallOption) (*empty.Empty, error) - SubmitBeaconCommitteeSubscription(ctx context.Context, in *BeaconCommitteeSubscribeSubmit, opts ...grpc.CallOption) (*empty.Empty, error) + ProduceBlock(ctx context.Context, in *ProduceBlockRequest, opts ...grpc.CallOption) (*ProduceBlockResponse, error) + ProduceAttestationData(ctx context.Context, in *ProduceAttestationDataRequest, opts ...grpc.CallOption) (*ProduceAttestationDataResponse, error) + GetAggregateAttestation(ctx context.Context, in *AggregateAttestationRequest, opts ...grpc.CallOption) (*AggregateAttestationResponse, error) + SubmitAggregateAndProofs(ctx context.Context, in *SubmitAggregateAndProofsRequest, opts ...grpc.CallOption) (*empty.Empty, error) + SubmitBeaconCommitteeSubscription(ctx context.Context, in *SubmitBeaconCommitteeSubscriptionsRequest, opts ...grpc.CallOption) (*empty.Empty, error) } type beaconValidatorClient struct { @@ -1470,26 +1477,26 @@ func (c *beaconValidatorClient) GetProposerDuties(ctx context.Context, in *Propo return out, nil } -func (c *beaconValidatorClient) GetBlock(ctx context.Context, in *ProposerBlockRequest, opts ...grpc.CallOption) (*ProposerBlockResponse, error) { - out := new(ProposerBlockResponse) - err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/GetBlock", in, out, opts...) +func (c *beaconValidatorClient) ProduceBlock(ctx context.Context, in *ProduceBlockRequest, opts ...grpc.CallOption) (*ProduceBlockResponse, error) { + out := new(ProduceBlockResponse) + err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/ProduceBlock", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *beaconValidatorClient) GetAttestationData(ctx context.Context, in *AttestationDataRequest, opts ...grpc.CallOption) (*AttestationDataResponse, error) { - out := new(AttestationDataResponse) - err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/GetAttestationData", in, out, opts...) +func (c *beaconValidatorClient) ProduceAttestationData(ctx context.Context, in *ProduceAttestationDataRequest, opts ...grpc.CallOption) (*ProduceAttestationDataResponse, error) { + out := new(ProduceAttestationDataResponse) + err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/ProduceAttestationData", in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *beaconValidatorClient) GetAggregateAttestation(ctx context.Context, in *AggregateAttestationRequest, opts ...grpc.CallOption) (*AttestationResponse, error) { - out := new(AttestationResponse) +func (c *beaconValidatorClient) GetAggregateAttestation(ctx context.Context, in *AggregateAttestationRequest, opts ...grpc.CallOption) (*AggregateAttestationResponse, error) { + out := new(AggregateAttestationResponse) err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/GetAggregateAttestation", in, out, opts...) if err != nil { return nil, err @@ -1497,7 +1504,7 @@ func (c *beaconValidatorClient) GetAggregateAttestation(ctx context.Context, in return out, nil } -func (c *beaconValidatorClient) SubmitAggregateAndProofs(ctx context.Context, in *AggregateAndProofsSubmit, opts ...grpc.CallOption) (*empty.Empty, error) { +func (c *beaconValidatorClient) SubmitAggregateAndProofs(ctx context.Context, in *SubmitAggregateAndProofsRequest, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/SubmitAggregateAndProofs", in, out, opts...) if err != nil { @@ -1506,7 +1513,7 @@ func (c *beaconValidatorClient) SubmitAggregateAndProofs(ctx context.Context, in return out, nil } -func (c *beaconValidatorClient) SubmitBeaconCommitteeSubscription(ctx context.Context, in *BeaconCommitteeSubscribeSubmit, opts ...grpc.CallOption) (*empty.Empty, error) { +func (c *beaconValidatorClient) SubmitBeaconCommitteeSubscription(ctx context.Context, in *SubmitBeaconCommitteeSubscriptionsRequest, opts ...grpc.CallOption) (*empty.Empty, error) { out := new(empty.Empty) err := c.cc.Invoke(ctx, "/ethereum.eth.v1.BeaconValidator/SubmitBeaconCommitteeSubscription", in, out, opts...) if err != nil { @@ -1519,11 +1526,11 @@ func (c *beaconValidatorClient) SubmitBeaconCommitteeSubscription(ctx context.Co type BeaconValidatorServer interface { GetAttesterDuties(context.Context, *AttesterDutiesRequest) (*AttesterDutiesResponse, error) GetProposerDuties(context.Context, *ProposerDutiesRequest) (*ProposerDutiesResponse, error) - GetBlock(context.Context, *ProposerBlockRequest) (*ProposerBlockResponse, error) - GetAttestationData(context.Context, *AttestationDataRequest) (*AttestationDataResponse, error) - GetAggregateAttestation(context.Context, *AggregateAttestationRequest) (*AttestationResponse, error) - SubmitAggregateAndProofs(context.Context, *AggregateAndProofsSubmit) (*empty.Empty, error) - SubmitBeaconCommitteeSubscription(context.Context, *BeaconCommitteeSubscribeSubmit) (*empty.Empty, error) + ProduceBlock(context.Context, *ProduceBlockRequest) (*ProduceBlockResponse, error) + ProduceAttestationData(context.Context, *ProduceAttestationDataRequest) (*ProduceAttestationDataResponse, error) + GetAggregateAttestation(context.Context, *AggregateAttestationRequest) (*AggregateAttestationResponse, error) + SubmitAggregateAndProofs(context.Context, *SubmitAggregateAndProofsRequest) (*empty.Empty, error) + SubmitBeaconCommitteeSubscription(context.Context, *SubmitBeaconCommitteeSubscriptionsRequest) (*empty.Empty, error) } // UnimplementedBeaconValidatorServer can be embedded to have forward compatible implementations. @@ -1536,19 +1543,19 @@ func (*UnimplementedBeaconValidatorServer) GetAttesterDuties(context.Context, *A func (*UnimplementedBeaconValidatorServer) GetProposerDuties(context.Context, *ProposerDutiesRequest) (*ProposerDutiesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetProposerDuties not implemented") } -func (*UnimplementedBeaconValidatorServer) GetBlock(context.Context, *ProposerBlockRequest) (*ProposerBlockResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBlock not implemented") +func (*UnimplementedBeaconValidatorServer) ProduceBlock(context.Context, *ProduceBlockRequest) (*ProduceBlockResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ProduceBlock not implemented") } -func (*UnimplementedBeaconValidatorServer) GetAttestationData(context.Context, *AttestationDataRequest) (*AttestationDataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetAttestationData not implemented") +func (*UnimplementedBeaconValidatorServer) ProduceAttestationData(context.Context, *ProduceAttestationDataRequest) (*ProduceAttestationDataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ProduceAttestationData not implemented") } -func (*UnimplementedBeaconValidatorServer) GetAggregateAttestation(context.Context, *AggregateAttestationRequest) (*AttestationResponse, error) { +func (*UnimplementedBeaconValidatorServer) GetAggregateAttestation(context.Context, *AggregateAttestationRequest) (*AggregateAttestationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAggregateAttestation not implemented") } -func (*UnimplementedBeaconValidatorServer) SubmitAggregateAndProofs(context.Context, *AggregateAndProofsSubmit) (*empty.Empty, error) { +func (*UnimplementedBeaconValidatorServer) SubmitAggregateAndProofs(context.Context, *SubmitAggregateAndProofsRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitAggregateAndProofs not implemented") } -func (*UnimplementedBeaconValidatorServer) SubmitBeaconCommitteeSubscription(context.Context, *BeaconCommitteeSubscribeSubmit) (*empty.Empty, error) { +func (*UnimplementedBeaconValidatorServer) SubmitBeaconCommitteeSubscription(context.Context, *SubmitBeaconCommitteeSubscriptionsRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method SubmitBeaconCommitteeSubscription not implemented") } @@ -1592,38 +1599,38 @@ func _BeaconValidator_GetProposerDuties_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } -func _BeaconValidator_GetBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ProposerBlockRequest) +func _BeaconValidator_ProduceBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProduceBlockRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(BeaconValidatorServer).GetBlock(ctx, in) + return srv.(BeaconValidatorServer).ProduceBlock(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/ethereum.eth.v1.BeaconValidator/GetBlock", + FullMethod: "/ethereum.eth.v1.BeaconValidator/ProduceBlock", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BeaconValidatorServer).GetBlock(ctx, req.(*ProposerBlockRequest)) + return srv.(BeaconValidatorServer).ProduceBlock(ctx, req.(*ProduceBlockRequest)) } return interceptor(ctx, in, info, handler) } -func _BeaconValidator_GetAttestationData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AttestationDataRequest) +func _BeaconValidator_ProduceAttestationData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ProduceAttestationDataRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(BeaconValidatorServer).GetAttestationData(ctx, in) + return srv.(BeaconValidatorServer).ProduceAttestationData(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/ethereum.eth.v1.BeaconValidator/GetAttestationData", + FullMethod: "/ethereum.eth.v1.BeaconValidator/ProduceAttestationData", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BeaconValidatorServer).GetAttestationData(ctx, req.(*AttestationDataRequest)) + return srv.(BeaconValidatorServer).ProduceAttestationData(ctx, req.(*ProduceAttestationDataRequest)) } return interceptor(ctx, in, info, handler) } @@ -1647,7 +1654,7 @@ func _BeaconValidator_GetAggregateAttestation_Handler(srv interface{}, ctx conte } func _BeaconValidator_SubmitAggregateAndProofs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AggregateAndProofsSubmit) + in := new(SubmitAggregateAndProofsRequest) if err := dec(in); err != nil { return nil, err } @@ -1659,13 +1666,13 @@ func _BeaconValidator_SubmitAggregateAndProofs_Handler(srv interface{}, ctx cont FullMethod: "/ethereum.eth.v1.BeaconValidator/SubmitAggregateAndProofs", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BeaconValidatorServer).SubmitAggregateAndProofs(ctx, req.(*AggregateAndProofsSubmit)) + return srv.(BeaconValidatorServer).SubmitAggregateAndProofs(ctx, req.(*SubmitAggregateAndProofsRequest)) } return interceptor(ctx, in, info, handler) } func _BeaconValidator_SubmitBeaconCommitteeSubscription_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BeaconCommitteeSubscribeSubmit) + in := new(SubmitBeaconCommitteeSubscriptionsRequest) if err := dec(in); err != nil { return nil, err } @@ -1677,7 +1684,7 @@ func _BeaconValidator_SubmitBeaconCommitteeSubscription_Handler(srv interface{}, FullMethod: "/ethereum.eth.v1.BeaconValidator/SubmitBeaconCommitteeSubscription", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(BeaconValidatorServer).SubmitBeaconCommitteeSubscription(ctx, req.(*BeaconCommitteeSubscribeSubmit)) + return srv.(BeaconValidatorServer).SubmitBeaconCommitteeSubscription(ctx, req.(*SubmitBeaconCommitteeSubscriptionsRequest)) } return interceptor(ctx, in, info, handler) } @@ -1695,12 +1702,12 @@ var _BeaconValidator_serviceDesc = grpc.ServiceDesc{ Handler: _BeaconValidator_GetProposerDuties_Handler, }, { - MethodName: "GetBlock", - Handler: _BeaconValidator_GetBlock_Handler, + MethodName: "ProduceBlock", + Handler: _BeaconValidator_ProduceBlock_Handler, }, { - MethodName: "GetAttestationData", - Handler: _BeaconValidator_GetAttestationData_Handler, + MethodName: "ProduceAttestationData", + Handler: _BeaconValidator_ProduceAttestationData_Handler, }, { MethodName: "GetAggregateAttestation", diff --git a/proto/eth/v1/validator_service.pb.gw.go b/proto/eth/v1/validator_service.pb.gw.go index 4874b83fc2..e4553fc341 100755 --- a/proto/eth/v1/validator_service.pb.gw.go +++ b/proto/eth/v1/validator_service.pb.gw.go @@ -37,14 +37,18 @@ var _ = github_com_prysmaticlabs_eth2_types.Epoch(0) var _ = emptypb.Empty{} var _ = empty.Empty{} -var ( - filter_BeaconValidator_GetAttesterDuties_0 = &utilities.DoubleArray{Encoding: map[string]int{"epoch": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - func request_BeaconValidator_GetAttesterDuties_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq AttesterDutiesRequest var metadata runtime.ServerMetadata + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + var ( val string ok bool @@ -63,13 +67,6 @@ func request_BeaconValidator_GetAttesterDuties_0(ctx context.Context, marshaler } protoReq.Epoch = github_com_prysmaticlabs_eth2_types.Epoch(epoch) - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_GetAttesterDuties_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := client.GetAttesterDuties(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -79,6 +76,14 @@ func local_request_BeaconValidator_GetAttesterDuties_0(ctx context.Context, mars var protoReq AttesterDutiesRequest var metadata runtime.ServerMetadata + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + var ( val string ok bool @@ -97,13 +102,6 @@ func local_request_BeaconValidator_GetAttesterDuties_0(ctx context.Context, mars } protoReq.Epoch = github_com_prysmaticlabs_eth2_types.Epoch(epoch) - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_GetAttesterDuties_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - msg, err := server.GetAttesterDuties(ctx, &protoReq) return msg, metadata, err @@ -164,11 +162,11 @@ func local_request_BeaconValidator_GetProposerDuties_0(ctx context.Context, mars } var ( - filter_BeaconValidator_GetBlock_0 = &utilities.DoubleArray{Encoding: map[string]int{"slot": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_BeaconValidator_ProduceBlock_0 = &utilities.DoubleArray{Encoding: map[string]int{"slot": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} ) -func request_BeaconValidator_GetBlock_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ProposerBlockRequest +func request_BeaconValidator_ProduceBlock_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ProduceBlockRequest var metadata runtime.ServerMetadata var ( @@ -192,17 +190,17 @@ func request_BeaconValidator_GetBlock_0(ctx context.Context, marshaler runtime.M if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_GetBlock_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_ProduceBlock_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetBlock(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ProduceBlock(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_BeaconValidator_GetBlock_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ProposerBlockRequest +func local_request_BeaconValidator_ProduceBlock_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ProduceBlockRequest var metadata runtime.ServerMetadata var ( @@ -226,47 +224,47 @@ func local_request_BeaconValidator_GetBlock_0(ctx context.Context, marshaler run if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_GetBlock_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_ProduceBlock_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetBlock(ctx, &protoReq) + msg, err := server.ProduceBlock(ctx, &protoReq) return msg, metadata, err } var ( - filter_BeaconValidator_GetAttestationData_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + filter_BeaconValidator_ProduceAttestationData_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) -func request_BeaconValidator_GetAttestationData_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AttestationDataRequest +func request_BeaconValidator_ProduceAttestationData_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ProduceAttestationDataRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_GetAttestationData_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_ProduceAttestationData_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := client.GetAttestationData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + msg, err := client.ProduceAttestationData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err } -func local_request_BeaconValidator_GetAttestationData_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AttestationDataRequest +func local_request_BeaconValidator_ProduceAttestationData_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ProduceAttestationDataRequest var metadata runtime.ServerMetadata if err := req.ParseForm(); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_GetAttestationData_0); err != nil { + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BeaconValidator_ProduceAttestationData_0); err != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } - msg, err := server.GetAttestationData(ctx, &protoReq) + msg, err := server.ProduceAttestationData(ctx, &protoReq) return msg, metadata, err } @@ -308,14 +306,14 @@ func local_request_BeaconValidator_GetAggregateAttestation_0(ctx context.Context } func request_BeaconValidator_SubmitAggregateAndProofs_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AggregateAndProofsSubmit + var protoReq SubmitAggregateAndProofsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -325,14 +323,14 @@ func request_BeaconValidator_SubmitAggregateAndProofs_0(ctx context.Context, mar } func local_request_BeaconValidator_SubmitAggregateAndProofs_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AggregateAndProofsSubmit + var protoReq SubmitAggregateAndProofsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -342,14 +340,14 @@ func local_request_BeaconValidator_SubmitAggregateAndProofs_0(ctx context.Contex } func request_BeaconValidator_SubmitBeaconCommitteeSubscription_0(ctx context.Context, marshaler runtime.Marshaler, client BeaconValidatorClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq BeaconCommitteeSubscribeSubmit + var protoReq SubmitBeaconCommitteeSubscriptionsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -359,14 +357,14 @@ func request_BeaconValidator_SubmitBeaconCommitteeSubscription_0(ctx context.Con } func local_request_BeaconValidator_SubmitBeaconCommitteeSubscription_0(ctx context.Context, marshaler runtime.Marshaler, server BeaconValidatorServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq BeaconCommitteeSubscribeSubmit + var protoReq SubmitBeaconCommitteeSubscriptionsRequest var metadata runtime.ServerMetadata newReader, berr := utilities.IOReaderFactory(req.Body) if berr != nil { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Data); err != nil && err != io.EOF { + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) } @@ -381,7 +379,7 @@ func local_request_BeaconValidator_SubmitBeaconCommitteeSubscription_0(ctx conte // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterBeaconValidatorHandlerFromEndpoint instead. func RegisterBeaconValidatorHandlerServer(ctx context.Context, mux *runtime.ServeMux, server BeaconValidatorServer) error { - mux.Handle("GET", pattern_BeaconValidator_GetAttesterDuties_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_BeaconValidator_GetAttesterDuties_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream @@ -427,18 +425,18 @@ func RegisterBeaconValidatorHandlerServer(ctx context.Context, mux *runtime.Serv }) - mux.Handle("GET", pattern_BeaconValidator_GetBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BeaconValidator_ProduceBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/GetBlock") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/ProduceBlock") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BeaconValidator_GetBlock_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_BeaconValidator_ProduceBlock_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -446,22 +444,22 @@ func RegisterBeaconValidatorHandlerServer(ctx context.Context, mux *runtime.Serv return } - forward_BeaconValidator_GetBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BeaconValidator_ProduceBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BeaconValidator_GetAttestationData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BeaconValidator_ProduceAttestationData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() var stream runtime.ServerTransportStream ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/GetAttestationData") + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/ProduceAttestationData") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BeaconValidator_GetAttestationData_0(rctx, inboundMarshaler, server, req, pathParams) + resp, md, err := local_request_BeaconValidator_ProduceAttestationData_0(rctx, inboundMarshaler, server, req, pathParams) md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { @@ -469,7 +467,7 @@ func RegisterBeaconValidatorHandlerServer(ctx context.Context, mux *runtime.Serv return } - forward_BeaconValidator_GetAttestationData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BeaconValidator_ProduceAttestationData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -583,7 +581,7 @@ func RegisterBeaconValidatorHandler(ctx context.Context, mux *runtime.ServeMux, // "BeaconValidatorClient" to call the correct interceptors. func RegisterBeaconValidatorHandlerClient(ctx context.Context, mux *runtime.ServeMux, client BeaconValidatorClient) error { - mux.Handle("GET", pattern_BeaconValidator_GetAttesterDuties_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_BeaconValidator_GetAttesterDuties_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -623,43 +621,43 @@ func RegisterBeaconValidatorHandlerClient(ctx context.Context, mux *runtime.Serv }) - mux.Handle("GET", pattern_BeaconValidator_GetBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BeaconValidator_ProduceBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/GetBlock") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/ProduceBlock") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BeaconValidator_GetBlock_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BeaconValidator_ProduceBlock_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_BeaconValidator_GetBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BeaconValidator_ProduceBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BeaconValidator_GetAttestationData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BeaconValidator_ProduceAttestationData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/GetAttestationData") + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/ethereum.eth.v1.BeaconValidator/ProduceAttestationData") if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BeaconValidator_GetAttestationData_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BeaconValidator_ProduceAttestationData_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_BeaconValidator_GetAttestationData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BeaconValidator_ProduceAttestationData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -731,9 +729,9 @@ var ( pattern_BeaconValidator_GetProposerDuties_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"eth", "v1", "validator", "duties", "proposer", "epoch"}, "")) - pattern_BeaconValidator_GetBlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"eth", "v1", "validator", "blocks", "slot"}, "")) + pattern_BeaconValidator_ProduceBlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"eth", "v1", "validator", "blocks", "slot"}, "")) - pattern_BeaconValidator_GetAttestationData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"eth", "v1", "validator", "attestation_data"}, "")) + pattern_BeaconValidator_ProduceAttestationData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"eth", "v1", "validator", "attestation_data"}, "")) pattern_BeaconValidator_GetAggregateAttestation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"eth", "v1", "validator", "aggregate_attestation"}, "")) @@ -747,9 +745,9 @@ var ( forward_BeaconValidator_GetProposerDuties_0 = runtime.ForwardResponseMessage - forward_BeaconValidator_GetBlock_0 = runtime.ForwardResponseMessage + forward_BeaconValidator_ProduceBlock_0 = runtime.ForwardResponseMessage - forward_BeaconValidator_GetAttestationData_0 = runtime.ForwardResponseMessage + forward_BeaconValidator_ProduceAttestationData_0 = runtime.ForwardResponseMessage forward_BeaconValidator_GetAggregateAttestation_0 = runtime.ForwardResponseMessage diff --git a/proto/eth/v1/validator_service.proto b/proto/eth/v1/validator_service.proto index e83b8c12fb..4c6312916a 100644 --- a/proto/eth/v1/validator_service.proto +++ b/proto/eth/v1/validator_service.proto @@ -40,31 +40,63 @@ service BeaconValidator { // by validators, for a particular epoch. Duties should only need to be checked once per epoch, however // a chain reorganization (of > MIN_SEED_LOOKAHEAD epochs) could occur, resulting in a change of duties. // For full safety, you should monitor chain reorganization events. + // + // HTTP response usage: + // - 200: Successful response + // - 400: Invalid epoch or index + // - 500: Beacon node internal error + // - 503: Beacon node is currently syncing, try again later rpc GetAttesterDuties(AttesterDutiesRequest) returns (AttesterDutiesResponse) { - option (google.api.http) = { get: "/eth/v1/validator/duties/attester/{epoch}" }; + option (google.api.http) = { + post: "/eth/v1/validator/duties/attester/{epoch}" + body: "*" + }; } // GetProposerDuties requests beacon node to provide all validators that are scheduled to - // propose a block in the given epoch + // propose a block in the given epoch. + // + // HTTP response usage: + // - 200: Successful response + // - 400: Invalid epoch + // - 500: Beacon node internal error + // - 503: Beacon node is currently syncing, try again later rpc GetProposerDuties(ProposerDutiesRequest) returns (ProposerDutiesResponse) { option (google.api.http) = { get: "/eth/v1/validator/duties/proposer/{epoch}" }; } - // GetBlock requests the beacon node to produce a valid unsigned beacon block, + // ProduceBlock requests the beacon node to produce a valid unsigned beacon block, // which can then be signed by a proposer and submitted. - rpc GetBlock(ProposerBlockRequest) returns (ProposerBlockResponse) { + // + // HTTP response usage: + // - 200: Successful response + // - 400: Invalid block production request + // - 500: Beacon node internal error + // - 503: Beacon node is currently syncing, try again later + rpc ProduceBlock(ProduceBlockRequest) returns (ProduceBlockResponse) { option (google.api.http) = { get: "/eth/v1/validator/blocks/{slot}" }; } - // GetAttestationData requests that the beacon node provides the attestation data for + // ProduceAttestationData requests that the beacon node produces attestation data for // the requested committee index and slot based on the nodes current head. - rpc GetAttestationData(AttestationDataRequest) returns (AttestationDataResponse) { + // + // HTTP response usage: + // - 200: Successful response + // - 400: Invalid request syntax + // - 500: Beacon node internal error + // - 503: Beacon node is currently syncing, try again later + rpc ProduceAttestationData(ProduceAttestationDataRequest) returns (ProduceAttestationDataResponse) { option (google.api.http) = { get: "/eth/v1/validator/attestation_data" }; } // GetAggregateAttestation aggregates all attestations matching the given attestation data root and slot, // returning the aggregated result. - rpc GetAggregateAttestation(AggregateAttestationRequest) returns (AttestationResponse) { + // + // HTTP response usage: + // - 200: Successful response + // - 400: Invalid request syntax + // - 500: Beacon node internal error + rpc GetAggregateAttestation(AggregateAttestationRequest) returns (AggregateAttestationResponse) { option (google.api.http) = { get: "/eth/v1/validator/aggregate_attestation" }; } @@ -72,18 +104,16 @@ service BeaconValidator { // // Response usage: // - 200: Successful response - // - // - 400: Invalid request syntax. - // - // - 500: Beacon node internal error. - rpc SubmitAggregateAndProofs(AggregateAndProofsSubmit) returns (google.protobuf.Empty) { + // - 400: Invalid request syntax + // - 500: Beacon node internal error + rpc SubmitAggregateAndProofs(SubmitAggregateAndProofsRequest) returns (google.protobuf.Empty) { option (google.api.http) = { post: "/eth/v1/validator/aggregate_and_proofs" - body: "data" + body: "*" }; } - // SubmitBeaconCommitteeSubscription requests the beacon node to search using discv5 for peers related to + // SubmitBeaconCommitteeSubscription searches using discv5 for peers related to // the provided subnet information and replaces current peers with those ones if necessary. // // If validator is_aggregator, beacon node must: @@ -91,16 +121,15 @@ service BeaconValidator { // - aggregate attestations received on that subnet. // // Response usage: - // - 200: Slot signature is valid and beacon node has prepared the attestation subnet. - // Note that, we cannot be certain Beacon node will find peers for that subnet for various reasons. - // - // - 500: Beacon node internal error. - // - // - 503: Beacon node is currently syncing, try again later. - rpc SubmitBeaconCommitteeSubscription(BeaconCommitteeSubscribeSubmit) returns (google.protobuf.Empty) { + // - 200: Slot signature is valid and beacon node has prepared the attestation subnet + // Note that we cannot be certain Beacon node will find peers for that subnet for various reasons + // - 400: Invalid request syntax + // - 500: Beacon node internal error + // - 503: Beacon node is currently syncing, try again later + rpc SubmitBeaconCommitteeSubscription(SubmitBeaconCommitteeSubscriptionsRequest) returns (google.protobuf.Empty) { option (google.api.http) = { post: "/eth/v1/validator/beacon_committee_subscriptions" - body: "data" + body: "*" }; } } @@ -162,7 +191,7 @@ message ProposerDuty { uint64 slot = 3 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; } -message ProposerBlockRequest { +message ProduceBlockRequest { // The slot to request a block for. uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; @@ -171,14 +200,14 @@ message ProposerBlockRequest { // 32 byte field of arbitrary data. This field may contain any data and // is not used for anything other than a fun message. - bytes graffiti = 3 [(ethereum.eth.ext.ssz_size) = "32"]; + optional bytes graffiti = 3 [(ethereum.eth.ext.ssz_size) = "32"]; } -message ProposerBlockResponse { +message ProduceBlockResponse { BeaconBlock data = 1; } -message AttestationDataRequest { +message ProduceAttestationDataRequest { // Slot for which the attestation data should be retrieved for. uint64 slot = 1 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; @@ -186,7 +215,7 @@ message AttestationDataRequest { uint64 committee_index = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.CommitteeIndex"]; } -message AttestationDataResponse { +message ProduceAttestationDataResponse { AttestationData data = 1; } @@ -198,15 +227,15 @@ message AggregateAttestationRequest { uint64 slot = 2 [(ethereum.eth.ext.cast_type) = "github.com/prysmaticlabs/eth2-types.Slot"]; } -message AttestationResponse { +message AggregateAttestationResponse { Attestation data = 1; } -message AggregateAndProofsSubmit { +message SubmitAggregateAndProofsRequest { repeated SignedAggregateAttestationAndProof data = 1; } -message BeaconCommitteeSubscribeSubmit { +message SubmitBeaconCommitteeSubscriptionsRequest { repeated BeaconCommitteeSubscribe data = 1; }