From c0fb16a96fc183c747816c9ff8fa94af05bf8c04 Mon Sep 17 00:00:00 2001 From: james-prysm <90280386+james-prysm@users.noreply.github.com> Date: Thu, 2 Nov 2023 10:51:21 -0500 Subject: [PATCH] HTTP validator API: health endpoints (#13149) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * updating health endpoints * updating tests * updating tests * moving where the header is written and adding allow origin header * removing header * Update validator/rpc/handlers_health.go Co-authored-by: Radosław Kapka * Update validator/rpc/handlers_health.go Co-authored-by: Radosław Kapka * Update validator/rpc/handlers_health.go Co-authored-by: Radosław Kapka * radek's comments * Update handlers_health.go Co-authored-by: Radosław Kapka * adding the correct errors to handle error --------- Co-authored-by: Radosław Kapka --- io/logs/mock/BUILD.bazel | 9 + io/logs/mock/mock_stream.go | 27 + proto/prysm/v1alpha1/health.pb.go | 46 +- proto/prysm/v1alpha1/health.proto | 4 - .../v1alpha1/validator-client/web_api.pb.go | 1351 +++++------------ .../validator-client/web_api.pb.gw.go | 345 ----- .../v1alpha1/validator-client/web_api.proto | 65 - validator/node/node.go | 1 - validator/rpc/BUILD.bazel | 5 +- validator/rpc/handlers_health.go | 163 ++ validator/rpc/handlers_health_test.go | 191 +++ validator/rpc/health.go | 132 -- validator/rpc/health_test.go | 54 - validator/rpc/server.go | 6 +- validator/rpc/server_test.go | 13 +- 15 files changed, 801 insertions(+), 1611 deletions(-) create mode 100644 io/logs/mock/BUILD.bazel create mode 100644 io/logs/mock/mock_stream.go create mode 100644 validator/rpc/handlers_health.go create mode 100644 validator/rpc/handlers_health_test.go delete mode 100644 validator/rpc/health.go delete mode 100644 validator/rpc/health_test.go diff --git a/io/logs/mock/BUILD.bazel b/io/logs/mock/BUILD.bazel new file mode 100644 index 000000000..ef721aa50 --- /dev/null +++ b/io/logs/mock/BUILD.bazel @@ -0,0 +1,9 @@ +load("@prysm//tools/go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["mock_stream.go"], + importpath = "github.com/prysmaticlabs/prysm/v4/io/logs/mock", + visibility = ["//visibility:public"], + deps = ["//async/event:go_default_library"], +) diff --git a/io/logs/mock/mock_stream.go b/io/logs/mock/mock_stream.go new file mode 100644 index 000000000..28a1c1ad9 --- /dev/null +++ b/io/logs/mock/mock_stream.go @@ -0,0 +1,27 @@ +package mock + +import "github.com/prysmaticlabs/prysm/v4/async/event" + +type MockStreamer struct { + logs [][]byte + feed *event.Feed +} + +// NewMockStreamer creates a new instance of MockStreamer. +// It's useful to set up the default state for the mock, like initializing the feed. +func NewMockStreamer(logs [][]byte) *MockStreamer { + return &MockStreamer{ + logs: logs, + feed: new(event.Feed), + } +} + +// GetLastFewLogs returns the predefined logs. +func (m *MockStreamer) GetLastFewLogs() [][]byte { + return m.logs +} + +// LogsFeed returns the predefined event feed. +func (m *MockStreamer) LogsFeed() *event.Feed { + return m.feed +} diff --git a/proto/prysm/v1alpha1/health.pb.go b/proto/prysm/v1alpha1/health.pb.go index 97812312c..63b9c712e 100755 --- a/proto/prysm/v1alpha1/health.pb.go +++ b/proto/prysm/v1alpha1/health.pb.go @@ -27,7 +27,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Deprecated: Marked as deprecated in proto/prysm/v1alpha1/health.proto. type LogsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -85,28 +84,28 @@ var file_proto_prysm_v1alpha1_health_proto_rawDesc = []byte{ 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x26, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x32, 0x88, 0x01, - 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x7e, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x22, 0x12, 0x20, 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x42, 0x96, 0x01, 0x0a, 0x19, 0x6f, 0x72, 0x67, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 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, 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, - 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, - 0x68, 0xaa, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, - 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x32, 0x85, 0x01, 0x0a, 0x06, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x12, 0x7b, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x23, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, + 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, + 0x01, 0x42, 0x96, 0x01, 0x0a, 0x19, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, + 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, + 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, 0x76, + 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x65, 0x74, 0x68, 0xaa, 0x02, 0x15, 0x45, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x45, 0x74, 0x68, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xca, 0x02, 0x15, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x45, 0x74, + 0x68, 0x5c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -187,7 +186,6 @@ const _ = grpc.SupportPackageIsVersion6 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type HealthClient interface { - // Deprecated: Do not use. StreamBeaconLogs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) } @@ -199,7 +197,6 @@ func NewHealthClient(cc grpc.ClientConnInterface) HealthClient { return &healthClient{cc} } -// Deprecated: Do not use. func (c *healthClient) StreamBeaconLogs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) { stream, err := c.cc.NewStream(ctx, &_Health_serviceDesc.Streams[0], "/ethereum.eth.v1alpha1.Health/StreamBeaconLogs", opts...) if err != nil { @@ -234,7 +231,6 @@ func (x *healthStreamBeaconLogsClient) Recv() (*LogsResponse, error) { // HealthServer is the server API for Health service. type HealthServer interface { - // Deprecated: Do not use. StreamBeaconLogs(*emptypb.Empty, Health_StreamBeaconLogsServer) error } diff --git a/proto/prysm/v1alpha1/health.proto b/proto/prysm/v1alpha1/health.proto index f2ba1c9ea..920f479b6 100644 --- a/proto/prysm/v1alpha1/health.proto +++ b/proto/prysm/v1alpha1/health.proto @@ -16,18 +16,14 @@ option php_namespace = "Ethereum\\Eth\\v1alpha1"; // // The health service is able to return important metadata about a beacon node // such being able to stream logs via gRPC. -// DEPRECATED: This endpoint doesn't appear to be used and have been marked for deprecation. service Health { rpc StreamBeaconLogs(google.protobuf.Empty) returns (stream LogsResponse) { - option deprecated = true; option (google.api.http) = { get: "/eth/v1alpha1/health/logs/stream" }; } } -// DEPRECATED: StreamBeaconLogs endpoint doesn't appear to be used and have been marked for deprecation. message LogsResponse { - option deprecated = true; repeated string logs = 1; } diff --git a/proto/prysm/v1alpha1/validator-client/web_api.pb.go b/proto/prysm/v1alpha1/validator-client/web_api.pb.go index fec57ef0e..69b8fa425 100755 --- a/proto/prysm/v1alpha1/validator-client/web_api.pb.go +++ b/proto/prysm/v1alpha1/validator-client/web_api.pb.go @@ -816,198 +816,6 @@ func (x *AccountRequest) GetIndices() []uint64 { return nil } -// Deprecated: Marked as deprecated in proto/prysm/v1alpha1/validator-client/web_api.proto. -type NodeConnectionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BeaconNodeEndpoint string `protobuf:"bytes,1,opt,name=beacon_node_endpoint,json=beaconNodeEndpoint,proto3" json:"beacon_node_endpoint,omitempty"` - Connected bool `protobuf:"varint,2,opt,name=connected,proto3" json:"connected,omitempty"` - Syncing bool `protobuf:"varint,3,opt,name=syncing,proto3" json:"syncing,omitempty"` - GenesisTime uint64 `protobuf:"varint,4,opt,name=genesis_time,json=genesisTime,proto3" json:"genesis_time,omitempty"` - DepositContractAddress []byte `protobuf:"bytes,5,opt,name=deposit_contract_address,json=depositContractAddress,proto3" json:"deposit_contract_address,omitempty"` -} - -func (x *NodeConnectionResponse) Reset() { - *x = NodeConnectionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NodeConnectionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NodeConnectionResponse) ProtoMessage() {} - -func (x *NodeConnectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NodeConnectionResponse.ProtoReflect.Descriptor instead. -func (*NodeConnectionResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{11} -} - -func (x *NodeConnectionResponse) GetBeaconNodeEndpoint() string { - if x != nil { - return x.BeaconNodeEndpoint - } - return "" -} - -func (x *NodeConnectionResponse) GetConnected() bool { - if x != nil { - return x.Connected - } - return false -} - -func (x *NodeConnectionResponse) GetSyncing() bool { - if x != nil { - return x.Syncing - } - return false -} - -func (x *NodeConnectionResponse) GetGenesisTime() uint64 { - if x != nil { - return x.GenesisTime - } - return 0 -} - -func (x *NodeConnectionResponse) GetDepositContractAddress() []byte { - if x != nil { - return x.DepositContractAddress - } - return nil -} - -// Deprecated: Marked as deprecated in proto/prysm/v1alpha1/validator-client/web_api.proto. -type LogsEndpointResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ValidatorLogsEndpoint string `protobuf:"bytes,1,opt,name=validator_logs_endpoint,json=validatorLogsEndpoint,proto3" json:"validator_logs_endpoint,omitempty"` - BeaconLogsEndpoint string `protobuf:"bytes,2,opt,name=beacon_logs_endpoint,json=beaconLogsEndpoint,proto3" json:"beacon_logs_endpoint,omitempty"` -} - -func (x *LogsEndpointResponse) Reset() { - *x = LogsEndpointResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LogsEndpointResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LogsEndpointResponse) ProtoMessage() {} - -func (x *LogsEndpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LogsEndpointResponse.ProtoReflect.Descriptor instead. -func (*LogsEndpointResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{12} -} - -func (x *LogsEndpointResponse) GetValidatorLogsEndpoint() string { - if x != nil { - return x.ValidatorLogsEndpoint - } - return "" -} - -func (x *LogsEndpointResponse) GetBeaconLogsEndpoint() string { - if x != nil { - return x.BeaconLogsEndpoint - } - return "" -} - -// Deprecated: Marked as deprecated in proto/prysm/v1alpha1/validator-client/web_api.proto. -type VersionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Beacon string `protobuf:"bytes,1,opt,name=beacon,proto3" json:"beacon,omitempty"` - Validator string `protobuf:"bytes,2,opt,name=validator,proto3" json:"validator,omitempty"` -} - -func (x *VersionResponse) Reset() { - *x = VersionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VersionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VersionResponse) ProtoMessage() {} - -func (x *VersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. -func (*VersionResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{13} -} - -func (x *VersionResponse) GetBeacon() string { - if x != nil { - return x.Beacon - } - return "" -} - -func (x *VersionResponse) GetValidator() string { - if x != nil { - return x.Validator - } - return "" -} - // Deprecated: Marked as deprecated in proto/prysm/v1alpha1/validator-client/web_api.proto. type HasWalletResponse struct { state protoimpl.MessageState @@ -1020,7 +828,7 @@ type HasWalletResponse struct { func (x *HasWalletResponse) Reset() { *x = HasWalletResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[14] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1033,7 +841,7 @@ func (x *HasWalletResponse) String() string { func (*HasWalletResponse) ProtoMessage() {} func (x *HasWalletResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[14] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1046,7 +854,7 @@ func (x *HasWalletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HasWalletResponse.ProtoReflect.Descriptor instead. func (*HasWalletResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{14} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{11} } func (x *HasWalletResponse) GetWalletExists() bool { @@ -1069,7 +877,7 @@ type ImportAccountsRequest struct { func (x *ImportAccountsRequest) Reset() { *x = ImportAccountsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[15] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +890,7 @@ func (x *ImportAccountsRequest) String() string { func (*ImportAccountsRequest) ProtoMessage() {} func (x *ImportAccountsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[15] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +903,7 @@ func (x *ImportAccountsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportAccountsRequest.ProtoReflect.Descriptor instead. func (*ImportAccountsRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{15} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{12} } func (x *ImportAccountsRequest) GetKeystoresImported() []string { @@ -1124,7 +932,7 @@ type ImportAccountsResponse struct { func (x *ImportAccountsResponse) Reset() { *x = ImportAccountsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[16] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1137,7 +945,7 @@ func (x *ImportAccountsResponse) String() string { func (*ImportAccountsResponse) ProtoMessage() {} func (x *ImportAccountsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[16] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1150,7 +958,7 @@ func (x *ImportAccountsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportAccountsResponse.ProtoReflect.Descriptor instead. func (*ImportAccountsResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{16} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{13} } func (x *ImportAccountsResponse) GetImportedPublicKeys() [][]byte { @@ -1172,7 +980,7 @@ type InitializeAuthRequest struct { func (x *InitializeAuthRequest) Reset() { *x = InitializeAuthRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[17] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1185,7 +993,7 @@ func (x *InitializeAuthRequest) String() string { func (*InitializeAuthRequest) ProtoMessage() {} func (x *InitializeAuthRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[17] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1198,7 +1006,7 @@ func (x *InitializeAuthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InitializeAuthRequest.ProtoReflect.Descriptor instead. func (*InitializeAuthRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{17} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{14} } func (x *InitializeAuthRequest) GetToken() string { @@ -1221,7 +1029,7 @@ type InitializeAuthResponse struct { func (x *InitializeAuthResponse) Reset() { *x = InitializeAuthResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[18] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1234,7 +1042,7 @@ func (x *InitializeAuthResponse) String() string { func (*InitializeAuthResponse) ProtoMessage() {} func (x *InitializeAuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[18] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1247,7 +1055,7 @@ func (x *InitializeAuthResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InitializeAuthResponse.ProtoReflect.Descriptor instead. func (*InitializeAuthResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{18} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{15} } func (x *InitializeAuthResponse) GetHasSignedUp() bool { @@ -1281,7 +1089,7 @@ type BeaconStatusResponse struct { func (x *BeaconStatusResponse) Reset() { *x = BeaconStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[19] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1294,7 +1102,7 @@ func (x *BeaconStatusResponse) String() string { func (*BeaconStatusResponse) ProtoMessage() {} func (x *BeaconStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[19] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1307,7 +1115,7 @@ func (x *BeaconStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BeaconStatusResponse.ProtoReflect.Descriptor instead. func (*BeaconStatusResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{19} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{16} } func (x *BeaconStatusResponse) GetBeaconNodeEndpoint() string { @@ -1364,7 +1172,7 @@ type VoluntaryExitRequest struct { func (x *VoluntaryExitRequest) Reset() { *x = VoluntaryExitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[20] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1377,7 +1185,7 @@ func (x *VoluntaryExitRequest) String() string { func (*VoluntaryExitRequest) ProtoMessage() {} func (x *VoluntaryExitRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[20] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1390,7 +1198,7 @@ func (x *VoluntaryExitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VoluntaryExitRequest.ProtoReflect.Descriptor instead. func (*VoluntaryExitRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{20} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{17} } func (x *VoluntaryExitRequest) GetPublicKeys() [][]byte { @@ -1412,7 +1220,7 @@ type VoluntaryExitResponse struct { func (x *VoluntaryExitResponse) Reset() { *x = VoluntaryExitResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[21] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1425,7 +1233,7 @@ func (x *VoluntaryExitResponse) String() string { func (*VoluntaryExitResponse) ProtoMessage() {} func (x *VoluntaryExitResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[21] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1438,7 +1246,7 @@ func (x *VoluntaryExitResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VoluntaryExitResponse.ProtoReflect.Descriptor instead. func (*VoluntaryExitResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{21} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{18} } func (x *VoluntaryExitResponse) GetExitedKeys() [][]byte { @@ -1461,7 +1269,7 @@ type BackupAccountsRequest struct { func (x *BackupAccountsRequest) Reset() { *x = BackupAccountsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[22] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1474,7 +1282,7 @@ func (x *BackupAccountsRequest) String() string { func (*BackupAccountsRequest) ProtoMessage() {} func (x *BackupAccountsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[22] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1487,7 +1295,7 @@ func (x *BackupAccountsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupAccountsRequest.ProtoReflect.Descriptor instead. func (*BackupAccountsRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{22} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{19} } func (x *BackupAccountsRequest) GetPublicKeys() [][]byte { @@ -1516,7 +1324,7 @@ type BackupAccountsResponse struct { func (x *BackupAccountsResponse) Reset() { *x = BackupAccountsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[23] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1529,7 +1337,7 @@ func (x *BackupAccountsResponse) String() string { func (*BackupAccountsResponse) ProtoMessage() {} func (x *BackupAccountsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[23] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1542,7 +1350,7 @@ func (x *BackupAccountsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupAccountsResponse.ProtoReflect.Descriptor instead. func (*BackupAccountsResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{23} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{20} } func (x *BackupAccountsResponse) GetZipFile() []byte { @@ -1564,7 +1372,7 @@ type DeleteAccountsRequest struct { func (x *DeleteAccountsRequest) Reset() { *x = DeleteAccountsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[24] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1385,7 @@ func (x *DeleteAccountsRequest) String() string { func (*DeleteAccountsRequest) ProtoMessage() {} func (x *DeleteAccountsRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[24] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1398,7 @@ func (x *DeleteAccountsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccountsRequest.ProtoReflect.Descriptor instead. func (*DeleteAccountsRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{24} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{21} } func (x *DeleteAccountsRequest) GetPublicKeysToDelete() [][]byte { @@ -1612,7 +1420,7 @@ type DeleteAccountsResponse struct { func (x *DeleteAccountsResponse) Reset() { *x = DeleteAccountsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[25] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1625,7 +1433,7 @@ func (x *DeleteAccountsResponse) String() string { func (*DeleteAccountsResponse) ProtoMessage() {} func (x *DeleteAccountsResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[25] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1638,7 +1446,7 @@ func (x *DeleteAccountsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccountsResponse.ProtoReflect.Descriptor instead. func (*DeleteAccountsResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{25} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{22} } func (x *DeleteAccountsResponse) GetDeletedKeys() [][]byte { @@ -1660,7 +1468,7 @@ type ExportSlashingProtectionResponse struct { func (x *ExportSlashingProtectionResponse) Reset() { *x = ExportSlashingProtectionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[26] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1673,7 +1481,7 @@ func (x *ExportSlashingProtectionResponse) String() string { func (*ExportSlashingProtectionResponse) ProtoMessage() {} func (x *ExportSlashingProtectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[26] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1686,7 +1494,7 @@ func (x *ExportSlashingProtectionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportSlashingProtectionResponse.ProtoReflect.Descriptor instead. func (*ExportSlashingProtectionResponse) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{26} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{23} } func (x *ExportSlashingProtectionResponse) GetFile() string { @@ -1708,7 +1516,7 @@ type ImportSlashingProtectionRequest struct { func (x *ImportSlashingProtectionRequest) Reset() { *x = ImportSlashingProtectionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[27] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1721,7 +1529,7 @@ func (x *ImportSlashingProtectionRequest) String() string { func (*ImportSlashingProtectionRequest) ProtoMessage() {} func (x *ImportSlashingProtectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[27] + mi := &file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1734,7 +1542,7 @@ func (x *ImportSlashingProtectionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ImportSlashingProtectionRequest.ProtoReflect.Descriptor instead. func (*ImportSlashingProtectionRequest) Descriptor() ([]byte, []int) { - return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{27} + return file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP(), []int{24} } func (x *ImportSlashingProtectionRequest) GetSlashingProtectionJson() string { @@ -1875,348 +1683,275 @@ var file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDesc = []byte{ 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, - 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xe3, 0x01, - 0x0a, 0x16, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, - 0x64, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, 0x6e, 0x63, - 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, - 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, - 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, - 0x02, 0x18, 0x01, 0x22, 0x84, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6c, - 0x6f, 0x67, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x4b, 0x0a, 0x0f, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3c, 0x0a, 0x11, 0x48, 0x61, 0x73, 0x57, 0x61, - 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x79, 0x0a, 0x15, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, - 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, - 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x02, 0x18, 0x01, - 0x22, 0x4e, 0x0a, 0x16, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, - 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x3a, 0x02, 0x18, 0x01, - 0x22, 0x31, 0x0a, 0x15, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, - 0x02, 0x18, 0x01, 0x22, 0x5f, 0x0a, 0x16, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, - 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x55, - 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x3a, 0x02, 0x18, 0x01, 0x22, 0xa2, 0x02, 0x0a, 0x14, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, - 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, - 0x69, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x67, - 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x64, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x48, 0x65, 0x61, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3b, 0x0a, 0x14, 0x56, 0x6f, 0x6c, - 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3c, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, - 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, - 0x3a, 0x02, 0x18, 0x01, 0x22, 0x65, 0x0a, 0x15, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x27, - 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x37, 0x0a, 0x16, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x7a, 0x69, 0x70, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x7a, 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, - 0x3a, 0x02, 0x18, 0x01, 0x22, 0x4e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, - 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x5f, 0x74, 0x6f, 0x5f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x54, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3f, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, - 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3a, 0x0a, 0x20, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, - 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x02, 0x18, - 0x01, 0x22, 0x5f, 0x0a, 0x1f, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, - 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x73, 0x6f, 0x6e, 0x3a, 0x02, - 0x18, 0x01, 0x2a, 0x4b, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x57, - 0x45, 0x42, 0x33, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, 0x10, 0x03, 0x1a, 0x02, 0x18, 0x01, 0x32, - 0xf1, 0x04, 0x0a, 0x06, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x33, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, - 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x88, 0x02, - 0x01, 0x12, 0x77, 0x0a, 0x0c, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x16, 0x12, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x88, 0x02, 0x01, 0x12, 0x9c, 0x01, 0x0a, 0x11, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x12, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, - 0x72, 0x65, 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, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, - 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0xa7, 0x01, 0x0a, 0x0d, 0x52, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x34, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, + 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3c, 0x0a, + 0x11, 0x48, 0x61, 0x73, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x79, 0x0a, 0x15, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x73, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, + 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x4e, 0x0a, 0x16, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, + 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x31, 0x0a, 0x15, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x5f, 0x0a, 0x16, 0x49, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x5f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x61, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, 0x73, 0x5f, 0x77, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x68, 0x61, 0x73, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xa2, 0x02, 0x0a, 0x14, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, + 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x64, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x3a, 0x02, 0x18, 0x01, 0x22, + 0x3b, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3c, 0x0a, 0x15, + 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x69, 0x74, 0x65, 0x64, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x65, 0x78, 0x69, 0x74, + 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x65, 0x0a, 0x15, 0x42, 0x61, + 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, + 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x62, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x3a, 0x02, 0x18, + 0x01, 0x22, 0x37, 0x0a, 0x16, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x7a, + 0x69, 0x70, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x7a, + 0x69, 0x70, 0x46, 0x69, 0x6c, 0x65, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x4e, 0x0a, 0x15, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, + 0x79, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0c, 0x52, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x54, 0x6f, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3f, 0x0a, 0x16, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3a, 0x0a, 0x20, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, + 0x69, 0x6c, 0x65, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x5f, 0x0a, 0x1f, 0x49, 0x6d, 0x70, 0x6f, 0x72, + 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x6c, + 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x6c, + 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x4a, 0x73, 0x6f, 0x6e, 0x3a, 0x02, 0x18, 0x01, 0x2a, 0x4b, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, + 0x52, 0x49, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4d, 0x50, 0x4f, 0x52, + 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, + 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x45, 0x42, 0x33, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x52, 0x10, + 0x03, 0x1a, 0x02, 0x18, 0x01, 0x32, 0xf1, 0x04, 0x0a, 0x06, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, - 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x88, 0x02, 0x01, 0x32, 0x8c, 0x04, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x12, 0x9c, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x88, 0x02, 0x01, 0x12, - 0xac, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x12, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, - 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x88, 0x02, 0x01, 0x12, 0xb1, - 0x01, 0x0a, 0x0d, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, - 0x12, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, 0x77, 0x0a, 0x0c, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x88, 0x02, 0x01, + 0x12, 0x9c, 0x01, 0x0a, 0x11, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 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, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, + 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x88, 0x02, 0x01, 0x12, + 0xa7, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x12, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x72, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x88, 0x02, 0x01, 0x32, 0x8c, 0x04, 0x0a, 0x08, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x9c, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x32, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x88, 0x02, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, + 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x88, 0x02, 0x01, 0x12, 0xb1, 0x01, 0x0a, 0x0d, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, + 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x12, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, - 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x2d, 0x65, 0x78, 0x69, 0x74, 0x88, - 0x02, 0x01, 0x32, 0x92, 0x08, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x87, 0x01, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x88, 0x02, 0x01, 0x12, 0xba, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, - 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, + 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, 0x45, 0x78, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x3a, 0x01, 0x2a, 0x22, 0x25, + 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6e, 0x74, 0x61, 0x72, 0x79, + 0x2d, 0x65, 0x78, 0x69, 0x74, 0x88, 0x02, 0x01, 0x32, 0x92, 0x08, 0x0a, 0x06, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x12, 0x87, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x88, 0x02, 0x01, 0x12, 0xab, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, - 0x12, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x63, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x88, 0x02, 0x01, 0x12, 0xba, 0x01, + 0x0a, 0x19, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x88, - 0x02, 0x01, 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, - 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x88, 0x02, - 0x01, 0x12, 0x9f, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, 0x12, 0xab, 0x01, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x73, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x88, 0x02, 0x01, 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 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, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x88, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, - 0x1a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x88, 0x02, 0x01, 0x12, 0x67, - 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, - 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, - 0x65, 0x65, 0x72, 0x73, 0x88, 0x02, 0x01, 0x32, 0xee, 0x02, 0x0a, 0x12, 0x53, 0x6c, 0x61, 0x73, - 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa9, - 0x01, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, - 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x40, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, - 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x6c, 0x61, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x88, 0x02, 0x01, 0x12, 0xab, 0x01, 0x0a, 0x18, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, - 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 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, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, 0x2a, 0x22, 0x28, 0x2f, 0x76, 0x32, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, - 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x69, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x88, 0x02, 0x01, 0x32, 0xce, 0x05, 0x0a, 0x06, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x12, 0x9a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x02, 0x01, - 0x12, 0x90, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, - 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x32, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x88, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2f, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x88, 0x02, 0x01, 0x12, 0x85, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x23, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, - 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x13, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, - 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x6c, - 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x88, 0x02, 0x01, 0x30, 0x01, 0x32, 0x86, 0x01, 0x0a, 0x04, 0x41, 0x75, - 0x74, 0x68, 0x12, 0x7e, 0x0a, 0x0a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x2a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x88, 0x02, 0x01, 0x12, 0x9f, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 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, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, + 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x88, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, + 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, 0x22, 0x25, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x71, 0x75, 0x65, 0x75, + 0x65, 0x88, 0x02, 0x01, 0x12, 0x67, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x42, 0xc7, 0x01, 0x0a, 0x22, 0x6f, 0x72, 0x67, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x42, 0x08, 0x57, 0x65, 0x62, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 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, 0x76, 0x34, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, - 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x3b, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xaa, 0x02, 0x1e, 0x45, 0x74, 0x68, - 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x1e, 0x45, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, + 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x65, 0x65, 0x72, 0x73, 0x88, 0x02, 0x01, 0x32, 0xee, 0x02, + 0x0a, 0x12, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xa9, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x53, + 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x40, 0x2e, 0x65, 0x74, 0x68, 0x65, + 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x88, 0x02, 0x01, + 0x12, 0xab, 0x01, 0x0a, 0x18, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 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, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x01, + 0x2a, 0x22, 0x28, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x88, 0x02, 0x01, 0x32, 0x86, + 0x01, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x7e, 0x0a, 0x0a, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x49, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, + 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0xc7, 0x01, 0x0a, 0x22, 0x6f, 0x72, 0x67, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x42, 0x08, + 0x57, 0x65, 0x62, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 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, 0x76, 0x34, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x79, 0x73, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2d, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x3b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xaa, + 0x02, 0x1e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x56, 0x32, + 0xca, 0x02, 0x1e, 0x45, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x5c, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x5c, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2232,7 +1967,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDescGZIP() []by } var file_proto_prysm_v1alpha1_validator_client_web_api_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_proto_prysm_v1alpha1_validator_client_web_api_proto_goTypes = []interface{}{ (KeymanagerKind)(0), // 0: ethereum.validator.accounts.v2.KeymanagerKind (*CreateWalletRequest)(nil), // 1: ethereum.validator.accounts.v2.CreateWalletRequest @@ -2246,89 +1981,75 @@ var file_proto_prysm_v1alpha1_validator_client_web_api_proto_goTypes = []interfa (*ListAccountsResponse)(nil), // 9: ethereum.validator.accounts.v2.ListAccountsResponse (*Account)(nil), // 10: ethereum.validator.accounts.v2.Account (*AccountRequest)(nil), // 11: ethereum.validator.accounts.v2.AccountRequest - (*NodeConnectionResponse)(nil), // 12: ethereum.validator.accounts.v2.NodeConnectionResponse - (*LogsEndpointResponse)(nil), // 13: ethereum.validator.accounts.v2.LogsEndpointResponse - (*VersionResponse)(nil), // 14: ethereum.validator.accounts.v2.VersionResponse - (*HasWalletResponse)(nil), // 15: ethereum.validator.accounts.v2.HasWalletResponse - (*ImportAccountsRequest)(nil), // 16: ethereum.validator.accounts.v2.ImportAccountsRequest - (*ImportAccountsResponse)(nil), // 17: ethereum.validator.accounts.v2.ImportAccountsResponse - (*InitializeAuthRequest)(nil), // 18: ethereum.validator.accounts.v2.InitializeAuthRequest - (*InitializeAuthResponse)(nil), // 19: ethereum.validator.accounts.v2.InitializeAuthResponse - (*BeaconStatusResponse)(nil), // 20: ethereum.validator.accounts.v2.BeaconStatusResponse - (*VoluntaryExitRequest)(nil), // 21: ethereum.validator.accounts.v2.VoluntaryExitRequest - (*VoluntaryExitResponse)(nil), // 22: ethereum.validator.accounts.v2.VoluntaryExitResponse - (*BackupAccountsRequest)(nil), // 23: ethereum.validator.accounts.v2.BackupAccountsRequest - (*BackupAccountsResponse)(nil), // 24: ethereum.validator.accounts.v2.BackupAccountsResponse - (*DeleteAccountsRequest)(nil), // 25: ethereum.validator.accounts.v2.DeleteAccountsRequest - (*DeleteAccountsResponse)(nil), // 26: ethereum.validator.accounts.v2.DeleteAccountsResponse - (*ExportSlashingProtectionResponse)(nil), // 27: ethereum.validator.accounts.v2.ExportSlashingProtectionResponse - (*ImportSlashingProtectionRequest)(nil), // 28: ethereum.validator.accounts.v2.ImportSlashingProtectionRequest - (*v1alpha1.ChainHead)(nil), // 29: ethereum.eth.v1alpha1.ChainHead - (*emptypb.Empty)(nil), // 30: google.protobuf.Empty - (*v1alpha1.GetValidatorParticipationRequest)(nil), // 31: ethereum.eth.v1alpha1.GetValidatorParticipationRequest - (*v1alpha1.ValidatorPerformanceRequest)(nil), // 32: ethereum.eth.v1alpha1.ValidatorPerformanceRequest - (*v1alpha1.ListValidatorsRequest)(nil), // 33: ethereum.eth.v1alpha1.ListValidatorsRequest - (*v1alpha1.ListValidatorBalancesRequest)(nil), // 34: ethereum.eth.v1alpha1.ListValidatorBalancesRequest - (*v1alpha1.ValidatorParticipationResponse)(nil), // 35: ethereum.eth.v1alpha1.ValidatorParticipationResponse - (*v1alpha1.ValidatorPerformanceResponse)(nil), // 36: ethereum.eth.v1alpha1.ValidatorPerformanceResponse - (*v1alpha1.Validators)(nil), // 37: ethereum.eth.v1alpha1.Validators - (*v1alpha1.ValidatorBalances)(nil), // 38: ethereum.eth.v1alpha1.ValidatorBalances - (*v1alpha1.ValidatorQueue)(nil), // 39: ethereum.eth.v1alpha1.ValidatorQueue - (*v1alpha1.Peers)(nil), // 40: ethereum.eth.v1alpha1.Peers - (*v1alpha1.LogsResponse)(nil), // 41: ethereum.eth.v1alpha1.LogsResponse + (*HasWalletResponse)(nil), // 12: ethereum.validator.accounts.v2.HasWalletResponse + (*ImportAccountsRequest)(nil), // 13: ethereum.validator.accounts.v2.ImportAccountsRequest + (*ImportAccountsResponse)(nil), // 14: ethereum.validator.accounts.v2.ImportAccountsResponse + (*InitializeAuthRequest)(nil), // 15: ethereum.validator.accounts.v2.InitializeAuthRequest + (*InitializeAuthResponse)(nil), // 16: ethereum.validator.accounts.v2.InitializeAuthResponse + (*BeaconStatusResponse)(nil), // 17: ethereum.validator.accounts.v2.BeaconStatusResponse + (*VoluntaryExitRequest)(nil), // 18: ethereum.validator.accounts.v2.VoluntaryExitRequest + (*VoluntaryExitResponse)(nil), // 19: ethereum.validator.accounts.v2.VoluntaryExitResponse + (*BackupAccountsRequest)(nil), // 20: ethereum.validator.accounts.v2.BackupAccountsRequest + (*BackupAccountsResponse)(nil), // 21: ethereum.validator.accounts.v2.BackupAccountsResponse + (*DeleteAccountsRequest)(nil), // 22: ethereum.validator.accounts.v2.DeleteAccountsRequest + (*DeleteAccountsResponse)(nil), // 23: ethereum.validator.accounts.v2.DeleteAccountsResponse + (*ExportSlashingProtectionResponse)(nil), // 24: ethereum.validator.accounts.v2.ExportSlashingProtectionResponse + (*ImportSlashingProtectionRequest)(nil), // 25: ethereum.validator.accounts.v2.ImportSlashingProtectionRequest + (*v1alpha1.ChainHead)(nil), // 26: ethereum.eth.v1alpha1.ChainHead + (*emptypb.Empty)(nil), // 27: google.protobuf.Empty + (*v1alpha1.GetValidatorParticipationRequest)(nil), // 28: ethereum.eth.v1alpha1.GetValidatorParticipationRequest + (*v1alpha1.ValidatorPerformanceRequest)(nil), // 29: ethereum.eth.v1alpha1.ValidatorPerformanceRequest + (*v1alpha1.ListValidatorsRequest)(nil), // 30: ethereum.eth.v1alpha1.ListValidatorsRequest + (*v1alpha1.ListValidatorBalancesRequest)(nil), // 31: ethereum.eth.v1alpha1.ListValidatorBalancesRequest + (*v1alpha1.ValidatorParticipationResponse)(nil), // 32: ethereum.eth.v1alpha1.ValidatorParticipationResponse + (*v1alpha1.ValidatorPerformanceResponse)(nil), // 33: ethereum.eth.v1alpha1.ValidatorPerformanceResponse + (*v1alpha1.Validators)(nil), // 34: ethereum.eth.v1alpha1.Validators + (*v1alpha1.ValidatorBalances)(nil), // 35: ethereum.eth.v1alpha1.ValidatorBalances + (*v1alpha1.ValidatorQueue)(nil), // 36: ethereum.eth.v1alpha1.ValidatorQueue + (*v1alpha1.Peers)(nil), // 37: ethereum.eth.v1alpha1.Peers } var file_proto_prysm_v1alpha1_validator_client_web_api_proto_depIdxs = []int32{ 0, // 0: ethereum.validator.accounts.v2.CreateWalletRequest.keymanager:type_name -> ethereum.validator.accounts.v2.KeymanagerKind 5, // 1: ethereum.validator.accounts.v2.CreateWalletResponse.wallet:type_name -> ethereum.validator.accounts.v2.WalletResponse 0, // 2: ethereum.validator.accounts.v2.WalletResponse.keymanager_kind:type_name -> ethereum.validator.accounts.v2.KeymanagerKind 10, // 3: ethereum.validator.accounts.v2.ListAccountsResponse.accounts:type_name -> ethereum.validator.accounts.v2.Account - 29, // 4: ethereum.validator.accounts.v2.BeaconStatusResponse.chain_head:type_name -> ethereum.eth.v1alpha1.ChainHead + 26, // 4: ethereum.validator.accounts.v2.BeaconStatusResponse.chain_head:type_name -> ethereum.eth.v1alpha1.ChainHead 1, // 5: ethereum.validator.accounts.v2.Wallet.CreateWallet:input_type -> ethereum.validator.accounts.v2.CreateWalletRequest - 30, // 6: ethereum.validator.accounts.v2.Wallet.WalletConfig:input_type -> google.protobuf.Empty + 27, // 6: ethereum.validator.accounts.v2.Wallet.WalletConfig:input_type -> google.protobuf.Empty 7, // 7: ethereum.validator.accounts.v2.Wallet.ValidateKeystores:input_type -> ethereum.validator.accounts.v2.ValidateKeystoresRequest 6, // 8: ethereum.validator.accounts.v2.Wallet.RecoverWallet:input_type -> ethereum.validator.accounts.v2.RecoverWalletRequest 8, // 9: ethereum.validator.accounts.v2.Accounts.ListAccounts:input_type -> ethereum.validator.accounts.v2.ListAccountsRequest - 23, // 10: ethereum.validator.accounts.v2.Accounts.BackupAccounts:input_type -> ethereum.validator.accounts.v2.BackupAccountsRequest - 21, // 11: ethereum.validator.accounts.v2.Accounts.VoluntaryExit:input_type -> ethereum.validator.accounts.v2.VoluntaryExitRequest - 30, // 12: ethereum.validator.accounts.v2.Beacon.GetBeaconStatus:input_type -> google.protobuf.Empty - 31, // 13: ethereum.validator.accounts.v2.Beacon.GetValidatorParticipation:input_type -> ethereum.eth.v1alpha1.GetValidatorParticipationRequest - 32, // 14: ethereum.validator.accounts.v2.Beacon.GetValidatorPerformance:input_type -> ethereum.eth.v1alpha1.ValidatorPerformanceRequest - 33, // 15: ethereum.validator.accounts.v2.Beacon.GetValidators:input_type -> ethereum.eth.v1alpha1.ListValidatorsRequest - 34, // 16: ethereum.validator.accounts.v2.Beacon.GetValidatorBalances:input_type -> ethereum.eth.v1alpha1.ListValidatorBalancesRequest - 30, // 17: ethereum.validator.accounts.v2.Beacon.GetValidatorQueue:input_type -> google.protobuf.Empty - 30, // 18: ethereum.validator.accounts.v2.Beacon.GetPeers:input_type -> google.protobuf.Empty - 30, // 19: ethereum.validator.accounts.v2.SlashingProtection.ExportSlashingProtection:input_type -> google.protobuf.Empty - 28, // 20: ethereum.validator.accounts.v2.SlashingProtection.ImportSlashingProtection:input_type -> ethereum.validator.accounts.v2.ImportSlashingProtectionRequest - 30, // 21: ethereum.validator.accounts.v2.Health.GetBeaconNodeConnection:input_type -> google.protobuf.Empty - 30, // 22: ethereum.validator.accounts.v2.Health.GetLogsEndpoints:input_type -> google.protobuf.Empty - 30, // 23: ethereum.validator.accounts.v2.Health.GetVersion:input_type -> google.protobuf.Empty - 30, // 24: ethereum.validator.accounts.v2.Health.StreamBeaconLogs:input_type -> google.protobuf.Empty - 30, // 25: ethereum.validator.accounts.v2.Health.StreamValidatorLogs:input_type -> google.protobuf.Empty - 30, // 26: ethereum.validator.accounts.v2.Auth.Initialize:input_type -> google.protobuf.Empty - 2, // 27: ethereum.validator.accounts.v2.Wallet.CreateWallet:output_type -> ethereum.validator.accounts.v2.CreateWalletResponse - 5, // 28: ethereum.validator.accounts.v2.Wallet.WalletConfig:output_type -> ethereum.validator.accounts.v2.WalletResponse - 30, // 29: ethereum.validator.accounts.v2.Wallet.ValidateKeystores:output_type -> google.protobuf.Empty - 2, // 30: ethereum.validator.accounts.v2.Wallet.RecoverWallet:output_type -> ethereum.validator.accounts.v2.CreateWalletResponse - 9, // 31: ethereum.validator.accounts.v2.Accounts.ListAccounts:output_type -> ethereum.validator.accounts.v2.ListAccountsResponse - 24, // 32: ethereum.validator.accounts.v2.Accounts.BackupAccounts:output_type -> ethereum.validator.accounts.v2.BackupAccountsResponse - 22, // 33: ethereum.validator.accounts.v2.Accounts.VoluntaryExit:output_type -> ethereum.validator.accounts.v2.VoluntaryExitResponse - 20, // 34: ethereum.validator.accounts.v2.Beacon.GetBeaconStatus:output_type -> ethereum.validator.accounts.v2.BeaconStatusResponse - 35, // 35: ethereum.validator.accounts.v2.Beacon.GetValidatorParticipation:output_type -> ethereum.eth.v1alpha1.ValidatorParticipationResponse - 36, // 36: ethereum.validator.accounts.v2.Beacon.GetValidatorPerformance:output_type -> ethereum.eth.v1alpha1.ValidatorPerformanceResponse - 37, // 37: ethereum.validator.accounts.v2.Beacon.GetValidators:output_type -> ethereum.eth.v1alpha1.Validators - 38, // 38: ethereum.validator.accounts.v2.Beacon.GetValidatorBalances:output_type -> ethereum.eth.v1alpha1.ValidatorBalances - 39, // 39: ethereum.validator.accounts.v2.Beacon.GetValidatorQueue:output_type -> ethereum.eth.v1alpha1.ValidatorQueue - 40, // 40: ethereum.validator.accounts.v2.Beacon.GetPeers:output_type -> ethereum.eth.v1alpha1.Peers - 27, // 41: ethereum.validator.accounts.v2.SlashingProtection.ExportSlashingProtection:output_type -> ethereum.validator.accounts.v2.ExportSlashingProtectionResponse - 30, // 42: ethereum.validator.accounts.v2.SlashingProtection.ImportSlashingProtection:output_type -> google.protobuf.Empty - 12, // 43: ethereum.validator.accounts.v2.Health.GetBeaconNodeConnection:output_type -> ethereum.validator.accounts.v2.NodeConnectionResponse - 13, // 44: ethereum.validator.accounts.v2.Health.GetLogsEndpoints:output_type -> ethereum.validator.accounts.v2.LogsEndpointResponse - 14, // 45: ethereum.validator.accounts.v2.Health.GetVersion:output_type -> ethereum.validator.accounts.v2.VersionResponse - 41, // 46: ethereum.validator.accounts.v2.Health.StreamBeaconLogs:output_type -> ethereum.eth.v1alpha1.LogsResponse - 41, // 47: ethereum.validator.accounts.v2.Health.StreamValidatorLogs:output_type -> ethereum.eth.v1alpha1.LogsResponse - 19, // 48: ethereum.validator.accounts.v2.Auth.Initialize:output_type -> ethereum.validator.accounts.v2.InitializeAuthResponse - 27, // [27:49] is the sub-list for method output_type - 5, // [5:27] is the sub-list for method input_type + 20, // 10: ethereum.validator.accounts.v2.Accounts.BackupAccounts:input_type -> ethereum.validator.accounts.v2.BackupAccountsRequest + 18, // 11: ethereum.validator.accounts.v2.Accounts.VoluntaryExit:input_type -> ethereum.validator.accounts.v2.VoluntaryExitRequest + 27, // 12: ethereum.validator.accounts.v2.Beacon.GetBeaconStatus:input_type -> google.protobuf.Empty + 28, // 13: ethereum.validator.accounts.v2.Beacon.GetValidatorParticipation:input_type -> ethereum.eth.v1alpha1.GetValidatorParticipationRequest + 29, // 14: ethereum.validator.accounts.v2.Beacon.GetValidatorPerformance:input_type -> ethereum.eth.v1alpha1.ValidatorPerformanceRequest + 30, // 15: ethereum.validator.accounts.v2.Beacon.GetValidators:input_type -> ethereum.eth.v1alpha1.ListValidatorsRequest + 31, // 16: ethereum.validator.accounts.v2.Beacon.GetValidatorBalances:input_type -> ethereum.eth.v1alpha1.ListValidatorBalancesRequest + 27, // 17: ethereum.validator.accounts.v2.Beacon.GetValidatorQueue:input_type -> google.protobuf.Empty + 27, // 18: ethereum.validator.accounts.v2.Beacon.GetPeers:input_type -> google.protobuf.Empty + 27, // 19: ethereum.validator.accounts.v2.SlashingProtection.ExportSlashingProtection:input_type -> google.protobuf.Empty + 25, // 20: ethereum.validator.accounts.v2.SlashingProtection.ImportSlashingProtection:input_type -> ethereum.validator.accounts.v2.ImportSlashingProtectionRequest + 27, // 21: ethereum.validator.accounts.v2.Auth.Initialize:input_type -> google.protobuf.Empty + 2, // 22: ethereum.validator.accounts.v2.Wallet.CreateWallet:output_type -> ethereum.validator.accounts.v2.CreateWalletResponse + 5, // 23: ethereum.validator.accounts.v2.Wallet.WalletConfig:output_type -> ethereum.validator.accounts.v2.WalletResponse + 27, // 24: ethereum.validator.accounts.v2.Wallet.ValidateKeystores:output_type -> google.protobuf.Empty + 2, // 25: ethereum.validator.accounts.v2.Wallet.RecoverWallet:output_type -> ethereum.validator.accounts.v2.CreateWalletResponse + 9, // 26: ethereum.validator.accounts.v2.Accounts.ListAccounts:output_type -> ethereum.validator.accounts.v2.ListAccountsResponse + 21, // 27: ethereum.validator.accounts.v2.Accounts.BackupAccounts:output_type -> ethereum.validator.accounts.v2.BackupAccountsResponse + 19, // 28: ethereum.validator.accounts.v2.Accounts.VoluntaryExit:output_type -> ethereum.validator.accounts.v2.VoluntaryExitResponse + 17, // 29: ethereum.validator.accounts.v2.Beacon.GetBeaconStatus:output_type -> ethereum.validator.accounts.v2.BeaconStatusResponse + 32, // 30: ethereum.validator.accounts.v2.Beacon.GetValidatorParticipation:output_type -> ethereum.eth.v1alpha1.ValidatorParticipationResponse + 33, // 31: ethereum.validator.accounts.v2.Beacon.GetValidatorPerformance:output_type -> ethereum.eth.v1alpha1.ValidatorPerformanceResponse + 34, // 32: ethereum.validator.accounts.v2.Beacon.GetValidators:output_type -> ethereum.eth.v1alpha1.Validators + 35, // 33: ethereum.validator.accounts.v2.Beacon.GetValidatorBalances:output_type -> ethereum.eth.v1alpha1.ValidatorBalances + 36, // 34: ethereum.validator.accounts.v2.Beacon.GetValidatorQueue:output_type -> ethereum.eth.v1alpha1.ValidatorQueue + 37, // 35: ethereum.validator.accounts.v2.Beacon.GetPeers:output_type -> ethereum.eth.v1alpha1.Peers + 24, // 36: ethereum.validator.accounts.v2.SlashingProtection.ExportSlashingProtection:output_type -> ethereum.validator.accounts.v2.ExportSlashingProtectionResponse + 27, // 37: ethereum.validator.accounts.v2.SlashingProtection.ImportSlashingProtection:output_type -> google.protobuf.Empty + 16, // 38: ethereum.validator.accounts.v2.Auth.Initialize:output_type -> ethereum.validator.accounts.v2.InitializeAuthResponse + 22, // [22:39] is the sub-list for method output_type + 5, // [5:22] is the sub-list for method input_type 5, // [5:5] is the sub-list for extension type_name 5, // [5:5] is the sub-list for extension extendee 0, // [0:5] is the sub-list for field type_name @@ -2473,42 +2194,6 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { } } file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeConnectionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogsEndpointResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HasWalletResponse); i { case 0: return &v.state @@ -2520,7 +2205,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportAccountsRequest); i { case 0: return &v.state @@ -2532,7 +2217,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportAccountsResponse); i { case 0: return &v.state @@ -2544,7 +2229,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InitializeAuthRequest); i { case 0: return &v.state @@ -2556,7 +2241,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InitializeAuthResponse); i { case 0: return &v.state @@ -2568,7 +2253,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BeaconStatusResponse); i { case 0: return &v.state @@ -2580,7 +2265,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VoluntaryExitRequest); i { case 0: return &v.state @@ -2592,7 +2277,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VoluntaryExitResponse); i { case 0: return &v.state @@ -2604,7 +2289,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BackupAccountsRequest); i { case 0: return &v.state @@ -2616,7 +2301,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BackupAccountsResponse); i { case 0: return &v.state @@ -2628,7 +2313,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteAccountsRequest); i { case 0: return &v.state @@ -2640,7 +2325,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteAccountsResponse); i { case 0: return &v.state @@ -2652,7 +2337,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExportSlashingProtectionResponse); i { case 0: return &v.state @@ -2664,7 +2349,7 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { return nil } } - file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_proto_prysm_v1alpha1_validator_client_web_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ImportSlashingProtectionRequest); i { case 0: return &v.state @@ -2683,9 +2368,9 @@ func file_proto_prysm_v1alpha1_validator_client_web_api_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_prysm_v1alpha1_validator_client_web_api_proto_rawDesc, NumEnums: 1, - NumMessages: 28, + NumMessages: 25, NumExtensions: 0, - NumServices: 6, + NumServices: 5, }, GoTypes: file_proto_prysm_v1alpha1_validator_client_web_api_proto_goTypes, DependencyIndexes: file_proto_prysm_v1alpha1_validator_client_web_api_proto_depIdxs, @@ -3474,292 +3159,6 @@ var _SlashingProtection_serviceDesc = grpc.ServiceDesc{ Metadata: "proto/prysm/v1alpha1/validator-client/web_api.proto", } -// HealthClient is the client API for Health service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type HealthClient interface { - // Deprecated: Do not use. - GetBeaconNodeConnection(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*NodeConnectionResponse, error) - // Deprecated: Do not use. - GetLogsEndpoints(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*LogsEndpointResponse, error) - // Deprecated: Do not use. - GetVersion(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionResponse, error) - // Deprecated: Do not use. - StreamBeaconLogs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) - // Deprecated: Do not use. - StreamValidatorLogs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (Health_StreamValidatorLogsClient, error) -} - -type healthClient struct { - cc grpc.ClientConnInterface -} - -func NewHealthClient(cc grpc.ClientConnInterface) HealthClient { - return &healthClient{cc} -} - -// Deprecated: Do not use. -func (c *healthClient) GetBeaconNodeConnection(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*NodeConnectionResponse, error) { - out := new(NodeConnectionResponse) - err := c.cc.Invoke(ctx, "/ethereum.validator.accounts.v2.Health/GetBeaconNodeConnection", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *healthClient) GetLogsEndpoints(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*LogsEndpointResponse, error) { - out := new(LogsEndpointResponse) - err := c.cc.Invoke(ctx, "/ethereum.validator.accounts.v2.Health/GetLogsEndpoints", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *healthClient) GetVersion(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionResponse, error) { - out := new(VersionResponse) - err := c.cc.Invoke(ctx, "/ethereum.validator.accounts.v2.Health/GetVersion", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Deprecated: Do not use. -func (c *healthClient) StreamBeaconLogs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) { - stream, err := c.cc.NewStream(ctx, &_Health_serviceDesc.Streams[0], "/ethereum.validator.accounts.v2.Health/StreamBeaconLogs", opts...) - if err != nil { - return nil, err - } - x := &healthStreamBeaconLogsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Health_StreamBeaconLogsClient interface { - Recv() (*v1alpha1.LogsResponse, error) - grpc.ClientStream -} - -type healthStreamBeaconLogsClient struct { - grpc.ClientStream -} - -func (x *healthStreamBeaconLogsClient) Recv() (*v1alpha1.LogsResponse, error) { - m := new(v1alpha1.LogsResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// Deprecated: Do not use. -func (c *healthClient) StreamValidatorLogs(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (Health_StreamValidatorLogsClient, error) { - stream, err := c.cc.NewStream(ctx, &_Health_serviceDesc.Streams[1], "/ethereum.validator.accounts.v2.Health/StreamValidatorLogs", opts...) - if err != nil { - return nil, err - } - x := &healthStreamValidatorLogsClient{stream} - if err := x.ClientStream.SendMsg(in); err != nil { - return nil, err - } - if err := x.ClientStream.CloseSend(); err != nil { - return nil, err - } - return x, nil -} - -type Health_StreamValidatorLogsClient interface { - Recv() (*v1alpha1.LogsResponse, error) - grpc.ClientStream -} - -type healthStreamValidatorLogsClient struct { - grpc.ClientStream -} - -func (x *healthStreamValidatorLogsClient) Recv() (*v1alpha1.LogsResponse, error) { - m := new(v1alpha1.LogsResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -// HealthServer is the server API for Health service. -type HealthServer interface { - // Deprecated: Do not use. - GetBeaconNodeConnection(context.Context, *emptypb.Empty) (*NodeConnectionResponse, error) - // Deprecated: Do not use. - GetLogsEndpoints(context.Context, *emptypb.Empty) (*LogsEndpointResponse, error) - // Deprecated: Do not use. - GetVersion(context.Context, *emptypb.Empty) (*VersionResponse, error) - // Deprecated: Do not use. - StreamBeaconLogs(*emptypb.Empty, Health_StreamBeaconLogsServer) error - // Deprecated: Do not use. - StreamValidatorLogs(*emptypb.Empty, Health_StreamValidatorLogsServer) error -} - -// UnimplementedHealthServer can be embedded to have forward compatible implementations. -type UnimplementedHealthServer struct { -} - -func (*UnimplementedHealthServer) GetBeaconNodeConnection(context.Context, *emptypb.Empty) (*NodeConnectionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBeaconNodeConnection not implemented") -} -func (*UnimplementedHealthServer) GetLogsEndpoints(context.Context, *emptypb.Empty) (*LogsEndpointResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLogsEndpoints not implemented") -} -func (*UnimplementedHealthServer) GetVersion(context.Context, *emptypb.Empty) (*VersionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetVersion not implemented") -} -func (*UnimplementedHealthServer) StreamBeaconLogs(*emptypb.Empty, Health_StreamBeaconLogsServer) error { - return status.Errorf(codes.Unimplemented, "method StreamBeaconLogs not implemented") -} -func (*UnimplementedHealthServer) StreamValidatorLogs(*emptypb.Empty, Health_StreamValidatorLogsServer) error { - return status.Errorf(codes.Unimplemented, "method StreamValidatorLogs not implemented") -} - -func RegisterHealthServer(s *grpc.Server, srv HealthServer) { - s.RegisterService(&_Health_serviceDesc, srv) -} - -func _Health_GetBeaconNodeConnection_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(HealthServer).GetBeaconNodeConnection(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ethereum.validator.accounts.v2.Health/GetBeaconNodeConnection", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthServer).GetBeaconNodeConnection(ctx, req.(*emptypb.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _Health_GetLogsEndpoints_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(HealthServer).GetLogsEndpoints(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ethereum.validator.accounts.v2.Health/GetLogsEndpoints", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthServer).GetLogsEndpoints(ctx, req.(*emptypb.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _Health_GetVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(HealthServer).GetVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ethereum.validator.accounts.v2.Health/GetVersion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthServer).GetVersion(ctx, req.(*emptypb.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _Health_StreamBeaconLogs_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(emptypb.Empty) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(HealthServer).StreamBeaconLogs(m, &healthStreamBeaconLogsServer{stream}) -} - -type Health_StreamBeaconLogsServer interface { - Send(*v1alpha1.LogsResponse) error - grpc.ServerStream -} - -type healthStreamBeaconLogsServer struct { - grpc.ServerStream -} - -func (x *healthStreamBeaconLogsServer) Send(m *v1alpha1.LogsResponse) error { - return x.ServerStream.SendMsg(m) -} - -func _Health_StreamValidatorLogs_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(emptypb.Empty) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(HealthServer).StreamValidatorLogs(m, &healthStreamValidatorLogsServer{stream}) -} - -type Health_StreamValidatorLogsServer interface { - Send(*v1alpha1.LogsResponse) error - grpc.ServerStream -} - -type healthStreamValidatorLogsServer struct { - grpc.ServerStream -} - -func (x *healthStreamValidatorLogsServer) Send(m *v1alpha1.LogsResponse) error { - return x.ServerStream.SendMsg(m) -} - -var _Health_serviceDesc = grpc.ServiceDesc{ - ServiceName: "ethereum.validator.accounts.v2.Health", - HandlerType: (*HealthServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetBeaconNodeConnection", - Handler: _Health_GetBeaconNodeConnection_Handler, - }, - { - MethodName: "GetLogsEndpoints", - Handler: _Health_GetLogsEndpoints_Handler, - }, - { - MethodName: "GetVersion", - Handler: _Health_GetVersion_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "StreamBeaconLogs", - Handler: _Health_StreamBeaconLogs_Handler, - ServerStreams: true, - }, - { - StreamName: "StreamValidatorLogs", - Handler: _Health_StreamValidatorLogs_Handler, - ServerStreams: true, - }, - }, - Metadata: "proto/prysm/v1alpha1/validator-client/web_api.proto", -} - // AuthClient is the client API for Auth service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. diff --git a/proto/prysm/v1alpha1/validator-client/web_api.pb.gw.go b/proto/prysm/v1alpha1/validator-client/web_api.pb.gw.go index 5b71b7d63..f66f4f0e8 100755 --- a/proto/prysm/v1alpha1/validator-client/web_api.pb.gw.go +++ b/proto/prysm/v1alpha1/validator-client/web_api.pb.gw.go @@ -510,94 +510,6 @@ func local_request_SlashingProtection_ImportSlashingProtection_0(ctx context.Con } -func request_Health_GetBeaconNodeConnection_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetBeaconNodeConnection(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Health_GetBeaconNodeConnection_0(ctx context.Context, marshaler runtime.Marshaler, server HealthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetBeaconNodeConnection(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Health_GetLogsEndpoints_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetLogsEndpoints(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Health_GetLogsEndpoints_0(ctx context.Context, marshaler runtime.Marshaler, server HealthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetLogsEndpoints(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Health_GetVersion_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := client.GetVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Health_GetVersion_0(ctx context.Context, marshaler runtime.Marshaler, server HealthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetVersion(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Health_StreamBeaconLogs_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (Health_StreamBeaconLogsClient, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - stream, err := client.StreamBeaconLogs(ctx, &protoReq) - if err != nil { - return nil, metadata, err - } - header, err := stream.Header() - if err != nil { - return nil, metadata, err - } - metadata.HeaderMD = header - return stream, metadata, nil - -} - -func request_Health_StreamValidatorLogs_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (Health_StreamValidatorLogsClient, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - stream, err := client.StreamValidatorLogs(ctx, &protoReq) - if err != nil { - return nil, metadata, err - } - header, err := stream.Header() - if err != nil { - return nil, metadata, err - } - metadata.HeaderMD = header - return stream, metadata, nil - -} - func request_Auth_Initialize_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq emptypb.Empty var metadata runtime.ServerMetadata @@ -1020,98 +932,6 @@ func RegisterSlashingProtectionHandlerServer(ctx context.Context, mux *runtime.S return nil } -// RegisterHealthHandlerServer registers the http handlers for service Health to "mux". -// UnaryRPC :call HealthServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterHealthHandlerFromEndpoint instead. -func RegisterHealthHandlerServer(ctx context.Context, mux *runtime.ServeMux, server HealthServer) error { - - mux.Handle("GET", pattern_Health_GetBeaconNodeConnection_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.validator.accounts.v2.Health/GetBeaconNodeConnection") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Health_GetBeaconNodeConnection_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 { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetBeaconNodeConnection_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_GetLogsEndpoints_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.validator.accounts.v2.Health/GetLogsEndpoints") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Health_GetLogsEndpoints_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 { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetLogsEndpoints_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_GetVersion_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.validator.accounts.v2.Health/GetVersion") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Health_GetVersion_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 { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_StreamBeaconLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - }) - - mux.Handle("GET", pattern_Health_StreamValidatorLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") - _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - }) - - return nil -} - // RegisterAuthHandlerServer registers the http handlers for service Auth to "mux". // UnaryRPC :call AuthServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1708,171 +1528,6 @@ var ( forward_SlashingProtection_ImportSlashingProtection_0 = runtime.ForwardResponseMessage ) -// RegisterHealthHandlerFromEndpoint is same as RegisterHealthHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterHealthHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterHealthHandler(ctx, mux, conn) -} - -// RegisterHealthHandler registers the http handlers for service Health to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterHealthHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterHealthHandlerClient(ctx, mux, NewHealthClient(conn)) -} - -// RegisterHealthHandlerClient registers the http handlers for service Health -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "HealthClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "HealthClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "HealthClient" to call the correct interceptors. -func RegisterHealthHandlerClient(ctx context.Context, mux *runtime.ServeMux, client HealthClient) error { - - mux.Handle("GET", pattern_Health_GetBeaconNodeConnection_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.validator.accounts.v2.Health/GetBeaconNodeConnection") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Health_GetBeaconNodeConnection_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetBeaconNodeConnection_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_GetLogsEndpoints_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.validator.accounts.v2.Health/GetLogsEndpoints") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Health_GetLogsEndpoints_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetLogsEndpoints_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_GetVersion_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.validator.accounts.v2.Health/GetVersion") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Health_GetVersion_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_StreamBeaconLogs_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.validator.accounts.v2.Health/StreamBeaconLogs") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Health_StreamBeaconLogs_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_StreamBeaconLogs_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Health_StreamValidatorLogs_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.validator.accounts.v2.Health/StreamValidatorLogs") - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Health_StreamValidatorLogs_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_StreamValidatorLogs_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Health_GetBeaconNodeConnection_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "validator", "health", "node_connection"}, "")) - - pattern_Health_GetLogsEndpoints_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"v2", "validator", "health", "logs", "endpoints"}, "")) - - pattern_Health_GetVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v2", "validator", "health", "version"}, "")) - - pattern_Health_StreamBeaconLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"v2", "validator", "health", "logs", "beacon", "stream"}, "")) - - pattern_Health_StreamValidatorLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 1, 2, 4}, []string{"v2", "validator", "health", "logs", "stream"}, "")) -) - -var ( - forward_Health_GetBeaconNodeConnection_0 = runtime.ForwardResponseMessage - - forward_Health_GetLogsEndpoints_0 = runtime.ForwardResponseMessage - - forward_Health_GetVersion_0 = runtime.ForwardResponseMessage - - forward_Health_StreamBeaconLogs_0 = runtime.ForwardResponseStream - - forward_Health_StreamValidatorLogs_0 = runtime.ForwardResponseStream -) - // RegisterAuthHandlerFromEndpoint is same as RegisterAuthHandler but // automatically dials to "endpoint" and closes the connection when "ctx" gets done. func RegisterAuthHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { diff --git a/proto/prysm/v1alpha1/validator-client/web_api.proto b/proto/prysm/v1alpha1/validator-client/web_api.proto index 75a120b97..ac2c8a6f3 100644 --- a/proto/prysm/v1alpha1/validator-client/web_api.proto +++ b/proto/prysm/v1alpha1/validator-client/web_api.proto @@ -147,41 +147,6 @@ service SlashingProtection { } } -// Health endpoints and log streaming will no longer be available, please use grafana and local log setups for reivew. -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -service Health { - rpc GetBeaconNodeConnection(google.protobuf.Empty) returns (NodeConnectionResponse) { - option deprecated = true; - option (google.api.http) = { - get: "/v2/validator/health/node_connection" - }; - } - rpc GetLogsEndpoints(google.protobuf.Empty) returns (LogsEndpointResponse) { - option deprecated = true; - option (google.api.http) = { - get: "/v2/validator/health/logs/endpoints" - }; - } - rpc GetVersion(google.protobuf.Empty) returns (VersionResponse) { - option deprecated = true; - option (google.api.http) = { - get: "/v2/validator/health/version" - }; - } - rpc StreamBeaconLogs(google.protobuf.Empty) returns (stream ethereum.eth.v1alpha1.LogsResponse) { - option deprecated = true; - option (google.api.http) = { - get: "/v2/validator/health/logs/beacon/stream" - }; - } - rpc StreamValidatorLogs(google.protobuf.Empty) returns (stream ethereum.eth.v1alpha1.LogsResponse) { - option deprecated = true; - option (google.api.http) = { - get: "/v2/validator/health/logs/validator/stream" - }; - } -} - // Web APIs such as the Keymanager APIs will no longer validate JWTs on the endpoint. Users should no longer expose the validator APIs to the public. // option deprecated = true; can't be added yet as it's used for keymanager API // DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. @@ -330,36 +295,6 @@ message AccountRequest { repeated uint64 indices = 2; } -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -message NodeConnectionResponse { - option deprecated = true; - // The host address of the beacon node the validator - // client is connected to. - string beacon_node_endpoint = 1; - // Whether the connection is active. - bool connected = 2; - // Whether the beacon node is currently synchronizing to chain head. - bool syncing = 3; - // The chain genesis time. - uint64 genesis_time = 4; - // Address of the validator deposit contract in the eth1 chain. - bytes deposit_contract_address = 5; -} - -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -message LogsEndpointResponse { - option deprecated = true; - string validator_logs_endpoint = 1; - string beacon_logs_endpoint = 2; -} - -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -message VersionResponse { - option deprecated = true; - string beacon = 1; - string validator = 2; -} - // DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. message HasWalletResponse { option deprecated = true; diff --git a/validator/node/node.go b/validator/node/node.go index edb0ec972..9f367e5a7 100644 --- a/validator/node/node.go +++ b/validator/node/node.go @@ -796,7 +796,6 @@ func (c *ValidatorClient) registerRPCGatewayService(router *mux.Router) error { validatorpb.RegisterAuthHandler, validatorpb.RegisterWalletHandler, pb.RegisterHealthHandler, - validatorpb.RegisterHealthHandler, validatorpb.RegisterAccountsHandler, validatorpb.RegisterBeaconHandler, validatorpb.RegisterSlashingProtectionHandler, diff --git a/validator/rpc/BUILD.bazel b/validator/rpc/BUILD.bazel index f8b75cff8..7bcd83c1b 100644 --- a/validator/rpc/BUILD.bazel +++ b/validator/rpc/BUILD.bazel @@ -6,8 +6,8 @@ go_library( "accounts.go", "auth_token.go", "beacon.go", + "handlers_health.go", "handlers_keymanager.go", - "health.go", "intercepter.go", "log.go", "server.go", @@ -91,8 +91,8 @@ go_test( "accounts_test.go", "auth_token_test.go", "beacon_test.go", + "handlers_health_test.go", "handlers_keymanager_test.go", - "health_test.go", "intercepter_test.go", "server_test.go", "slashing_test.go", @@ -112,6 +112,7 @@ go_test( "//crypto/rand:go_default_library", "//encoding/bytesutil:go_default_library", "//io/file:go_default_library", + "//io/logs/mock:go_default_library", "//proto/prysm/v1alpha1:go_default_library", "//proto/prysm/v1alpha1/validator-client:go_default_library", "//testing/assert:go_default_library", diff --git a/validator/rpc/handlers_health.go b/validator/rpc/handlers_health.go new file mode 100644 index 000000000..54fe5e492 --- /dev/null +++ b/validator/rpc/handlers_health.go @@ -0,0 +1,163 @@ +package rpc + +import ( + "encoding/json" + "fmt" + "net/http" + + http2 "github.com/prysmaticlabs/prysm/v4/network/http" + pb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" + "github.com/prysmaticlabs/prysm/v4/runtime/version" + "go.opencensus.io/trace" + "google.golang.org/protobuf/types/known/emptypb" +) + +// GetVersion returns the beacon node and validator client versions +func (s *Server) GetVersion(w http.ResponseWriter, r *http.Request) { + ctx, span := trace.StartSpan(r.Context(), "validator.web.health.GetVersion") + defer span.End() + + beacon, err := s.beaconNodeClient.GetVersion(ctx, &emptypb.Empty{}) + if err != nil { + http2.HandleError(w, err.Error(), http.StatusInternalServerError) + return + } + + http2.WriteJson(w, struct { + Beacon string `json:"beacon"` + Validator string `json:"validator"` + }{ + Beacon: beacon.Version, + Validator: version.Version(), + }) +} + +// StreamBeaconLogs from the beacon node via server-side events. +func (s *Server) StreamBeaconLogs(w http.ResponseWriter, r *http.Request) { + // Wrap service context with a cancel in order to propagate the exiting of + // this method properly to the beacon node server. + ctx, span := trace.StartSpan(r.Context(), "validator.web.health.StreamBeaconLogs") + defer span.End() + // Set up SSE response headers + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + + // Flush helper function to ensure data is sent to client + flusher, ok := w.(http.Flusher) + if !ok { + http2.HandleError(w, "Streaming unsupported!", http.StatusInternalServerError) + return + } + // TODO: StreamBeaconLogs grpc will need to be replaced in the future + client, err := s.beaconNodeHealthClient.StreamBeaconLogs(ctx, &emptypb.Empty{}) + if err != nil { + http2.HandleError(w, err.Error(), http.StatusInternalServerError) + return + } + + for { + select { + case <-s.ctx.Done(): + return + case <-ctx.Done(): + return + case <-client.Context().Done(): + return + default: + logResp, err := client.Recv() + if err != nil { + http2.HandleError(w, "could not receive beacon logs from stream: "+err.Error(), http.StatusInternalServerError) + return + } + jsonResp, err := json.Marshal(logResp) + if err != nil { + http2.HandleError(w, "could not encode log response into JSON: "+err.Error(), http.StatusInternalServerError) + return + } + + // Send the response as an SSE event + // Assuming resp has a String() method for simplicity + _, err = fmt.Fprintf(w, "%s\n", jsonResp) + if err != nil { + http2.HandleError(w, err.Error(), http.StatusInternalServerError) + return + } + // Flush the data to the client immediately + flusher.Flush() + } + } +} + +// StreamValidatorLogs from the validator client via server-side events. +func (s *Server) StreamValidatorLogs(w http.ResponseWriter, r *http.Request) { + ctx, span := trace.StartSpan(r.Context(), "validator.web.health.StreamValidatorLogs") + defer span.End() + + // Ensure that the writer supports flushing. + flusher, ok := w.(http.Flusher) + if !ok { + http2.HandleError(w, "Streaming unsupported!", http.StatusInternalServerError) + return + } + + ch := make(chan []byte, s.streamLogsBufferSize) + sub := s.logsStreamer.LogsFeed().Subscribe(ch) + defer func() { + sub.Unsubscribe() + close(ch) + }() + // Set up SSE response headers + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + + recentLogs := s.logsStreamer.GetLastFewLogs() + logStrings := make([]string, len(recentLogs)) + for i, l := range recentLogs { + logStrings[i] = string(l) + } + ls := &pb.LogsResponse{ + Logs: logStrings, + } + jsonLogs, err := json.Marshal(ls) + if err != nil { + http2.HandleError(w, "Failed to marshal logs: "+err.Error(), http.StatusInternalServerError) + return + } + _, err = fmt.Fprintf(w, "%s\n", jsonLogs) + if err != nil { + http2.HandleError(w, "Error sending data: "+err.Error(), http.StatusInternalServerError) + return + } + flusher.Flush() + + for { + select { + case log := <-ch: + // Set up SSE response headers + ls = &pb.LogsResponse{ + Logs: []string{string(log)}, + } + jsonLogs, err = json.Marshal(ls) + if err != nil { + http2.HandleError(w, "Failed to marshal logs: "+err.Error(), http.StatusInternalServerError) + return + } + _, err = fmt.Fprintf(w, "%s\n", jsonLogs) + if err != nil { + http2.HandleError(w, "Error sending data: "+err.Error(), http.StatusInternalServerError) + return + } + + flusher.Flush() + case <-s.ctx.Done(): + return + case err := <-sub.Err(): + http2.HandleError(w, "Subscriber error: "+err.Error(), http.StatusInternalServerError) + return + case <-ctx.Done(): + return + } + } +} diff --git a/validator/rpc/handlers_health_test.go b/validator/rpc/handlers_health_test.go new file mode 100644 index 000000000..4e645e00e --- /dev/null +++ b/validator/rpc/handlers_health_test.go @@ -0,0 +1,191 @@ +package rpc + +import ( + "bytes" + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/golang/mock/gomock" + "github.com/golang/protobuf/ptypes/empty" + "github.com/prysmaticlabs/prysm/v4/io/logs/mock" + "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" + pb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" + "github.com/prysmaticlabs/prysm/v4/testing/require" + validatormock "github.com/prysmaticlabs/prysm/v4/testing/validator-mock" + "google.golang.org/grpc" +) + +type MockBeaconNodeHealthClient struct { + grpc.ClientStream + logs []*pb.LogsResponse + err error +} + +func (m *MockBeaconNodeHealthClient) StreamBeaconLogs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (eth.Health_StreamBeaconLogsClient, error) { + return m, m.err +} + +func (m *MockBeaconNodeHealthClient) Recv() (*eth.LogsResponse, error) { + if len(m.logs) == 0 { + return nil, io.EOF + } + log := m.logs[0] + m.logs = m.logs[1:] + return log, nil +} + +func (m *MockBeaconNodeHealthClient) SendMsg(_ interface{}) error { + return m.err +} + +func (m *MockBeaconNodeHealthClient) Context() context.Context { + return context.Background() +} + +type flushableResponseRecorder struct { + *httptest.ResponseRecorder + flushed bool +} + +func (f *flushableResponseRecorder) Flush() { + f.flushed = true +} + +func TestStreamBeaconLogs(t *testing.T) { + logs := []*pb.LogsResponse{ + { + Logs: []string{"log1", "log2"}, + }, + { + Logs: []string{"log3", "log4"}, + }, + } + + mockClient := &MockBeaconNodeHealthClient{ + logs: logs, + err: nil, + } + + // Setting up the mock in the server struct + s := Server{ + ctx: context.Background(), + beaconNodeHealthClient: mockClient, + } + + // Create a mock ResponseWriter and Request + w := &flushableResponseRecorder{ + ResponseRecorder: httptest.NewRecorder(), + } + r := httptest.NewRequest("GET", "/v2/validator/health/logs/beacon/stream", nil) + + // Call the function + s.StreamBeaconLogs(w, r) + + // Assert the results + resp := w.Result() + if resp.StatusCode != http.StatusOK { + t.Fatalf("Expected status OK but got %v", resp.StatusCode) + } + ct, ok := resp.Header["Content-Type"] + require.Equal(t, ok, true) + require.Equal(t, ct[0], "text/event-stream") + cn, ok := resp.Header["Connection"] + require.Equal(t, ok, true) + require.Equal(t, cn[0], "keep-alive") + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.NotNil(t, body) + require.StringContains(t, `{"logs":["log1","log2"]}`, string(body)) + require.StringContains(t, `{"logs":["log3","log4"]}`, string(body)) + if !w.flushed { + t.Fatal("Flush was not called") + } +} + +func TestStreamValidatorLogs(t *testing.T) { + ctx := context.Background() + mockLogs := [][]byte{ + []byte("[2023-10-31 10:00:00] INFO: Starting server..."), + []byte("[2023-10-31 10:01:23] DEBUG: Database connection established."), + []byte("[2023-10-31 10:05:45] WARN: High memory usage detected."), + []byte("[2023-10-31 10:10:12] INFO: New user registered: user123."), + []byte("[2023-10-31 10:15:30] ERROR: Failed to send email."), + } + logStreamer := mock.NewMockStreamer(mockLogs) + // Setting up the mock in the server struct + s := Server{ + ctx: ctx, + logsStreamer: logStreamer, + streamLogsBufferSize: 100, + } + + w := &flushableResponseRecorder{ + ResponseRecorder: httptest.NewRecorder(), + } + r := httptest.NewRequest("GET", "/v2/validator/health/logs/validator/stream", nil) + go func() { + s.StreamValidatorLogs(w, r) + }() + // wait for initiation of StreamValidatorLogs + time.Sleep(100 * time.Millisecond) + logStreamer.LogsFeed().Send([]byte("Some mock event data")) + // wait for feed + time.Sleep(100 * time.Millisecond) + s.ctx.Done() + // Assert the results + resp := w.Result() + if resp.StatusCode != http.StatusOK { + t.Fatalf("Expected status OK but got %v", resp.StatusCode) + } + ct, ok := resp.Header["Content-Type"] + require.Equal(t, ok, true) + require.Equal(t, ct[0], "text/event-stream") + cn, ok := resp.Header["Connection"] + require.Equal(t, ok, true) + require.Equal(t, cn[0], "keep-alive") + // Check if data was written + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.NotNil(t, body) + + require.StringContains(t, `{"logs":["[2023-10-31 10:00:00] INFO: Starting server...","[2023-10-31 10:01:23] DEBUG: Database connection established.",`+ + `"[2023-10-31 10:05:45] WARN: High memory usage detected.","[2023-10-31 10:10:12] INFO: New user registered: user123.","[2023-10-31 10:15:30] ERROR: Failed to send email."]}`, string(body)) + require.StringContains(t, `{"logs":["Some mock event data"]}`, string(body)) + + // Check if Flush was called + if !w.flushed { + t.Fatal("Flush was not called") + } + +} + +func TestServer_GetVersion(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + ctx := context.Background() + mockNodeClient := validatormock.NewMockNodeClient(ctrl) + s := Server{ + ctx: ctx, + beaconNodeClient: mockNodeClient, + } + mockNodeClient.EXPECT().GetVersion(gomock.Any(), gomock.Any()).Return(ð.Version{ + Version: "4.10.1", + Metadata: "beacon node", + }, nil) + r := httptest.NewRequest("GET", "/v2/validator/health/version", nil) + w := httptest.NewRecorder() + w.Body = &bytes.Buffer{} + s.GetVersion(w, r) + resp := w.Result() + if resp.StatusCode != http.StatusOK { + t.Fatalf("Expected status OK but got %v", resp.StatusCode) + } + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.NotNil(t, body) + require.StringContains(t, `{"beacon":"4.10.1","validator":"Prysm/Unknown/Local build. Built at: Moments ago"}`, string(body)) +} diff --git a/validator/rpc/health.go b/validator/rpc/health.go deleted file mode 100644 index b20dcac95..000000000 --- a/validator/rpc/health.go +++ /dev/null @@ -1,132 +0,0 @@ -package rpc - -import ( - "context" - "time" - - "github.com/pkg/errors" - pb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" - validatorpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1/validator-client" - "github.com/prysmaticlabs/prysm/v4/runtime/version" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/emptypb" -) - -// GetBeaconNodeConnection retrieves the current beacon node connection -// information, as well as its sync status. -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -func (s *Server) GetBeaconNodeConnection(ctx context.Context, _ *emptypb.Empty) (*validatorpb.NodeConnectionResponse, error) { - syncStatus, err := s.syncChecker.Syncing(ctx) - if err != nil || s.validatorService.Status() != nil { - //nolint:nilerr - return &validatorpb.NodeConnectionResponse{ - GenesisTime: 0, - BeaconNodeEndpoint: s.nodeGatewayEndpoint, - Connected: false, - Syncing: false, - }, nil - } - genesis, err := s.genesisFetcher.GenesisInfo(ctx) - if err != nil { - return nil, err - } - return &validatorpb.NodeConnectionResponse{ - GenesisTime: uint64(time.Unix(genesis.GenesisTime.Seconds, 0).Unix()), - DepositContractAddress: genesis.DepositContractAddress, - BeaconNodeEndpoint: s.nodeGatewayEndpoint, - Connected: true, - Syncing: syncStatus, - }, nil -} - -// GetLogsEndpoints for the beacon and validator client. -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -func (*Server) GetLogsEndpoints(_ context.Context, _ *emptypb.Empty) (*validatorpb.LogsEndpointResponse, error) { - return nil, status.Error(codes.Unimplemented, "unimplemented") -} - -// GetVersion -- -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -func (s *Server) GetVersion(ctx context.Context, _ *emptypb.Empty) (*validatorpb.VersionResponse, error) { - beacon, err := s.beaconNodeClient.GetVersion(ctx, &emptypb.Empty{}) - if err != nil { - return nil, err - } - - return &validatorpb.VersionResponse{ - Beacon: beacon.Version, - Validator: version.Version(), - }, nil -} - -// StreamBeaconLogs from the beacon node via a gRPC server-side stream. -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -func (s *Server) StreamBeaconLogs(req *emptypb.Empty, stream validatorpb.Health_StreamBeaconLogsServer) error { - // Wrap service context with a cancel in order to propagate the exiting of - // this method properly to the beacon node server. - ctx, cancel := context.WithCancel(s.ctx) - defer cancel() - - client, err := s.beaconNodeHealthClient.StreamBeaconLogs(ctx, req) - if err != nil { - return err - } - for { - select { - case <-s.ctx.Done(): - return status.Error(codes.Canceled, "Context canceled") - case <-stream.Context().Done(): - return status.Error(codes.Canceled, "Context canceled") - case <-client.Context().Done(): - return status.Error(codes.Canceled, "Context canceled") - default: - resp, err := client.Recv() - if err != nil { - return errors.Wrap(err, "could not receive beacon logs from stream") - } - if err := stream.Send(resp); err != nil { - return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) - } - } - } -} - -// StreamValidatorLogs from the validator client via a gRPC server-side stream. -// DEPRECATED: Prysm Web UI and associated endpoints will be fully removed in a future hard fork. -func (s *Server) StreamValidatorLogs(_ *emptypb.Empty, stream validatorpb.Health_StreamValidatorLogsServer) error { - ch := make(chan []byte, s.streamLogsBufferSize) - sub := s.logsStreamer.LogsFeed().Subscribe(ch) - defer func() { - sub.Unsubscribe() - defer close(ch) - }() - - recentLogs := s.logsStreamer.GetLastFewLogs() - logStrings := make([]string, len(recentLogs)) - for i, log := range recentLogs { - logStrings[i] = string(log) - } - if err := stream.Send(&pb.LogsResponse{ - Logs: logStrings, - }); err != nil { - return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) - } - for { - select { - case log := <-ch: - resp := &pb.LogsResponse{ - Logs: []string{string(log)}, - } - if err := stream.Send(resp); err != nil { - return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) - } - case <-s.ctx.Done(): - return status.Error(codes.Canceled, "Context canceled") - case err := <-sub.Err(): - return status.Errorf(codes.Canceled, "Subscriber error, closing: %v", err) - case <-stream.Context().Done(): - return status.Error(codes.Canceled, "Context canceled") - } - } -} diff --git a/validator/rpc/health_test.go b/validator/rpc/health_test.go deleted file mode 100644 index ac8abd5f2..000000000 --- a/validator/rpc/health_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package rpc - -import ( - "context" - "testing" - "time" - - "github.com/golang/protobuf/ptypes/empty" - ethpb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1" - pb "github.com/prysmaticlabs/prysm/v4/proto/prysm/v1alpha1/validator-client" - "github.com/prysmaticlabs/prysm/v4/testing/require" - "github.com/prysmaticlabs/prysm/v4/validator/client" - "google.golang.org/protobuf/types/known/timestamppb" -) - -type mockSyncChecker struct { - syncing bool -} - -func (m *mockSyncChecker) Syncing(_ context.Context) (bool, error) { - return m.syncing, nil -} - -type mockGenesisFetcher struct{} - -func (_ *mockGenesisFetcher) GenesisInfo(_ context.Context) (*ethpb.Genesis, error) { - genesis := timestamppb.New(time.Unix(0, 0)) - return ðpb.Genesis{ - GenesisTime: genesis, - }, nil -} - -func TestServer_GetBeaconNodeConnection(t *testing.T) { - ctx := context.Background() - endpoint := "localhost:90210" - vs, err := client.NewValidatorService(ctx, &client.Config{}) - require.NoError(t, err) - s := &Server{ - walletInitialized: true, - validatorService: vs, - syncChecker: &mockSyncChecker{syncing: false}, - genesisFetcher: &mockGenesisFetcher{}, - nodeGatewayEndpoint: endpoint, - } - got, err := s.GetBeaconNodeConnection(ctx, &empty.Empty{}) - require.NoError(t, err) - want := &pb.NodeConnectionResponse{ - BeaconNodeEndpoint: endpoint, - Connected: true, - Syncing: false, - GenesisTime: uint64(time.Unix(0, 0).Unix()), - } - require.DeepEqual(t, want, got) -} diff --git a/validator/rpc/server.go b/validator/rpc/server.go index 25fc0f1ef..983d70149 100644 --- a/validator/rpc/server.go +++ b/validator/rpc/server.go @@ -185,7 +185,6 @@ func (s *Server) Start() { reflection.Register(s.grpcServer) validatorpb.RegisterAuthServer(s.grpcServer, s) validatorpb.RegisterWalletServer(s.grpcServer, s) - validatorpb.RegisterHealthServer(s.grpcServer, s) validatorpb.RegisterBeaconServer(s.grpcServer, s) validatorpb.RegisterAccountsServer(s.grpcServer, s) validatorpb.RegisterSlashingProtectionServer(s.grpcServer, s) @@ -234,7 +233,10 @@ func (s *Server) InitializeRoutes() error { s.router.HandleFunc("/eth/v1/validator/{pubkey}/feerecipient", s.SetFeeRecipientByPubkey).Methods(http.MethodPost) s.router.HandleFunc("/eth/v1/validator/{pubkey}/feerecipient", s.DeleteFeeRecipientByPubkey).Methods(http.MethodDelete) s.router.HandleFunc("/eth/v1/validator/{pubkey}/voluntary_exit", s.SetVoluntaryExit).Methods(http.MethodPost) - // ... + // web health endpoints + s.router.HandleFunc("/v2/validator/health/version", s.GetVersion).Methods(http.MethodGet) + s.router.HandleFunc("/v2/validator/health/logs/validator/stream", s.StreamValidatorLogs).Methods(http.MethodGet) + s.router.HandleFunc("/v2/validator/health/logs/beacon/stream", s.StreamBeaconLogs).Methods(http.MethodGet) log.Info("Initialized REST API routes") return nil } diff --git a/validator/rpc/server_test.go b/validator/rpc/server_test.go index 479b39309..b9b74a7f7 100644 --- a/validator/rpc/server_test.go +++ b/validator/rpc/server_test.go @@ -19,11 +19,14 @@ func TestServer_InitializeRoutes(t *testing.T) { require.NoError(t, err) wantRouteList := map[string][]string{ - "/eth/v1/keystores": {http.MethodGet, http.MethodPost, http.MethodDelete}, - "/eth/v1/remotekeys": {http.MethodGet, http.MethodPost, http.MethodDelete}, - "/eth/v1/validator/{pubkey}/gas_limit": {http.MethodGet, http.MethodPost, http.MethodDelete}, - "/eth/v1/validator/{pubkey}/feerecipient": {http.MethodGet, http.MethodPost, http.MethodDelete}, - "/eth/v1/validator/{pubkey}/voluntary_exit": {http.MethodPost}, + "/eth/v1/keystores": {http.MethodGet, http.MethodPost, http.MethodDelete}, + "/eth/v1/remotekeys": {http.MethodGet, http.MethodPost, http.MethodDelete}, + "/eth/v1/validator/{pubkey}/gas_limit": {http.MethodGet, http.MethodPost, http.MethodDelete}, + "/eth/v1/validator/{pubkey}/feerecipient": {http.MethodGet, http.MethodPost, http.MethodDelete}, + "/eth/v1/validator/{pubkey}/voluntary_exit": {http.MethodPost}, + "/v2/validator/health/version": {http.MethodGet}, + "/v2/validator/health/logs/validator/stream": {http.MethodGet}, + "/v2/validator/health/logs/beacon/stream": {http.MethodGet}, } gotRouteList := make(map[string][]string) err = s.router.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {