diff --git a/api/grpc/common/v2/common.pb.go b/api/grpc/common/v2/common.pb.go index f6a35c66e3..12de2a6fb8 100644 --- a/api/grpc/common/v2/common.pb.go +++ b/api/grpc/common/v2/common.pb.go @@ -166,6 +166,122 @@ func (x *BlobCertificate) GetRelays() []uint32 { return nil } +// BatchHeader is the header of a batch of blobs +type BatchHeader struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // batch_root is the root of the merkle tree of the hashes of blob certificates in the batch + BatchRoot []byte `protobuf:"bytes,1,opt,name=batch_root,json=batchRoot,proto3" json:"batch_root,omitempty"` + // reference_block_number is the block number that the state of the batch is based on for attestation + ReferenceBlockNumber uint32 `protobuf:"varint,2,opt,name=reference_block_number,json=referenceBlockNumber,proto3" json:"reference_block_number,omitempty"` +} + +func (x *BatchHeader) Reset() { + *x = BatchHeader{} + if protoimpl.UnsafeEnabled { + mi := &file_common_v2_common_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchHeader) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchHeader) ProtoMessage() {} + +func (x *BatchHeader) ProtoReflect() protoreflect.Message { + mi := &file_common_v2_common_proto_msgTypes[2] + 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 BatchHeader.ProtoReflect.Descriptor instead. +func (*BatchHeader) Descriptor() ([]byte, []int) { + return file_common_v2_common_proto_rawDescGZIP(), []int{2} +} + +func (x *BatchHeader) GetBatchRoot() []byte { + if x != nil { + return x.BatchRoot + } + return nil +} + +func (x *BatchHeader) GetReferenceBlockNumber() uint32 { + if x != nil { + return x.ReferenceBlockNumber + } + return 0 +} + +// Batch is a batch of blob certificates +type Batch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // header contains metadata about the batch + Header *BatchHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + // blob_certificates is the list of blob certificates in the batch + BlobCertificates []*BlobCertificate `protobuf:"bytes,2,rep,name=blob_certificates,json=blobCertificates,proto3" json:"blob_certificates,omitempty"` +} + +func (x *Batch) Reset() { + *x = Batch{} + if protoimpl.UnsafeEnabled { + mi := &file_common_v2_common_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Batch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Batch) ProtoMessage() {} + +func (x *Batch) ProtoReflect() protoreflect.Message { + mi := &file_common_v2_common_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 Batch.ProtoReflect.Descriptor instead. +func (*Batch) Descriptor() ([]byte, []int) { + return file_common_v2_common_proto_rawDescGZIP(), []int{3} +} + +func (x *Batch) GetHeader() *BatchHeader { + if x != nil { + return x.Header + } + return nil +} + +func (x *Batch) GetBlobCertificates() []*BlobCertificate { + if x != nil { + return x.BlobCertificates + } + return nil +} + var File_common_v2_common_proto protoreflect.FileDescriptor var file_common_v2_common_proto_rawDesc = []byte{ @@ -196,11 +312,25 @@ var file_common_v2_common_proto_rawDesc = []byte{ 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, - 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x72, 0x65, 0x6c, 0x61, 0x79, 0x73, 0x22, 0x62, 0x0a, 0x0b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x72, + 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x14, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x80, 0x01, 0x0a, 0x05, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x10, 0x62, 0x6c, 0x6f, + 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x42, 0x31, 0x5a, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, + 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -215,22 +345,26 @@ func file_common_v2_common_proto_rawDescGZIP() []byte { return file_common_v2_common_proto_rawDescData } -var file_common_v2_common_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_common_v2_common_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_common_v2_common_proto_goTypes = []interface{}{ (*BlobHeader)(nil), // 0: common.v2.BlobHeader (*BlobCertificate)(nil), // 1: common.v2.BlobCertificate - (*common.BlobCommitment)(nil), // 2: common.BlobCommitment - (*common.PaymentHeader)(nil), // 3: common.PaymentHeader + (*BatchHeader)(nil), // 2: common.v2.BatchHeader + (*Batch)(nil), // 3: common.v2.Batch + (*common.BlobCommitment)(nil), // 4: common.BlobCommitment + (*common.PaymentHeader)(nil), // 5: common.PaymentHeader } var file_common_v2_common_proto_depIdxs = []int32{ - 2, // 0: common.v2.BlobHeader.commitment:type_name -> common.BlobCommitment - 3, // 1: common.v2.BlobHeader.payment_header:type_name -> common.PaymentHeader + 4, // 0: common.v2.BlobHeader.commitment:type_name -> common.BlobCommitment + 5, // 1: common.v2.BlobHeader.payment_header:type_name -> common.PaymentHeader 0, // 2: common.v2.BlobCertificate.blob_header:type_name -> common.v2.BlobHeader - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 2, // 3: common.v2.Batch.header:type_name -> common.v2.BatchHeader + 1, // 4: common.v2.Batch.blob_certificates:type_name -> common.v2.BlobCertificate + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] 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 } func init() { file_common_v2_common_proto_init() } @@ -263,6 +397,30 @@ func file_common_v2_common_proto_init() { return nil } } + file_common_v2_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchHeader); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_v2_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Batch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -270,7 +428,7 @@ func file_common_v2_common_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_v2_common_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 4, NumExtensions: 0, NumServices: 0, }, diff --git a/api/grpc/disperser/v2/disperser_v2.pb.go b/api/grpc/disperser/v2/disperser_v2.pb.go index 7efc06dcc4..1ddcf05c56 100644 --- a/api/grpc/disperser/v2/disperser_v2.pb.go +++ b/api/grpc/disperser/v2/disperser_v2.pb.go @@ -269,8 +269,9 @@ type BlobStatusReply struct { // The status of the blob. Status BlobStatus `protobuf:"varint,1,opt,name=status,proto3,enum=disperser.v2.BlobStatus" json:"status,omitempty"` - // The signed blob certificate - SignedCertificate *SignedCertificate `protobuf:"bytes,2,opt,name=signed_certificate,json=signedCertificate,proto3" json:"signed_certificate,omitempty"` + // The signed batch + SignedBatch *SignedBatch `protobuf:"bytes,2,opt,name=signed_batch,json=signedBatch,proto3" json:"signed_batch,omitempty"` + BlobVerificationInfo *BlobVerificationInfo `protobuf:"bytes,3,opt,name=blob_verification_info,json=blobVerificationInfo,proto3" json:"blob_verification_info,omitempty"` } func (x *BlobStatusReply) Reset() { @@ -312,9 +313,16 @@ func (x *BlobStatusReply) GetStatus() BlobStatus { return BlobStatus_UNKNOWN } -func (x *BlobStatusReply) GetSignedCertificate() *SignedCertificate { +func (x *BlobStatusReply) GetSignedBatch() *SignedBatch { if x != nil { - return x.SignedCertificate + return x.SignedBatch + } + return nil +} + +func (x *BlobStatusReply) GetBlobVerificationInfo() *BlobVerificationInfo { + if x != nil { + return x.BlobVerificationInfo } return nil } @@ -415,17 +423,20 @@ func (x *BlobCommitmentReply) GetBlobCommitment() *common.BlobCommitment { return nil } -type SignedCertificate struct { +// SignedBatch is a batch of blobs with a signature. +type SignedBatch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BlobCertificate *v2.BlobCertificate `protobuf:"bytes,1,opt,name=blob_certificate,json=blobCertificate,proto3" json:"blob_certificate,omitempty"` - NonSignerStakesAndSignature *Attestation `protobuf:"bytes,2,opt,name=non_signer_stakes_and_signature,json=nonSignerStakesAndSignature,proto3" json:"non_signer_stakes_and_signature,omitempty"` + // header contains metadata about the batch + Header *v2.BatchHeader `protobuf:"bytes,1,opt,name=header,proto3" json:"header,omitempty"` + // attestation on the batch + NonSignerStakesAndSignature *Attestation `protobuf:"bytes,2,opt,name=non_signer_stakes_and_signature,json=nonSignerStakesAndSignature,proto3" json:"non_signer_stakes_and_signature,omitempty"` } -func (x *SignedCertificate) Reset() { - *x = SignedCertificate{} +func (x *SignedBatch) Reset() { + *x = SignedBatch{} if protoimpl.UnsafeEnabled { mi := &file_disperser_v2_disperser_v2_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -433,13 +444,13 @@ func (x *SignedCertificate) Reset() { } } -func (x *SignedCertificate) String() string { +func (x *SignedBatch) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SignedCertificate) ProtoMessage() {} +func (*SignedBatch) ProtoMessage() {} -func (x *SignedCertificate) ProtoReflect() protoreflect.Message { +func (x *SignedBatch) ProtoReflect() protoreflect.Message { mi := &file_disperser_v2_disperser_v2_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -451,25 +462,91 @@ func (x *SignedCertificate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SignedCertificate.ProtoReflect.Descriptor instead. -func (*SignedCertificate) Descriptor() ([]byte, []int) { +// Deprecated: Use SignedBatch.ProtoReflect.Descriptor instead. +func (*SignedBatch) Descriptor() ([]byte, []int) { return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{6} } -func (x *SignedCertificate) GetBlobCertificate() *v2.BlobCertificate { +func (x *SignedBatch) GetHeader() *v2.BatchHeader { if x != nil { - return x.BlobCertificate + return x.Header } return nil } -func (x *SignedCertificate) GetNonSignerStakesAndSignature() *Attestation { +func (x *SignedBatch) GetNonSignerStakesAndSignature() *Attestation { if x != nil { return x.NonSignerStakesAndSignature } return nil } +// BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. +type BlobVerificationInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BlobCertificate *v2.BlobCertificate `protobuf:"bytes,1,opt,name=blob_certificate,json=blobCertificate,proto3" json:"blob_certificate,omitempty"` + // blob_index is the index of the blob in the batch + BlobIndex uint32 `protobuf:"varint,2,opt,name=blob_index,json=blobIndex,proto3" json:"blob_index,omitempty"` + // inclusion_proof is the inclusion proof of the blob in the batch + InclusionProof []byte `protobuf:"bytes,3,opt,name=inclusion_proof,json=inclusionProof,proto3" json:"inclusion_proof,omitempty"` +} + +func (x *BlobVerificationInfo) Reset() { + *x = BlobVerificationInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_disperser_v2_disperser_v2_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlobVerificationInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlobVerificationInfo) ProtoMessage() {} + +func (x *BlobVerificationInfo) ProtoReflect() protoreflect.Message { + mi := &file_disperser_v2_disperser_v2_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 BlobVerificationInfo.ProtoReflect.Descriptor instead. +func (*BlobVerificationInfo) Descriptor() ([]byte, []int) { + return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{7} +} + +func (x *BlobVerificationInfo) GetBlobCertificate() *v2.BlobCertificate { + if x != nil { + return x.BlobCertificate + } + return nil +} + +func (x *BlobVerificationInfo) GetBlobIndex() uint32 { + if x != nil { + return x.BlobIndex + } + return 0 +} + +func (x *BlobVerificationInfo) GetInclusionProof() []byte { + if x != nil { + return x.InclusionProof + } + return nil +} + type Attestation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -488,7 +565,7 @@ type Attestation struct { func (x *Attestation) Reset() { *x = Attestation{} if protoimpl.UnsafeEnabled { - mi := &file_disperser_v2_disperser_v2_proto_msgTypes[7] + mi := &file_disperser_v2_disperser_v2_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -501,7 +578,7 @@ func (x *Attestation) String() string { func (*Attestation) ProtoMessage() {} func (x *Attestation) ProtoReflect() protoreflect.Message { - mi := &file_disperser_v2_disperser_v2_proto_msgTypes[7] + mi := &file_disperser_v2_disperser_v2_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -514,7 +591,7 @@ func (x *Attestation) ProtoReflect() protoreflect.Message { // Deprecated: Use Attestation.ProtoReflect.Descriptor instead. func (*Attestation) Descriptor() ([]byte, []int) { - return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{7} + return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{8} } func (x *Attestation) GetNonSignerQuorumBitmapIndices() []uint32 { @@ -584,7 +661,7 @@ type NonSignerStakeIndicesForQuorum struct { func (x *NonSignerStakeIndicesForQuorum) Reset() { *x = NonSignerStakeIndicesForQuorum{} if protoimpl.UnsafeEnabled { - mi := &file_disperser_v2_disperser_v2_proto_msgTypes[8] + mi := &file_disperser_v2_disperser_v2_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -597,7 +674,7 @@ func (x *NonSignerStakeIndicesForQuorum) String() string { func (*NonSignerStakeIndicesForQuorum) ProtoMessage() {} func (x *NonSignerStakeIndicesForQuorum) ProtoReflect() protoreflect.Message { - mi := &file_disperser_v2_disperser_v2_proto_msgTypes[8] + mi := &file_disperser_v2_disperser_v2_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -610,7 +687,7 @@ func (x *NonSignerStakeIndicesForQuorum) ProtoReflect() protoreflect.Message { // Deprecated: Use NonSignerStakeIndicesForQuorum.ProtoReflect.Descriptor instead. func (*NonSignerStakeIndicesForQuorum) Descriptor() ([]byte, []int) { - return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{8} + return file_disperser_v2_disperser_v2_proto_rawDescGZIP(), []int{9} } func (x *NonSignerStakeIndicesForQuorum) GetIndices() []uint32 { @@ -644,92 +721,106 @@ var file_disperser_v2_disperser_v2_proto_rawDesc = []byte{ 0x79, 0x22, 0x2e, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x4b, 0x65, - 0x79, 0x22, 0x93, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x79, 0x22, 0xdb, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x64, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x11, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x2b, 0x0a, 0x15, 0x42, 0x6c, 0x6f, 0x62, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x56, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3f, 0x0a, 0x0f, 0x62, - 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, - 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x62, 0x6c, - 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xbb, 0x01, 0x0a, - 0x11, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x1f, 0x6e, 0x6f, 0x6e, - 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x5f, 0x61, - 0x6e, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x6e, - 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x41, 0x6e, - 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x87, 0x03, 0x0a, 0x0b, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x1c, 0x6e, 0x6f, - 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x42, 0x69, 0x74, - 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x1c, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x72, 0x75, - 0x6d, 0x42, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x2a, - 0x0a, 0x10, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, - 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, - 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0a, - 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, - 0x6b, 0x47, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x61, 0x70, 0x6b, 0x47, 0x32, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, - 0x41, 0x70, 0x6b, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x10, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x12, 0x62, 0x0a, 0x15, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x52, 0x15, 0x6e, - 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, - 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x1e, 0x4e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, - 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, - 0x2a, 0x6a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x51, - 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x43, 0x4f, 0x44, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, 0x4e, 0x54, 0x5f, - 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x10, 0x05, 0x32, 0x93, 0x02, 0x0a, - 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x0c, 0x44, 0x69, - 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x64, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, - 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x5f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x64, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x58, 0x0a, 0x16, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x14, 0x62, 0x6c, 0x6f, 0x62, 0x56, + 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, + 0x2b, 0x0a, 0x15, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x56, 0x0a, 0x13, + 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x12, 0x3f, 0x0a, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x0b, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x2e, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x5f, 0x0a, 0x1f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1b, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x42, 0x6c, 0x6f, 0x62, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x45, + 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x62, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x87, 0x03, + 0x0a, 0x0b, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, + 0x1c, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x42, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x1c, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x51, 0x75, + 0x6f, 0x72, 0x75, 0x6d, 0x42, 0x69, 0x74, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x10, 0x6e, 0x6f, 0x6e, + 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x0a, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x70, 0x6b, 0x47, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x61, 0x70, + 0x6b, 0x47, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x71, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x10, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x41, 0x70, 0x6b, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, + 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x12, 0x62, 0x0a, 0x15, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, + 0x32, 0x2e, 0x4e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, + 0x52, 0x15, 0x6e, 0x6f, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x1e, 0x4e, 0x6f, 0x6e, 0x53, 0x69, + 0x67, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0x46, 0x6f, 0x72, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x2a, 0x6a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, + 0x43, 0x4f, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x45, 0x52, 0x54, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x4e, 0x53, 0x55, 0x46, 0x46, 0x49, 0x43, 0x49, 0x45, + 0x4e, 0x54, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x10, 0x05, 0x32, + 0x93, 0x02, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x12, 0x54, 0x0a, + 0x0c, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x21, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x73, - 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, - 0x12, 0x51, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, - 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, - 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, - 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, 0x69, 0x73, 0x70, - 0x65, 0x72, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x51, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, + 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x2e, 0x64, 0x69, + 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x64, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x2e, + 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, + 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x64, + 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -745,7 +836,7 @@ func file_disperser_v2_disperser_v2_proto_rawDescGZIP() []byte { } var file_disperser_v2_disperser_v2_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_disperser_v2_disperser_v2_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_disperser_v2_disperser_v2_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_disperser_v2_disperser_v2_proto_goTypes = []interface{}{ (BlobStatus)(0), // 0: disperser.v2.BlobStatus (*DisperseBlobRequest)(nil), // 1: disperser.v2.DisperseBlobRequest @@ -754,33 +845,37 @@ var file_disperser_v2_disperser_v2_proto_goTypes = []interface{}{ (*BlobStatusReply)(nil), // 4: disperser.v2.BlobStatusReply (*BlobCommitmentRequest)(nil), // 5: disperser.v2.BlobCommitmentRequest (*BlobCommitmentReply)(nil), // 6: disperser.v2.BlobCommitmentReply - (*SignedCertificate)(nil), // 7: disperser.v2.SignedCertificate - (*Attestation)(nil), // 8: disperser.v2.Attestation - (*NonSignerStakeIndicesForQuorum)(nil), // 9: disperser.v2.NonSignerStakeIndicesForQuorum - (*v2.BlobHeader)(nil), // 10: common.v2.BlobHeader - (*common.BlobCommitment)(nil), // 11: common.BlobCommitment - (*v2.BlobCertificate)(nil), // 12: common.v2.BlobCertificate + (*SignedBatch)(nil), // 7: disperser.v2.SignedBatch + (*BlobVerificationInfo)(nil), // 8: disperser.v2.BlobVerificationInfo + (*Attestation)(nil), // 9: disperser.v2.Attestation + (*NonSignerStakeIndicesForQuorum)(nil), // 10: disperser.v2.NonSignerStakeIndicesForQuorum + (*v2.BlobHeader)(nil), // 11: common.v2.BlobHeader + (*common.BlobCommitment)(nil), // 12: common.BlobCommitment + (*v2.BatchHeader)(nil), // 13: common.v2.BatchHeader + (*v2.BlobCertificate)(nil), // 14: common.v2.BlobCertificate } var file_disperser_v2_disperser_v2_proto_depIdxs = []int32{ - 10, // 0: disperser.v2.DisperseBlobRequest.blob_header:type_name -> common.v2.BlobHeader + 11, // 0: disperser.v2.DisperseBlobRequest.blob_header:type_name -> common.v2.BlobHeader 0, // 1: disperser.v2.DisperseBlobReply.result:type_name -> disperser.v2.BlobStatus 0, // 2: disperser.v2.BlobStatusReply.status:type_name -> disperser.v2.BlobStatus - 7, // 3: disperser.v2.BlobStatusReply.signed_certificate:type_name -> disperser.v2.SignedCertificate - 11, // 4: disperser.v2.BlobCommitmentReply.blob_commitment:type_name -> common.BlobCommitment - 12, // 5: disperser.v2.SignedCertificate.blob_certificate:type_name -> common.v2.BlobCertificate - 8, // 6: disperser.v2.SignedCertificate.non_signer_stakes_and_signature:type_name -> disperser.v2.Attestation - 9, // 7: disperser.v2.Attestation.nonSignerStakeIndices:type_name -> disperser.v2.NonSignerStakeIndicesForQuorum - 1, // 8: disperser.v2.Disperser.DisperseBlob:input_type -> disperser.v2.DisperseBlobRequest - 3, // 9: disperser.v2.Disperser.GetBlobStatus:input_type -> disperser.v2.BlobStatusRequest - 5, // 10: disperser.v2.Disperser.GetBlobCommitment:input_type -> disperser.v2.BlobCommitmentRequest - 2, // 11: disperser.v2.Disperser.DisperseBlob:output_type -> disperser.v2.DisperseBlobReply - 4, // 12: disperser.v2.Disperser.GetBlobStatus:output_type -> disperser.v2.BlobStatusReply - 6, // 13: disperser.v2.Disperser.GetBlobCommitment:output_type -> disperser.v2.BlobCommitmentReply - 11, // [11:14] is the sub-list for method output_type - 8, // [8:11] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 7, // 3: disperser.v2.BlobStatusReply.signed_batch:type_name -> disperser.v2.SignedBatch + 8, // 4: disperser.v2.BlobStatusReply.blob_verification_info:type_name -> disperser.v2.BlobVerificationInfo + 12, // 5: disperser.v2.BlobCommitmentReply.blob_commitment:type_name -> common.BlobCommitment + 13, // 6: disperser.v2.SignedBatch.header:type_name -> common.v2.BatchHeader + 9, // 7: disperser.v2.SignedBatch.non_signer_stakes_and_signature:type_name -> disperser.v2.Attestation + 14, // 8: disperser.v2.BlobVerificationInfo.blob_certificate:type_name -> common.v2.BlobCertificate + 10, // 9: disperser.v2.Attestation.nonSignerStakeIndices:type_name -> disperser.v2.NonSignerStakeIndicesForQuorum + 1, // 10: disperser.v2.Disperser.DisperseBlob:input_type -> disperser.v2.DisperseBlobRequest + 3, // 11: disperser.v2.Disperser.GetBlobStatus:input_type -> disperser.v2.BlobStatusRequest + 5, // 12: disperser.v2.Disperser.GetBlobCommitment:input_type -> disperser.v2.BlobCommitmentRequest + 2, // 13: disperser.v2.Disperser.DisperseBlob:output_type -> disperser.v2.DisperseBlobReply + 4, // 14: disperser.v2.Disperser.GetBlobStatus:output_type -> disperser.v2.BlobStatusReply + 6, // 15: disperser.v2.Disperser.GetBlobCommitment:output_type -> disperser.v2.BlobCommitmentReply + 13, // [13:16] is the sub-list for method output_type + 10, // [10:13] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_disperser_v2_disperser_v2_proto_init() } @@ -862,7 +957,7 @@ func file_disperser_v2_disperser_v2_proto_init() { } } file_disperser_v2_disperser_v2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignedCertificate); i { + switch v := v.(*SignedBatch); i { case 0: return &v.state case 1: @@ -874,7 +969,7 @@ func file_disperser_v2_disperser_v2_proto_init() { } } file_disperser_v2_disperser_v2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Attestation); i { + switch v := v.(*BlobVerificationInfo); i { case 0: return &v.state case 1: @@ -886,6 +981,18 @@ func file_disperser_v2_disperser_v2_proto_init() { } } file_disperser_v2_disperser_v2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Attestation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_disperser_v2_disperser_v2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NonSignerStakeIndicesForQuorum); i { case 0: return &v.state @@ -904,7 +1011,7 @@ func file_disperser_v2_disperser_v2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_disperser_v2_disperser_v2_proto_rawDesc, NumEnums: 1, - NumMessages: 9, + NumMessages: 10, NumExtensions: 0, NumServices: 1, }, diff --git a/api/grpc/node/v2/node_v2.pb.go b/api/grpc/node/v2/node_v2.pb.go index 7dcd5ad931..52fcde0144 100644 --- a/api/grpc/node/v2/node_v2.pb.go +++ b/api/grpc/node/v2/node_v2.pb.go @@ -10,7 +10,6 @@ import ( v2 "github.com/Layr-Labs/eigenda/api/grpc/common/v2" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -27,8 +26,8 @@ type StoreChunksRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // list of blob certificates to process - BlobCertificates []*v2.BlobCertificate `protobuf:"bytes,1,rep,name=blob_certificates,json=blobCertificates,proto3" json:"blob_certificates,omitempty"` + // batch of blobs to store + Batch []*v2.Batch `protobuf:"bytes,1,rep,name=batch,proto3" json:"batch,omitempty"` } func (x *StoreChunksRequest) Reset() { @@ -63,9 +62,9 @@ func (*StoreChunksRequest) Descriptor() ([]byte, []int) { return file_node_v2_node_v2_proto_rawDescGZIP(), []int{0} } -func (x *StoreChunksRequest) GetBlobCertificates() []*v2.BlobCertificate { +func (x *StoreChunksRequest) GetBatch() []*v2.Batch { if x != nil { - return x.BlobCertificates + return x.Batch } return nil } @@ -75,7 +74,7 @@ type StoreChunksReply struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Signatures []*wrapperspb.BytesValue `protobuf:"bytes,1,rep,name=signatures,proto3" json:"signatures,omitempty"` + Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` } func (x *StoreChunksReply) Reset() { @@ -110,9 +109,9 @@ func (*StoreChunksReply) Descriptor() ([]byte, []int) { return file_node_v2_node_v2_proto_rawDescGZIP(), []int{1} } -func (x *StoreChunksReply) GetSignatures() []*wrapperspb.BytesValue { +func (x *StoreChunksReply) GetSignature() []byte { if x != nil { - return x.Signatures + return x.Signature } return nil } @@ -223,100 +222,6 @@ func (x *GetChunksReply) GetChunks() [][]byte { return nil } -type GetBlobCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BlobKey []byte `protobuf:"bytes,1,opt,name=blob_key,json=blobKey,proto3" json:"blob_key,omitempty"` -} - -func (x *GetBlobCertificateRequest) Reset() { - *x = GetBlobCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v2_node_v2_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetBlobCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetBlobCertificateRequest) ProtoMessage() {} - -func (x *GetBlobCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v2_node_v2_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 GetBlobCertificateRequest.ProtoReflect.Descriptor instead. -func (*GetBlobCertificateRequest) Descriptor() ([]byte, []int) { - return file_node_v2_node_v2_proto_rawDescGZIP(), []int{4} -} - -func (x *GetBlobCertificateRequest) GetBlobKey() []byte { - if x != nil { - return x.BlobKey - } - return nil -} - -type GetBlobCertificateReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BlobCertificate *v2.BlobCertificate `protobuf:"bytes,1,opt,name=blob_certificate,json=blobCertificate,proto3" json:"blob_certificate,omitempty"` -} - -func (x *GetBlobCertificateReply) Reset() { - *x = GetBlobCertificateReply{} - if protoimpl.UnsafeEnabled { - mi := &file_node_v2_node_v2_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetBlobCertificateReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetBlobCertificateReply) ProtoMessage() {} - -func (x *GetBlobCertificateReply) ProtoReflect() protoreflect.Message { - mi := &file_node_v2_node_v2_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 GetBlobCertificateReply.ProtoReflect.Descriptor instead. -func (*GetBlobCertificateReply) Descriptor() ([]byte, []int) { - return file_node_v2_node_v2_proto_rawDescGZIP(), []int{5} -} - -func (x *GetBlobCertificateReply) GetBlobCertificate() *v2.BlobCertificate { - if x != nil { - return x.BlobCertificate - } - return nil -} - // Node info request type NodeInfoRequest struct { state protoimpl.MessageState @@ -327,7 +232,7 @@ type NodeInfoRequest struct { func (x *NodeInfoRequest) Reset() { *x = NodeInfoRequest{} if protoimpl.UnsafeEnabled { - mi := &file_node_v2_node_v2_proto_msgTypes[6] + mi := &file_node_v2_node_v2_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -340,7 +245,7 @@ func (x *NodeInfoRequest) String() string { func (*NodeInfoRequest) ProtoMessage() {} func (x *NodeInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_node_v2_node_v2_proto_msgTypes[6] + mi := &file_node_v2_node_v2_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -353,7 +258,7 @@ func (x *NodeInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeInfoRequest.ProtoReflect.Descriptor instead. func (*NodeInfoRequest) Descriptor() ([]byte, []int) { - return file_node_v2_node_v2_proto_rawDescGZIP(), []int{6} + return file_node_v2_node_v2_proto_rawDescGZIP(), []int{4} } // Node info reply @@ -372,7 +277,7 @@ type NodeInfoReply struct { func (x *NodeInfoReply) Reset() { *x = NodeInfoReply{} if protoimpl.UnsafeEnabled { - mi := &file_node_v2_node_v2_proto_msgTypes[7] + mi := &file_node_v2_node_v2_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -385,7 +290,7 @@ func (x *NodeInfoReply) String() string { func (*NodeInfoReply) ProtoMessage() {} func (x *NodeInfoReply) ProtoReflect() protoreflect.Message { - mi := &file_node_v2_node_v2_proto_msgTypes[7] + mi := &file_node_v2_node_v2_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -398,7 +303,7 @@ func (x *NodeInfoReply) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeInfoReply.ProtoReflect.Descriptor instead. func (*NodeInfoReply) Descriptor() ([]byte, []int) { - return file_node_v2_node_v2_proto_rawDescGZIP(), []int{7} + return file_node_v2_node_v2_proto_rawDescGZIP(), []int{5} } func (x *NodeInfoReply) GetSemver() string { @@ -441,75 +346,54 @@ var File_node_v2_node_v2_proto protoreflect.FileDescriptor var file_node_v2_node_v2_proto_rawDesc = []byte{ 0x0a, 0x15, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, - 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5d, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, - 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x22, 0x4f, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3b, 0x0a, 0x0a, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, + 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x22, 0x30, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x4a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, 0x6c, 0x6f, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x49, 0x64, 0x22, 0x28, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x36, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, - 0x6c, 0x6f, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x62, - 0x6c, 0x6f, 0x62, 0x4b, 0x65, 0x79, 0x22, 0x60, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, - 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x12, 0x45, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x11, 0x0a, 0x0f, 0x4e, 0x6f, 0x64, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x0d, - 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x65, 0x6d, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x75, 0x6d, - 0x5f, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x43, - 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x42, 0x79, 0x74, 0x65, 0x73, 0x32, - 0x94, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x12, 0x47, 0x0a, - 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x1b, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6e, 0x6f, 0x64, 0x65, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xec, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x74, 0x72, 0x69, - 0x65, 0x76, 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x73, 0x12, 0x19, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, - 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x6c, - 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, - 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6c, 0x6f, 0x62, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x42, - 0x6c, 0x6f, 0x62, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, - 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6e, - 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x06, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x11, + 0x0a, 0x0f, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x81, 0x01, 0x0a, 0x0d, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x12, + 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, + 0x17, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x43, 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x32, 0x94, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x70, 0x65, 0x72, + 0x73, 0x61, 0x6c, 0x12, 0x47, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, + 0x6b, 0x73, 0x12, 0x1b, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x08, + 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, + 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0x8e, 0x01, 0x0a, + 0x09, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x19, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, + 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x2e, 0x6e, 0x6f, 0x64, 0x65, + 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x2f, 0x5a, + 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x61, 0x79, 0x72, + 0x2d, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x65, 0x69, 0x67, 0x65, 0x6e, 0x64, 0x61, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x76, 0x32, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -524,38 +408,31 @@ func file_node_v2_node_v2_proto_rawDescGZIP() []byte { return file_node_v2_node_v2_proto_rawDescData } -var file_node_v2_node_v2_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_node_v2_node_v2_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_node_v2_node_v2_proto_goTypes = []interface{}{ - (*StoreChunksRequest)(nil), // 0: node.v2.StoreChunksRequest - (*StoreChunksReply)(nil), // 1: node.v2.StoreChunksReply - (*GetChunksRequest)(nil), // 2: node.v2.GetChunksRequest - (*GetChunksReply)(nil), // 3: node.v2.GetChunksReply - (*GetBlobCertificateRequest)(nil), // 4: node.v2.GetBlobCertificateRequest - (*GetBlobCertificateReply)(nil), // 5: node.v2.GetBlobCertificateReply - (*NodeInfoRequest)(nil), // 6: node.v2.NodeInfoRequest - (*NodeInfoReply)(nil), // 7: node.v2.NodeInfoReply - (*v2.BlobCertificate)(nil), // 8: common.v2.BlobCertificate - (*wrapperspb.BytesValue)(nil), // 9: google.protobuf.BytesValue + (*StoreChunksRequest)(nil), // 0: node.v2.StoreChunksRequest + (*StoreChunksReply)(nil), // 1: node.v2.StoreChunksReply + (*GetChunksRequest)(nil), // 2: node.v2.GetChunksRequest + (*GetChunksReply)(nil), // 3: node.v2.GetChunksReply + (*NodeInfoRequest)(nil), // 4: node.v2.NodeInfoRequest + (*NodeInfoReply)(nil), // 5: node.v2.NodeInfoReply + (*v2.Batch)(nil), // 6: common.v2.Batch } var file_node_v2_node_v2_proto_depIdxs = []int32{ - 8, // 0: node.v2.StoreChunksRequest.blob_certificates:type_name -> common.v2.BlobCertificate - 9, // 1: node.v2.StoreChunksReply.signatures:type_name -> google.protobuf.BytesValue - 8, // 2: node.v2.GetBlobCertificateReply.blob_certificate:type_name -> common.v2.BlobCertificate - 0, // 3: node.v2.Dispersal.StoreChunks:input_type -> node.v2.StoreChunksRequest - 6, // 4: node.v2.Dispersal.NodeInfo:input_type -> node.v2.NodeInfoRequest - 2, // 5: node.v2.Retrieval.GetChunks:input_type -> node.v2.GetChunksRequest - 4, // 6: node.v2.Retrieval.GetBlobCertificate:input_type -> node.v2.GetBlobCertificateRequest - 6, // 7: node.v2.Retrieval.NodeInfo:input_type -> node.v2.NodeInfoRequest - 1, // 8: node.v2.Dispersal.StoreChunks:output_type -> node.v2.StoreChunksReply - 7, // 9: node.v2.Dispersal.NodeInfo:output_type -> node.v2.NodeInfoReply - 3, // 10: node.v2.Retrieval.GetChunks:output_type -> node.v2.GetChunksReply - 5, // 11: node.v2.Retrieval.GetBlobCertificate:output_type -> node.v2.GetBlobCertificateReply - 7, // 12: node.v2.Retrieval.NodeInfo:output_type -> node.v2.NodeInfoReply - 8, // [8:13] is the sub-list for method output_type - 3, // [3:8] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 6, // 0: node.v2.StoreChunksRequest.batch:type_name -> common.v2.Batch + 0, // 1: node.v2.Dispersal.StoreChunks:input_type -> node.v2.StoreChunksRequest + 4, // 2: node.v2.Dispersal.NodeInfo:input_type -> node.v2.NodeInfoRequest + 2, // 3: node.v2.Retrieval.GetChunks:input_type -> node.v2.GetChunksRequest + 4, // 4: node.v2.Retrieval.NodeInfo:input_type -> node.v2.NodeInfoRequest + 1, // 5: node.v2.Dispersal.StoreChunks:output_type -> node.v2.StoreChunksReply + 5, // 6: node.v2.Dispersal.NodeInfo:output_type -> node.v2.NodeInfoReply + 3, // 7: node.v2.Retrieval.GetChunks:output_type -> node.v2.GetChunksReply + 5, // 8: node.v2.Retrieval.NodeInfo:output_type -> node.v2.NodeInfoReply + 5, // [5:9] is the sub-list for method output_type + 1, // [1:5] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_node_v2_node_v2_proto_init() } @@ -613,30 +490,6 @@ func file_node_v2_node_v2_proto_init() { } } file_node_v2_node_v2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlobCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v2_node_v2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBlobCertificateReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_v2_node_v2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NodeInfoRequest); i { case 0: return &v.state @@ -648,7 +501,7 @@ func file_node_v2_node_v2_proto_init() { return nil } } - file_node_v2_node_v2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_node_v2_node_v2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NodeInfoReply); i { case 0: return &v.state @@ -667,7 +520,7 @@ func file_node_v2_node_v2_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_node_v2_node_v2_proto_rawDesc, NumEnums: 0, - NumMessages: 8, + NumMessages: 6, NumExtensions: 0, NumServices: 2, }, diff --git a/api/grpc/node/v2/node_v2_grpc.pb.go b/api/grpc/node/v2/node_v2_grpc.pb.go index d356d3a0d8..3fbfba1869 100644 --- a/api/grpc/node/v2/node_v2_grpc.pb.go +++ b/api/grpc/node/v2/node_v2_grpc.pb.go @@ -146,9 +146,8 @@ var Dispersal_ServiceDesc = grpc.ServiceDesc{ } const ( - Retrieval_GetChunks_FullMethodName = "/node.v2.Retrieval/GetChunks" - Retrieval_GetBlobCertificate_FullMethodName = "/node.v2.Retrieval/GetBlobCertificate" - Retrieval_NodeInfo_FullMethodName = "/node.v2.Retrieval/NodeInfo" + Retrieval_GetChunks_FullMethodName = "/node.v2.Retrieval/GetChunks" + Retrieval_NodeInfo_FullMethodName = "/node.v2.Retrieval/NodeInfo" ) // RetrievalClient is the client API for Retrieval service. @@ -157,8 +156,6 @@ const ( type RetrievalClient interface { // GetChunks retrieves the chunks for a blob custodied at the Node. GetChunks(ctx context.Context, in *GetChunksRequest, opts ...grpc.CallOption) (*GetChunksReply, error) - // GetBlobHeader is similar to GetChunks, this just returns the header of the blob. - GetBlobCertificate(ctx context.Context, in *GetBlobCertificateRequest, opts ...grpc.CallOption) (*GetBlobCertificateReply, error) // Retrieve node info metadata NodeInfo(ctx context.Context, in *NodeInfoRequest, opts ...grpc.CallOption) (*NodeInfoReply, error) } @@ -180,15 +177,6 @@ func (c *retrievalClient) GetChunks(ctx context.Context, in *GetChunksRequest, o return out, nil } -func (c *retrievalClient) GetBlobCertificate(ctx context.Context, in *GetBlobCertificateRequest, opts ...grpc.CallOption) (*GetBlobCertificateReply, error) { - out := new(GetBlobCertificateReply) - err := c.cc.Invoke(ctx, Retrieval_GetBlobCertificate_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *retrievalClient) NodeInfo(ctx context.Context, in *NodeInfoRequest, opts ...grpc.CallOption) (*NodeInfoReply, error) { out := new(NodeInfoReply) err := c.cc.Invoke(ctx, Retrieval_NodeInfo_FullMethodName, in, out, opts...) @@ -204,8 +192,6 @@ func (c *retrievalClient) NodeInfo(ctx context.Context, in *NodeInfoRequest, opt type RetrievalServer interface { // GetChunks retrieves the chunks for a blob custodied at the Node. GetChunks(context.Context, *GetChunksRequest) (*GetChunksReply, error) - // GetBlobHeader is similar to GetChunks, this just returns the header of the blob. - GetBlobCertificate(context.Context, *GetBlobCertificateRequest) (*GetBlobCertificateReply, error) // Retrieve node info metadata NodeInfo(context.Context, *NodeInfoRequest) (*NodeInfoReply, error) mustEmbedUnimplementedRetrievalServer() @@ -218,9 +204,6 @@ type UnimplementedRetrievalServer struct { func (UnimplementedRetrievalServer) GetChunks(context.Context, *GetChunksRequest) (*GetChunksReply, error) { return nil, status.Errorf(codes.Unimplemented, "method GetChunks not implemented") } -func (UnimplementedRetrievalServer) GetBlobCertificate(context.Context, *GetBlobCertificateRequest) (*GetBlobCertificateReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetBlobCertificate not implemented") -} func (UnimplementedRetrievalServer) NodeInfo(context.Context, *NodeInfoRequest) (*NodeInfoReply, error) { return nil, status.Errorf(codes.Unimplemented, "method NodeInfo not implemented") } @@ -255,24 +238,6 @@ func _Retrieval_GetChunks_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } -func _Retrieval_GetBlobCertificate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetBlobCertificateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RetrievalServer).GetBlobCertificate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Retrieval_GetBlobCertificate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RetrievalServer).GetBlobCertificate(ctx, req.(*GetBlobCertificateRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Retrieval_NodeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(NodeInfoRequest) if err := dec(in); err != nil { @@ -302,10 +267,6 @@ var Retrieval_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetChunks", Handler: _Retrieval_GetChunks_Handler, }, - { - MethodName: "GetBlobCertificate", - Handler: _Retrieval_GetBlobCertificate_Handler, - }, { MethodName: "NodeInfo", Handler: _Retrieval_NodeInfo_Handler, diff --git a/api/proto/common/v2/common.proto b/api/proto/common/v2/common.proto index 42a7ed559b..0783a33317 100644 --- a/api/proto/common/v2/common.proto +++ b/api/proto/common/v2/common.proto @@ -5,19 +5,35 @@ option go_package = "github.com/Layr-Labs/eigenda/api/grpc/common/v2"; message BlobHeader { - // Blob version - uint32 version = 1; - repeated uint32 quorum_numbers = 2; - common.BlobCommitment commitment = 3; - common.PaymentHeader payment_header = 4; + // Blob version + uint32 version = 1; + repeated uint32 quorum_numbers = 2; + common.BlobCommitment commitment = 3; + common.PaymentHeader payment_header = 4; - // signature over keccak hash of the blob_header that can be verified by blob_header.account_id - bytes signature = 5; + // signature over keccak hash of the blob_header that can be verified by blob_header.account_id + bytes signature = 5; } // BlobCertificate is what gets attested by the network message BlobCertificate { - BlobHeader blob_header = 1; - uint32 reference_block_number = 2; - repeated uint32 relays = 3; + BlobHeader blob_header = 1; + uint32 reference_block_number = 2; + repeated uint32 relays = 3; +} + +// BatchHeader is the header of a batch of blobs +message BatchHeader { + // batch_root is the root of the merkle tree of the hashes of blob certificates in the batch + bytes batch_root = 1; + // reference_block_number is the block number that the state of the batch is based on for attestation + uint32 reference_block_number = 2; +} + +// Batch is a batch of blob certificates +message Batch { + // header contains metadata about the batch + BatchHeader header = 1; + // blob_certificates is the list of blob certificates in the batch + repeated BlobCertificate blob_certificates = 2; } diff --git a/api/proto/disperser/v2/disperser_v2.proto b/api/proto/disperser/v2/disperser_v2.proto index 6bf0cf9b0c..a835e7c1ab 100644 --- a/api/proto/disperser/v2/disperser_v2.proto +++ b/api/proto/disperser/v2/disperser_v2.proto @@ -8,58 +8,59 @@ option go_package = "github.com/Layr-Labs/eigenda/api/grpc/disperser/v2"; // Disperser defines the public APIs for dispersing blobs. service Disperser { - // DisperseBlob accepts blob to disperse from clients. - // This executes the dispersal asynchronously, i.e. it returns once the request - // is accepted. The client could use GetBlobStatus() API to poll the the - // processing status of the blob. - rpc DisperseBlob(DisperseBlobRequest) returns (DisperseBlobReply) {} - - // GetBlobStatus is meant to be polled for the blob status. - rpc GetBlobStatus(BlobStatusRequest) returns (BlobStatusReply) {} - - // GetBlobCommitment is a utility method that calculates commitment for a blob payload. - rpc GetBlobCommitment(BlobCommitmentRequest) returns (BlobCommitmentReply) {} + // DisperseBlob accepts blob to disperse from clients. + // This executes the dispersal asynchronously, i.e. it returns once the request + // is accepted. The client could use GetBlobStatus() API to poll the the + // processing status of the blob. + rpc DisperseBlob(DisperseBlobRequest) returns (DisperseBlobReply) {} + + // GetBlobStatus is meant to be polled for the blob status. + rpc GetBlobStatus(BlobStatusRequest) returns (BlobStatusReply) {} + + // GetBlobCommitment is a utility method that calculates commitment for a blob payload. + rpc GetBlobCommitment(BlobCommitmentRequest) returns (BlobCommitmentReply) {} } // Requests and Replys message DisperseBlobRequest { - // The data to be dispersed. - // The size of data must be <= 16MiB. Every 32 bytes of data is interpreted as an integer in big endian format - // where the lower address has more significant bits. The integer must stay in the valid range to be interpreted - // as a field element on the bn254 curve. The valid range is - // 0 <= x < 21888242871839275222246405745257275088548364400416034343698204186575808495617 - // If any one of the 32 bytes elements is outside the range, the whole request is deemed as invalid, and rejected. - bytes data = 1; - common.v2.BlobHeader blob_header = 2; + // The data to be dispersed. + // The size of data must be <= 16MiB. Every 32 bytes of data is interpreted as an integer in big endian format + // where the lower address has more significant bits. The integer must stay in the valid range to be interpreted + // as a field element on the bn254 curve. The valid range is + // 0 <= x < 21888242871839275222246405745257275088548364400416034343698204186575808495617 + // If any one of the 32 bytes elements is outside the range, the whole request is deemed as invalid, and rejected. + bytes data = 1; + common.v2.BlobHeader blob_header = 2; } message DisperseBlobReply { - // The status of the blob associated with the blob key. - BlobStatus result = 1; - bytes blob_key = 2; + // The status of the blob associated with the blob key. + BlobStatus result = 1; + bytes blob_key = 2; } // BlobStatusRequest is used to query the status of a blob. message BlobStatusRequest { - bytes blob_key = 1; + bytes blob_key = 1; } message BlobStatusReply { - // The status of the blob. - BlobStatus status = 1; - // The signed blob certificate - SignedCertificate signed_certificate = 2; + // The status of the blob. + BlobStatus status = 1; + // The signed batch + SignedBatch signed_batch = 2; + BlobVerificationInfo blob_verification_info = 3; } // Utility method used to generate the commitment of blob given its data. // This can be used to construct BlobHeader.commitment message BlobCommitmentRequest { - bytes data = 1; + bytes data = 1; } message BlobCommitmentReply { - common.BlobCommitment blob_commitment = 1; + common.BlobCommitment blob_commitment = 1; } // Data Types @@ -75,31 +76,43 @@ message BlobCommitmentReply { // - FAILED // - INSUFFICIENT_SIGNATURES enum BlobStatus { - UNKNOWN = 0; + UNKNOWN = 0; - // QUEUED means that the blob has been queued by the disperser for processing - QUEUED = 1; + // QUEUED means that the blob has been queued by the disperser for processing + QUEUED = 1; - // ENCODED means that the blob has been encoded and is ready to be dispersed to DA Nodes - ENCODED = 2; + // ENCODED means that the blob has been encoded and is ready to be dispersed to DA Nodes + ENCODED = 2; - // CERTIFIED means the blob has been dispersed and attested by the DA nodes - CERTIFIED = 3; + // CERTIFIED means the blob has been dispersed and attested by the DA nodes + CERTIFIED = 3; - // FAILED means that the blob has failed permanently (for reasons other than insufficient - // signatures, which is a separate state) - FAILED = 4; + // FAILED means that the blob has failed permanently (for reasons other than insufficient + // signatures, which is a separate state) + FAILED = 4; - // INSUFFICIENT_SIGNATURES means that the confirmation threshold for the blob was not met - // for at least one quorum. - INSUFFICIENT_SIGNATURES = 5; + // INSUFFICIENT_SIGNATURES means that the confirmation threshold for the blob was not met + // for at least one quorum. + INSUFFICIENT_SIGNATURES = 5; } -message SignedCertificate { - common.v2.BlobCertificate blob_certificate = 1; +// SignedBatch is a batch of blobs with a signature. +message SignedBatch { + // header contains metadata about the batch + common.v2.BatchHeader header = 1; + // attestation on the batch Attestation non_signer_stakes_and_signature = 2; } +// BlobVerificationInfo is the information needed to verify the inclusion of a blob in a batch. +message BlobVerificationInfo { + common.v2.BlobCertificate blob_certificate = 1; + // blob_index is the index of the blob in the batch + uint32 blob_index = 2; + // inclusion_proof is the inclusion proof of the blob in the batch + bytes inclusion_proof = 3; +} + message Attestation { repeated uint32 nonSignerQuorumBitmapIndices = 1; repeated bytes nonSignerPubkeys = 2; diff --git a/api/proto/node/v2/node_v2.proto b/api/proto/node/v2/node_v2.proto index 1e31acb9ee..ed6b9051c4 100644 --- a/api/proto/node/v2/node_v2.proto +++ b/api/proto/node/v2/node_v2.proto @@ -1,6 +1,5 @@ syntax = "proto3"; package node.v2; -import "google/protobuf/wrappers.proto"; import "common/v2/common.proto"; option go_package = "github.com/Layr-Labs/eigenda/api/grpc/node/v2"; @@ -9,49 +8,39 @@ option go_package = "github.com/Layr-Labs/eigenda/api/grpc/node/v2"; // WARNING: the following RPCs are experimental and subject to change. service Dispersal { - rpc StoreChunks(StoreChunksRequest) returns (StoreChunksReply) {} - rpc NodeInfo(NodeInfoRequest) returns (NodeInfoReply) {} + rpc StoreChunks(StoreChunksRequest) returns (StoreChunksReply) {} + rpc NodeInfo(NodeInfoRequest) returns (NodeInfoReply) {} } service Retrieval { - // GetChunks retrieves the chunks for a blob custodied at the Node. - rpc GetChunks(GetChunksRequest) returns (GetChunksReply) {} - // GetBlobHeader is similar to GetChunks, this just returns the header of the blob. - rpc GetBlobCertificate(GetBlobCertificateRequest) returns (GetBlobCertificateReply) {} - // Retrieve node info metadata - rpc NodeInfo(NodeInfoRequest) returns (NodeInfoReply) {} + // GetChunks retrieves the chunks for a blob custodied at the Node. + rpc GetChunks(GetChunksRequest) returns (GetChunksReply) {} + // Retrieve node info metadata + rpc NodeInfo(NodeInfoRequest) returns (NodeInfoReply) {} } // Requests and replies message StoreChunksRequest { - // list of blob certificates to process - repeated common.v2.BlobCertificate blob_certificates = 1; + // batch of blobs to store + repeated common.v2.Batch batch = 1; } message StoreChunksReply { - repeated google.protobuf.BytesValue signatures = 1; + bytes signature = 1; } message GetChunksRequest { - bytes blob_key = 1; - // Which quorum of the blob to retrieve for (note: a blob can have multiple - // quorums and the chunks for different quorums at a Node can be different). - // The ID must be in range [0, 254]. - uint32 quorum_id = 2; + bytes blob_key = 1; + // Which quorum of the blob to retrieve for (note: a blob can have multiple + // quorums and the chunks for different quorums at a Node can be different). + // The ID must be in range [0, 254]. + uint32 quorum_id = 2; } message GetChunksReply { - // All chunks the Node is storing for the requested blob per RetrieveChunksRequest. - repeated bytes chunks = 1; -} - -message GetBlobCertificateRequest { - bytes blob_key = 1; -} - -message GetBlobCertificateReply { - common.v2.BlobCertificate blob_certificate = 1; + // All chunks the Node is storing for the requested blob per RetrieveChunksRequest. + repeated bytes chunks = 1; } // Node info request @@ -60,9 +49,9 @@ message NodeInfoRequest { // Node info reply message NodeInfoReply { - string semver = 1; - string arch = 2; - string os = 3; - uint32 num_cpu = 4; - uint64 mem_bytes = 5; + string semver = 1; + string arch = 2; + string os = 3; + uint32 num_cpu = 4; + uint64 mem_bytes = 5; }