diff --git a/google/protobuf/timestamp.proto b/google/protobuf/timestamp.proto new file mode 100644 index 00000000..d0698db6 --- /dev/null +++ b/google/protobuf/timestamp.proto @@ -0,0 +1,144 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/protobuf/types/known/timestamppb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TimestampProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; + +// A Timestamp represents a point in time independent of any time zone or local +// calendar, encoded as a count of seconds and fractions of seconds at +// nanosecond resolution. The count is relative to an epoch at UTC midnight on +// January 1, 1970, in the proleptic Gregorian calendar which extends the +// Gregorian calendar backwards to year one. +// +// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +// second table is needed for interpretation, using a [24-hour linear +// smear](https://developers.google.com/time/smear). +// +// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +// restricting to that range, we ensure that we can convert to and from [RFC +// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +// +// # Examples +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// Example 5: Compute Timestamp from Java `Instant.now()`. +// +// Instant now = Instant.now(); +// +// Timestamp timestamp = +// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) +// .setNanos(now.getNano()).build(); +// +// Example 6: Compute Timestamp from current time in Python. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() +// ) to obtain a formatter capable of generating timestamps in this format. +// +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + int32 nanos = 2; +} \ No newline at end of file diff --git a/release/go/spacemesh/v1/admin.pb.go b/release/go/spacemesh/v1/admin.pb.go index f31fe5f8..5c72a130 100644 --- a/release/go/spacemesh/v1/admin.pb.go +++ b/release/go/spacemesh/v1/admin.pb.go @@ -33,7 +33,7 @@ var file_spacemesh_v1_admin_proto_rawDesc = []byte{ 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 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, 0x32, 0xb4, 0x01, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xfd, 0x01, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x63, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x25, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, @@ -44,26 +44,35 @@ var file_spacemesh_v1_admin_proto_rawDesc = []byte{ 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 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, 0x42, 0x34, 0x5a, 0x32, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x6d, 0x65, 0x73, 0x68, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2f, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x47, 0x0a, 0x0c, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, + 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x6f, 0x73, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var file_spacemesh_v1_admin_proto_goTypes = []interface{}{ (*CheckpointStreamRequest)(nil), // 0: spacemesh.v1.CheckpointStreamRequest (*RecoverRequest)(nil), // 1: spacemesh.v1.RecoverRequest - (*CheckpointStreamResponse)(nil), // 2: spacemesh.v1.CheckpointStreamResponse - (*empty.Empty)(nil), // 3: google.protobuf.Empty + (*EventStreamRequest)(nil), // 2: spacemesh.v1.EventStreamRequest + (*CheckpointStreamResponse)(nil), // 3: spacemesh.v1.CheckpointStreamResponse + (*empty.Empty)(nil), // 4: google.protobuf.Empty + (*Event)(nil), // 5: spacemesh.v1.Event } var file_spacemesh_v1_admin_proto_depIdxs = []int32{ 0, // 0: spacemesh.v1.AdminService.CheckpointStream:input_type -> spacemesh.v1.CheckpointStreamRequest 1, // 1: spacemesh.v1.AdminService.Recover:input_type -> spacemesh.v1.RecoverRequest - 2, // 2: spacemesh.v1.AdminService.CheckpointStream:output_type -> spacemesh.v1.CheckpointStreamResponse - 3, // 3: spacemesh.v1.AdminService.Recover:output_type -> google.protobuf.Empty - 2, // [2:4] is the sub-list for method output_type - 0, // [0:2] is the sub-list for method input_type + 2, // 2: spacemesh.v1.AdminService.EventsStream:input_type -> spacemesh.v1.EventStreamRequest + 3, // 3: spacemesh.v1.AdminService.CheckpointStream:output_type -> spacemesh.v1.CheckpointStreamResponse + 4, // 4: spacemesh.v1.AdminService.Recover:output_type -> google.protobuf.Empty + 5, // 5: spacemesh.v1.AdminService.EventsStream:output_type -> spacemesh.v1.Event + 3, // [3:6] is the sub-list for method output_type + 0, // [0:3] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -110,6 +119,8 @@ type AdminServiceClient interface { CheckpointStream(ctx context.Context, in *CheckpointStreamRequest, opts ...grpc.CallOption) (AdminService_CheckpointStreamClient, error) // Recovers from the provided checkpoint data. Recover(ctx context.Context, in *RecoverRequest, opts ...grpc.CallOption) (*empty.Empty, error) + // Events that are relevant for node operator + EventsStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (AdminService_EventsStreamClient, error) } type adminServiceClient struct { @@ -161,12 +172,46 @@ func (c *adminServiceClient) Recover(ctx context.Context, in *RecoverRequest, op return out, nil } +func (c *adminServiceClient) EventsStream(ctx context.Context, in *EventStreamRequest, opts ...grpc.CallOption) (AdminService_EventsStreamClient, error) { + stream, err := c.cc.NewStream(ctx, &_AdminService_serviceDesc.Streams[1], "/spacemesh.v1.AdminService/EventsStream", opts...) + if err != nil { + return nil, err + } + x := &adminServiceEventsStreamClient{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 AdminService_EventsStreamClient interface { + Recv() (*Event, error) + grpc.ClientStream +} + +type adminServiceEventsStreamClient struct { + grpc.ClientStream +} + +func (x *adminServiceEventsStreamClient) Recv() (*Event, error) { + m := new(Event) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // AdminServiceServer is the server API for AdminService service. type AdminServiceServer interface { // Returns the checkpoint data. CheckpointStream(*CheckpointStreamRequest, AdminService_CheckpointStreamServer) error // Recovers from the provided checkpoint data. Recover(context.Context, *RecoverRequest) (*empty.Empty, error) + // Events that are relevant for node operator + EventsStream(*EventStreamRequest, AdminService_EventsStreamServer) error } // UnimplementedAdminServiceServer can be embedded to have forward compatible implementations. @@ -179,6 +224,9 @@ func (*UnimplementedAdminServiceServer) CheckpointStream(*CheckpointStreamReques func (*UnimplementedAdminServiceServer) Recover(context.Context, *RecoverRequest) (*empty.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Recover not implemented") } +func (*UnimplementedAdminServiceServer) EventsStream(*EventStreamRequest, AdminService_EventsStreamServer) error { + return status.Errorf(codes.Unimplemented, "method EventsStream not implemented") +} func RegisterAdminServiceServer(s *grpc.Server, srv AdminServiceServer) { s.RegisterService(&_AdminService_serviceDesc, srv) @@ -223,6 +271,27 @@ func _AdminService_Recover_Handler(srv interface{}, ctx context.Context, dec fun return interceptor(ctx, in, info, handler) } +func _AdminService_EventsStream_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(EventStreamRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(AdminServiceServer).EventsStream(m, &adminServiceEventsStreamServer{stream}) +} + +type AdminService_EventsStreamServer interface { + Send(*Event) error + grpc.ServerStream +} + +type adminServiceEventsStreamServer struct { + grpc.ServerStream +} + +func (x *adminServiceEventsStreamServer) Send(m *Event) error { + return x.ServerStream.SendMsg(m) +} + var _AdminService_serviceDesc = grpc.ServiceDesc{ ServiceName: "spacemesh.v1.AdminService", HandlerType: (*AdminServiceServer)(nil), @@ -238,6 +307,11 @@ var _AdminService_serviceDesc = grpc.ServiceDesc{ Handler: _AdminService_CheckpointStream_Handler, ServerStreams: true, }, + { + StreamName: "EventsStream", + Handler: _AdminService_EventsStream_Handler, + ServerStreams: true, + }, }, Metadata: "spacemesh/v1/admin.proto", } diff --git a/release/go/spacemesh/v1/admin_types.pb.go b/release/go/spacemesh/v1/admin_types.pb.go index 13c9f634..49b76568 100644 --- a/release/go/spacemesh/v1/admin_types.pb.go +++ b/release/go/spacemesh/v1/admin_types.pb.go @@ -7,8 +7,10 @@ package v1 import ( + duration "github.com/golang/protobuf/ptypes/duration" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -177,26 +179,1029 @@ func (x *RecoverRequest) GetRestoreLayer() uint32 { return 0 } +type Event struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // time when event occured. + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // the reason of the failure may be complex to pinpoint. + // for the first version we want to highlight that failure occured and defer user to logs. + Failure bool `protobuf:"varint,2,opt,name=failure,proto3" json:"failure,omitempty"` + Help string `protobuf:"bytes,3,opt,name=help,proto3" json:"help,omitempty"` + // Types that are assignable to Details: + // + // *Event_Beacon + // *Event_InitStart + // *Event_InitComplete + // *Event_PostStart + // *Event_PostComplete + // *Event_PoetWaitRound + // *Event_PoetWaitProof + // *Event_AtxPublished + // *Event_Eligibilities + // *Event_Proposal + Details isEvent_Details `protobuf_oneof:"details"` +} + +func (x *Event) Reset() { + *x = Event{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Event) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Event) ProtoMessage() {} + +func (x *Event) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[3] + 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 Event.ProtoReflect.Descriptor instead. +func (*Event) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{3} +} + +func (x *Event) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *Event) GetFailure() bool { + if x != nil { + return x.Failure + } + return false +} + +func (x *Event) GetHelp() string { + if x != nil { + return x.Help + } + return "" +} + +func (m *Event) GetDetails() isEvent_Details { + if m != nil { + return m.Details + } + return nil +} + +func (x *Event) GetBeacon() *EventBeacon { + if x, ok := x.GetDetails().(*Event_Beacon); ok { + return x.Beacon + } + return nil +} + +func (x *Event) GetInitStart() *EventInitStart { + if x, ok := x.GetDetails().(*Event_InitStart); ok { + return x.InitStart + } + return nil +} + +func (x *Event) GetInitComplete() *EventInitComplete { + if x, ok := x.GetDetails().(*Event_InitComplete); ok { + return x.InitComplete + } + return nil +} + +func (x *Event) GetPostStart() *EventPostStart { + if x, ok := x.GetDetails().(*Event_PostStart); ok { + return x.PostStart + } + return nil +} + +func (x *Event) GetPostComplete() *EventPostComplete { + if x, ok := x.GetDetails().(*Event_PostComplete); ok { + return x.PostComplete + } + return nil +} + +func (x *Event) GetPoetWaitRound() *EventPoetWaitRound { + if x, ok := x.GetDetails().(*Event_PoetWaitRound); ok { + return x.PoetWaitRound + } + return nil +} + +func (x *Event) GetPoetWaitProof() *EventPoetWaitProof { + if x, ok := x.GetDetails().(*Event_PoetWaitProof); ok { + return x.PoetWaitProof + } + return nil +} + +func (x *Event) GetAtxPublished() *EventAtxPubished { + if x, ok := x.GetDetails().(*Event_AtxPublished); ok { + return x.AtxPublished + } + return nil +} + +func (x *Event) GetEligibilities() *EventEligibilities { + if x, ok := x.GetDetails().(*Event_Eligibilities); ok { + return x.Eligibilities + } + return nil +} + +func (x *Event) GetProposal() *EventProposal { + if x, ok := x.GetDetails().(*Event_Proposal); ok { + return x.Proposal + } + return nil +} + +type isEvent_Details interface { + isEvent_Details() +} + +type Event_Beacon struct { + Beacon *EventBeacon `protobuf:"bytes,4,opt,name=beacon,proto3,oneof"` +} + +type Event_InitStart struct { + InitStart *EventInitStart `protobuf:"bytes,5,opt,name=init_start,json=initStart,proto3,oneof"` +} + +type Event_InitComplete struct { + InitComplete *EventInitComplete `protobuf:"bytes,6,opt,name=init_complete,json=initComplete,proto3,oneof"` +} + +type Event_PostStart struct { + PostStart *EventPostStart `protobuf:"bytes,7,opt,name=post_start,json=postStart,proto3,oneof"` +} + +type Event_PostComplete struct { + PostComplete *EventPostComplete `protobuf:"bytes,8,opt,name=post_complete,json=postComplete,proto3,oneof"` +} + +type Event_PoetWaitRound struct { + PoetWaitRound *EventPoetWaitRound `protobuf:"bytes,9,opt,name=poet_wait_round,json=poetWaitRound,proto3,oneof"` +} + +type Event_PoetWaitProof struct { + PoetWaitProof *EventPoetWaitProof `protobuf:"bytes,10,opt,name=poet_wait_proof,json=poetWaitProof,proto3,oneof"` +} + +type Event_AtxPublished struct { + AtxPublished *EventAtxPubished `protobuf:"bytes,11,opt,name=atx_published,json=atxPublished,proto3,oneof"` +} + +type Event_Eligibilities struct { + Eligibilities *EventEligibilities `protobuf:"bytes,12,opt,name=eligibilities,proto3,oneof"` +} + +type Event_Proposal struct { + Proposal *EventProposal `protobuf:"bytes,13,opt,name=proposal,proto3,oneof"` +} + +func (*Event_Beacon) isEvent_Details() {} + +func (*Event_InitStart) isEvent_Details() {} + +func (*Event_InitComplete) isEvent_Details() {} + +func (*Event_PostStart) isEvent_Details() {} + +func (*Event_PostComplete) isEvent_Details() {} + +func (*Event_PoetWaitRound) isEvent_Details() {} + +func (*Event_PoetWaitProof) isEvent_Details() {} + +func (*Event_AtxPublished) isEvent_Details() {} + +func (*Event_Eligibilities) isEvent_Details() {} + +func (*Event_Proposal) isEvent_Details() {} + +type EventBeacon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Epoch uint32 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Beacon []byte `protobuf:"bytes,2,opt,name=beacon,proto3" json:"beacon,omitempty"` +} + +func (x *EventBeacon) Reset() { + *x = EventBeacon{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventBeacon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventBeacon) ProtoMessage() {} + +func (x *EventBeacon) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[4] + 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 EventBeacon.ProtoReflect.Descriptor instead. +func (*EventBeacon) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{4} +} + +func (x *EventBeacon) GetEpoch() uint32 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *EventBeacon) GetBeacon() []byte { + if x != nil { + return x.Beacon + } + return nil +} + +type EventInitStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Smesher []byte `protobuf:"bytes,1,opt,name=smesher,proto3" json:"smesher,omitempty"` + Commitment []byte `protobuf:"bytes,2,opt,name=commitment,proto3" json:"commitment,omitempty"` +} + +func (x *EventInitStart) Reset() { + *x = EventInitStart{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventInitStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventInitStart) ProtoMessage() {} + +func (x *EventInitStart) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[5] + 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 EventInitStart.ProtoReflect.Descriptor instead. +func (*EventInitStart) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{5} +} + +func (x *EventInitStart) GetSmesher() []byte { + if x != nil { + return x.Smesher + } + return nil +} + +func (x *EventInitStart) GetCommitment() []byte { + if x != nil { + return x.Commitment + } + return nil +} + +type EventInitComplete struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *EventInitComplete) Reset() { + *x = EventInitComplete{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventInitComplete) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventInitComplete) ProtoMessage() {} + +func (x *EventInitComplete) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[6] + 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 EventInitComplete.ProtoReflect.Descriptor instead. +func (*EventInitComplete) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{6} +} + +type EventPostStart struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Challenge []byte `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"` +} + +func (x *EventPostStart) Reset() { + *x = EventPostStart{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventPostStart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventPostStart) ProtoMessage() {} + +func (x *EventPostStart) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[7] + 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 EventPostStart.ProtoReflect.Descriptor instead. +func (*EventPostStart) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{7} +} + +func (x *EventPostStart) GetChallenge() []byte { + if x != nil { + return x.Challenge + } + return nil +} + +type EventPostComplete struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Challenge []byte `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"` +} + +func (x *EventPostComplete) Reset() { + *x = EventPostComplete{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventPostComplete) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventPostComplete) ProtoMessage() {} + +func (x *EventPostComplete) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[8] + 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 EventPostComplete.ProtoReflect.Descriptor instead. +func (*EventPostComplete) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{8} +} + +func (x *EventPostComplete) GetChallenge() []byte { + if x != nil { + return x.Challenge + } + return nil +} + +type EventPoetWaitRound struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Current uint32 `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"` + Publish uint32 `protobuf:"varint,2,opt,name=publish,proto3" json:"publish,omitempty"` + Wait *duration.Duration `protobuf:"bytes,3,opt,name=wait,proto3" json:"wait,omitempty"` +} + +func (x *EventPoetWaitRound) Reset() { + *x = EventPoetWaitRound{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventPoetWaitRound) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventPoetWaitRound) ProtoMessage() {} + +func (x *EventPoetWaitRound) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[9] + 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 EventPoetWaitRound.ProtoReflect.Descriptor instead. +func (*EventPoetWaitRound) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{9} +} + +func (x *EventPoetWaitRound) GetCurrent() uint32 { + if x != nil { + return x.Current + } + return 0 +} + +func (x *EventPoetWaitRound) GetPublish() uint32 { + if x != nil { + return x.Publish + } + return 0 +} + +func (x *EventPoetWaitRound) GetWait() *duration.Duration { + if x != nil { + return x.Wait + } + return nil +} + +type EventPoetWaitProof struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Publish uint32 `protobuf:"varint,1,opt,name=publish,proto3" json:"publish,omitempty"` + Target uint32 `protobuf:"varint,2,opt,name=target,proto3" json:"target,omitempty"` + Wait *duration.Duration `protobuf:"bytes,3,opt,name=wait,proto3" json:"wait,omitempty"` +} + +func (x *EventPoetWaitProof) Reset() { + *x = EventPoetWaitProof{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventPoetWaitProof) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventPoetWaitProof) ProtoMessage() {} + +func (x *EventPoetWaitProof) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[10] + 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 EventPoetWaitProof.ProtoReflect.Descriptor instead. +func (*EventPoetWaitProof) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{10} +} + +func (x *EventPoetWaitProof) GetPublish() uint32 { + if x != nil { + return x.Publish + } + return 0 +} + +func (x *EventPoetWaitProof) GetTarget() uint32 { + if x != nil { + return x.Target + } + return 0 +} + +func (x *EventPoetWaitProof) GetWait() *duration.Duration { + if x != nil { + return x.Wait + } + return nil +} + +type EventAtxPubished struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Current uint32 `protobuf:"varint,1,opt,name=current,proto3" json:"current,omitempty"` + Target uint32 `protobuf:"varint,2,opt,name=target,proto3" json:"target,omitempty"` + Id []byte `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` + Wait *duration.Duration `protobuf:"bytes,4,opt,name=wait,proto3" json:"wait,omitempty"` +} + +func (x *EventAtxPubished) Reset() { + *x = EventAtxPubished{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAtxPubished) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAtxPubished) ProtoMessage() {} + +func (x *EventAtxPubished) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_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 EventAtxPubished.ProtoReflect.Descriptor instead. +func (*EventAtxPubished) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{11} +} + +func (x *EventAtxPubished) GetCurrent() uint32 { + if x != nil { + return x.Current + } + return 0 +} + +func (x *EventAtxPubished) GetTarget() uint32 { + if x != nil { + return x.Target + } + return 0 +} + +func (x *EventAtxPubished) GetId() []byte { + if x != nil { + return x.Id + } + return nil +} + +func (x *EventAtxPubished) GetWait() *duration.Duration { + if x != nil { + return x.Wait + } + return nil +} + +type EventEligibilities struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Epoch uint32 `protobuf:"varint,1,opt,name=epoch,proto3" json:"epoch,omitempty"` + Beacon []byte `protobuf:"bytes,2,opt,name=beacon,proto3" json:"beacon,omitempty"` + Atx []byte `protobuf:"bytes,3,opt,name=atx,proto3" json:"atx,omitempty"` + ActiveSetSize uint32 `protobuf:"varint,4,opt,name=active_set_size,json=activeSetSize,proto3" json:"active_set_size,omitempty"` + Eligibilities []*ProposalEligibility `protobuf:"bytes,5,rep,name=eligibilities,proto3" json:"eligibilities,omitempty"` +} + +func (x *EventEligibilities) Reset() { + *x = EventEligibilities{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventEligibilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventEligibilities) ProtoMessage() {} + +func (x *EventEligibilities) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_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 EventEligibilities.ProtoReflect.Descriptor instead. +func (*EventEligibilities) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{12} +} + +func (x *EventEligibilities) GetEpoch() uint32 { + if x != nil { + return x.Epoch + } + return 0 +} + +func (x *EventEligibilities) GetBeacon() []byte { + if x != nil { + return x.Beacon + } + return nil +} + +func (x *EventEligibilities) GetAtx() []byte { + if x != nil { + return x.Atx + } + return nil +} + +func (x *EventEligibilities) GetActiveSetSize() uint32 { + if x != nil { + return x.ActiveSetSize + } + return 0 +} + +func (x *EventEligibilities) GetEligibilities() []*ProposalEligibility { + if x != nil { + return x.Eligibilities + } + return nil +} + +type ProposalEligibility struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Layer uint32 `protobuf:"varint,1,opt,name=layer,proto3" json:"layer,omitempty"` + Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *ProposalEligibility) Reset() { + *x = ProposalEligibility{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProposalEligibility) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProposalEligibility) ProtoMessage() {} + +func (x *ProposalEligibility) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_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 ProposalEligibility.ProtoReflect.Descriptor instead. +func (*ProposalEligibility) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{13} +} + +func (x *ProposalEligibility) GetLayer() uint32 { + if x != nil { + return x.Layer + } + return 0 +} + +func (x *ProposalEligibility) GetCount() uint32 { + if x != nil { + return x.Count + } + return 0 +} + +// Published proposal. Rewards will be received, once proposal is included into the block. +type EventProposal struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Layer uint32 `protobuf:"varint,1,opt,name=layer,proto3" json:"layer,omitempty"` + Proposal []byte `protobuf:"bytes,2,opt,name=proposal,proto3" json:"proposal,omitempty"` +} + +func (x *EventProposal) Reset() { + *x = EventProposal{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventProposal) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventProposal) ProtoMessage() {} + +func (x *EventProposal) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[14] + 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 EventProposal.ProtoReflect.Descriptor instead. +func (*EventProposal) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{14} +} + +func (x *EventProposal) GetLayer() uint32 { + if x != nil { + return x.Layer + } + return 0 +} + +func (x *EventProposal) GetProposal() []byte { + if x != nil { + return x.Proposal + } + return nil +} + +type EventStreamRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *EventStreamRequest) Reset() { + *x = EventStreamRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventStreamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventStreamRequest) ProtoMessage() {} + +func (x *EventStreamRequest) ProtoReflect() protoreflect.Message { + mi := &file_spacemesh_v1_admin_types_proto_msgTypes[15] + 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 EventStreamRequest.ProtoReflect.Descriptor instead. +func (*EventStreamRequest) Descriptor() ([]byte, []int) { + return file_spacemesh_v1_admin_types_proto_rawDescGZIP(), []int{15} +} + var File_spacemesh_v1_admin_types_proto protoreflect.FileDescriptor var file_spacemesh_v1_admin_types_proto_rawDesc = []byte{ 0x0a, 0x1e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x5b, - 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, - 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x74, 0x78, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x41, 0x74, 0x78, 0x73, 0x22, 0x2e, 0x0a, 0x18, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0e, 0x52, - 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4c, - 0x61, 0x79, 0x65, 0x72, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x12, 0x0c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x1a, 0x1f, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x5b, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4c, 0x61, 0x79, 0x65, + 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x74, 0x78, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x41, 0x74, 0x78, 0x73, 0x22, 0x2e, 0x0a, 0x18, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x0e, + 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x4c, 0x61, 0x79, 0x65, 0x72, 0x22, 0xa1, 0x06, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, 0x69, + 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x66, 0x61, 0x69, 0x6c, + 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x12, 0x33, 0x0a, 0x06, 0x62, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, + 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0a, + 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x00, + 0x52, 0x09, 0x69, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0d, 0x69, + 0x6e, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, + 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, + 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x74, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x48, 0x00, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x6f, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x6f, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x4a, 0x0a, 0x0f, 0x70, 0x6f, + 0x65, 0x74, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x65, 0x74, 0x57, 0x61, 0x69, 0x74, + 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x65, 0x74, 0x57, 0x61, 0x69, + 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x4a, 0x0a, 0x0f, 0x70, 0x6f, 0x65, 0x74, 0x5f, 0x77, + 0x61, 0x69, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x65, 0x74, 0x57, 0x61, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, + 0x66, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x6f, 0x65, 0x74, 0x57, 0x61, 0x69, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x12, 0x45, 0x0a, 0x0d, 0x61, 0x74, 0x78, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, + 0x78, 0x50, 0x75, 0x62, 0x69, 0x73, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x74, 0x78, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x6c, 0x69, + 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, + 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x42, 0x09, + 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x3b, 0x0a, 0x0b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x16, + 0x0a, 0x06, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, + 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6d, 0x65, 0x73, + 0x68, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x6d, 0x65, 0x73, 0x68, + 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x22, 0x13, 0x0a, 0x11, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x2e, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x50, 0x6f, 0x73, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x22, 0x31, 0x0a, 0x11, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x50, 0x6f, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x22, 0x77, 0x0a, 0x12, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x65, 0x74, 0x57, 0x61, 0x69, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x12, 0x2d, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x77, + 0x61, 0x69, 0x74, 0x22, 0x75, 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x65, 0x74, + 0x57, 0x61, 0x69, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x04, 0x77, + 0x61, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x22, 0x83, 0x01, 0x0a, 0x10, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x78, 0x50, 0x75, 0x62, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, + 0x22, 0xc5, 0x01, 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x61, 0x74, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0d, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x47, 0x0a, 0x0d, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, + 0x73, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x6c, + 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x65, 0x6c, 0x69, 0x67, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x41, 0x0a, 0x0d, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x61, 0x79, + 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x22, 0x14, + 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x67, 0x6f, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, @@ -215,18 +1220,48 @@ func file_spacemesh_v1_admin_types_proto_rawDescGZIP() []byte { return file_spacemesh_v1_admin_types_proto_rawDescData } -var file_spacemesh_v1_admin_types_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_spacemesh_v1_admin_types_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_spacemesh_v1_admin_types_proto_goTypes = []interface{}{ (*CheckpointStreamRequest)(nil), // 0: spacemesh.v1.CheckpointStreamRequest (*CheckpointStreamResponse)(nil), // 1: spacemesh.v1.CheckpointStreamResponse (*RecoverRequest)(nil), // 2: spacemesh.v1.RecoverRequest + (*Event)(nil), // 3: spacemesh.v1.Event + (*EventBeacon)(nil), // 4: spacemesh.v1.EventBeacon + (*EventInitStart)(nil), // 5: spacemesh.v1.EventInitStart + (*EventInitComplete)(nil), // 6: spacemesh.v1.EventInitComplete + (*EventPostStart)(nil), // 7: spacemesh.v1.EventPostStart + (*EventPostComplete)(nil), // 8: spacemesh.v1.EventPostComplete + (*EventPoetWaitRound)(nil), // 9: spacemesh.v1.EventPoetWaitRound + (*EventPoetWaitProof)(nil), // 10: spacemesh.v1.EventPoetWaitProof + (*EventAtxPubished)(nil), // 11: spacemesh.v1.EventAtxPubished + (*EventEligibilities)(nil), // 12: spacemesh.v1.EventEligibilities + (*ProposalEligibility)(nil), // 13: spacemesh.v1.ProposalEligibility + (*EventProposal)(nil), // 14: spacemesh.v1.EventProposal + (*EventStreamRequest)(nil), // 15: spacemesh.v1.EventStreamRequest + (*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp + (*duration.Duration)(nil), // 17: google.protobuf.Duration } var file_spacemesh_v1_admin_types_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 16, // 0: spacemesh.v1.Event.timestamp:type_name -> google.protobuf.Timestamp + 4, // 1: spacemesh.v1.Event.beacon:type_name -> spacemesh.v1.EventBeacon + 5, // 2: spacemesh.v1.Event.init_start:type_name -> spacemesh.v1.EventInitStart + 6, // 3: spacemesh.v1.Event.init_complete:type_name -> spacemesh.v1.EventInitComplete + 7, // 4: spacemesh.v1.Event.post_start:type_name -> spacemesh.v1.EventPostStart + 8, // 5: spacemesh.v1.Event.post_complete:type_name -> spacemesh.v1.EventPostComplete + 9, // 6: spacemesh.v1.Event.poet_wait_round:type_name -> spacemesh.v1.EventPoetWaitRound + 10, // 7: spacemesh.v1.Event.poet_wait_proof:type_name -> spacemesh.v1.EventPoetWaitProof + 11, // 8: spacemesh.v1.Event.atx_published:type_name -> spacemesh.v1.EventAtxPubished + 12, // 9: spacemesh.v1.Event.eligibilities:type_name -> spacemesh.v1.EventEligibilities + 14, // 10: spacemesh.v1.Event.proposal:type_name -> spacemesh.v1.EventProposal + 17, // 11: spacemesh.v1.EventPoetWaitRound.wait:type_name -> google.protobuf.Duration + 17, // 12: spacemesh.v1.EventPoetWaitProof.wait:type_name -> google.protobuf.Duration + 17, // 13: spacemesh.v1.EventAtxPubished.wait:type_name -> google.protobuf.Duration + 13, // 14: spacemesh.v1.EventEligibilities.eligibilities:type_name -> spacemesh.v1.ProposalEligibility + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_spacemesh_v1_admin_types_proto_init() } @@ -271,6 +1306,174 @@ func file_spacemesh_v1_admin_types_proto_init() { return nil } } + file_spacemesh_v1_admin_types_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventBeacon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventInitStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventInitComplete); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventPostStart); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventPostComplete); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventPoetWaitRound); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventPoetWaitProof); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventAtxPubished); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventEligibilities); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProposalEligibility); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventProposal); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventStreamRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_spacemesh_v1_admin_types_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*Event_Beacon)(nil), + (*Event_InitStart)(nil), + (*Event_InitComplete)(nil), + (*Event_PostStart)(nil), + (*Event_PostComplete)(nil), + (*Event_PoetWaitRound)(nil), + (*Event_PoetWaitProof)(nil), + (*Event_AtxPublished)(nil), + (*Event_Eligibilities)(nil), + (*Event_Proposal)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -278,7 +1481,7 @@ func file_spacemesh_v1_admin_types_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_spacemesh_v1_admin_types_proto_rawDesc, NumEnums: 0, - NumMessages: 3, + NumMessages: 16, NumExtensions: 0, NumServices: 0, }, diff --git a/release/go/spacemesh/v1/admin_types_helper.go b/release/go/spacemesh/v1/admin_types_helper.go new file mode 100644 index 00000000..fb2eec79 --- /dev/null +++ b/release/go/spacemesh/v1/admin_types_helper.go @@ -0,0 +1,4 @@ +package v1 + +// without this export oneof is extremely ugly to use +type IsEventDetails = isEvent_Details diff --git a/spacemesh/v1/admin.proto b/spacemesh/v1/admin.proto index 78281bb4..8963b789 100644 --- a/spacemesh/v1/admin.proto +++ b/spacemesh/v1/admin.proto @@ -12,4 +12,7 @@ service AdminService { // Recovers from the provided checkpoint data. rpc Recover(RecoverRequest) returns (google.protobuf.Empty); + + // Events that are relevant for node operator + rpc EventsStream(EventStreamRequest) returns (stream Event); } diff --git a/spacemesh/v1/admin_types.proto b/spacemesh/v1/admin_types.proto index da9d976a..95b88c2c 100644 --- a/spacemesh/v1/admin_types.proto +++ b/spacemesh/v1/admin_types.proto @@ -1,6 +1,8 @@ syntax = "proto3"; package spacemesh.v1; option go_package = "github.com/spacemeshos/api/release/go/spacemesh/v1"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; message CheckpointStreamRequest { uint32 snapshot_layer = 1; @@ -15,3 +17,84 @@ message RecoverRequest { string uri = 1; uint32 restore_layer = 2; } + +message Event { + // time when event occured. + google.protobuf.Timestamp timestamp = 1; + // the reason of the failure may be complex to pinpoint. + // for the first version we want to highlight that failure occured and defer user to logs. + bool failure = 2; + string help = 3; + oneof details { + EventBeacon beacon = 4; + EventInitStart init_start = 5; + EventInitComplete init_complete = 6; + EventPostStart post_start = 7; + EventPostComplete post_complete = 8; + EventPoetWaitRound poet_wait_round = 9; + EventPoetWaitProof poet_wait_proof = 10; + EventAtxPubished atx_published = 11; + EventEligibilities eligibilities = 12; + EventProposal proposal = 13; + } +} + +message EventBeacon { + uint32 epoch = 1; + bytes beacon = 2; +} + +message EventInitStart { + bytes smesher = 1; + bytes commitment = 2; +} + +message EventInitComplete {} + +message EventPostStart { + bytes challenge = 1; +} + +message EventPostComplete { + bytes challenge = 1; +} + +message EventPoetWaitRound { + uint32 current = 1; + uint32 publish = 2; + google.protobuf.Duration wait = 3; +} + +message EventPoetWaitProof { + uint32 publish = 1; + uint32 target = 2; + google.protobuf.Duration wait = 3; +} + +message EventAtxPubished { + uint32 current = 1; + uint32 target = 2; + bytes id = 3; + google.protobuf.Duration wait = 4; +} + +message EventEligibilities { + uint32 epoch = 1; + bytes beacon = 2; + bytes atx = 3; + uint32 active_set_size = 4; + repeated ProposalEligibility eligibilities = 5; +} + +message ProposalEligibility { + uint32 layer = 1; + uint32 count = 2; +} + +// Published proposal. Rewards will be received, once proposal is included into the block. +message EventProposal { + uint32 layer = 1; + bytes proposal = 2; +} + +message EventStreamRequest {} \ No newline at end of file