diff --git a/.protolint.yaml b/.protolint.yaml index 4c1ae33761..b7426e5e86 100644 --- a/.protolint.yaml +++ b/.protolint.yaml @@ -1,4 +1,8 @@ lint: + directories: + # exclude all generated third party proto files + exclude: + - third_party rules: # ignore max line length conflicting with proto-format remove: diff --git a/CHANGELOG.md b/CHANGELOG.md index 54194dc90b..1af72553b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -120,6 +120,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#1467](https://github.com/regen-network/regen-ledger/pull/1467) Add `ClassFee` state validation checks - [#1467](https://github.com/regen-network/regen-ledger/pull/1467) Add `BasketFee` state validation checks - [#1484](https://github.com/regen-network/regen-ledger/pull/1484) Add `Msg/UpdateCurator` +- [#1623](https://github.com/regen-network/regen-ledger/pull/1623) Add `Msg/UpdateBatchMetadata` #### Changed diff --git a/api/regen/ecocredit/v1/events.pulsar.go b/api/regen/ecocredit/v1/events.pulsar.go index ab0a26940c..27e11808a2 100644 --- a/api/regen/ecocredit/v1/events.pulsar.go +++ b/api/regen/ecocredit/v1/events.pulsar.go @@ -6398,6 +6398,426 @@ func (x *fastReflection_EventUpdateProjectMetadata) ProtoMethods() *protoiface.M } } +var ( + md_EventUpdateBatchMetadata protoreflect.MessageDescriptor + fd_EventUpdateBatchMetadata_batch_denom protoreflect.FieldDescriptor +) + +func init() { + file_regen_ecocredit_v1_events_proto_init() + md_EventUpdateBatchMetadata = File_regen_ecocredit_v1_events_proto.Messages().ByName("EventUpdateBatchMetadata") + fd_EventUpdateBatchMetadata_batch_denom = md_EventUpdateBatchMetadata.Fields().ByName("batch_denom") +} + +var _ protoreflect.Message = (*fastReflection_EventUpdateBatchMetadata)(nil) + +type fastReflection_EventUpdateBatchMetadata EventUpdateBatchMetadata + +func (x *EventUpdateBatchMetadata) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventUpdateBatchMetadata)(x) +} + +func (x *EventUpdateBatchMetadata) slowProtoReflect() protoreflect.Message { + mi := &file_regen_ecocredit_v1_events_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) +} + +var _fastReflection_EventUpdateBatchMetadata_messageType fastReflection_EventUpdateBatchMetadata_messageType +var _ protoreflect.MessageType = fastReflection_EventUpdateBatchMetadata_messageType{} + +type fastReflection_EventUpdateBatchMetadata_messageType struct{} + +func (x fastReflection_EventUpdateBatchMetadata_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventUpdateBatchMetadata)(nil) +} +func (x fastReflection_EventUpdateBatchMetadata_messageType) New() protoreflect.Message { + return new(fastReflection_EventUpdateBatchMetadata) +} +func (x fastReflection_EventUpdateBatchMetadata_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventUpdateBatchMetadata +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventUpdateBatchMetadata) Descriptor() protoreflect.MessageDescriptor { + return md_EventUpdateBatchMetadata +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_EventUpdateBatchMetadata) Type() protoreflect.MessageType { + return _fastReflection_EventUpdateBatchMetadata_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventUpdateBatchMetadata) New() protoreflect.Message { + return new(fastReflection_EventUpdateBatchMetadata) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventUpdateBatchMetadata) Interface() protoreflect.ProtoMessage { + return (*EventUpdateBatchMetadata)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_EventUpdateBatchMetadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.BatchDenom != "" { + value := protoreflect.ValueOfString(x.BatchDenom) + if !f(fd_EventUpdateBatchMetadata_batch_denom, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_EventUpdateBatchMetadata) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "regen.ecocredit.v1.EventUpdateBatchMetadata.batch_denom": + return x.BatchDenom != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.EventUpdateBatchMetadata")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.EventUpdateBatchMetadata does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventUpdateBatchMetadata) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "regen.ecocredit.v1.EventUpdateBatchMetadata.batch_denom": + x.BatchDenom = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.EventUpdateBatchMetadata")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.EventUpdateBatchMetadata does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_EventUpdateBatchMetadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "regen.ecocredit.v1.EventUpdateBatchMetadata.batch_denom": + value := x.BatchDenom + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.EventUpdateBatchMetadata")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.EventUpdateBatchMetadata does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventUpdateBatchMetadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "regen.ecocredit.v1.EventUpdateBatchMetadata.batch_denom": + x.BatchDenom = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.EventUpdateBatchMetadata")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.EventUpdateBatchMetadata does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventUpdateBatchMetadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "regen.ecocredit.v1.EventUpdateBatchMetadata.batch_denom": + panic(fmt.Errorf("field batch_denom of message regen.ecocredit.v1.EventUpdateBatchMetadata is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.EventUpdateBatchMetadata")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.EventUpdateBatchMetadata does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_EventUpdateBatchMetadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "regen.ecocredit.v1.EventUpdateBatchMetadata.batch_denom": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.EventUpdateBatchMetadata")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.EventUpdateBatchMetadata does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_EventUpdateBatchMetadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in regen.ecocredit.v1.EventUpdateBatchMetadata", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_EventUpdateBatchMetadata) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_EventUpdateBatchMetadata) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_EventUpdateBatchMetadata) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_EventUpdateBatchMetadata) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventUpdateBatchMetadata) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.BatchDenom) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*EventUpdateBatchMetadata) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.BatchDenom) > 0 { + i -= len(x.BatchDenom) + copy(dAtA[i:], x.BatchDenom) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.BatchDenom))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*EventUpdateBatchMetadata) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventUpdateBatchMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventUpdateBatchMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BatchDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.BatchDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + var ( md_EventSealBatch protoreflect.MessageDescriptor fd_EventSealBatch_batch_denom protoreflect.FieldDescriptor @@ -6418,7 +6838,7 @@ func (x *EventSealBatch) ProtoReflect() protoreflect.Message { } func (x *EventSealBatch) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[13] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6838,7 +7258,7 @@ func (x *EventAddCreditType) ProtoReflect() protoreflect.Message { } func (x *EventAddCreditType) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[14] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7264,7 +7684,7 @@ func (x *EventBridge) ProtoReflect() protoreflect.Message { } func (x *EventBridge) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[15] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7872,7 +8292,7 @@ func (x *EventBridgeReceive) ProtoReflect() protoreflect.Message { } func (x *EventBridgeReceive) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[16] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8984,6 +9404,46 @@ func (x *EventUpdateProjectMetadata) GetProjectId() string { return "" } +// EventUpdateBatchMetadata is emitted when the credit batch metadata is +// changed. +// +// Since Revision 1 +type EventUpdateBatchMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // batch_denom is the unique identifier of the batch that was updated. + BatchDenom string `protobuf:"bytes,1,opt,name=batch_denom,json=batchDenom,proto3" json:"batch_denom,omitempty"` +} + +func (x *EventUpdateBatchMetadata) Reset() { + *x = EventUpdateBatchMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventUpdateBatchMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventUpdateBatchMetadata) ProtoMessage() {} + +// Deprecated: Use EventUpdateBatchMetadata.ProtoReflect.Descriptor instead. +func (*EventUpdateBatchMetadata) Descriptor() ([]byte, []int) { + return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{13} +} + +func (x *EventUpdateBatchMetadata) GetBatchDenom() string { + if x != nil { + return x.BatchDenom + } + return "" +} + // EventSealBatch is emitted when a batch is sealed. type EventSealBatch struct { state protoimpl.MessageState @@ -8997,7 +9457,7 @@ type EventSealBatch struct { func (x *EventSealBatch) Reset() { *x = EventSealBatch{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[13] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9011,7 +9471,7 @@ func (*EventSealBatch) ProtoMessage() {} // Deprecated: Use EventSealBatch.ProtoReflect.Descriptor instead. func (*EventSealBatch) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{13} + return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{14} } func (x *EventSealBatch) GetBatchDenom() string { @@ -9034,7 +9494,7 @@ type EventAddCreditType struct { func (x *EventAddCreditType) Reset() { *x = EventAddCreditType{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[14] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9048,7 +9508,7 @@ func (*EventAddCreditType) ProtoMessage() {} // Deprecated: Use EventAddCreditType.ProtoReflect.Descriptor instead. func (*EventAddCreditType) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{14} + return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{15} } func (x *EventAddCreditType) GetAbbreviation() string { @@ -9077,7 +9537,7 @@ type EventBridge struct { func (x *EventBridge) Reset() { *x = EventBridge{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[15] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9091,7 +9551,7 @@ func (*EventBridge) ProtoMessage() {} // Deprecated: Use EventBridge.ProtoReflect.Descriptor instead. func (*EventBridge) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{15} + return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{16} } func (x *EventBridge) GetTarget() string { @@ -9139,7 +9599,7 @@ type EventBridgeReceive struct { func (x *EventBridgeReceive) Reset() { *x = EventBridgeReceive{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_events_proto_msgTypes[16] + mi := &file_regen_ecocredit_v1_events_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9153,7 +9613,7 @@ func (*EventBridgeReceive) ProtoMessage() {} // Deprecated: Use EventBridgeReceive.ProtoReflect.Descriptor instead. func (*EventBridgeReceive) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{16} + return file_regen_ecocredit_v1_events_proto_rawDescGZIP(), []int{17} } func (x *EventBridgeReceive) GetProjectId() string { @@ -9251,41 +9711,45 @@ var file_regen_ecocredit_v1_events_proto_rawDesc = []byte{ 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, - 0x65, 0x61, 0x6c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, - 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x38, 0x0a, 0x12, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x41, 0x64, 0x64, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x22, 0x0a, 0x0c, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x77, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x72, 0x69, 0x64, - 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, - 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x61, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x54, 0x0a, 0x12, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6e, - 0x6f, 0x6d, 0x42, 0xd9, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, - 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6c, 0x65, 0x64, - 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2f, 0x65, 0x63, - 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x63, 0x6f, 0x63, 0x72, - 0x65, 0x64, 0x69, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x45, 0x58, 0xaa, 0x02, 0x12, 0x52, - 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x56, - 0x31, 0xca, 0x02, 0x12, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x5c, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, - 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x5c, 0x45, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x3a, - 0x3a, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x18, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6e, 0x6f, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, + 0x6e, 0x6f, 0x6d, 0x22, 0x31, 0x0a, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x61, 0x6c, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x22, 0x38, 0x0a, 0x12, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, + 0x64, 0x64, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x77, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, + 0x69, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x54, 0x0a, 0x12, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x42, + 0xd9, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, + 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x72, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2f, 0x65, 0x63, 0x6f, 0x63, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, + 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x52, 0x45, 0x58, 0xaa, 0x02, 0x12, 0x52, 0x65, 0x67, 0x65, + 0x6e, 0x2e, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x12, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x5c, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x5c, 0x45, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x3a, 0x3a, 0x45, 0x63, + 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -9300,7 +9764,7 @@ func file_regen_ecocredit_v1_events_proto_rawDescGZIP() []byte { return file_regen_ecocredit_v1_events_proto_rawDescData } -var file_regen_ecocredit_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_regen_ecocredit_v1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_regen_ecocredit_v1_events_proto_goTypes = []interface{}{ (*EventCreateClass)(nil), // 0: regen.ecocredit.v1.EventCreateClass (*EventCreateProject)(nil), // 1: regen.ecocredit.v1.EventCreateProject @@ -9315,15 +9779,16 @@ var file_regen_ecocredit_v1_events_proto_goTypes = []interface{}{ (*EventUpdateClassMetadata)(nil), // 10: regen.ecocredit.v1.EventUpdateClassMetadata (*EventUpdateProjectAdmin)(nil), // 11: regen.ecocredit.v1.EventUpdateProjectAdmin (*EventUpdateProjectMetadata)(nil), // 12: regen.ecocredit.v1.EventUpdateProjectMetadata - (*EventSealBatch)(nil), // 13: regen.ecocredit.v1.EventSealBatch - (*EventAddCreditType)(nil), // 14: regen.ecocredit.v1.EventAddCreditType - (*EventBridge)(nil), // 15: regen.ecocredit.v1.EventBridge - (*EventBridgeReceive)(nil), // 16: regen.ecocredit.v1.EventBridgeReceive - (*OriginTx)(nil), // 17: regen.ecocredit.v1.OriginTx + (*EventUpdateBatchMetadata)(nil), // 13: regen.ecocredit.v1.EventUpdateBatchMetadata + (*EventSealBatch)(nil), // 14: regen.ecocredit.v1.EventSealBatch + (*EventAddCreditType)(nil), // 15: regen.ecocredit.v1.EventAddCreditType + (*EventBridge)(nil), // 16: regen.ecocredit.v1.EventBridge + (*EventBridgeReceive)(nil), // 17: regen.ecocredit.v1.EventBridgeReceive + (*OriginTx)(nil), // 18: regen.ecocredit.v1.OriginTx } var file_regen_ecocredit_v1_events_proto_depIdxs = []int32{ - 17, // 0: regen.ecocredit.v1.EventCreateBatch.origin_tx:type_name -> regen.ecocredit.v1.OriginTx - 17, // 1: regen.ecocredit.v1.EventMintBatchCredits.origin_tx:type_name -> regen.ecocredit.v1.OriginTx + 18, // 0: regen.ecocredit.v1.EventCreateBatch.origin_tx:type_name -> regen.ecocredit.v1.OriginTx + 18, // 1: regen.ecocredit.v1.EventMintBatchCredits.origin_tx:type_name -> regen.ecocredit.v1.OriginTx 2, // [2:2] is the sub-list for method output_type 2, // [2:2] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name @@ -9495,7 +9960,7 @@ func file_regen_ecocredit_v1_events_proto_init() { } } file_regen_ecocredit_v1_events_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventSealBatch); i { + switch v := v.(*EventUpdateBatchMetadata); i { case 0: return &v.state case 1: @@ -9507,7 +9972,7 @@ func file_regen_ecocredit_v1_events_proto_init() { } } file_regen_ecocredit_v1_events_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventAddCreditType); i { + switch v := v.(*EventSealBatch); i { case 0: return &v.state case 1: @@ -9519,7 +9984,7 @@ func file_regen_ecocredit_v1_events_proto_init() { } } file_regen_ecocredit_v1_events_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventBridge); i { + switch v := v.(*EventAddCreditType); i { case 0: return &v.state case 1: @@ -9531,6 +9996,18 @@ func file_regen_ecocredit_v1_events_proto_init() { } } file_regen_ecocredit_v1_events_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventBridge); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_regen_ecocredit_v1_events_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventBridgeReceive); i { case 0: return &v.state @@ -9549,7 +10026,7 @@ func file_regen_ecocredit_v1_events_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_regen_ecocredit_v1_events_proto_rawDesc, NumEnums: 0, - NumMessages: 17, + NumMessages: 18, NumExtensions: 0, NumServices: 0, }, diff --git a/api/regen/ecocredit/v1/tx.pulsar.go b/api/regen/ecocredit/v1/tx.pulsar.go index eeff5bc7fc..80409de669 100644 --- a/api/regen/ecocredit/v1/tx.pulsar.go +++ b/api/regen/ecocredit/v1/tx.pulsar.go @@ -7080,7 +7080,7 @@ func (x *MsgSend_SendCredits) ProtoReflect() protoreflect.Message { } func (x *MsgSend_SendCredits) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[44] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15369,23 +15369,29 @@ func (x *fastReflection_MsgBridge) ProtoMethods() *protoiface.Methods { } var ( - md_MsgBridgeResponse protoreflect.MessageDescriptor + md_MsgUpdateBatchMetadata protoreflect.MessageDescriptor + fd_MsgUpdateBatchMetadata_issuer protoreflect.FieldDescriptor + fd_MsgUpdateBatchMetadata_batch_denom protoreflect.FieldDescriptor + fd_MsgUpdateBatchMetadata_new_metadata protoreflect.FieldDescriptor ) func init() { file_regen_ecocredit_v1_tx_proto_init() - md_MsgBridgeResponse = File_regen_ecocredit_v1_tx_proto.Messages().ByName("MsgBridgeResponse") + md_MsgUpdateBatchMetadata = File_regen_ecocredit_v1_tx_proto.Messages().ByName("MsgUpdateBatchMetadata") + fd_MsgUpdateBatchMetadata_issuer = md_MsgUpdateBatchMetadata.Fields().ByName("issuer") + fd_MsgUpdateBatchMetadata_batch_denom = md_MsgUpdateBatchMetadata.Fields().ByName("batch_denom") + fd_MsgUpdateBatchMetadata_new_metadata = md_MsgUpdateBatchMetadata.Fields().ByName("new_metadata") } -var _ protoreflect.Message = (*fastReflection_MsgBridgeResponse)(nil) +var _ protoreflect.Message = (*fastReflection_MsgUpdateBatchMetadata)(nil) -type fastReflection_MsgBridgeResponse MsgBridgeResponse +type fastReflection_MsgUpdateBatchMetadata MsgUpdateBatchMetadata -func (x *MsgBridgeResponse) ProtoReflect() protoreflect.Message { - return (*fastReflection_MsgBridgeResponse)(x) +func (x *MsgUpdateBatchMetadata) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateBatchMetadata)(x) } -func (x *MsgBridgeResponse) slowProtoReflect() protoreflect.Message { +func (x *MsgUpdateBatchMetadata) slowProtoReflect() protoreflect.Message { mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -15397,43 +15403,43 @@ func (x *MsgBridgeResponse) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_MsgBridgeResponse_messageType fastReflection_MsgBridgeResponse_messageType -var _ protoreflect.MessageType = fastReflection_MsgBridgeResponse_messageType{} +var _fastReflection_MsgUpdateBatchMetadata_messageType fastReflection_MsgUpdateBatchMetadata_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateBatchMetadata_messageType{} -type fastReflection_MsgBridgeResponse_messageType struct{} +type fastReflection_MsgUpdateBatchMetadata_messageType struct{} -func (x fastReflection_MsgBridgeResponse_messageType) Zero() protoreflect.Message { - return (*fastReflection_MsgBridgeResponse)(nil) +func (x fastReflection_MsgUpdateBatchMetadata_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateBatchMetadata)(nil) } -func (x fastReflection_MsgBridgeResponse_messageType) New() protoreflect.Message { - return new(fastReflection_MsgBridgeResponse) +func (x fastReflection_MsgUpdateBatchMetadata_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateBatchMetadata) } -func (x fastReflection_MsgBridgeResponse_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_MsgBridgeResponse +func (x fastReflection_MsgUpdateBatchMetadata_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateBatchMetadata } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_MsgBridgeResponse) Descriptor() protoreflect.MessageDescriptor { - return md_MsgBridgeResponse +func (x *fastReflection_MsgUpdateBatchMetadata) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateBatchMetadata } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_MsgBridgeResponse) Type() protoreflect.MessageType { - return _fastReflection_MsgBridgeResponse_messageType +func (x *fastReflection_MsgUpdateBatchMetadata) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateBatchMetadata_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_MsgBridgeResponse) New() protoreflect.Message { - return new(fastReflection_MsgBridgeResponse) +func (x *fastReflection_MsgUpdateBatchMetadata) New() protoreflect.Message { + return new(fastReflection_MsgUpdateBatchMetadata) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_MsgBridgeResponse) Interface() protoreflect.ProtoMessage { - return (*MsgBridgeResponse)(x) +func (x *fastReflection_MsgUpdateBatchMetadata) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateBatchMetadata)(x) } // Range iterates over every populated field in an undefined order, @@ -15441,7 +15447,25 @@ func (x *fastReflection_MsgBridgeResponse) Interface() protoreflect.ProtoMessage // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_MsgBridgeResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +func (x *fastReflection_MsgUpdateBatchMetadata) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Issuer != "" { + value := protoreflect.ValueOfString(x.Issuer) + if !f(fd_MsgUpdateBatchMetadata_issuer, value) { + return + } + } + if x.BatchDenom != "" { + value := protoreflect.ValueOfString(x.BatchDenom) + if !f(fd_MsgUpdateBatchMetadata_batch_denom, value) { + return + } + } + if x.NewMetadata != "" { + value := protoreflect.ValueOfString(x.NewMetadata) + if !f(fd_MsgUpdateBatchMetadata_new_metadata, value) { + return + } + } } // Has reports whether a field is populated. @@ -15455,13 +15479,19 @@ func (x *fastReflection_MsgBridgeResponse) Range(f func(protoreflect.FieldDescri // In other cases (aside from the nullable cases above), // a proto3 scalar field is populated if it contains a non-zero value, and // a repeated field is populated if it is non-empty. -func (x *fastReflection_MsgBridgeResponse) Has(fd protoreflect.FieldDescriptor) bool { +func (x *fastReflection_MsgUpdateBatchMetadata) Has(fd protoreflect.FieldDescriptor) bool { switch fd.FullName() { + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.issuer": + return x.Issuer != "" + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.batch_denom": + return x.BatchDenom != "" + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.new_metadata": + return x.NewMetadata != "" default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadata")) } - panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadata does not contain field %s", fd.FullName())) } } @@ -15471,13 +15501,19 @@ func (x *fastReflection_MsgBridgeResponse) Has(fd protoreflect.FieldDescriptor) // associated with the given field number. // // Clear is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_MsgBridgeResponse) Clear(fd protoreflect.FieldDescriptor) { +func (x *fastReflection_MsgUpdateBatchMetadata) Clear(fd protoreflect.FieldDescriptor) { switch fd.FullName() { + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.issuer": + x.Issuer = "" + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.batch_denom": + x.BatchDenom = "" + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.new_metadata": + x.NewMetadata = "" default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadata")) } - panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadata does not contain field %s", fd.FullName())) } } @@ -15487,13 +15523,22 @@ func (x *fastReflection_MsgBridgeResponse) Clear(fd protoreflect.FieldDescriptor // the default value of a bytes scalar is guaranteed to be a copy. // For unpopulated composite types, it returns an empty, read-only view // of the value; to obtain a mutable reference, use Mutable. -func (x *fastReflection_MsgBridgeResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_MsgUpdateBatchMetadata) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { switch descriptor.FullName() { + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.issuer": + value := x.Issuer + return protoreflect.ValueOfString(value) + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.batch_denom": + value := x.BatchDenom + return protoreflect.ValueOfString(value) + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.new_metadata": + value := x.NewMetadata + return protoreflect.ValueOfString(value) default: if descriptor.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadata")) } - panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", descriptor.FullName())) + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadata does not contain field %s", descriptor.FullName())) } } @@ -15507,13 +15552,19 @@ func (x *fastReflection_MsgBridgeResponse) Get(descriptor protoreflect.FieldDesc // empty, read-only value, then it panics. // // Set is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_MsgBridgeResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { +func (x *fastReflection_MsgUpdateBatchMetadata) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { switch fd.FullName() { + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.issuer": + x.Issuer = value.Interface().(string) + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.batch_denom": + x.BatchDenom = value.Interface().(string) + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.new_metadata": + x.NewMetadata = value.Interface().(string) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadata")) } - panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadata does not contain field %s", fd.FullName())) } } @@ -15527,36 +15578,48 @@ func (x *fastReflection_MsgBridgeResponse) Set(fd protoreflect.FieldDescriptor, // It panics if the field does not contain a composite type. // // Mutable is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_MsgBridgeResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_MsgUpdateBatchMetadata) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.issuer": + panic(fmt.Errorf("field issuer of message regen.ecocredit.v1.MsgUpdateBatchMetadata is not mutable")) + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.batch_denom": + panic(fmt.Errorf("field batch_denom of message regen.ecocredit.v1.MsgUpdateBatchMetadata is not mutable")) + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.new_metadata": + panic(fmt.Errorf("field new_metadata of message regen.ecocredit.v1.MsgUpdateBatchMetadata is not mutable")) default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadata")) } - panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadata does not contain field %s", fd.FullName())) } } // NewField returns a new value that is assignable to the field // for the given descriptor. For scalars, this returns the default value. // For lists, maps, and messages, this returns a new, empty, mutable value. -func (x *fastReflection_MsgBridgeResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { +func (x *fastReflection_MsgUpdateBatchMetadata) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.issuer": + return protoreflect.ValueOfString("") + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.batch_denom": + return protoreflect.ValueOfString("") + case "regen.ecocredit.v1.MsgUpdateBatchMetadata.new_metadata": + return protoreflect.ValueOfString("") default: if fd.IsExtension() { - panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadata")) } - panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadata does not contain field %s", fd.FullName())) } } // WhichOneof reports which field within the oneof is populated, // returning nil if none are populated. // It panics if the oneof descriptor does not belong to this message. -func (x *fastReflection_MsgBridgeResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { +func (x *fastReflection_MsgUpdateBatchMetadata) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { switch d.FullName() { default: - panic(fmt.Errorf("%s is not a oneof field in regen.ecocredit.v1.MsgBridgeResponse", d.FullName())) + panic(fmt.Errorf("%s is not a oneof field in regen.ecocredit.v1.MsgUpdateBatchMetadata", d.FullName())) } panic("unreachable") } @@ -15564,7 +15627,7 @@ func (x *fastReflection_MsgBridgeResponse) WhichOneof(d protoreflect.OneofDescri // GetUnknown retrieves the entire list of unknown fields. // The caller may only mutate the contents of the RawFields // if the mutated bytes are stored back into the message with SetUnknown. -func (x *fastReflection_MsgBridgeResponse) GetUnknown() protoreflect.RawFields { +func (x *fastReflection_MsgUpdateBatchMetadata) GetUnknown() protoreflect.RawFields { return x.unknownFields } @@ -15575,7 +15638,7 @@ func (x *fastReflection_MsgBridgeResponse) GetUnknown() protoreflect.RawFields { // An empty RawFields may be passed to clear the fields. // // SetUnknown is a mutating operation and unsafe for concurrent use. -func (x *fastReflection_MsgBridgeResponse) SetUnknown(fields protoreflect.RawFields) { +func (x *fastReflection_MsgUpdateBatchMetadata) SetUnknown(fields protoreflect.RawFields) { x.unknownFields = fields } @@ -15587,7 +15650,7 @@ func (x *fastReflection_MsgBridgeResponse) SetUnknown(fields protoreflect.RawFie // message type, but the details are implementation dependent. // Validity is not part of the protobuf data model, and may not // be preserved in marshaling or other operations. -func (x *fastReflection_MsgBridgeResponse) IsValid() bool { +func (x *fastReflection_MsgUpdateBatchMetadata) IsValid() bool { return x != nil } @@ -15597,9 +15660,9 @@ func (x *fastReflection_MsgBridgeResponse) IsValid() bool { // The returned methods type is identical to // "google.golang.org/protobuf/runtime/protoiface".Methods. // Consult the protoiface package documentation for details. -func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { +func (x *fastReflection_MsgUpdateBatchMetadata) ProtoMethods() *protoiface.Methods { size := func(input protoiface.SizeInput) protoiface.SizeOutput { - x := input.Message.Interface().(*MsgBridgeResponse) + x := input.Message.Interface().(*MsgUpdateBatchMetadata) if x == nil { return protoiface.SizeOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -15611,6 +15674,18 @@ func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { var n int var l int _ = l + l = len(x.Issuer) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.BatchDenom) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NewMetadata) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -15621,7 +15696,7 @@ func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { } marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { - x := input.Message.Interface().(*MsgBridgeResponse) + x := input.Message.Interface().(*MsgUpdateBatchMetadata) if x == nil { return protoiface.MarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -15640,6 +15715,27 @@ func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if len(x.NewMetadata) > 0 { + i -= len(x.NewMetadata) + copy(dAtA[i:], x.NewMetadata) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewMetadata))) + i-- + dAtA[i] = 0x1a + } + if len(x.BatchDenom) > 0 { + i -= len(x.BatchDenom) + copy(dAtA[i:], x.BatchDenom) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.BatchDenom))) + i-- + dAtA[i] = 0x12 + } + if len(x.Issuer) > 0 { + i -= len(x.Issuer) + copy(dAtA[i:], x.Issuer) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Issuer))) + i-- + dAtA[i] = 0xa + } if input.Buf != nil { input.Buf = append(input.Buf, dAtA...) } else { @@ -15651,7 +15747,7 @@ func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { }, nil } unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { - x := input.Message.Interface().(*MsgBridgeResponse) + x := input.Message.Interface().(*MsgUpdateBatchMetadata) if x == nil { return protoiface.UnmarshalOutput{ NoUnkeyedLiterals: input.NoUnkeyedLiterals, @@ -15683,12 +15779,108 @@ func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBridgeResponse: wiretype end group for non-group") + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateBatchMetadata: wiretype end group for non-group") } if fieldNum <= 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBridgeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateBatchMetadata: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Issuer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Issuer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BatchDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.BatchDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewMetadata", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NewMetadata = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -15725,33 +15917,23 @@ func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { } var ( - md_MsgBridgeReceive protoreflect.MessageDescriptor - fd_MsgBridgeReceive_issuer protoreflect.FieldDescriptor - fd_MsgBridgeReceive_class_id protoreflect.FieldDescriptor - fd_MsgBridgeReceive_project protoreflect.FieldDescriptor - fd_MsgBridgeReceive_batch protoreflect.FieldDescriptor - fd_MsgBridgeReceive_origin_tx protoreflect.FieldDescriptor + md_MsgUpdateBatchMetadataResponse protoreflect.MessageDescriptor ) func init() { file_regen_ecocredit_v1_tx_proto_init() - md_MsgBridgeReceive = File_regen_ecocredit_v1_tx_proto.Messages().ByName("MsgBridgeReceive") - fd_MsgBridgeReceive_issuer = md_MsgBridgeReceive.Fields().ByName("issuer") - fd_MsgBridgeReceive_class_id = md_MsgBridgeReceive.Fields().ByName("class_id") - fd_MsgBridgeReceive_project = md_MsgBridgeReceive.Fields().ByName("project") - fd_MsgBridgeReceive_batch = md_MsgBridgeReceive.Fields().ByName("batch") - fd_MsgBridgeReceive_origin_tx = md_MsgBridgeReceive.Fields().ByName("origin_tx") + md_MsgUpdateBatchMetadataResponse = File_regen_ecocredit_v1_tx_proto.Messages().ByName("MsgUpdateBatchMetadataResponse") } -var _ protoreflect.Message = (*fastReflection_MsgBridgeReceive)(nil) +var _ protoreflect.Message = (*fastReflection_MsgUpdateBatchMetadataResponse)(nil) -type fastReflection_MsgBridgeReceive MsgBridgeReceive +type fastReflection_MsgUpdateBatchMetadataResponse MsgUpdateBatchMetadataResponse -func (x *MsgBridgeReceive) ProtoReflect() protoreflect.Message { - return (*fastReflection_MsgBridgeReceive)(x) +func (x *MsgUpdateBatchMetadataResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgUpdateBatchMetadataResponse)(x) } -func (x *MsgBridgeReceive) slowProtoReflect() protoreflect.Message { +func (x *MsgUpdateBatchMetadataResponse) slowProtoReflect() protoreflect.Message { mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -15763,43 +15945,43 @@ func (x *MsgBridgeReceive) slowProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -var _fastReflection_MsgBridgeReceive_messageType fastReflection_MsgBridgeReceive_messageType -var _ protoreflect.MessageType = fastReflection_MsgBridgeReceive_messageType{} +var _fastReflection_MsgUpdateBatchMetadataResponse_messageType fastReflection_MsgUpdateBatchMetadataResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgUpdateBatchMetadataResponse_messageType{} -type fastReflection_MsgBridgeReceive_messageType struct{} +type fastReflection_MsgUpdateBatchMetadataResponse_messageType struct{} -func (x fastReflection_MsgBridgeReceive_messageType) Zero() protoreflect.Message { - return (*fastReflection_MsgBridgeReceive)(nil) +func (x fastReflection_MsgUpdateBatchMetadataResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgUpdateBatchMetadataResponse)(nil) } -func (x fastReflection_MsgBridgeReceive_messageType) New() protoreflect.Message { - return new(fastReflection_MsgBridgeReceive) +func (x fastReflection_MsgUpdateBatchMetadataResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgUpdateBatchMetadataResponse) } -func (x fastReflection_MsgBridgeReceive_messageType) Descriptor() protoreflect.MessageDescriptor { - return md_MsgBridgeReceive +func (x fastReflection_MsgUpdateBatchMetadataResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateBatchMetadataResponse } // Descriptor returns message descriptor, which contains only the protobuf // type information for the message. -func (x *fastReflection_MsgBridgeReceive) Descriptor() protoreflect.MessageDescriptor { - return md_MsgBridgeReceive +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgUpdateBatchMetadataResponse } // Type returns the message type, which encapsulates both Go and protobuf // type information. If the Go type information is not needed, // it is recommended that the message descriptor be used instead. -func (x *fastReflection_MsgBridgeReceive) Type() protoreflect.MessageType { - return _fastReflection_MsgBridgeReceive_messageType +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgUpdateBatchMetadataResponse_messageType } // New returns a newly allocated and mutable empty message. -func (x *fastReflection_MsgBridgeReceive) New() protoreflect.Message { - return new(fastReflection_MsgBridgeReceive) +func (x *fastReflection_MsgUpdateBatchMetadataResponse) New() protoreflect.Message { + return new(fastReflection_MsgUpdateBatchMetadataResponse) } // Interface unwraps the message reflection interface and // returns the underlying ProtoMessage interface. -func (x *fastReflection_MsgBridgeReceive) Interface() protoreflect.ProtoMessage { - return (*MsgBridgeReceive)(x) +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Interface() protoreflect.ProtoMessage { + return (*MsgUpdateBatchMetadataResponse)(x) } // Range iterates over every populated field in an undefined order, @@ -15807,10 +15989,732 @@ func (x *fastReflection_MsgBridgeReceive) Interface() protoreflect.ProtoMessage // Range returns immediately if f returns false. // While iterating, mutating operations may only be performed // on the current field descriptor. -func (x *fastReflection_MsgBridgeReceive) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { - if x.Issuer != "" { - value := protoreflect.ValueOfString(x.Issuer) - if !f(fd_MsgBridgeReceive_issuer, value) { +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadataResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadataResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadataResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadataResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadataResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgUpdateBatchMetadataResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in regen.ecocredit.v1.MsgUpdateBatchMetadataResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgUpdateBatchMetadataResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgUpdateBatchMetadataResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateBatchMetadataResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgUpdateBatchMetadataResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateBatchMetadataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgUpdateBatchMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgBridgeResponse protoreflect.MessageDescriptor +) + +func init() { + file_regen_ecocredit_v1_tx_proto_init() + md_MsgBridgeResponse = File_regen_ecocredit_v1_tx_proto.Messages().ByName("MsgBridgeResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgBridgeResponse)(nil) + +type fastReflection_MsgBridgeResponse MsgBridgeResponse + +func (x *MsgBridgeResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgBridgeResponse)(x) +} + +func (x *MsgBridgeResponse) slowProtoReflect() protoreflect.Message { + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[31] + 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) +} + +var _fastReflection_MsgBridgeResponse_messageType fastReflection_MsgBridgeResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgBridgeResponse_messageType{} + +type fastReflection_MsgBridgeResponse_messageType struct{} + +func (x fastReflection_MsgBridgeResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgBridgeResponse)(nil) +} +func (x fastReflection_MsgBridgeResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgBridgeResponse) +} +func (x fastReflection_MsgBridgeResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBridgeResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgBridgeResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBridgeResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgBridgeResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgBridgeResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgBridgeResponse) New() protoreflect.Message { + return new(fastReflection_MsgBridgeResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgBridgeResponse) Interface() protoreflect.ProtoMessage { + return (*MsgBridgeResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgBridgeResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgBridgeResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBridgeResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgBridgeResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBridgeResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBridgeResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgBridgeResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: regen.ecocredit.v1.MsgBridgeResponse")) + } + panic(fmt.Errorf("message regen.ecocredit.v1.MsgBridgeResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgBridgeResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in regen.ecocredit.v1.MsgBridgeResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgBridgeResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgBridgeResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgBridgeResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgBridgeResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgBridgeResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgBridgeResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgBridgeResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBridgeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgBridgeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgBridgeReceive protoreflect.MessageDescriptor + fd_MsgBridgeReceive_issuer protoreflect.FieldDescriptor + fd_MsgBridgeReceive_class_id protoreflect.FieldDescriptor + fd_MsgBridgeReceive_project protoreflect.FieldDescriptor + fd_MsgBridgeReceive_batch protoreflect.FieldDescriptor + fd_MsgBridgeReceive_origin_tx protoreflect.FieldDescriptor +) + +func init() { + file_regen_ecocredit_v1_tx_proto_init() + md_MsgBridgeReceive = File_regen_ecocredit_v1_tx_proto.Messages().ByName("MsgBridgeReceive") + fd_MsgBridgeReceive_issuer = md_MsgBridgeReceive.Fields().ByName("issuer") + fd_MsgBridgeReceive_class_id = md_MsgBridgeReceive.Fields().ByName("class_id") + fd_MsgBridgeReceive_project = md_MsgBridgeReceive.Fields().ByName("project") + fd_MsgBridgeReceive_batch = md_MsgBridgeReceive.Fields().ByName("batch") + fd_MsgBridgeReceive_origin_tx = md_MsgBridgeReceive.Fields().ByName("origin_tx") +} + +var _ protoreflect.Message = (*fastReflection_MsgBridgeReceive)(nil) + +type fastReflection_MsgBridgeReceive MsgBridgeReceive + +func (x *MsgBridgeReceive) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgBridgeReceive)(x) +} + +func (x *MsgBridgeReceive) slowProtoReflect() protoreflect.Message { + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[32] + 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) +} + +var _fastReflection_MsgBridgeReceive_messageType fastReflection_MsgBridgeReceive_messageType +var _ protoreflect.MessageType = fastReflection_MsgBridgeReceive_messageType{} + +type fastReflection_MsgBridgeReceive_messageType struct{} + +func (x fastReflection_MsgBridgeReceive_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgBridgeReceive)(nil) +} +func (x fastReflection_MsgBridgeReceive_messageType) New() protoreflect.Message { + return new(fastReflection_MsgBridgeReceive) +} +func (x fastReflection_MsgBridgeReceive_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBridgeReceive +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgBridgeReceive) Descriptor() protoreflect.MessageDescriptor { + return md_MsgBridgeReceive +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgBridgeReceive) Type() protoreflect.MessageType { + return _fastReflection_MsgBridgeReceive_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgBridgeReceive) New() protoreflect.Message { + return new(fastReflection_MsgBridgeReceive) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgBridgeReceive) Interface() protoreflect.ProtoMessage { + return (*MsgBridgeReceive)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgBridgeReceive) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Issuer != "" { + value := protoreflect.ValueOfString(x.Issuer) + if !f(fd_MsgBridgeReceive_issuer, value) { return } } @@ -16473,7 +17377,7 @@ func (x *MsgBridgeReceive_Batch) ProtoReflect() protoreflect.Message { } func (x *MsgBridgeReceive_Batch) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[45] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17175,7 +18079,7 @@ func (x *MsgBridgeReceive_Project) ProtoReflect() protoreflect.Message { } func (x *MsgBridgeReceive_Project) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[46] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17721,7 +18625,7 @@ func (x *MsgBridgeReceiveResponse) ProtoReflect() protoreflect.Message { } func (x *MsgBridgeReceiveResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[31] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18205,7 +19109,7 @@ func (x *MsgAddClassCreator) ProtoReflect() protoreflect.Message { } func (x *MsgAddClassCreator) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[32] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18689,7 +19593,7 @@ func (x *MsgSetClassCreatorAllowlist) ProtoReflect() protoreflect.Message { } func (x *MsgSetClassCreatorAllowlist) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[33] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19159,7 +20063,7 @@ func (x *MsgSetClassCreatorAllowlistResponse) ProtoReflect() protoreflect.Messag } func (x *MsgSetClassCreatorAllowlistResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[34] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19515,7 +20419,7 @@ func (x *MsgAddClassCreatorResponse) ProtoReflect() protoreflect.Message { } func (x *MsgAddClassCreatorResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[35] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19875,7 +20779,7 @@ func (x *MsgRemoveClassCreator) ProtoReflect() protoreflect.Message { } func (x *MsgRemoveClassCreator) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[36] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20355,7 +21259,7 @@ func (x *MsgRemoveClassCreatorResponse) ProtoReflect() protoreflect.Message { } func (x *MsgRemoveClassCreatorResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[37] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20715,7 +21619,7 @@ func (x *MsgUpdateClassFee) ProtoReflect() protoreflect.Message { } func (x *MsgUpdateClassFee) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[38] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21210,7 +22114,7 @@ func (x *MsgUpdateClassFeeResponse) ProtoReflect() protoreflect.Message { } func (x *MsgUpdateClassFeeResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[39] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21570,7 +22474,7 @@ func (x *MsgAddAllowedBridgeChain) ProtoReflect() protoreflect.Message { } func (x *MsgAddAllowedBridgeChain) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[40] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22050,7 +22954,7 @@ func (x *MsgAddAllowedBridgeChainResponse) ProtoReflect() protoreflect.Message { } func (x *MsgAddAllowedBridgeChainResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[41] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22410,7 +23314,7 @@ func (x *MsgRemoveAllowedBridgeChain) ProtoReflect() protoreflect.Message { } func (x *MsgRemoveAllowedBridgeChain) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[42] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22890,7 +23794,7 @@ func (x *MsgRemoveAllowedBridgeChainResponse) ProtoReflect() protoreflect.Messag } func (x *MsgRemoveAllowedBridgeChainResponse) slowProtoReflect() protoreflect.Message { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[43] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24624,6 +25528,94 @@ func (x *MsgBridge) GetCredits() []*Credits { return nil } +// MsgUpdateBatchMetadata is the Msg/UpdateBatchMetadata request type. +// +// Since Revision 1 +type MsgUpdateBatchMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // issuer is the address of the account that is the issuer of the batch. + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + // batch_denom is the unique identifier of the batch. + BatchDenom string `protobuf:"bytes,2,opt,name=batch_denom,json=batchDenom,proto3" json:"batch_denom,omitempty"` + // new_metadata is new metadata that will replace the existing metadata. It + // can be any arbitrary string with a maximum length of 256 characters that + // includes or references the metadata to attach to the batch. + NewMetadata string `protobuf:"bytes,3,opt,name=new_metadata,json=newMetadata,proto3" json:"new_metadata,omitempty"` +} + +func (x *MsgUpdateBatchMetadata) Reset() { + *x = MsgUpdateBatchMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateBatchMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateBatchMetadata) ProtoMessage() {} + +// Deprecated: Use MsgUpdateBatchMetadata.ProtoReflect.Descriptor instead. +func (*MsgUpdateBatchMetadata) Descriptor() ([]byte, []int) { + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{29} +} + +func (x *MsgUpdateBatchMetadata) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *MsgUpdateBatchMetadata) GetBatchDenom() string { + if x != nil { + return x.BatchDenom + } + return "" +} + +func (x *MsgUpdateBatchMetadata) GetNewMetadata() string { + if x != nil { + return x.NewMetadata + } + return "" +} + +// MsgUpdateBatchMetadataResponse is the Msg/UpdateBatchMetadataResponse response type. +// +// Since Revision 1 +type MsgUpdateBatchMetadataResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgUpdateBatchMetadataResponse) Reset() { + *x = MsgUpdateBatchMetadataResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgUpdateBatchMetadataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgUpdateBatchMetadataResponse) ProtoMessage() {} + +// Deprecated: Use MsgUpdateBatchMetadataResponse.ProtoReflect.Descriptor instead. +func (*MsgUpdateBatchMetadataResponse) Descriptor() ([]byte, []int) { + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{30} +} + // MsgBridgeResponse is the Msg/Bridge response type. type MsgBridgeResponse struct { state protoimpl.MessageState @@ -24634,7 +25626,7 @@ type MsgBridgeResponse struct { func (x *MsgBridgeResponse) Reset() { *x = MsgBridgeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[29] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24648,7 +25640,7 @@ func (*MsgBridgeResponse) ProtoMessage() {} // Deprecated: Use MsgBridgeResponse.ProtoReflect.Descriptor instead. func (*MsgBridgeResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{29} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{31} } // MsgBridgeReceive is the Msg/BridgeReceive request type. @@ -24674,7 +25666,7 @@ type MsgBridgeReceive struct { func (x *MsgBridgeReceive) Reset() { *x = MsgBridgeReceive{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[30] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24688,7 +25680,7 @@ func (*MsgBridgeReceive) ProtoMessage() {} // Deprecated: Use MsgBridgeReceive.ProtoReflect.Descriptor instead. func (*MsgBridgeReceive) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{30} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{32} } func (x *MsgBridgeReceive) GetIssuer() string { @@ -24743,7 +25735,7 @@ type MsgBridgeReceiveResponse struct { func (x *MsgBridgeReceiveResponse) Reset() { *x = MsgBridgeReceiveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[31] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24757,7 +25749,7 @@ func (*MsgBridgeReceiveResponse) ProtoMessage() {} // Deprecated: Use MsgBridgeReceiveResponse.ProtoReflect.Descriptor instead. func (*MsgBridgeReceiveResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{31} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{33} } func (x *MsgBridgeReceiveResponse) GetBatchDenom() string { @@ -24791,7 +25783,7 @@ type MsgAddClassCreator struct { func (x *MsgAddClassCreator) Reset() { *x = MsgAddClassCreator{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[32] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24805,7 +25797,7 @@ func (*MsgAddClassCreator) ProtoMessage() {} // Deprecated: Use MsgAddClassCreator.ProtoReflect.Descriptor instead. func (*MsgAddClassCreator) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{32} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{34} } func (x *MsgAddClassCreator) GetAuthority() string { @@ -24840,7 +25832,7 @@ type MsgSetClassCreatorAllowlist struct { func (x *MsgSetClassCreatorAllowlist) Reset() { *x = MsgSetClassCreatorAllowlist{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[33] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24854,7 +25846,7 @@ func (*MsgSetClassCreatorAllowlist) ProtoMessage() {} // Deprecated: Use MsgSetClassCreatorAllowlist.ProtoReflect.Descriptor instead. func (*MsgSetClassCreatorAllowlist) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{33} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{35} } func (x *MsgSetClassCreatorAllowlist) GetAuthority() string { @@ -24884,7 +25876,7 @@ type MsgSetClassCreatorAllowlistResponse struct { func (x *MsgSetClassCreatorAllowlistResponse) Reset() { *x = MsgSetClassCreatorAllowlistResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[34] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24898,7 +25890,7 @@ func (*MsgSetClassCreatorAllowlistResponse) ProtoMessage() {} // Deprecated: Use MsgSetClassCreatorAllowlistResponse.ProtoReflect.Descriptor instead. func (*MsgSetClassCreatorAllowlistResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{34} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{36} } // MsgAddClassCreatorResponse is the Msg/AddClassCreator response type. @@ -24913,7 +25905,7 @@ type MsgAddClassCreatorResponse struct { func (x *MsgAddClassCreatorResponse) Reset() { *x = MsgAddClassCreatorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[35] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24927,7 +25919,7 @@ func (*MsgAddClassCreatorResponse) ProtoMessage() {} // Deprecated: Use MsgAddClassCreatorResponse.ProtoReflect.Descriptor instead. func (*MsgAddClassCreatorResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{35} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{37} } // MsgRemoveClassCreator is the Msg/RemoveClassCreator request type. @@ -24947,7 +25939,7 @@ type MsgRemoveClassCreator struct { func (x *MsgRemoveClassCreator) Reset() { *x = MsgRemoveClassCreator{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[36] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24961,7 +25953,7 @@ func (*MsgRemoveClassCreator) ProtoMessage() {} // Deprecated: Use MsgRemoveClassCreator.ProtoReflect.Descriptor instead. func (*MsgRemoveClassCreator) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{36} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{38} } func (x *MsgRemoveClassCreator) GetAuthority() string { @@ -24990,7 +25982,7 @@ type MsgRemoveClassCreatorResponse struct { func (x *MsgRemoveClassCreatorResponse) Reset() { *x = MsgRemoveClassCreatorResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[37] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25004,7 +25996,7 @@ func (*MsgRemoveClassCreatorResponse) ProtoMessage() {} // Deprecated: Use MsgRemoveClassCreatorResponse.ProtoReflect.Descriptor instead. func (*MsgRemoveClassCreatorResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{37} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{39} } // MsgUpdateClassFee is the Msg/UpdateClassFee request type. @@ -25025,7 +26017,7 @@ type MsgUpdateClassFee struct { func (x *MsgUpdateClassFee) Reset() { *x = MsgUpdateClassFee{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[38] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25039,7 +26031,7 @@ func (*MsgUpdateClassFee) ProtoMessage() {} // Deprecated: Use MsgUpdateClassFee.ProtoReflect.Descriptor instead. func (*MsgUpdateClassFee) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{38} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{40} } func (x *MsgUpdateClassFee) GetAuthority() string { @@ -25068,7 +26060,7 @@ type MsgUpdateClassFeeResponse struct { func (x *MsgUpdateClassFeeResponse) Reset() { *x = MsgUpdateClassFeeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[39] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25082,7 +26074,7 @@ func (*MsgUpdateClassFeeResponse) ProtoMessage() {} // Deprecated: Use MsgUpdateClassFeeResponse.ProtoReflect.Descriptor instead. func (*MsgUpdateClassFeeResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{39} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{41} } // MsgAddAllowedBridgeChain is the Msg/AddAllowedBridgeChain request type. @@ -25103,7 +26095,7 @@ type MsgAddAllowedBridgeChain struct { func (x *MsgAddAllowedBridgeChain) Reset() { *x = MsgAddAllowedBridgeChain{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[40] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25117,7 +26109,7 @@ func (*MsgAddAllowedBridgeChain) ProtoMessage() {} // Deprecated: Use MsgAddAllowedBridgeChain.ProtoReflect.Descriptor instead. func (*MsgAddAllowedBridgeChain) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{40} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{42} } func (x *MsgAddAllowedBridgeChain) GetAuthority() string { @@ -25147,7 +26139,7 @@ type MsgAddAllowedBridgeChainResponse struct { func (x *MsgAddAllowedBridgeChainResponse) Reset() { *x = MsgAddAllowedBridgeChainResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[41] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25161,7 +26153,7 @@ func (*MsgAddAllowedBridgeChainResponse) ProtoMessage() {} // Deprecated: Use MsgAddAllowedBridgeChainResponse.ProtoReflect.Descriptor instead. func (*MsgAddAllowedBridgeChainResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{41} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{43} } // MsgRemoveAllowedBridgeChain is the Msg/RemoveAllowedBridgeChain request type. @@ -25182,7 +26174,7 @@ type MsgRemoveAllowedBridgeChain struct { func (x *MsgRemoveAllowedBridgeChain) Reset() { *x = MsgRemoveAllowedBridgeChain{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[42] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25196,7 +26188,7 @@ func (*MsgRemoveAllowedBridgeChain) ProtoMessage() {} // Deprecated: Use MsgRemoveAllowedBridgeChain.ProtoReflect.Descriptor instead. func (*MsgRemoveAllowedBridgeChain) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{42} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{44} } func (x *MsgRemoveAllowedBridgeChain) GetAuthority() string { @@ -25226,7 +26218,7 @@ type MsgRemoveAllowedBridgeChainResponse struct { func (x *MsgRemoveAllowedBridgeChainResponse) Reset() { *x = MsgRemoveAllowedBridgeChainResponse{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[43] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25240,7 +26232,7 @@ func (*MsgRemoveAllowedBridgeChainResponse) ProtoMessage() {} // Deprecated: Use MsgRemoveAllowedBridgeChainResponse.ProtoReflect.Descriptor instead. func (*MsgRemoveAllowedBridgeChainResponse) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{43} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{45} } // SendCredits specifies the amount of tradable and retired credits of a @@ -25274,7 +26266,7 @@ type MsgSend_SendCredits struct { func (x *MsgSend_SendCredits) Reset() { *x = MsgSend_SendCredits{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[44] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25344,7 +26336,7 @@ type MsgBridgeReceive_Batch struct { func (x *MsgBridgeReceive_Batch) Reset() { *x = MsgBridgeReceive_Batch{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[45] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25358,7 +26350,7 @@ func (*MsgBridgeReceive_Batch) ProtoMessage() {} // Deprecated: Use MsgBridgeReceive_Batch.ProtoReflect.Descriptor instead. func (*MsgBridgeReceive_Batch) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{30, 0} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{32, 0} } func (x *MsgBridgeReceive_Batch) GetRecipient() string { @@ -25415,7 +26407,7 @@ type MsgBridgeReceive_Project struct { func (x *MsgBridgeReceive_Project) Reset() { *x = MsgBridgeReceive_Project{} if protoimpl.UnsafeEnabled { - mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[46] + mi := &file_regen_ecocredit_v1_tx_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25429,7 +26421,7 @@ func (*MsgBridgeReceive_Project) ProtoMessage() {} // Deprecated: Use MsgBridgeReceive_Project.ProtoReflect.Descriptor instead. func (*MsgBridgeReceive_Project) Descriptor() ([]byte, []int) { - return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{30, 1} + return file_regen_ecocredit_v1_tx_proto_rawDescGZIP(), []int{32, 1} } func (x *MsgBridgeReceive_Project) GetReferenceId() string { @@ -25662,262 +26654,280 @@ var file_regen_ecocredit_v1_tx_proto_rawDesc = []byte{ 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x52, 0x07, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x3a, 0x0a, 0x82, 0xe7, 0xb0, 0x2a, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x22, 0x13, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x04, 0x0a, 0x10, 0x4d, 0x73, 0x67, 0x42, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x64, 0x12, - 0x46, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, - 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x40, 0x0a, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, + 0x65, 0x72, 0x22, 0x81, 0x01, 0x0a, 0x16, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, + 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, + 0x77, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, + 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, 0x20, 0x0a, 0x1e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x13, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x42, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x04, + 0x0a, 0x10, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, + 0x61, 0x73, 0x73, 0x49, 0x64, 0x12, 0x46, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, 0x39, 0x0a, 0x09, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x2e, 0x50, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x40, 0x0a, + 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x08, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x54, 0x78, 0x1a, 0xd7, 0x01, 0x0a, 0x05, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, - 0x74, 0x65, 0x18, 0x03, 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, 0x42, 0x04, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x18, 0x04, 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, 0x42, 0x04, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x6c, - 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, - 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x0b, 0x82, 0xe7, - 0xb0, 0x2a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, 0x5a, 0x0a, 0x18, 0x4d, 0x73, 0x67, - 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, - 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x12, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x22, 0x65, 0x0a, 0x1b, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, - 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x25, 0x0a, 0x23, 0x4d, 0x73, - 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, - 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x5f, 0x0a, 0x15, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x62, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x39, 0x0a, 0x09, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x78, + 0x52, 0x08, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x1a, 0xd7, 0x01, 0x0a, 0x05, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, + 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 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, 0x42, 0x04, 0x90, 0xdf, 0x1f, 0x01, + 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x04, 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, 0x42, 0x04, 0x90, 0xdf, 0x1f, 0x01, 0x52, + 0x07, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0x6c, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, 0x69, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6a, 0x75, 0x72, 0x69, 0x73, 0x64, + 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x22, + 0x5a, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x62, + 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x22, 0x5c, 0x0a, 0x12, 0x4d, + 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x65, 0x0a, 0x1b, 0x4d, 0x73, 0x67, + 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x22, 0x1f, 0x0a, 0x1d, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x6e, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x52, 0x03, 0x66, 0x65, - 0x65, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, - 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x22, 0x0a, 0x20, 0x4d, 0x73, 0x67, 0x41, 0x64, - 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6a, 0x0a, 0x1b, 0x4d, - 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x25, 0x0a, 0x23, 0x4d, 0x73, 0x67, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, - 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8f, - 0x12, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x5d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x22, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, - 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x1a, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, - 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x2c, 0x2e, 0x72, + 0x22, 0x25, 0x0a, 0x23, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x73, 0x67, 0x41, 0x64, + 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x15, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x1f, 0x0a, 0x1d, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6e, 0x0a, 0x11, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2b, 0x0a, 0x03, 0x66, 0x65, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x52, 0x03, 0x66, 0x65, 0x65, 0x3a, 0x0e, 0x82, 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x1b, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x18, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x41, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x3a, 0x0e, 0x82, + 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x22, 0x0a, + 0x20, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, + 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x6a, 0x0a, 0x1b, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x3a, 0x0e, 0x82, + 0xe7, 0xb0, 0x2a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x25, 0x0a, + 0x23, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x86, 0x13, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x5d, 0x0a, 0x0b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x22, 0x2e, 0x72, 0x65, + 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x1a, + 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x61, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0b, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x22, 0x2e, 0x72, 0x65, 0x67, 0x65, - 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x2a, 0x2e, - 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x10, 0x4d, 0x69, 0x6e, - 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x12, 0x27, 0x2e, - 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x1a, 0x2f, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, - 0x69, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x09, 0x53, 0x65, 0x61, 0x6c, 0x42, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, - 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x61, - 0x6c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x28, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, - 0x65, 0x61, 0x6c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, - 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x53, 0x65, 0x6e, 0x64, 0x1a, 0x23, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, - 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, - 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x52, 0x65, - 0x74, 0x69, 0x72, 0x65, 0x12, 0x1d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, - 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x74, - 0x69, 0x72, 0x65, 0x1a, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x74, 0x69, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x1d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, - 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x1a, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, - 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x10, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x27, - 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x2f, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, - 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x12, 0x29, + 0x63, 0x74, 0x1a, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5d, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x22, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x1a, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6c, 0x0a, 0x10, 0x4d, 0x69, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x64, + 0x69, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x6e, 0x74, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x73, 0x1a, 0x2f, 0x2e, 0x72, + 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x4d, 0x69, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, + 0x09, 0x53, 0x65, 0x61, 0x6c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x2e, 0x72, 0x65, 0x67, + 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x53, 0x65, 0x61, 0x6c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x28, 0x2e, 0x72, + 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x61, 0x6c, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1b, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x1a, 0x31, 0x2e, 0x72, 0x65, 0x67, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x1a, 0x23, 0x2e, 0x72, 0x65, + 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4e, 0x0a, 0x06, 0x52, 0x65, 0x74, 0x69, 0x72, 0x65, 0x12, 0x1d, 0x2e, 0x72, 0x65, 0x67, + 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x52, 0x65, 0x74, 0x69, 0x72, 0x65, 0x1a, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x13, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, - 0x32, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, + 0x73, 0x67, 0x52, 0x65, 0x74, 0x69, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4e, 0x0a, 0x06, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x1d, 0x2e, 0x72, 0x65, 0x67, + 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x1a, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, + 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6c, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x27, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, + 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x2f, 0x2e, + 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, + 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x73, 0x12, 0x29, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, + 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x1a, + 0x31, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x29, 0x2e, 0x72, 0x65, 0x67, 0x65, + 0x61, 0x73, 0x73, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x75, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, - 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x31, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, + 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x32, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, + 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, + 0x29, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x31, 0x2e, 0x72, 0x65, 0x67, + 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, + 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, + 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, - 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x34, - 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x1d, - 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x1a, 0x25, 0x2e, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x13, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x2a, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, + 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x32, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, - 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, - 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x1a, 0x2c, 0x2e, 0x72, 0x65, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x1d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x41, 0x64, 0x64, - 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x2e, 0x72, 0x65, 0x67, + 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x1a, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x1a, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, - 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x72, 0x65, 0x64, - 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, - 0x01, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x72, 0x65, - 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x72, - 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x26, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, + 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x12, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x1a, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, - 0x1a, 0x2e, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, - 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x72, 0x0a, 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x29, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, - 0x72, 0x1a, 0x31, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, - 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x12, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x1a, 0x2d, 0x2e, + 0x67, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x43, 0x72, 0x65, + 0x64, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, + 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, + 0x41, 0x64, 0x64, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, - 0x73, 0x46, 0x65, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x15, - 0x41, 0x64, 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x72, 0x65, 0x64, 0x69, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x18, + 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x41, + 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, + 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x72, 0x65, 0x67, 0x65, + 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x69, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x26, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, - 0x64, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, - 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x41, - 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x18, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, - 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2f, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, - 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x1a, 0x37, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, - 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, - 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0xd5, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2f, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, - 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x52, 0x45, 0x58, 0xaa, 0x02, 0x12, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x45, - 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x52, 0x65, - 0x67, 0x65, 0x6e, 0x5c, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x1e, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x5c, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, - 0x69, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x14, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x3a, 0x3a, 0x45, 0x63, 0x6f, 0x63, 0x72, - 0x65, 0x64, 0x69, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x2e, 0x2e, + 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, + 0x12, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x29, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x31, + 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x66, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, + 0x46, 0x65, 0x65, 0x12, 0x25, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x46, 0x65, 0x65, 0x1a, 0x2d, 0x2e, 0x72, 0x65, 0x67, + 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x46, 0x65, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x15, 0x41, 0x64, 0x64, + 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x12, 0x2c, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, + 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x41, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x1a, 0x34, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, + 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x41, 0x6c, 0x6c, 0x6f, + 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x12, 0x2f, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x1a, 0x37, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, + 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xd5, 0x01, + 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x65, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x72, 0x65, 0x67, 0x65, 0x6e, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x72, 0x65, + 0x67, 0x65, 0x6e, 0x2d, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, + 0x65, 0x67, 0x65, 0x6e, 0x2f, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x2f, 0x76, + 0x31, 0x3b, 0x65, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x52, 0x45, 0x58, 0xaa, 0x02, 0x12, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x2e, 0x45, 0x63, 0x6f, 0x63, + 0x72, 0x65, 0x64, 0x69, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x12, 0x52, 0x65, 0x67, 0x65, 0x6e, + 0x5c, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1e, + 0x52, 0x65, 0x67, 0x65, 0x6e, 0x5c, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, 0x74, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x14, 0x52, 0x65, 0x67, 0x65, 0x6e, 0x3a, 0x3a, 0x45, 0x63, 0x6f, 0x63, 0x72, 0x65, 0x64, 0x69, + 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -25932,7 +26942,7 @@ func file_regen_ecocredit_v1_tx_proto_rawDescGZIP() []byte { return file_regen_ecocredit_v1_tx_proto_rawDescData } -var file_regen_ecocredit_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 47) +var file_regen_ecocredit_v1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 49) var file_regen_ecocredit_v1_tx_proto_goTypes = []interface{}{ (*MsgAddCreditType)(nil), // 0: regen.ecocredit.v1.MsgAddCreditType (*MsgAddCreditTypeResponse)(nil), // 1: regen.ecocredit.v1.MsgAddCreditTypeResponse @@ -25963,50 +26973,52 @@ var file_regen_ecocredit_v1_tx_proto_goTypes = []interface{}{ (*MsgUpdateProjectMetadata)(nil), // 26: regen.ecocredit.v1.MsgUpdateProjectMetadata (*MsgUpdateProjectMetadataResponse)(nil), // 27: regen.ecocredit.v1.MsgUpdateProjectMetadataResponse (*MsgBridge)(nil), // 28: regen.ecocredit.v1.MsgBridge - (*MsgBridgeResponse)(nil), // 29: regen.ecocredit.v1.MsgBridgeResponse - (*MsgBridgeReceive)(nil), // 30: regen.ecocredit.v1.MsgBridgeReceive - (*MsgBridgeReceiveResponse)(nil), // 31: regen.ecocredit.v1.MsgBridgeReceiveResponse - (*MsgAddClassCreator)(nil), // 32: regen.ecocredit.v1.MsgAddClassCreator - (*MsgSetClassCreatorAllowlist)(nil), // 33: regen.ecocredit.v1.MsgSetClassCreatorAllowlist - (*MsgSetClassCreatorAllowlistResponse)(nil), // 34: regen.ecocredit.v1.MsgSetClassCreatorAllowlistResponse - (*MsgAddClassCreatorResponse)(nil), // 35: regen.ecocredit.v1.MsgAddClassCreatorResponse - (*MsgRemoveClassCreator)(nil), // 36: regen.ecocredit.v1.MsgRemoveClassCreator - (*MsgRemoveClassCreatorResponse)(nil), // 37: regen.ecocredit.v1.MsgRemoveClassCreatorResponse - (*MsgUpdateClassFee)(nil), // 38: regen.ecocredit.v1.MsgUpdateClassFee - (*MsgUpdateClassFeeResponse)(nil), // 39: regen.ecocredit.v1.MsgUpdateClassFeeResponse - (*MsgAddAllowedBridgeChain)(nil), // 40: regen.ecocredit.v1.MsgAddAllowedBridgeChain - (*MsgAddAllowedBridgeChainResponse)(nil), // 41: regen.ecocredit.v1.MsgAddAllowedBridgeChainResponse - (*MsgRemoveAllowedBridgeChain)(nil), // 42: regen.ecocredit.v1.MsgRemoveAllowedBridgeChain - (*MsgRemoveAllowedBridgeChainResponse)(nil), // 43: regen.ecocredit.v1.MsgRemoveAllowedBridgeChainResponse - (*MsgSend_SendCredits)(nil), // 44: regen.ecocredit.v1.MsgSend.SendCredits - (*MsgBridgeReceive_Batch)(nil), // 45: regen.ecocredit.v1.MsgBridgeReceive.Batch - (*MsgBridgeReceive_Project)(nil), // 46: regen.ecocredit.v1.MsgBridgeReceive.Project - (*CreditType)(nil), // 47: regen.ecocredit.v1.CreditType - (*v1beta1.Coin)(nil), // 48: cosmos.base.v1beta1.Coin - (*BatchIssuance)(nil), // 49: regen.ecocredit.v1.BatchIssuance - (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp - (*OriginTx)(nil), // 51: regen.ecocredit.v1.OriginTx - (*Credits)(nil), // 52: regen.ecocredit.v1.Credits + (*MsgUpdateBatchMetadata)(nil), // 29: regen.ecocredit.v1.MsgUpdateBatchMetadata + (*MsgUpdateBatchMetadataResponse)(nil), // 30: regen.ecocredit.v1.MsgUpdateBatchMetadataResponse + (*MsgBridgeResponse)(nil), // 31: regen.ecocredit.v1.MsgBridgeResponse + (*MsgBridgeReceive)(nil), // 32: regen.ecocredit.v1.MsgBridgeReceive + (*MsgBridgeReceiveResponse)(nil), // 33: regen.ecocredit.v1.MsgBridgeReceiveResponse + (*MsgAddClassCreator)(nil), // 34: regen.ecocredit.v1.MsgAddClassCreator + (*MsgSetClassCreatorAllowlist)(nil), // 35: regen.ecocredit.v1.MsgSetClassCreatorAllowlist + (*MsgSetClassCreatorAllowlistResponse)(nil), // 36: regen.ecocredit.v1.MsgSetClassCreatorAllowlistResponse + (*MsgAddClassCreatorResponse)(nil), // 37: regen.ecocredit.v1.MsgAddClassCreatorResponse + (*MsgRemoveClassCreator)(nil), // 38: regen.ecocredit.v1.MsgRemoveClassCreator + (*MsgRemoveClassCreatorResponse)(nil), // 39: regen.ecocredit.v1.MsgRemoveClassCreatorResponse + (*MsgUpdateClassFee)(nil), // 40: regen.ecocredit.v1.MsgUpdateClassFee + (*MsgUpdateClassFeeResponse)(nil), // 41: regen.ecocredit.v1.MsgUpdateClassFeeResponse + (*MsgAddAllowedBridgeChain)(nil), // 42: regen.ecocredit.v1.MsgAddAllowedBridgeChain + (*MsgAddAllowedBridgeChainResponse)(nil), // 43: regen.ecocredit.v1.MsgAddAllowedBridgeChainResponse + (*MsgRemoveAllowedBridgeChain)(nil), // 44: regen.ecocredit.v1.MsgRemoveAllowedBridgeChain + (*MsgRemoveAllowedBridgeChainResponse)(nil), // 45: regen.ecocredit.v1.MsgRemoveAllowedBridgeChainResponse + (*MsgSend_SendCredits)(nil), // 46: regen.ecocredit.v1.MsgSend.SendCredits + (*MsgBridgeReceive_Batch)(nil), // 47: regen.ecocredit.v1.MsgBridgeReceive.Batch + (*MsgBridgeReceive_Project)(nil), // 48: regen.ecocredit.v1.MsgBridgeReceive.Project + (*CreditType)(nil), // 49: regen.ecocredit.v1.CreditType + (*v1beta1.Coin)(nil), // 50: cosmos.base.v1beta1.Coin + (*BatchIssuance)(nil), // 51: regen.ecocredit.v1.BatchIssuance + (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*OriginTx)(nil), // 53: regen.ecocredit.v1.OriginTx + (*Credits)(nil), // 54: regen.ecocredit.v1.Credits } var file_regen_ecocredit_v1_tx_proto_depIdxs = []int32{ - 47, // 0: regen.ecocredit.v1.MsgAddCreditType.credit_type:type_name -> regen.ecocredit.v1.CreditType - 48, // 1: regen.ecocredit.v1.MsgCreateClass.fee:type_name -> cosmos.base.v1beta1.Coin - 49, // 2: regen.ecocredit.v1.MsgCreateBatch.issuance:type_name -> regen.ecocredit.v1.BatchIssuance - 50, // 3: regen.ecocredit.v1.MsgCreateBatch.start_date:type_name -> google.protobuf.Timestamp - 50, // 4: regen.ecocredit.v1.MsgCreateBatch.end_date:type_name -> google.protobuf.Timestamp - 51, // 5: regen.ecocredit.v1.MsgCreateBatch.origin_tx:type_name -> regen.ecocredit.v1.OriginTx - 49, // 6: regen.ecocredit.v1.MsgMintBatchCredits.issuance:type_name -> regen.ecocredit.v1.BatchIssuance - 51, // 7: regen.ecocredit.v1.MsgMintBatchCredits.origin_tx:type_name -> regen.ecocredit.v1.OriginTx - 44, // 8: regen.ecocredit.v1.MsgSend.credits:type_name -> regen.ecocredit.v1.MsgSend.SendCredits - 52, // 9: regen.ecocredit.v1.MsgRetire.credits:type_name -> regen.ecocredit.v1.Credits - 52, // 10: regen.ecocredit.v1.MsgCancel.credits:type_name -> regen.ecocredit.v1.Credits - 52, // 11: regen.ecocredit.v1.MsgBridge.credits:type_name -> regen.ecocredit.v1.Credits - 46, // 12: regen.ecocredit.v1.MsgBridgeReceive.project:type_name -> regen.ecocredit.v1.MsgBridgeReceive.Project - 45, // 13: regen.ecocredit.v1.MsgBridgeReceive.batch:type_name -> regen.ecocredit.v1.MsgBridgeReceive.Batch - 51, // 14: regen.ecocredit.v1.MsgBridgeReceive.origin_tx:type_name -> regen.ecocredit.v1.OriginTx - 48, // 15: regen.ecocredit.v1.MsgUpdateClassFee.fee:type_name -> cosmos.base.v1beta1.Coin - 50, // 16: regen.ecocredit.v1.MsgBridgeReceive.Batch.start_date:type_name -> google.protobuf.Timestamp - 50, // 17: regen.ecocredit.v1.MsgBridgeReceive.Batch.end_date:type_name -> google.protobuf.Timestamp + 49, // 0: regen.ecocredit.v1.MsgAddCreditType.credit_type:type_name -> regen.ecocredit.v1.CreditType + 50, // 1: regen.ecocredit.v1.MsgCreateClass.fee:type_name -> cosmos.base.v1beta1.Coin + 51, // 2: regen.ecocredit.v1.MsgCreateBatch.issuance:type_name -> regen.ecocredit.v1.BatchIssuance + 52, // 3: regen.ecocredit.v1.MsgCreateBatch.start_date:type_name -> google.protobuf.Timestamp + 52, // 4: regen.ecocredit.v1.MsgCreateBatch.end_date:type_name -> google.protobuf.Timestamp + 53, // 5: regen.ecocredit.v1.MsgCreateBatch.origin_tx:type_name -> regen.ecocredit.v1.OriginTx + 51, // 6: regen.ecocredit.v1.MsgMintBatchCredits.issuance:type_name -> regen.ecocredit.v1.BatchIssuance + 53, // 7: regen.ecocredit.v1.MsgMintBatchCredits.origin_tx:type_name -> regen.ecocredit.v1.OriginTx + 46, // 8: regen.ecocredit.v1.MsgSend.credits:type_name -> regen.ecocredit.v1.MsgSend.SendCredits + 54, // 9: regen.ecocredit.v1.MsgRetire.credits:type_name -> regen.ecocredit.v1.Credits + 54, // 10: regen.ecocredit.v1.MsgCancel.credits:type_name -> regen.ecocredit.v1.Credits + 54, // 11: regen.ecocredit.v1.MsgBridge.credits:type_name -> regen.ecocredit.v1.Credits + 48, // 12: regen.ecocredit.v1.MsgBridgeReceive.project:type_name -> regen.ecocredit.v1.MsgBridgeReceive.Project + 47, // 13: regen.ecocredit.v1.MsgBridgeReceive.batch:type_name -> regen.ecocredit.v1.MsgBridgeReceive.Batch + 53, // 14: regen.ecocredit.v1.MsgBridgeReceive.origin_tx:type_name -> regen.ecocredit.v1.OriginTx + 50, // 15: regen.ecocredit.v1.MsgUpdateClassFee.fee:type_name -> cosmos.base.v1beta1.Coin + 52, // 16: regen.ecocredit.v1.MsgBridgeReceive.Batch.start_date:type_name -> google.protobuf.Timestamp + 52, // 17: regen.ecocredit.v1.MsgBridgeReceive.Batch.end_date:type_name -> google.protobuf.Timestamp 2, // 18: regen.ecocredit.v1.Msg.CreateClass:input_type -> regen.ecocredit.v1.MsgCreateClass 4, // 19: regen.ecocredit.v1.Msg.CreateProject:input_type -> regen.ecocredit.v1.MsgCreateProject 6, // 20: regen.ecocredit.v1.Msg.CreateBatch:input_type -> regen.ecocredit.v1.MsgCreateBatch @@ -26020,39 +27032,41 @@ var file_regen_ecocredit_v1_tx_proto_depIdxs = []int32{ 22, // 28: regen.ecocredit.v1.Msg.UpdateClassMetadata:input_type -> regen.ecocredit.v1.MsgUpdateClassMetadata 24, // 29: regen.ecocredit.v1.Msg.UpdateProjectAdmin:input_type -> regen.ecocredit.v1.MsgUpdateProjectAdmin 26, // 30: regen.ecocredit.v1.Msg.UpdateProjectMetadata:input_type -> regen.ecocredit.v1.MsgUpdateProjectMetadata - 28, // 31: regen.ecocredit.v1.Msg.Bridge:input_type -> regen.ecocredit.v1.MsgBridge - 30, // 32: regen.ecocredit.v1.Msg.BridgeReceive:input_type -> regen.ecocredit.v1.MsgBridgeReceive - 0, // 33: regen.ecocredit.v1.Msg.AddCreditType:input_type -> regen.ecocredit.v1.MsgAddCreditType - 33, // 34: regen.ecocredit.v1.Msg.SetClassCreatorAllowlist:input_type -> regen.ecocredit.v1.MsgSetClassCreatorAllowlist - 32, // 35: regen.ecocredit.v1.Msg.AddClassCreator:input_type -> regen.ecocredit.v1.MsgAddClassCreator - 36, // 36: regen.ecocredit.v1.Msg.RemoveClassCreator:input_type -> regen.ecocredit.v1.MsgRemoveClassCreator - 38, // 37: regen.ecocredit.v1.Msg.UpdateClassFee:input_type -> regen.ecocredit.v1.MsgUpdateClassFee - 40, // 38: regen.ecocredit.v1.Msg.AddAllowedBridgeChain:input_type -> regen.ecocredit.v1.MsgAddAllowedBridgeChain - 42, // 39: regen.ecocredit.v1.Msg.RemoveAllowedBridgeChain:input_type -> regen.ecocredit.v1.MsgRemoveAllowedBridgeChain - 3, // 40: regen.ecocredit.v1.Msg.CreateClass:output_type -> regen.ecocredit.v1.MsgCreateClassResponse - 5, // 41: regen.ecocredit.v1.Msg.CreateProject:output_type -> regen.ecocredit.v1.MsgCreateProjectResponse - 7, // 42: regen.ecocredit.v1.Msg.CreateBatch:output_type -> regen.ecocredit.v1.MsgCreateBatchResponse - 9, // 43: regen.ecocredit.v1.Msg.MintBatchCredits:output_type -> regen.ecocredit.v1.MsgMintBatchCreditsResponse - 11, // 44: regen.ecocredit.v1.Msg.SealBatch:output_type -> regen.ecocredit.v1.MsgSealBatchResponse - 13, // 45: regen.ecocredit.v1.Msg.Send:output_type -> regen.ecocredit.v1.MsgSendResponse - 15, // 46: regen.ecocredit.v1.Msg.Retire:output_type -> regen.ecocredit.v1.MsgRetireResponse - 17, // 47: regen.ecocredit.v1.Msg.Cancel:output_type -> regen.ecocredit.v1.MsgCancelResponse - 19, // 48: regen.ecocredit.v1.Msg.UpdateClassAdmin:output_type -> regen.ecocredit.v1.MsgUpdateClassAdminResponse - 21, // 49: regen.ecocredit.v1.Msg.UpdateClassIssuers:output_type -> regen.ecocredit.v1.MsgUpdateClassIssuersResponse - 23, // 50: regen.ecocredit.v1.Msg.UpdateClassMetadata:output_type -> regen.ecocredit.v1.MsgUpdateClassMetadataResponse - 25, // 51: regen.ecocredit.v1.Msg.UpdateProjectAdmin:output_type -> regen.ecocredit.v1.MsgUpdateProjectAdminResponse - 27, // 52: regen.ecocredit.v1.Msg.UpdateProjectMetadata:output_type -> regen.ecocredit.v1.MsgUpdateProjectMetadataResponse - 29, // 53: regen.ecocredit.v1.Msg.Bridge:output_type -> regen.ecocredit.v1.MsgBridgeResponse - 31, // 54: regen.ecocredit.v1.Msg.BridgeReceive:output_type -> regen.ecocredit.v1.MsgBridgeReceiveResponse - 1, // 55: regen.ecocredit.v1.Msg.AddCreditType:output_type -> regen.ecocredit.v1.MsgAddCreditTypeResponse - 34, // 56: regen.ecocredit.v1.Msg.SetClassCreatorAllowlist:output_type -> regen.ecocredit.v1.MsgSetClassCreatorAllowlistResponse - 35, // 57: regen.ecocredit.v1.Msg.AddClassCreator:output_type -> regen.ecocredit.v1.MsgAddClassCreatorResponse - 37, // 58: regen.ecocredit.v1.Msg.RemoveClassCreator:output_type -> regen.ecocredit.v1.MsgRemoveClassCreatorResponse - 39, // 59: regen.ecocredit.v1.Msg.UpdateClassFee:output_type -> regen.ecocredit.v1.MsgUpdateClassFeeResponse - 41, // 60: regen.ecocredit.v1.Msg.AddAllowedBridgeChain:output_type -> regen.ecocredit.v1.MsgAddAllowedBridgeChainResponse - 43, // 61: regen.ecocredit.v1.Msg.RemoveAllowedBridgeChain:output_type -> regen.ecocredit.v1.MsgRemoveAllowedBridgeChainResponse - 40, // [40:62] is the sub-list for method output_type - 18, // [18:40] is the sub-list for method input_type + 29, // 31: regen.ecocredit.v1.Msg.UpdateBatchMetadata:input_type -> regen.ecocredit.v1.MsgUpdateBatchMetadata + 28, // 32: regen.ecocredit.v1.Msg.Bridge:input_type -> regen.ecocredit.v1.MsgBridge + 32, // 33: regen.ecocredit.v1.Msg.BridgeReceive:input_type -> regen.ecocredit.v1.MsgBridgeReceive + 0, // 34: regen.ecocredit.v1.Msg.AddCreditType:input_type -> regen.ecocredit.v1.MsgAddCreditType + 35, // 35: regen.ecocredit.v1.Msg.SetClassCreatorAllowlist:input_type -> regen.ecocredit.v1.MsgSetClassCreatorAllowlist + 34, // 36: regen.ecocredit.v1.Msg.AddClassCreator:input_type -> regen.ecocredit.v1.MsgAddClassCreator + 38, // 37: regen.ecocredit.v1.Msg.RemoveClassCreator:input_type -> regen.ecocredit.v1.MsgRemoveClassCreator + 40, // 38: regen.ecocredit.v1.Msg.UpdateClassFee:input_type -> regen.ecocredit.v1.MsgUpdateClassFee + 42, // 39: regen.ecocredit.v1.Msg.AddAllowedBridgeChain:input_type -> regen.ecocredit.v1.MsgAddAllowedBridgeChain + 44, // 40: regen.ecocredit.v1.Msg.RemoveAllowedBridgeChain:input_type -> regen.ecocredit.v1.MsgRemoveAllowedBridgeChain + 3, // 41: regen.ecocredit.v1.Msg.CreateClass:output_type -> regen.ecocredit.v1.MsgCreateClassResponse + 5, // 42: regen.ecocredit.v1.Msg.CreateProject:output_type -> regen.ecocredit.v1.MsgCreateProjectResponse + 7, // 43: regen.ecocredit.v1.Msg.CreateBatch:output_type -> regen.ecocredit.v1.MsgCreateBatchResponse + 9, // 44: regen.ecocredit.v1.Msg.MintBatchCredits:output_type -> regen.ecocredit.v1.MsgMintBatchCreditsResponse + 11, // 45: regen.ecocredit.v1.Msg.SealBatch:output_type -> regen.ecocredit.v1.MsgSealBatchResponse + 13, // 46: regen.ecocredit.v1.Msg.Send:output_type -> regen.ecocredit.v1.MsgSendResponse + 15, // 47: regen.ecocredit.v1.Msg.Retire:output_type -> regen.ecocredit.v1.MsgRetireResponse + 17, // 48: regen.ecocredit.v1.Msg.Cancel:output_type -> regen.ecocredit.v1.MsgCancelResponse + 19, // 49: regen.ecocredit.v1.Msg.UpdateClassAdmin:output_type -> regen.ecocredit.v1.MsgUpdateClassAdminResponse + 21, // 50: regen.ecocredit.v1.Msg.UpdateClassIssuers:output_type -> regen.ecocredit.v1.MsgUpdateClassIssuersResponse + 23, // 51: regen.ecocredit.v1.Msg.UpdateClassMetadata:output_type -> regen.ecocredit.v1.MsgUpdateClassMetadataResponse + 25, // 52: regen.ecocredit.v1.Msg.UpdateProjectAdmin:output_type -> regen.ecocredit.v1.MsgUpdateProjectAdminResponse + 27, // 53: regen.ecocredit.v1.Msg.UpdateProjectMetadata:output_type -> regen.ecocredit.v1.MsgUpdateProjectMetadataResponse + 30, // 54: regen.ecocredit.v1.Msg.UpdateBatchMetadata:output_type -> regen.ecocredit.v1.MsgUpdateBatchMetadataResponse + 31, // 55: regen.ecocredit.v1.Msg.Bridge:output_type -> regen.ecocredit.v1.MsgBridgeResponse + 33, // 56: regen.ecocredit.v1.Msg.BridgeReceive:output_type -> regen.ecocredit.v1.MsgBridgeReceiveResponse + 1, // 57: regen.ecocredit.v1.Msg.AddCreditType:output_type -> regen.ecocredit.v1.MsgAddCreditTypeResponse + 36, // 58: regen.ecocredit.v1.Msg.SetClassCreatorAllowlist:output_type -> regen.ecocredit.v1.MsgSetClassCreatorAllowlistResponse + 37, // 59: regen.ecocredit.v1.Msg.AddClassCreator:output_type -> regen.ecocredit.v1.MsgAddClassCreatorResponse + 39, // 60: regen.ecocredit.v1.Msg.RemoveClassCreator:output_type -> regen.ecocredit.v1.MsgRemoveClassCreatorResponse + 41, // 61: regen.ecocredit.v1.Msg.UpdateClassFee:output_type -> regen.ecocredit.v1.MsgUpdateClassFeeResponse + 43, // 62: regen.ecocredit.v1.Msg.AddAllowedBridgeChain:output_type -> regen.ecocredit.v1.MsgAddAllowedBridgeChainResponse + 45, // 63: regen.ecocredit.v1.Msg.RemoveAllowedBridgeChain:output_type -> regen.ecocredit.v1.MsgRemoveAllowedBridgeChainResponse + 41, // [41:64] is the sub-list for method output_type + 18, // [18:41] is the sub-list for method input_type 18, // [18:18] is the sub-list for extension type_name 18, // [18:18] is the sub-list for extension extendee 0, // [0:18] is the sub-list for field type_name @@ -26415,7 +27429,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgBridgeResponse); i { + switch v := v.(*MsgUpdateBatchMetadata); i { case 0: return &v.state case 1: @@ -26427,7 +27441,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgBridgeReceive); i { + switch v := v.(*MsgUpdateBatchMetadataResponse); i { case 0: return &v.state case 1: @@ -26439,7 +27453,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgBridgeReceiveResponse); i { + switch v := v.(*MsgBridgeResponse); i { case 0: return &v.state case 1: @@ -26451,7 +27465,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgAddClassCreator); i { + switch v := v.(*MsgBridgeReceive); i { case 0: return &v.state case 1: @@ -26463,7 +27477,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgSetClassCreatorAllowlist); i { + switch v := v.(*MsgBridgeReceiveResponse); i { case 0: return &v.state case 1: @@ -26475,7 +27489,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgSetClassCreatorAllowlistResponse); i { + switch v := v.(*MsgAddClassCreator); i { case 0: return &v.state case 1: @@ -26487,7 +27501,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgAddClassCreatorResponse); i { + switch v := v.(*MsgSetClassCreatorAllowlist); i { case 0: return &v.state case 1: @@ -26499,7 +27513,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgRemoveClassCreator); i { + switch v := v.(*MsgSetClassCreatorAllowlistResponse); i { case 0: return &v.state case 1: @@ -26511,7 +27525,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgRemoveClassCreatorResponse); i { + switch v := v.(*MsgAddClassCreatorResponse); i { case 0: return &v.state case 1: @@ -26523,7 +27537,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgUpdateClassFee); i { + switch v := v.(*MsgRemoveClassCreator); i { case 0: return &v.state case 1: @@ -26535,7 +27549,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgUpdateClassFeeResponse); i { + switch v := v.(*MsgRemoveClassCreatorResponse); i { case 0: return &v.state case 1: @@ -26547,7 +27561,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgAddAllowedBridgeChain); i { + switch v := v.(*MsgUpdateClassFee); i { case 0: return &v.state case 1: @@ -26559,7 +27573,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgAddAllowedBridgeChainResponse); i { + switch v := v.(*MsgUpdateClassFeeResponse); i { case 0: return &v.state case 1: @@ -26571,7 +27585,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgRemoveAllowedBridgeChain); i { + switch v := v.(*MsgAddAllowedBridgeChain); i { case 0: return &v.state case 1: @@ -26583,7 +27597,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgRemoveAllowedBridgeChainResponse); i { + switch v := v.(*MsgAddAllowedBridgeChainResponse); i { case 0: return &v.state case 1: @@ -26595,7 +27609,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgSend_SendCredits); i { + switch v := v.(*MsgRemoveAllowedBridgeChain); i { case 0: return &v.state case 1: @@ -26607,7 +27621,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgBridgeReceive_Batch); i { + switch v := v.(*MsgRemoveAllowedBridgeChainResponse); i { case 0: return &v.state case 1: @@ -26619,6 +27633,30 @@ func file_regen_ecocredit_v1_tx_proto_init() { } } file_regen_ecocredit_v1_tx_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgSend_SendCredits); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_regen_ecocredit_v1_tx_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgBridgeReceive_Batch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_regen_ecocredit_v1_tx_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MsgBridgeReceive_Project); i { case 0: return &v.state @@ -26637,7 +27675,7 @@ func file_regen_ecocredit_v1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_regen_ecocredit_v1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 47, + NumMessages: 49, NumExtensions: 0, NumServices: 1, }, diff --git a/api/regen/ecocredit/v1/tx_grpc.pb.go b/api/regen/ecocredit/v1/tx_grpc.pb.go index a672f9ad97..680a8f3df5 100644 --- a/api/regen/ecocredit/v1/tx_grpc.pb.go +++ b/api/regen/ecocredit/v1/tx_grpc.pb.go @@ -90,6 +90,11 @@ type MsgClient interface { // UpdateProjectMetadata updates the project metadata. Only the admin of the // project can update the project. UpdateProjectMetadata(ctx context.Context, in *MsgUpdateProjectMetadata, opts ...grpc.CallOption) (*MsgUpdateProjectMetadataResponse, error) + // UpdateBatchMetadata updates the batch metadata. Only an "open" batch can be + // updated and only the issuer of the batch can update the batch. + // + // Since Revision 1 + UpdateBatchMetadata(ctx context.Context, in *MsgUpdateBatchMetadata, opts ...grpc.CallOption) (*MsgUpdateBatchMetadataResponse, error) // Bridge processes credits being sent back to the source chain. When credits // are sent back to the source chain, the credits are cancelled and an event // is emitted to be handled by an external bridge service. @@ -268,6 +273,15 @@ func (c *msgClient) UpdateProjectMetadata(ctx context.Context, in *MsgUpdateProj return out, nil } +func (c *msgClient) UpdateBatchMetadata(ctx context.Context, in *MsgUpdateBatchMetadata, opts ...grpc.CallOption) (*MsgUpdateBatchMetadataResponse, error) { + out := new(MsgUpdateBatchMetadataResponse) + err := c.cc.Invoke(ctx, "/regen.ecocredit.v1.Msg/UpdateBatchMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) Bridge(ctx context.Context, in *MsgBridge, opts ...grpc.CallOption) (*MsgBridgeResponse, error) { out := new(MsgBridgeResponse) err := c.cc.Invoke(ctx, "/regen.ecocredit.v1.Msg/Bridge", in, out, opts...) @@ -421,6 +435,11 @@ type MsgServer interface { // UpdateProjectMetadata updates the project metadata. Only the admin of the // project can update the project. UpdateProjectMetadata(context.Context, *MsgUpdateProjectMetadata) (*MsgUpdateProjectMetadataResponse, error) + // UpdateBatchMetadata updates the batch metadata. Only an "open" batch can be + // updated and only the issuer of the batch can update the batch. + // + // Since Revision 1 + UpdateBatchMetadata(context.Context, *MsgUpdateBatchMetadata) (*MsgUpdateBatchMetadataResponse, error) // Bridge processes credits being sent back to the source chain. When credits // are sent back to the source chain, the credits are cancelled and an event // is emitted to be handled by an external bridge service. @@ -518,6 +537,9 @@ func (UnimplementedMsgServer) UpdateProjectAdmin(context.Context, *MsgUpdateProj func (UnimplementedMsgServer) UpdateProjectMetadata(context.Context, *MsgUpdateProjectMetadata) (*MsgUpdateProjectMetadataResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateProjectMetadata not implemented") } +func (UnimplementedMsgServer) UpdateBatchMetadata(context.Context, *MsgUpdateBatchMetadata) (*MsgUpdateBatchMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateBatchMetadata not implemented") +} func (UnimplementedMsgServer) Bridge(context.Context, *MsgBridge) (*MsgBridgeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Bridge not implemented") } @@ -792,6 +814,24 @@ func _Msg_UpdateProjectMetadata_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Msg_UpdateBatchMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateBatchMetadata) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateBatchMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/regen.ecocredit.v1.Msg/UpdateBatchMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateBatchMetadata(ctx, req.(*MsgUpdateBatchMetadata)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_Bridge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgBridge) if err := dec(in); err != nil { @@ -1013,6 +1053,10 @@ var Msg_ServiceDesc = grpc.ServiceDesc{ MethodName: "UpdateProjectMetadata", Handler: _Msg_UpdateProjectMetadata_Handler, }, + { + MethodName: "UpdateBatchMetadata", + Handler: _Msg_UpdateBatchMetadata_Handler, + }, { MethodName: "Bridge", Handler: _Msg_Bridge_Handler, diff --git a/proto/regen/ecocredit/v1/events.proto b/proto/regen/ecocredit/v1/events.proto index a535dc58aa..4379a529ad 100644 --- a/proto/regen/ecocredit/v1/events.proto +++ b/proto/regen/ecocredit/v1/events.proto @@ -169,6 +169,16 @@ message EventUpdateProjectMetadata { string project_id = 1; } +// EventUpdateBatchMetadata is emitted when the credit batch metadata is +// changed. +// +// Since Revision 1 +message EventUpdateBatchMetadata { + + // batch_denom is the unique identifier of the batch that was updated. + string batch_denom = 1; +} + // EventSealBatch is emitted when a batch is sealed. message EventSealBatch { diff --git a/proto/regen/ecocredit/v1/tx.proto b/proto/regen/ecocredit/v1/tx.proto index a72f0f7ff5..05372b2ba4 100644 --- a/proto/regen/ecocredit/v1/tx.proto +++ b/proto/regen/ecocredit/v1/tx.proto @@ -101,6 +101,13 @@ service Msg { rpc UpdateProjectMetadata(MsgUpdateProjectMetadata) returns (MsgUpdateProjectMetadataResponse); + // UpdateBatchMetadata updates the batch metadata. Only an "open" batch can be + // updated and only the issuer of the batch can update the batch. + // + // Since Revision 1 + rpc UpdateBatchMetadata(MsgUpdateBatchMetadata) + returns (MsgUpdateBatchMetadataResponse); + // Bridge processes credits being sent back to the source chain. When credits // are sent back to the source chain, the credits are cancelled and an event // is emitted to be handled by an external bridge service. @@ -548,6 +555,29 @@ message MsgBridge { repeated Credits credits = 4; } +// MsgUpdateBatchMetadata is the Msg/UpdateBatchMetadata request type. +// +// Since Revision 1 +message MsgUpdateBatchMetadata { + option (cosmos.msg.v1.signer) = "issuer"; + + // issuer is the address of the account that is the issuer of the batch. + string issuer = 1; + + // batch_denom is the unique identifier of the batch. + string batch_denom = 2; + + // new_metadata is new metadata that will replace the existing metadata. It + // can be any arbitrary string with a maximum length of 256 characters that + // includes or references the metadata to attach to the batch. + string new_metadata = 3; +} + +// MsgUpdateBatchMetadataResponse is the Msg/UpdateBatchMetadataResponse response type. +// +// Since Revision 1 +message MsgUpdateBatchMetadataResponse {} + // MsgBridgeResponse is the Msg/Bridge response type. message MsgBridgeResponse {} diff --git a/x/ecocredit/base/client/tx.go b/x/ecocredit/base/client/tx.go index a75713e5eb..ecc2d82efc 100644 --- a/x/ecocredit/base/client/tx.go +++ b/x/ecocredit/base/client/tx.go @@ -489,6 +489,7 @@ Example JSON: return txFlags(cmd) } +// TxUpdateClassMetadataCmd returns a transaction command that updates class metadata. func TxUpdateClassMetadataCmd() *cobra.Command { cmd := &cobra.Command{ Use: "update-class-metadata [class-id] [new-metadata]", @@ -522,6 +523,7 @@ Parameters: return txFlags(cmd) } +// TxUpdateClassAdminCmd returns a transaction command that updates class admin. func TxUpdateClassAdminCmd() *cobra.Command { cmd := &cobra.Command{ Use: "update-class-admin [class-id] [new-admin]", @@ -557,6 +559,7 @@ Parameters: return txFlags(cmd) } +// TxUpdateClassIssuersCmd returns a transaction command that updates class issuers. func TxUpdateClassIssuersCmd() *cobra.Command { cmd := &cobra.Command{ Use: "update-class-issuers [class-id]", @@ -618,6 +621,7 @@ regen tx ecocredit update-class-issuers C01 --add-issuers addr1,addr2 --remove-i return txFlags(cmd) } +// TxUpdateProjectAdminCmd returns a transaction command that updates project admin. func TxUpdateProjectAdminCmd() *cobra.Command { cmd := &cobra.Command{ Use: "update-project-admin [project-id] [new-admin] [flags]", @@ -653,6 +657,7 @@ Parameters: return txFlags(cmd) } +// TxUpdateProjectMetadataCmd returns a transaction command that updates project metadata. func TxUpdateProjectMetadataCmd() *cobra.Command { cmd := &cobra.Command{ Use: "update-project-metadata [project-id] [new-metadata]", @@ -678,3 +683,37 @@ func TxUpdateProjectMetadataCmd() *cobra.Command { return txFlags(cmd) } + +// TxUpdateBatchMetadataCmd returns a transaction command that updates batch metadata. +func TxUpdateBatchMetadataCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "update-batch-metadata [batch-denom] [new-metadata]", + Short: "Updates the metadata for a specific credit batch", + Long: `Updates the metadata for a specific credit batch. + +The '--from' flag must equal the credit batch issuer. + +Parameters: + +- batch-denom: the batch denom of the credit batch to be updated +- new-metadata: any arbitrary metadata to attach to the credit batch`, + Args: cobra.ExactArgs(2), + Example: `regen tx ecocredit update-batch-metadata C01-001-20200101-20210101-001 regen:13toVgf5UjYBz6J29x28pLQyjKz5FpcW3f4bT5uRKGxGREWGKjEdXYG.rdf`, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := sdkclient.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.MsgUpdateBatchMetadata{ + Issuer: clientCtx.GetFromAddress().String(), + BatchDenom: args[0], + NewMetadata: args[1], + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg) + }, + } + + return txFlags(cmd) +} diff --git a/x/ecocredit/base/keeper/features/msg_update_batch_metadata.feature b/x/ecocredit/base/keeper/features/msg_update_batch_metadata.feature new file mode 100644 index 0000000000..78cd53b00c --- /dev/null +++ b/x/ecocredit/base/keeper/features/msg_update_batch_metadata.feature @@ -0,0 +1,93 @@ +Feature: Msg/UpdateBatchMetadata + + The metadata of a credit batch can be updated: + - when the credit batch exists + - when the credit batch is open + - when the issuer is the issuer of the credit batch + - the credit batch metadata is updated + + Rule: The credit batch must exist + + Background: + Given a credit type with abbreviation "C" + And a credit class with id "C01" and issuer alice + And a project with id "C01-001" + And a credit batch with batch denom "C01-001-20200101-20210101-001" and issuer alice + + Scenario: the credit batch exists + When alice attempts to update batch metadata with batch denom "C01-001-20200101-20210101-001" + Then expect no error + + Scenario: the credit batch does not exist + When alice attempts to update batch metadata with batch denom "C01-001-20200101-20210101-002" + Then expect the error "could not get credit batch with denom C01-001-20200101-20210101-002: not found: invalid request" + + Rule: The credit batch must be open + + Background: + Given a credit type with abbreviation "C" + And a credit class with id "C01" and issuer alice + And a project with id "C01-001" + + Scenario: the credit batch is open + Given a credit batch with batch denom "C01-001-20200101-20210101-001" issuer alice and open "true" + When alice attempts to update batch metadata with batch denom "C01-001-20200101-20210101-001" + Then expect no error + + Scenario: the credit batch is not open + Given a credit batch with batch denom "C01-001-20200101-20210101-001" issuer alice and open "false" + When alice attempts to update batch metadata with batch denom "C01-001-20200101-20210101-001" + Then expect the error "credit batch C01-001-20200101-20210101-001 is not open: unauthorized" + + Rule: The issuer must be the issuer of the credit batch + + Background: + Given a credit type with abbreviation "C" + And a credit class with id "C01" and issuer alice + And a project with id "C01-001" + And a credit batch with batch denom "C01-001-20200101-20210101-001" and issuer alice + + Scenario: the issuer is the issuer of the credit batch + When alice attempts to update batch metadata with batch denom "C01-001-20200101-20210101-001" + Then expect no error + + Scenario: the issuer is not the issuer of the credit batch + When bob attempts to update batch metadata with batch denom "C01-001-20200101-20210101-001" + Then expect error contains "is not the issuer of credit batch C01-001-20200101-20210101-001: unauthorized" + + Rule: The credit batch metadata is updated + + Background: + Given a credit type with abbreviation "C" + And a credit class with id "C01" and issuer alice + And a project with id "C01-001" + And a credit batch with batch denom "C01-001-20200101-20210101-001" and issuer alice + + Scenario: the credit batch metadata is updated + When alice attempts to update batch metadata with batch denom "C01-001-20200101-20210101-001" and new metadata + """ + regen:13toVgf5aZqSVSeJQv562xkkeoe3rr3bJWa29PHVKVf77VAkVMcDvVd.rdf + """ + Then expect credit batch with batch denom "C01-001-20200101-20210101-001" and metadata + """ + regen:13toVgf5aZqSVSeJQv562xkkeoe3rr3bJWa29PHVKVf77VAkVMcDvVd.rdf + """ + + # no failing scenario - state transitions only occur upon successful message execution + + Rule: The event is emitted + + Background: + Given a credit type with abbreviation "C" + And a credit class with id "C01" and issuer alice + And a project with id "C01-001" + And a credit batch with batch denom "C01-001-20200101-20210101-001" and issuer alice + + Scenario: EventUpdateBatchMetadata is emitted + When alice updates the batch metadata + Then expect event with properties + """ + { + "batch_denom": "C01-001-20200101-20210101-001" + } + """ diff --git a/x/ecocredit/base/keeper/msg_update_batch_metadata.go b/x/ecocredit/base/keeper/msg_update_batch_metadata.go new file mode 100644 index 0000000000..3e71215fe7 --- /dev/null +++ b/x/ecocredit/base/keeper/msg_update_batch_metadata.go @@ -0,0 +1,52 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + types "github.com/regen-network/regen-ledger/x/ecocredit/base/types/v1" +) + +// UpdateBatchMetadata updates the metadata for the batch. +func (k Keeper) UpdateBatchMetadata(ctx context.Context, req *types.MsgUpdateBatchMetadata) (*types.MsgUpdateBatchMetadataResponse, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + reqAddr, err := sdk.AccAddressFromBech32(req.Issuer) + if err != nil { + return nil, err + } + + batchInfo, err := k.stateStore.BatchTable().GetByDenom(ctx, req.BatchDenom) + if err != nil { + return nil, sdkerrors.ErrInvalidRequest.Wrapf( + "could not get credit batch with denom %s: %s", req.BatchDenom, err, + ) + } + + if !batchInfo.Open { + return nil, sdkerrors.ErrUnauthorized.Wrapf( + "credit batch %s is not open", req.BatchDenom, + ) + } + + issuer := sdk.AccAddress(batchInfo.Issuer) + if !reqAddr.Equals(issuer) { + return nil, sdkerrors.ErrUnauthorized.Wrapf( + "%s is not the issuer of credit batch %s", req.Issuer, req.BatchDenom, + ) + } + + batchInfo.Metadata = req.NewMetadata + if err = k.stateStore.BatchTable().Update(ctx, batchInfo); err != nil { + return nil, err + } + + if err = sdkCtx.EventManager().EmitTypedEvent(&types.EventUpdateBatchMetadata{ + BatchDenom: req.BatchDenom, + }); err != nil { + return nil, err + } + + return &types.MsgUpdateBatchMetadataResponse{}, err +} diff --git a/x/ecocredit/base/keeper/msg_update_batch_metadata_test.go b/x/ecocredit/base/keeper/msg_update_batch_metadata_test.go new file mode 100644 index 0000000000..4e70bcb55c --- /dev/null +++ b/x/ecocredit/base/keeper/msg_update_batch_metadata_test.go @@ -0,0 +1,180 @@ +//nolint:revive,stylecheck +package keeper + +import ( + "encoding/json" + "strconv" + "strings" + "testing" + + "github.com/gogo/protobuf/proto" + "github.com/regen-network/gocuke" + "github.com/stretchr/testify/require" + + "github.com/tendermint/tendermint/libs/rand" + + sdk "github.com/cosmos/cosmos-sdk/types" + + api "github.com/regen-network/regen-ledger/api/regen/ecocredit/v1" + "github.com/regen-network/regen-ledger/x/ecocredit/base" + types "github.com/regen-network/regen-ledger/x/ecocredit/base/types/v1" +) + +type updateBatchMetadata struct { + *baseSuite + alice sdk.AccAddress + bob sdk.AccAddress + creditTypeAbbrev string + classKey uint64 + projectKey uint64 + batchDenom string + res *types.MsgUpdateBatchMetadataResponse + err error +} + +func TestUpdateBatchMetadata(t *testing.T) { + gocuke.NewRunner(t, &updateBatchMetadata{}).Path("./features/msg_update_batch_metadata.feature").Run() +} + +func (s *updateBatchMetadata) Before(t gocuke.TestingT) { + s.baseSuite = setupBase(t) + s.alice = s.addr + s.bob = s.addr2 +} + +func (s *updateBatchMetadata) ACreditTypeWithAbbreviation(a string) { + err := s.k.stateStore.CreditTypeTable().Insert(s.ctx, &api.CreditType{ + Abbreviation: a, + Name: a, + }) + require.NoError(s.t, err) +} + +func (s *updateBatchMetadata) ACreditClassWithIdAndIssuerAlice(a string) { + cKey, err := s.k.stateStore.ClassTable().InsertReturningID(s.ctx, &api.Class{ + Id: a, + CreditTypeAbbrev: s.creditTypeAbbrev, + }) + require.NoError(s.t, err) + + err = s.k.stateStore.ClassIssuerTable().Insert(s.ctx, &api.ClassIssuer{ + ClassKey: cKey, + Issuer: s.alice, + }) + require.NoError(s.t, err) + + s.classKey = cKey +} + +func (s *updateBatchMetadata) AProjectWithId(a string) { + pKey, err := s.k.stateStore.ProjectTable().InsertReturningID(s.ctx, &api.Project{ + Id: a, + ClassKey: s.classKey, + }) + require.NoError(s.t, err) + + s.projectKey = pKey +} + +func (s *updateBatchMetadata) ACreditBatchWithBatchDenomAndIssuerAlice(a string) { + projectID := base.GetProjectIDFromBatchDenom(a) + + project, err := s.k.stateStore.ProjectTable().GetById(s.ctx, projectID) + require.NoError(s.t, err) + + _, err = s.k.stateStore.BatchTable().InsertReturningID(s.ctx, &api.Batch{ + ProjectKey: project.Key, + Issuer: s.alice, + Denom: a, + Open: true, // true unless specified + }) + require.NoError(s.t, err) + + s.batchDenom = a +} + +func (s *updateBatchMetadata) ACreditBatchWithBatchDenomIssuerAliceAndOpen(a, b string) { + projectID := base.GetProjectIDFromBatchDenom(a) + + project, err := s.k.stateStore.ProjectTable().GetById(s.ctx, projectID) + require.NoError(s.t, err) + + open, err := strconv.ParseBool(b) + require.NoError(s.t, err) + + _, err = s.k.stateStore.BatchTable().InsertReturningID(s.ctx, &api.Batch{ + ProjectKey: project.Key, + Issuer: s.alice, + Denom: a, + Open: open, + }) + require.NoError(s.t, err) + + s.batchDenom = a +} + +func (s *updateBatchMetadata) AliceAttemptsToUpdateBatchMetadataWithBatchDenom(a string) { + s.res, s.err = s.k.UpdateBatchMetadata(s.ctx, &types.MsgUpdateBatchMetadata{ + Issuer: s.alice.String(), + BatchDenom: a, + }) +} + +func (s *updateBatchMetadata) BobAttemptsToUpdateBatchMetadataWithBatchDenom(a string) { + s.res, s.err = s.k.UpdateBatchMetadata(s.ctx, &types.MsgUpdateBatchMetadata{ + Issuer: s.bob.String(), + BatchDenom: a, + }) +} + +func (s *updateBatchMetadata) AliceAttemptsToUpdateBatchMetadataWithBatchDenomAndNewMetadata(a string, b gocuke.DocString) { + s.res, s.err = s.k.UpdateBatchMetadata(s.ctx, &types.MsgUpdateBatchMetadata{ + Issuer: s.alice.String(), + BatchDenom: a, + NewMetadata: b.Content, + }) +} + +func (s *updateBatchMetadata) ExpectNoError() { + require.NoError(s.t, s.err) +} + +func (s *updateBatchMetadata) ExpectTheError(a string) { + require.EqualError(s.t, s.err, a) +} + +func (s *updateBatchMetadata) ExpectErrorContains(a string) { + require.ErrorContains(s.t, s.err, a) +} + +func (s *updateBatchMetadata) ExpectCreditBatchWithBatchDenomAndMetadata(a string, b gocuke.DocString) { + batch, err := s.stateStore.BatchTable().GetByDenom(s.ctx, a) + require.NoError(s.t, err) + + require.Equal(s.t, b.Content, batch.Metadata) +} + +func (s *updateBatchMetadata) AliceUpdatesTheBatchMetadata() { + newMetadata := rand.Str(5) + _, err := s.k.UpdateBatchMetadata(s.ctx, &types.MsgUpdateBatchMetadata{ + Issuer: s.alice.String(), + BatchDenom: s.batchDenom, + NewMetadata: newMetadata, + }) + require.NoError(s.t, err) +} + +func (s *updateBatchMetadata) ExpectEventWithProperties(a gocuke.DocString) { + var event types.EventUpdateBatchMetadata + err := json.Unmarshal([]byte(a.Content), &event) + require.NoError(s.t, err) + + events := s.sdkCtx.EventManager().Events() + lastEvent := events[len(events)-1] + + require.Equal(s.t, proto.MessageName(&event), lastEvent.Type) + require.Len(s.t, lastEvent.Attributes, 1) + + batchDenom := strings.Trim(string(lastEvent.Attributes[0].Value), `"`) + require.Equal(s.t, event.BatchDenom, batchDenom) +} diff --git a/x/ecocredit/base/simulation/msg_update_batch_metadata.go b/x/ecocredit/base/simulation/msg_update_batch_metadata.go new file mode 100644 index 0000000000..cc429026b1 --- /dev/null +++ b/x/ecocredit/base/simulation/msg_update_batch_metadata.go @@ -0,0 +1,79 @@ +package simulation + +import ( + "math/rand" + + "github.com/cosmos/cosmos-sdk/baseapp" + simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + sdk "github.com/cosmos/cosmos-sdk/types" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" + + "github.com/regen-network/regen-ledger/x/ecocredit" + "github.com/regen-network/regen-ledger/x/ecocredit/base" + types "github.com/regen-network/regen-ledger/x/ecocredit/base/types/v1" + "github.com/regen-network/regen-ledger/x/ecocredit/simulation/utils" +) + +const OpWeightMsgUpdateBatchMetadata = "op_weight_msg_update_batch_metadata" //nolint:gosec + +var TypeMsgUpdateBatchMetadata = sdk.MsgTypeURL(&types.MsgUpdateBatchMetadata{}) + +const WeightUpdateBatchMetadata = 30 + +// SimulateMsgUpdateBatchMetadata generates a MsgUpdateBatchMetadata with random values. +func SimulateMsgUpdateBatchMetadata(ak ecocredit.AccountKeeper, bk ecocredit.BankKeeper, qryClient types.QueryServer) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, sdkCtx sdk.Context, accs []simtypes.Account, chainID string, + ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + class, op, err := utils.GetRandomClass(sdkCtx, r, qryClient, TypeMsgUpdateBatchMetadata) + if err != nil { + return op, nil, err + } + + ctx := sdk.WrapSDKContext(sdkCtx) + + project, op, err := getRandomProjectFromClass(ctx, r, qryClient, TypeMsgUpdateBatchMetadata, class.Id) + if err != nil { + return op, nil, err + } + + batch, op, err := getRandomBatchFromProject(ctx, r, qryClient, TypeMsgUpdateBatchMetadata, project.Id) + if batch == nil { + return op, nil, err + } + + issuer, err := sdk.AccAddressFromBech32(batch.Issuer) + if err != nil { + return simtypes.NoOpMsg(ecocredit.ModuleName, TypeMsgUpdateBatchMetadata, err.Error()), nil, err + } + + msg := &types.MsgUpdateBatchMetadata{ + Issuer: issuer.String(), + BatchDenom: batch.Denom, + NewMetadata: simtypes.RandStringOfLength(r, simtypes.RandIntBetween(r, 10, base.MaxMetadataLength)), + } + + spendable, account, op, err := utils.GetAccountAndSpendableCoins(sdkCtx, bk, accs, issuer.String(), TypeMsgUpdateBatchMetadata) + if spendable == nil { + return op, nil, err + } + + txCtx := simulation.OperationInput{ + R: r, + App: app, + TxGen: simappparams.MakeTestEncodingConfig().TxConfig, + Cdc: nil, + Msg: msg, + MsgType: msg.Type(), + Context: sdkCtx, + SimAccount: *account, + AccountKeeper: ak, + Bankkeeper: bk, + ModuleName: ecocredit.ModuleName, + CoinsSpentInMsg: spendable, + } + + return utils.GenAndDeliverTxWithRandFees(r, txCtx) + } +} diff --git a/x/ecocredit/base/simulation/operations.go b/x/ecocredit/base/simulation/operations.go index 39ad183922..c68fe32bd8 100644 --- a/x/ecocredit/base/simulation/operations.go +++ b/x/ecocredit/base/simulation/operations.go @@ -42,8 +42,9 @@ func WeightedOperations( weightMsgUpdateClassIssuers int weightMsgUpdateClassMetadata int weightMsgCreateProject int - weightMsgUpdateProjectMetadata int weightMsgUpdateProjectAdmin int + weightMsgUpdateProjectMetadata int + weightMsgUpdateBatchMetadata int weightMsgSealBatch int weightMsgMintBatchCredits int weightMsgBridge int @@ -120,6 +121,12 @@ func WeightedOperations( }, ) + appParams.GetOrGenerate(cdc, OpWeightMsgUpdateBatchMetadata, &weightMsgUpdateBatchMetadata, nil, + func(_ *rand.Rand) { + weightMsgUpdateBatchMetadata = WeightUpdateBatchMetadata + }, + ) + appParams.GetOrGenerate(cdc, OpWeightMsgMintBatchCredits, &weightMsgMintBatchCredits, nil, func(_ *rand.Rand) { weightMsgMintBatchCredits = WeightMintBatchCredits diff --git a/x/ecocredit/base/types/v1/codec.go b/x/ecocredit/base/types/v1/codec.go index 2514e8029b..d9a3774998 100644 --- a/x/ecocredit/base/types/v1/codec.go +++ b/x/ecocredit/base/types/v1/codec.go @@ -29,6 +29,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgUpdateClassIssuers{}, "regen/MsgUpdateClassIssuers", nil) cdc.RegisterConcrete(&MsgUpdateProjectAdmin{}, "regen/MsgUpdateProjectAdmin", nil) cdc.RegisterConcrete(&MsgUpdateProjectMetadata{}, "regen/MsgUpdateProjectMetadata", nil) + cdc.RegisterConcrete(&MsgUpdateBatchMetadata{}, "regen/MsgUpdateBatchMetadata", nil) cdc.RegisterConcrete(&CreditTypeProposal{}, "regen/CreditTypeProposal", nil) cdc.RegisterConcrete(&MsgBridgeReceive{}, "regen/MsgBridgeReceive", nil) cdc.RegisterConcrete(&MsgBridge{}, "regen/MsgBridge", nil) diff --git a/x/ecocredit/base/types/v1/events.pb.go b/x/ecocredit/base/types/v1/events.pb.go index 66c5e0e85f..11f67d825c 100644 --- a/x/ecocredit/base/types/v1/events.pb.go +++ b/x/ecocredit/base/types/v1/events.pb.go @@ -776,6 +776,55 @@ func (m *EventUpdateProjectMetadata) GetProjectId() string { return "" } +// EventUpdateBatchMetadata is emitted when the credit batch metadata is +// changed. +// +// Since Revision 1 +type EventUpdateBatchMetadata struct { + // batch_denom is the unique identifier of the batch that was updated. + BatchDenom string `protobuf:"bytes,1,opt,name=batch_denom,json=batchDenom,proto3" json:"batch_denom,omitempty"` +} + +func (m *EventUpdateBatchMetadata) Reset() { *m = EventUpdateBatchMetadata{} } +func (m *EventUpdateBatchMetadata) String() string { return proto.CompactTextString(m) } +func (*EventUpdateBatchMetadata) ProtoMessage() {} +func (*EventUpdateBatchMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_e32415575ff8b4b2, []int{13} +} +func (m *EventUpdateBatchMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventUpdateBatchMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventUpdateBatchMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EventUpdateBatchMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventUpdateBatchMetadata.Merge(m, src) +} +func (m *EventUpdateBatchMetadata) XXX_Size() int { + return m.Size() +} +func (m *EventUpdateBatchMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_EventUpdateBatchMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_EventUpdateBatchMetadata proto.InternalMessageInfo + +func (m *EventUpdateBatchMetadata) GetBatchDenom() string { + if m != nil { + return m.BatchDenom + } + return "" +} + // EventSealBatch is emitted when a batch is sealed. type EventSealBatch struct { // batch_denom is the denom of the batch that was sealed. @@ -786,7 +835,7 @@ func (m *EventSealBatch) Reset() { *m = EventSealBatch{} } func (m *EventSealBatch) String() string { return proto.CompactTextString(m) } func (*EventSealBatch) ProtoMessage() {} func (*EventSealBatch) Descriptor() ([]byte, []int) { - return fileDescriptor_e32415575ff8b4b2, []int{13} + return fileDescriptor_e32415575ff8b4b2, []int{14} } func (m *EventSealBatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -832,7 +881,7 @@ func (m *EventAddCreditType) Reset() { *m = EventAddCreditType{} } func (m *EventAddCreditType) String() string { return proto.CompactTextString(m) } func (*EventAddCreditType) ProtoMessage() {} func (*EventAddCreditType) Descriptor() ([]byte, []int) { - return fileDescriptor_e32415575ff8b4b2, []int{14} + return fileDescriptor_e32415575ff8b4b2, []int{15} } func (m *EventAddCreditType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -884,7 +933,7 @@ func (m *EventBridge) Reset() { *m = EventBridge{} } func (m *EventBridge) String() string { return proto.CompactTextString(m) } func (*EventBridge) ProtoMessage() {} func (*EventBridge) Descriptor() ([]byte, []int) { - return fileDescriptor_e32415575ff8b4b2, []int{15} + return fileDescriptor_e32415575ff8b4b2, []int{16} } func (m *EventBridge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -955,7 +1004,7 @@ func (m *EventBridgeReceive) Reset() { *m = EventBridgeReceive{} } func (m *EventBridgeReceive) String() string { return proto.CompactTextString(m) } func (*EventBridgeReceive) ProtoMessage() {} func (*EventBridgeReceive) Descriptor() ([]byte, []int) { - return fileDescriptor_e32415575ff8b4b2, []int{16} + return fileDescriptor_e32415575ff8b4b2, []int{17} } func (m *EventBridgeReceive) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1012,6 +1061,7 @@ func init() { proto.RegisterType((*EventUpdateClassMetadata)(nil), "regen.ecocredit.v1.EventUpdateClassMetadata") proto.RegisterType((*EventUpdateProjectAdmin)(nil), "regen.ecocredit.v1.EventUpdateProjectAdmin") proto.RegisterType((*EventUpdateProjectMetadata)(nil), "regen.ecocredit.v1.EventUpdateProjectMetadata") + proto.RegisterType((*EventUpdateBatchMetadata)(nil), "regen.ecocredit.v1.EventUpdateBatchMetadata") proto.RegisterType((*EventSealBatch)(nil), "regen.ecocredit.v1.EventSealBatch") proto.RegisterType((*EventAddCreditType)(nil), "regen.ecocredit.v1.EventAddCreditType") proto.RegisterType((*EventBridge)(nil), "regen.ecocredit.v1.EventBridge") @@ -1021,46 +1071,47 @@ func init() { func init() { proto.RegisterFile("regen/ecocredit/v1/events.proto", fileDescriptor_e32415575ff8b4b2) } var fileDescriptor_e32415575ff8b4b2 = []byte{ - // 622 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcf, 0x4f, 0x13, 0x41, - 0x14, 0x66, 0xf9, 0x51, 0xe9, 0x43, 0xd0, 0x4c, 0x14, 0x91, 0xe0, 0x42, 0x36, 0x31, 0x72, 0xa1, - 0x4d, 0x41, 0x13, 0x8c, 0x07, 0x03, 0xd5, 0x03, 0x07, 0xa2, 0xa9, 0xf5, 0xa0, 0x97, 0x66, 0x76, - 0xe6, 0x59, 0x06, 0xdb, 0x99, 0x66, 0x66, 0xba, 0x40, 0xe2, 0xc1, 0x3f, 0xc1, 0xbf, 0xc6, 0xbf, - 0xc1, 0x23, 0x47, 0x8f, 0x06, 0xfe, 0x11, 0xb3, 0xb3, 0xd3, 0xa5, 0x2d, 0x84, 0xed, 0x41, 0x6f, - 0xf3, 0xbe, 0xbc, 0x6f, 0xbf, 0x6f, 0xe6, 0xcd, 0xb7, 0x03, 0xeb, 0x1a, 0xdb, 0x28, 0xab, 0xc8, - 0x14, 0xd3, 0xc8, 0x85, 0xad, 0x26, 0xb5, 0x2a, 0x26, 0x28, 0xad, 0xa9, 0xf4, 0xb4, 0xb2, 0x8a, - 0x10, 0xd7, 0x50, 0xc9, 0x1b, 0x2a, 0x49, 0x6d, 0x35, 0xbc, 0x81, 0x64, 0xcf, 0x7a, 0xe8, 0x39, - 0xd1, 0x16, 0xdc, 0x7f, 0x9b, 0x7e, 0xa3, 0xae, 0x91, 0x5a, 0xac, 0x77, 0xa8, 0x31, 0xe4, 0x31, - 0xcc, 0xb3, 0x74, 0xd1, 0x12, 0x7c, 0x25, 0xd8, 0x08, 0x36, 0xcb, 0x8d, 0x3b, 0xae, 0x3e, 0xe0, - 0xd1, 0x0e, 0x90, 0xa1, 0xf6, 0xf7, 0x5a, 0x1d, 0x23, 0xb3, 0xe4, 0x09, 0x40, 0x2f, 0x5b, 0x5e, - 0x51, 0xca, 0x1e, 0x39, 0xe0, 0x91, 0x1c, 0xd1, 0xd8, 0xa7, 0x96, 0x1d, 0x91, 0x75, 0x58, 0x88, - 0xd3, 0x45, 0x8b, 0xa3, 0x54, 0x5d, 0xcf, 0x01, 0x07, 0xbd, 0x49, 0x11, 0xf2, 0x12, 0xca, 0x4a, - 0x8b, 0xb6, 0x90, 0x2d, 0x7b, 0xba, 0x32, 0xbd, 0x11, 0x6c, 0x2e, 0x6c, 0xaf, 0x55, 0xae, 0x6f, - 0xb0, 0xf2, 0xce, 0x35, 0x35, 0x4f, 0x1b, 0xf3, 0xca, 0xaf, 0xa2, 0x6f, 0x50, 0x76, 0x7a, 0x87, - 0x42, 0xda, 0x62, 0xa1, 0x67, 0x70, 0xcf, 0x6a, 0xca, 0x69, 0xdc, 0xc1, 0x16, 0xed, 0xaa, 0xbe, - 0xb4, 0x4e, 0xae, 0xdc, 0x58, 0x1a, 0xc0, 0x7b, 0x0e, 0x25, 0x4f, 0x61, 0x49, 0xa3, 0x15, 0x1a, - 0xf9, 0xa0, 0x6f, 0xc6, 0xf5, 0x2d, 0x7a, 0x34, 0x6b, 0x8b, 0x0c, 0x3c, 0xcc, 0xd5, 0xdd, 0x5e, - 0xeb, 0xce, 0xab, 0xf9, 0xaf, 0x5b, 0xfe, 0x19, 0xc0, 0xa2, 0x53, 0x6d, 0x6a, 0x2a, 0xcd, 0x17, - 0xd4, 0x64, 0x19, 0x4a, 0x06, 0x25, 0x47, 0xed, 0x85, 0x7c, 0x45, 0xd6, 0xa0, 0xac, 0x91, 0x89, - 0x9e, 0xc0, 0x7c, 0xa3, 0x57, 0xc0, 0xb8, 0xc7, 0x99, 0x49, 0x4e, 0x6b, 0x76, 0xc2, 0xd3, 0x9a, - 0xbb, 0xe9, 0xb4, 0xbe, 0x07, 0xb0, 0xe0, 0x8c, 0x37, 0x1c, 0x4c, 0x1e, 0xc0, 0x9c, 0x3a, 0x91, - 0xb9, 0xeb, 0xac, 0x18, 0xb7, 0x35, 0x7d, 0xcd, 0xd6, 0x32, 0x94, 0x46, 0x66, 0xe2, 0x2b, 0x12, - 0xc1, 0xdd, 0xe3, 0xbe, 0x16, 0x86, 0x0b, 0x66, 0x85, 0x92, 0xde, 0xeb, 0x08, 0x16, 0x59, 0xef, - 0xa0, 0x4e, 0x25, 0xc3, 0xce, 0xbf, 0x76, 0xb0, 0x0c, 0x25, 0x8d, 0xd4, 0xe4, 0xda, 0xbe, 0x8a, - 0xb6, 0xfd, 0x35, 0xf9, 0xd8, 0xe3, 0x83, 0xe0, 0xed, 0xf1, 0xae, 0x90, 0xb7, 0xa5, 0xef, 0x39, - 0x3c, 0x1a, 0xe7, 0x1c, 0x18, 0xd3, 0x47, 0x7d, 0x6b, 0x66, 0x5f, 0xc0, 0xca, 0x38, 0xeb, 0x10, - 0x2d, 0xe5, 0xd4, 0xd2, 0xdb, 0x68, 0xbb, 0x23, 0x62, 0x3e, 0xea, 0x99, 0xc5, 0x82, 0xbc, 0xbf, - 0x82, 0xd5, 0xeb, 0xcc, 0x5c, 0xb2, 0x80, 0x5c, 0x83, 0x25, 0x47, 0xfe, 0x80, 0xb4, 0x33, 0xd9, - 0xaf, 0x22, 0xda, 0xf5, 0x3f, 0xa5, 0x3d, 0xce, 0xb3, 0xac, 0x35, 0xcf, 0x7a, 0x98, 0x8e, 0x9e, - 0xc6, 0xb1, 0xc6, 0x44, 0x50, 0x37, 0xfa, 0x8c, 0x37, 0x82, 0x45, 0x27, 0x7e, 0xf4, 0xfb, 0x5a, - 0xf0, 0x36, 0xa6, 0xb3, 0xb2, 0x54, 0xb7, 0xd1, 0x0e, 0x32, 0x93, 0x55, 0x05, 0x99, 0x59, 0x85, - 0x79, 0xa6, 0xa4, 0xd5, 0x94, 0x0d, 0x66, 0x9f, 0xd7, 0x43, 0xb7, 0x62, 0x76, 0xf8, 0x56, 0x44, - 0x4d, 0x6f, 0x39, 0x13, 0x6e, 0x20, 0x43, 0x91, 0x60, 0xc1, 0xd1, 0x14, 0xde, 0xc1, 0xfd, 0x4f, - 0xbf, 0x2e, 0xc2, 0xe0, 0xfc, 0x22, 0x0c, 0xfe, 0x5c, 0x84, 0xc1, 0x8f, 0xcb, 0x70, 0xea, 0xfc, - 0x32, 0x9c, 0xfa, 0x7d, 0x19, 0x4e, 0x7d, 0x7e, 0xdd, 0x16, 0xf6, 0xa8, 0x1f, 0x57, 0x98, 0xea, - 0x56, 0xdd, 0x1f, 0x65, 0x4b, 0xa2, 0x3d, 0x51, 0xfa, 0xab, 0xaf, 0x3a, 0xc8, 0xdb, 0xa8, 0xab, - 0xa7, 0x43, 0x0f, 0x45, 0x4c, 0x0d, 0x66, 0x4f, 0x45, 0x35, 0xa9, 0xc5, 0x25, 0xf7, 0x5c, 0xec, - 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xd0, 0xb0, 0x7f, 0x2c, 0x85, 0x06, 0x00, 0x00, + // 631 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0x4d, 0x4f, 0x53, 0x41, + 0x14, 0xe5, 0xf1, 0x51, 0xe9, 0x45, 0xd0, 0x4c, 0x14, 0x91, 0xe0, 0x83, 0x4c, 0x62, 0x64, 0x43, + 0x9b, 0x82, 0x26, 0x18, 0x17, 0x06, 0xaa, 0x0b, 0x16, 0x44, 0x53, 0xeb, 0x42, 0x37, 0xcd, 0xbc, + 0x99, 0x6b, 0x19, 0x6c, 0x67, 0x9a, 0x99, 0x69, 0x81, 0xc4, 0x85, 0x3f, 0xc1, 0x5f, 0xe3, 0x6f, + 0x70, 0xc9, 0xd2, 0xa5, 0x81, 0x3f, 0x62, 0x3a, 0x6f, 0xfa, 0x68, 0x0b, 0xe1, 0x75, 0xa1, 0xbb, + 0xb9, 0x27, 0xf7, 0xbc, 0x73, 0x66, 0xde, 0x3d, 0x33, 0xb0, 0x6e, 0xb0, 0x89, 0xaa, 0x8c, 0x5c, + 0x73, 0x83, 0x42, 0xba, 0x72, 0xaf, 0x52, 0xc6, 0x1e, 0x2a, 0x67, 0x4b, 0x1d, 0xa3, 0x9d, 0x26, + 0xc4, 0x37, 0x94, 0xb2, 0x86, 0x52, 0xaf, 0xb2, 0x1a, 0xdf, 0x40, 0x72, 0x67, 0x1d, 0x0c, 0x1c, + 0xba, 0x05, 0xf7, 0xdf, 0xf6, 0xbf, 0x51, 0x35, 0xc8, 0x1c, 0x56, 0x5b, 0xcc, 0x5a, 0xf2, 0x18, + 0xe6, 0x79, 0x7f, 0xd1, 0x90, 0x62, 0x25, 0xda, 0x88, 0x36, 0x8b, 0xb5, 0x3b, 0xbe, 0x3e, 0x10, + 0x74, 0x07, 0xc8, 0x50, 0xfb, 0x7b, 0xa3, 0x8f, 0x91, 0x3b, 0xf2, 0x04, 0xa0, 0x93, 0x2e, 0xaf, + 0x28, 0xc5, 0x80, 0x1c, 0x08, 0xaa, 0x46, 0x34, 0xf6, 0x99, 0xe3, 0x47, 0x64, 0x1d, 0x16, 0x92, + 0xfe, 0xa2, 0x21, 0x50, 0xe9, 0x76, 0xe0, 0x80, 0x87, 0xde, 0xf4, 0x11, 0xf2, 0x12, 0x8a, 0xda, + 0xc8, 0xa6, 0x54, 0x0d, 0x77, 0xba, 0x32, 0xbd, 0x11, 0x6d, 0x2e, 0x6c, 0xaf, 0x95, 0xae, 0x6f, + 0xb0, 0xf4, 0xce, 0x37, 0xd5, 0x4f, 0x6b, 0xf3, 0x3a, 0xac, 0xe8, 0x37, 0x28, 0x7a, 0xbd, 0x43, + 0xa9, 0x5c, 0xbe, 0xd0, 0x33, 0xb8, 0xe7, 0x0c, 0x13, 0x2c, 0x69, 0x61, 0x83, 0xb5, 0x75, 0x57, + 0x39, 0x2f, 0x57, 0xac, 0x2d, 0x0d, 0xe0, 0x3d, 0x8f, 0x92, 0xa7, 0xb0, 0x64, 0xd0, 0x49, 0x83, + 0x62, 0xd0, 0x37, 0xe3, 0xfb, 0x16, 0x03, 0x9a, 0xb6, 0x51, 0x0b, 0x0f, 0x33, 0x75, 0xbf, 0xd7, + 0xaa, 0xf7, 0x6a, 0xff, 0xeb, 0x96, 0x7f, 0x46, 0xb0, 0xe8, 0x55, 0xeb, 0x86, 0x29, 0xfb, 0x05, + 0x0d, 0x59, 0x86, 0x82, 0x45, 0x25, 0xd0, 0x04, 0xa1, 0x50, 0x91, 0x35, 0x28, 0x1a, 0xe4, 0xb2, + 0x23, 0x31, 0xdb, 0xe8, 0x15, 0x30, 0xee, 0x71, 0x66, 0x92, 0xd3, 0x9a, 0x9d, 0xf0, 0xb4, 0xe6, + 0x6e, 0x3a, 0xad, 0xef, 0x11, 0x2c, 0x78, 0xe3, 0x35, 0x0f, 0x93, 0x07, 0x30, 0xa7, 0x4f, 0x54, + 0xe6, 0x3a, 0x2d, 0xc6, 0x6d, 0x4d, 0x5f, 0xb3, 0xb5, 0x0c, 0x85, 0x91, 0x7f, 0x12, 0x2a, 0x42, + 0xe1, 0xee, 0x71, 0xd7, 0x48, 0x2b, 0x24, 0x77, 0x52, 0xab, 0xe0, 0x75, 0x04, 0xa3, 0x2e, 0x38, + 0xa8, 0x32, 0xc5, 0xb1, 0xf5, 0xaf, 0x1d, 0x2c, 0x43, 0xc1, 0x20, 0xb3, 0x99, 0x76, 0xa8, 0xe8, + 0x76, 0x18, 0x93, 0x8f, 0x1d, 0x31, 0x08, 0xde, 0x9e, 0x68, 0x4b, 0x75, 0x5b, 0xfa, 0x9e, 0xc3, + 0xa3, 0x71, 0xce, 0x81, 0xb5, 0x5d, 0x34, 0xb7, 0x66, 0xf6, 0x05, 0xac, 0x8c, 0xb3, 0x0e, 0xd1, + 0x31, 0xc1, 0x1c, 0xbb, 0x8d, 0xb6, 0x3b, 0x22, 0x16, 0xa2, 0x9e, 0x5a, 0xcc, 0xc9, 0xfb, 0x2b, + 0x58, 0xbd, 0xce, 0xcc, 0x24, 0x73, 0xc9, 0xc3, 0x6e, 0x7d, 0x80, 0x32, 0x6a, 0x5e, 0x82, 0x68, + 0x05, 0x96, 0x3c, 0xf9, 0x03, 0xb2, 0xd6, 0x64, 0xf7, 0x0c, 0xdd, 0x0d, 0x37, 0xda, 0x9e, 0x10, + 0x69, 0x50, 0xeb, 0x67, 0x1d, 0xec, 0xcf, 0x0d, 0x4b, 0x12, 0x83, 0x3d, 0xc9, 0xfc, 0xdc, 0xa4, + 0xbc, 0x11, 0x8c, 0x9e, 0x84, 0xb9, 0xd9, 0x37, 0x52, 0x34, 0xb1, 0xff, 0xa3, 0x1d, 0x33, 0x4d, + 0x74, 0x83, 0xc0, 0xa5, 0x55, 0x4e, 0xe0, 0x56, 0x61, 0x9e, 0x6b, 0xe5, 0x0c, 0xe3, 0x83, 0xc1, + 0xc9, 0xea, 0xa1, 0x91, 0x9a, 0x1d, 0x1e, 0x29, 0x5a, 0x0f, 0x96, 0x53, 0xe1, 0x1a, 0x72, 0x94, + 0x3d, 0xcc, 0x39, 0xd7, 0xdc, 0x01, 0xde, 0xff, 0xf4, 0xeb, 0x22, 0x8e, 0xce, 0x2f, 0xe2, 0xe8, + 0xcf, 0x45, 0x1c, 0xfd, 0xb8, 0x8c, 0xa7, 0xce, 0x2f, 0xe3, 0xa9, 0xdf, 0x97, 0xf1, 0xd4, 0xe7, + 0xd7, 0x4d, 0xe9, 0x8e, 0xba, 0x49, 0x89, 0xeb, 0x76, 0xd9, 0x5f, 0x47, 0x5b, 0x0a, 0xdd, 0x89, + 0x36, 0x5f, 0x43, 0xd5, 0x42, 0xd1, 0x44, 0x53, 0x3e, 0x1d, 0x7a, 0x65, 0x12, 0x66, 0x31, 0x7d, + 0x67, 0xca, 0xbd, 0x4a, 0x52, 0xf0, 0x6f, 0xcd, 0xce, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb3, + 0xc5, 0x11, 0x24, 0xc2, 0x06, 0x00, 0x00, } func (m *EventCreateClass) Marshal() (dAtA []byte, err error) { @@ -1561,6 +1612,36 @@ func (m *EventUpdateProjectMetadata) MarshalToSizedBuffer(dAtA []byte) (int, err return len(dAtA) - i, nil } +func (m *EventUpdateBatchMetadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EventUpdateBatchMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventUpdateBatchMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.BatchDenom) > 0 { + i -= len(m.BatchDenom) + copy(dAtA[i:], m.BatchDenom) + i = encodeVarintEvents(dAtA, i, uint64(len(m.BatchDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *EventSealBatch) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -1945,6 +2026,19 @@ func (m *EventUpdateProjectMetadata) Size() (n int) { return n } +func (m *EventUpdateBatchMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BatchDenom) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + return n +} + func (m *EventSealBatch) Size() (n int) { if m == nil { return 0 @@ -3541,6 +3635,88 @@ func (m *EventUpdateProjectMetadata) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventUpdateBatchMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventUpdateBatchMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventUpdateBatchMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BatchDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BatchDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *EventSealBatch) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/ecocredit/base/types/v1/features/msg_update_batch_metadata.feature b/x/ecocredit/base/types/v1/features/msg_update_batch_metadata.feature new file mode 100644 index 0000000000..26bf625df1 --- /dev/null +++ b/x/ecocredit/base/types/v1/features/msg_update_batch_metadata.feature @@ -0,0 +1,97 @@ +Feature: MsgUpdateBatchMetadata + + Scenario: a valid message + Given the message + """ + { + "issuer": "regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6", + "batch_denom": "C01-001-20200101-20210101-001", + "new_metadata": "regen:13toVgf5aZqSVSeJQv562xkkeoe3rr3bJWa29PHVKVf77VAkVMcDvVd.rdf" + } + """ + When the message is validated + Then expect no error + + Scenario: an error is returned if issuer is empty + Given the message + """ + {} + """ + When the message is validated + Then expect the error "issuer: empty address string is not allowed: invalid address" + + Scenario: an error is returned if issuer is not a bech32 address + Given the message + """ + { + "issuer": "foo" + } + """ + When the message is validated + Then expect the error "issuer: decoding bech32 failed: invalid bech32 string length 3: invalid address" + + Scenario: an error is returned if batch denom is empty + Given the message + """ + { + "issuer": "regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6" + } + """ + When the message is validated + Then expect the error "batch denom: empty string is not allowed: parse error: invalid request" + + Scenario: an error is returned if batch denom is not formatted + Given the message + """ + { + "issuer": "regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6", + "batch_denom": "foo" + } + """ + When the message is validated + Then expect the error "batch denom: expected format ---: parse error: invalid request" + + Scenario: an error is returned if new metadata is empty + Given the message + """ + { + "issuer": "regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6", + "batch_denom": "C01-001-20200101-20210101-001" + } + """ + When the message is validated + Then expect the error "metadata: cannot be empty: invalid request" + + Scenario: an error is returned if new metadata exceeds 256 characters + Given the message + """ + { + "issuer": "regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6", + "batch_denom": "C01-001-20200101-20210101-001" + } + """ + And new metadata with length "257" + When the message is validated + Then expect the error "metadata: max length 256: limit exceeded" + + Scenario: a valid amino message + Given the message + """ + { + "issuer": "regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6", + "batch_denom": "C01-001-20200101-20210101-001", + "new_metadata": "regen:13toVgf5aZqSVSeJQv562xkkeoe3rr3bJWa29PHVKVf77VAkVMcDvVd.rdf" + } + """ + When message sign bytes queried + Then expect the sign bytes + """ + { + "type":"regen/MsgUpdateBatchMetadata", + "value":{ + "batch_denom":"C01-001-20200101-20210101-001", + "issuer":"regen1depk54cuajgkzea6zpgkq36tnjwdzv4ak663u6", + "new_metadata":"regen:13toVgf5aZqSVSeJQv562xkkeoe3rr3bJWa29PHVKVf77VAkVMcDvVd.rdf" + } + } + """ diff --git a/x/ecocredit/base/types/v1/msg_update_batch_metadata.go b/x/ecocredit/base/types/v1/msg_update_batch_metadata.go new file mode 100644 index 0000000000..7a27009419 --- /dev/null +++ b/x/ecocredit/base/types/v1/msg_update_batch_metadata.go @@ -0,0 +1,51 @@ +package v1 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" + + "github.com/regen-network/regen-ledger/x/ecocredit" + "github.com/regen-network/regen-ledger/x/ecocredit/base" +) + +var _ legacytx.LegacyMsg = &MsgUpdateBatchMetadata{} + +// Route implements the LegacyMsg interface. +func (m MsgUpdateBatchMetadata) Route() string { return sdk.MsgTypeURL(&m) } + +// Type implements the LegacyMsg interface. +func (m MsgUpdateBatchMetadata) Type() string { return sdk.MsgTypeURL(&m) } + +// GetSignBytes implements the LegacyMsg interface. +func (m MsgUpdateBatchMetadata) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) +} + +// ValidateBasic does a sanity check on the provided data. +func (m *MsgUpdateBatchMetadata) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(m.Issuer); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("issuer: %s", err) + } + + if err := base.ValidateBatchDenom(m.BatchDenom); err != nil { + return sdkerrors.ErrInvalidRequest.Wrapf("batch denom: %s", err) + } + + // we allow removing metadata for class and project but not for batch + if m.NewMetadata == "" { + return sdkerrors.ErrInvalidRequest.Wrapf("metadata: cannot be empty") + } + + if len(m.NewMetadata) > base.MaxMetadataLength { + return ecocredit.ErrMaxLimit.Wrapf("metadata: max length %d", base.MaxMetadataLength) + } + + return nil +} + +// GetSigners returns the expected signers for the message. +func (m *MsgUpdateBatchMetadata) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(m.Issuer) + return []sdk.AccAddress{addr} +} diff --git a/x/ecocredit/base/types/v1/msg_update_batch_metadata_test.go b/x/ecocredit/base/types/v1/msg_update_batch_metadata_test.go new file mode 100644 index 0000000000..32926772ed --- /dev/null +++ b/x/ecocredit/base/types/v1/msg_update_batch_metadata_test.go @@ -0,0 +1,63 @@ +package v1 + +import ( + "bytes" + "encoding/json" + "strconv" + "strings" + "testing" + + "github.com/gogo/protobuf/jsonpb" + "github.com/regen-network/gocuke" + "github.com/stretchr/testify/require" +) + +type msgUpdateBatchMetadata struct { + t gocuke.TestingT + msg *MsgUpdateBatchMetadata + err error + signBytes string +} + +func TestMsgUpdateBatchMetadata(t *testing.T) { + gocuke.NewRunner(t, &msgUpdateBatchMetadata{}).Path("./features/msg_update_batch_metadata.feature").Run() +} + +func (s *msgUpdateBatchMetadata) Before(t gocuke.TestingT) { + s.t = t +} + +func (s *msgUpdateBatchMetadata) TheMessage(a gocuke.DocString) { + s.msg = &MsgUpdateBatchMetadata{} + err := jsonpb.UnmarshalString(a.Content, s.msg) + require.NoError(s.t, err) +} + +func (s *msgUpdateBatchMetadata) NewMetadataWithLength(a string) { + length, err := strconv.ParseInt(a, 10, 64) + require.NoError(s.t, err) + + s.msg.NewMetadata = strings.Repeat("x", int(length)) +} + +func (s *msgUpdateBatchMetadata) TheMessageIsValidated() { + s.err = s.msg.ValidateBasic() +} + +func (s *msgUpdateBatchMetadata) ExpectTheError(a string) { + require.EqualError(s.t, s.err, a) +} + +func (s *msgUpdateBatchMetadata) ExpectNoError() { + require.NoError(s.t, s.err) +} + +func (s *msgUpdateBatchMetadata) MessageSignBytesQueried() { + s.signBytes = string(s.msg.GetSignBytes()) +} + +func (s *msgUpdateBatchMetadata) ExpectTheSignBytes(expected gocuke.DocString) { + buffer := new(bytes.Buffer) + require.NoError(s.t, json.Compact(buffer, []byte(expected.Content))) + require.Equal(s.t, buffer.String(), s.signBytes) +} diff --git a/x/ecocredit/base/types/v1/tx.pb.go b/x/ecocredit/base/types/v1/tx.pb.go index aa754305c3..1e171f41e5 100644 --- a/x/ecocredit/base/types/v1/tx.pb.go +++ b/x/ecocredit/base/types/v1/tx.pb.go @@ -1774,6 +1774,113 @@ func (m *MsgBridge) GetCredits() []*Credits { return nil } +// MsgUpdateBatchMetadata is the Msg/UpdateBatchMetadata request type. +// +// Since Revision 1 +type MsgUpdateBatchMetadata struct { + // issuer is the address of the account that is the issuer of the batch. + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + // batch_denom is the unique identifier of the batch. + BatchDenom string `protobuf:"bytes,2,opt,name=batch_denom,json=batchDenom,proto3" json:"batch_denom,omitempty"` + // new_metadata is new metadata that will replace the existing metadata. It + // can be any arbitrary string with a maximum length of 256 characters that + // includes or references the metadata to attach to the batch. + NewMetadata string `protobuf:"bytes,3,opt,name=new_metadata,json=newMetadata,proto3" json:"new_metadata,omitempty"` +} + +func (m *MsgUpdateBatchMetadata) Reset() { *m = MsgUpdateBatchMetadata{} } +func (m *MsgUpdateBatchMetadata) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateBatchMetadata) ProtoMessage() {} +func (*MsgUpdateBatchMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_2b8ae49f50a3ddbd, []int{29} +} +func (m *MsgUpdateBatchMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateBatchMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateBatchMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateBatchMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateBatchMetadata.Merge(m, src) +} +func (m *MsgUpdateBatchMetadata) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateBatchMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateBatchMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateBatchMetadata proto.InternalMessageInfo + +func (m *MsgUpdateBatchMetadata) GetIssuer() string { + if m != nil { + return m.Issuer + } + return "" +} + +func (m *MsgUpdateBatchMetadata) GetBatchDenom() string { + if m != nil { + return m.BatchDenom + } + return "" +} + +func (m *MsgUpdateBatchMetadata) GetNewMetadata() string { + if m != nil { + return m.NewMetadata + } + return "" +} + +// MsgUpdateBatchMetadataResponse is the Msg/UpdateBatchMetadataResponse response type. +// +// Since Revision 1 +type MsgUpdateBatchMetadataResponse struct { +} + +func (m *MsgUpdateBatchMetadataResponse) Reset() { *m = MsgUpdateBatchMetadataResponse{} } +func (m *MsgUpdateBatchMetadataResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateBatchMetadataResponse) ProtoMessage() {} +func (*MsgUpdateBatchMetadataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2b8ae49f50a3ddbd, []int{30} +} +func (m *MsgUpdateBatchMetadataResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateBatchMetadataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateBatchMetadataResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateBatchMetadataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateBatchMetadataResponse.Merge(m, src) +} +func (m *MsgUpdateBatchMetadataResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateBatchMetadataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateBatchMetadataResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateBatchMetadataResponse proto.InternalMessageInfo + // MsgBridgeResponse is the Msg/Bridge response type. type MsgBridgeResponse struct { } @@ -1782,7 +1889,7 @@ func (m *MsgBridgeResponse) Reset() { *m = MsgBridgeResponse{} } func (m *MsgBridgeResponse) String() string { return proto.CompactTextString(m) } func (*MsgBridgeResponse) ProtoMessage() {} func (*MsgBridgeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{29} + return fileDescriptor_2b8ae49f50a3ddbd, []int{31} } func (m *MsgBridgeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1831,7 +1938,7 @@ func (m *MsgBridgeReceive) Reset() { *m = MsgBridgeReceive{} } func (m *MsgBridgeReceive) String() string { return proto.CompactTextString(m) } func (*MsgBridgeReceive) ProtoMessage() {} func (*MsgBridgeReceive) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{30} + return fileDescriptor_2b8ae49f50a3ddbd, []int{32} } func (m *MsgBridgeReceive) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1917,7 +2024,7 @@ func (m *MsgBridgeReceive_Batch) Reset() { *m = MsgBridgeReceive_Batch{} func (m *MsgBridgeReceive_Batch) String() string { return proto.CompactTextString(m) } func (*MsgBridgeReceive_Batch) ProtoMessage() {} func (*MsgBridgeReceive_Batch) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{30, 0} + return fileDescriptor_2b8ae49f50a3ddbd, []int{32, 0} } func (m *MsgBridgeReceive_Batch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1997,7 +2104,7 @@ func (m *MsgBridgeReceive_Project) Reset() { *m = MsgBridgeReceive_Proje func (m *MsgBridgeReceive_Project) String() string { return proto.CompactTextString(m) } func (*MsgBridgeReceive_Project) ProtoMessage() {} func (*MsgBridgeReceive_Project) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{30, 1} + return fileDescriptor_2b8ae49f50a3ddbd, []int{32, 1} } func (m *MsgBridgeReceive_Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2061,7 +2168,7 @@ func (m *MsgBridgeReceiveResponse) Reset() { *m = MsgBridgeReceiveRespon func (m *MsgBridgeReceiveResponse) String() string { return proto.CompactTextString(m) } func (*MsgBridgeReceiveResponse) ProtoMessage() {} func (*MsgBridgeReceiveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{31} + return fileDescriptor_2b8ae49f50a3ddbd, []int{33} } func (m *MsgBridgeReceiveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2118,7 +2225,7 @@ func (m *MsgAddClassCreator) Reset() { *m = MsgAddClassCreator{} } func (m *MsgAddClassCreator) String() string { return proto.CompactTextString(m) } func (*MsgAddClassCreator) ProtoMessage() {} func (*MsgAddClassCreator) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{32} + return fileDescriptor_2b8ae49f50a3ddbd, []int{34} } func (m *MsgAddClassCreator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2176,7 +2283,7 @@ func (m *MsgSetClassCreatorAllowlist) Reset() { *m = MsgSetClassCreatorA func (m *MsgSetClassCreatorAllowlist) String() string { return proto.CompactTextString(m) } func (*MsgSetClassCreatorAllowlist) ProtoMessage() {} func (*MsgSetClassCreatorAllowlist) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{33} + return fileDescriptor_2b8ae49f50a3ddbd, []int{35} } func (m *MsgSetClassCreatorAllowlist) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2230,7 +2337,7 @@ func (m *MsgSetClassCreatorAllowlistResponse) Reset() { *m = MsgSetClass func (m *MsgSetClassCreatorAllowlistResponse) String() string { return proto.CompactTextString(m) } func (*MsgSetClassCreatorAllowlistResponse) ProtoMessage() {} func (*MsgSetClassCreatorAllowlistResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{34} + return fileDescriptor_2b8ae49f50a3ddbd, []int{36} } func (m *MsgSetClassCreatorAllowlistResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2269,7 +2376,7 @@ func (m *MsgAddClassCreatorResponse) Reset() { *m = MsgAddClassCreatorRe func (m *MsgAddClassCreatorResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddClassCreatorResponse) ProtoMessage() {} func (*MsgAddClassCreatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{35} + return fileDescriptor_2b8ae49f50a3ddbd, []int{37} } func (m *MsgAddClassCreatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2312,7 +2419,7 @@ func (m *MsgRemoveClassCreator) Reset() { *m = MsgRemoveClassCreator{} } func (m *MsgRemoveClassCreator) String() string { return proto.CompactTextString(m) } func (*MsgRemoveClassCreator) ProtoMessage() {} func (*MsgRemoveClassCreator) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{36} + return fileDescriptor_2b8ae49f50a3ddbd, []int{38} } func (m *MsgRemoveClassCreator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2365,7 +2472,7 @@ func (m *MsgRemoveClassCreatorResponse) Reset() { *m = MsgRemoveClassCre func (m *MsgRemoveClassCreatorResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveClassCreatorResponse) ProtoMessage() {} func (*MsgRemoveClassCreatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{37} + return fileDescriptor_2b8ae49f50a3ddbd, []int{39} } func (m *MsgRemoveClassCreatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2409,7 +2516,7 @@ func (m *MsgUpdateClassFee) Reset() { *m = MsgUpdateClassFee{} } func (m *MsgUpdateClassFee) String() string { return proto.CompactTextString(m) } func (*MsgUpdateClassFee) ProtoMessage() {} func (*MsgUpdateClassFee) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{38} + return fileDescriptor_2b8ae49f50a3ddbd, []int{40} } func (m *MsgUpdateClassFee) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2462,7 +2569,7 @@ func (m *MsgUpdateClassFeeResponse) Reset() { *m = MsgUpdateClassFeeResp func (m *MsgUpdateClassFeeResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateClassFeeResponse) ProtoMessage() {} func (*MsgUpdateClassFeeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{39} + return fileDescriptor_2b8ae49f50a3ddbd, []int{41} } func (m *MsgUpdateClassFeeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2506,7 +2613,7 @@ func (m *MsgAddAllowedBridgeChain) Reset() { *m = MsgAddAllowedBridgeCha func (m *MsgAddAllowedBridgeChain) String() string { return proto.CompactTextString(m) } func (*MsgAddAllowedBridgeChain) ProtoMessage() {} func (*MsgAddAllowedBridgeChain) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{40} + return fileDescriptor_2b8ae49f50a3ddbd, []int{42} } func (m *MsgAddAllowedBridgeChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2560,7 +2667,7 @@ func (m *MsgAddAllowedBridgeChainResponse) Reset() { *m = MsgAddAllowedB func (m *MsgAddAllowedBridgeChainResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddAllowedBridgeChainResponse) ProtoMessage() {} func (*MsgAddAllowedBridgeChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{41} + return fileDescriptor_2b8ae49f50a3ddbd, []int{43} } func (m *MsgAddAllowedBridgeChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2604,7 +2711,7 @@ func (m *MsgRemoveAllowedBridgeChain) Reset() { *m = MsgRemoveAllowedBri func (m *MsgRemoveAllowedBridgeChain) String() string { return proto.CompactTextString(m) } func (*MsgRemoveAllowedBridgeChain) ProtoMessage() {} func (*MsgRemoveAllowedBridgeChain) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{42} + return fileDescriptor_2b8ae49f50a3ddbd, []int{44} } func (m *MsgRemoveAllowedBridgeChain) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2658,7 +2765,7 @@ func (m *MsgRemoveAllowedBridgeChainResponse) Reset() { *m = MsgRemoveAl func (m *MsgRemoveAllowedBridgeChainResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveAllowedBridgeChainResponse) ProtoMessage() {} func (*MsgRemoveAllowedBridgeChainResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_2b8ae49f50a3ddbd, []int{43} + return fileDescriptor_2b8ae49f50a3ddbd, []int{45} } func (m *MsgRemoveAllowedBridgeChainResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2718,6 +2825,8 @@ func init() { proto.RegisterType((*MsgUpdateProjectMetadata)(nil), "regen.ecocredit.v1.MsgUpdateProjectMetadata") proto.RegisterType((*MsgUpdateProjectMetadataResponse)(nil), "regen.ecocredit.v1.MsgUpdateProjectMetadataResponse") proto.RegisterType((*MsgBridge)(nil), "regen.ecocredit.v1.MsgBridge") + proto.RegisterType((*MsgUpdateBatchMetadata)(nil), "regen.ecocredit.v1.MsgUpdateBatchMetadata") + proto.RegisterType((*MsgUpdateBatchMetadataResponse)(nil), "regen.ecocredit.v1.MsgUpdateBatchMetadataResponse") proto.RegisterType((*MsgBridgeResponse)(nil), "regen.ecocredit.v1.MsgBridgeResponse") proto.RegisterType((*MsgBridgeReceive)(nil), "regen.ecocredit.v1.MsgBridgeReceive") proto.RegisterType((*MsgBridgeReceive_Batch)(nil), "regen.ecocredit.v1.MsgBridgeReceive.Batch") @@ -2740,122 +2849,124 @@ func init() { func init() { proto.RegisterFile("regen/ecocredit/v1/tx.proto", fileDescriptor_2b8ae49f50a3ddbd) } var fileDescriptor_2b8ae49f50a3ddbd = []byte{ - // 1825 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x4f, 0x6f, 0x1b, 0x45, - 0x1b, 0xef, 0xda, 0x4e, 0x6c, 0x3f, 0x4e, 0xd3, 0x76, 0xda, 0xa6, 0xee, 0xa6, 0x71, 0x5c, 0xb7, - 0x79, 0x9b, 0xe6, 0x4d, 0xd7, 0x4a, 0xfa, 0xbe, 0xaa, 0x5a, 0x84, 0x4a, 0x92, 0xaa, 0x22, 0x48, - 0x2e, 0xc8, 0x0d, 0x42, 0x54, 0x20, 0x6b, 0xbd, 0x3b, 0xd9, 0x6c, 0xb1, 0x77, 0xad, 0xdd, 0x71, - 0x92, 0x0a, 0x84, 0x04, 0xe2, 0xc0, 0x8d, 0x9e, 0x11, 0x1f, 0x02, 0x71, 0xe1, 0x03, 0x70, 0x81, - 0x5b, 0x2f, 0x08, 0x6e, 0x45, 0xed, 0x81, 0x2f, 0xc1, 0x01, 0xed, 0xcc, 0xec, 0x78, 0x77, 0xbd, - 0x7f, 0x6c, 0x4a, 0x2f, 0x91, 0x67, 0xe6, 0x37, 0xcf, 0xf3, 0x7b, 0x9e, 0x99, 0x79, 0xfe, 0x6c, - 0x60, 0xd1, 0xc1, 0x06, 0xb6, 0x9a, 0x58, 0xb3, 0x35, 0x07, 0xeb, 0x26, 0x69, 0x1e, 0x6e, 0x34, - 0xc9, 0xb1, 0x32, 0x70, 0x6c, 0x62, 0x23, 0x44, 0x17, 0x15, 0xb1, 0xa8, 0x1c, 0x6e, 0xc8, 0x35, - 0xcd, 0x76, 0xfb, 0xb6, 0xdb, 0xec, 0xaa, 0x2e, 0x6e, 0x1e, 0x6e, 0x74, 0x31, 0x51, 0x37, 0x9a, - 0x9a, 0x6d, 0x5a, 0x6c, 0x8f, 0x7c, 0x81, 0xaf, 0xf7, 0x5d, 0xc3, 0x93, 0xd5, 0x77, 0x0d, 0xbe, - 0x70, 0xce, 0xb0, 0x0d, 0x9b, 0xfe, 0x6c, 0x7a, 0xbf, 0xf8, 0xec, 0xb2, 0x61, 0xdb, 0x46, 0x0f, - 0x37, 0xe9, 0xa8, 0x3b, 0xdc, 0x6f, 0x12, 0xb3, 0x8f, 0x5d, 0xa2, 0xf6, 0x07, 0x1c, 0x50, 0x8b, - 0x21, 0xe8, 0x12, 0x95, 0xe0, 0x94, 0x75, 0xf2, 0x64, 0x80, 0x5d, 0xb6, 0xde, 0xf8, 0x42, 0x82, - 0xd3, 0x2d, 0xd7, 0xd8, 0xd2, 0xf5, 0x1d, 0xba, 0xbe, 0xf7, 0x64, 0x80, 0xd1, 0x25, 0x28, 0xab, - 0x43, 0x72, 0x60, 0x3b, 0x26, 0x79, 0x52, 0x95, 0xea, 0xd2, 0x6a, 0xb9, 0x3d, 0x9a, 0x40, 0x77, - 0xa1, 0xc2, 0x64, 0x75, 0x3c, 0x41, 0xd5, 0x5c, 0x5d, 0x5a, 0xad, 0x6c, 0xd6, 0x94, 0x71, 0x67, - 0x28, 0x23, 0x91, 0x6d, 0xd0, 0xc4, 0xef, 0x3b, 0xf3, 0x5f, 0xfe, 0xf9, 0xfd, 0xda, 0x48, 0x60, - 0x43, 0x86, 0x6a, 0x94, 0x42, 0x1b, 0xbb, 0x03, 0xdb, 0x72, 0x71, 0xe3, 0x27, 0x09, 0xe6, 0x5b, - 0xae, 0xb1, 0xe3, 0x60, 0x95, 0xe0, 0x9d, 0x9e, 0xea, 0xba, 0xe8, 0x1c, 0xcc, 0xa8, 0x7a, 0xdf, - 0xb4, 0x38, 0x33, 0x36, 0x40, 0x55, 0x28, 0x9a, 0xae, 0x3b, 0xc4, 0x8e, 0x5b, 0xcd, 0xd5, 0xf3, - 0xab, 0xe5, 0xb6, 0x3f, 0x44, 0x32, 0x94, 0xfa, 0x98, 0xa8, 0xba, 0x4a, 0xd4, 0x6a, 0x9e, 0x6e, - 0x11, 0x63, 0xb4, 0x0e, 0x28, 0x60, 0x4b, 0x47, 0xed, 0x76, 0x1d, 0x7c, 0x58, 0x2d, 0x50, 0xd4, - 0xe9, 0x11, 0xe5, 0x2d, 0x3a, 0x8f, 0xfe, 0x0b, 0xf9, 0x7d, 0x8c, 0xab, 0x33, 0xd4, 0xe2, 0x8b, - 0x0a, 0x3b, 0x4a, 0xc5, 0x3b, 0x6a, 0x85, 0x1f, 0xb5, 0xb2, 0x63, 0x9b, 0x56, 0xdb, 0x43, 0xdd, - 0x01, 0xcf, 0x4a, 0x46, 0xae, 0x71, 0x13, 0x16, 0xc2, 0x46, 0xf8, 0xf6, 0xa1, 0x8b, 0x50, 0xd2, - 0xbc, 0x89, 0x8e, 0xa9, 0x73, 0x7b, 0x8a, 0x74, 0xbc, 0xab, 0x37, 0x7e, 0x60, 0x47, 0xc3, 0x76, - 0xbd, 0xe7, 0xd8, 0x8f, 0xb1, 0x46, 0x12, 0x8c, 0x0f, 0x4a, 0xc9, 0x85, 0xa4, 0xa4, 0x5a, 0xdf, - 0x80, 0xb9, 0xc7, 0x43, 0xc7, 0x74, 0x75, 0x53, 0x23, 0xa6, 0x6d, 0x71, 0xbb, 0x43, 0x73, 0xe8, - 0x32, 0xcc, 0x39, 0x78, 0x1f, 0x3b, 0xd8, 0xd2, 0xb0, 0x27, 0x7e, 0x86, 0x62, 0x2a, 0x62, 0x6e, - 0x57, 0x0f, 0x59, 0x7a, 0x9b, 0x9e, 0x65, 0x88, 0xb3, 0xb0, 0x75, 0x09, 0x60, 0xc0, 0xa6, 0x46, - 0xd6, 0x96, 0xf9, 0xcc, 0xae, 0xde, 0xf8, 0x2b, 0x17, 0x38, 0xea, 0x6d, 0x95, 0x68, 0x07, 0x68, - 0x01, 0x66, 0xd9, 0x29, 0x72, 0x34, 0x1f, 0x45, 0x24, 0xe5, 0x22, 0x92, 0xd0, 0x9b, 0x50, 0xf2, - 0x80, 0xaa, 0xa5, 0xe1, 0x6a, 0xbe, 0x9e, 0x5f, 0xad, 0x6c, 0x5e, 0x8e, 0xbb, 0x9e, 0x54, 0xc7, - 0x2e, 0x07, 0xb6, 0xc5, 0x96, 0x90, 0xcb, 0x0a, 0x11, 0x97, 0xdd, 0x05, 0x70, 0x89, 0xea, 0x90, - 0x8e, 0xae, 0x12, 0xff, 0x26, 0xc8, 0x0a, 0x7b, 0xa5, 0x8a, 0xff, 0x4a, 0x95, 0x3d, 0xff, 0x95, - 0x6e, 0x17, 0x9e, 0x3e, 0x5f, 0x96, 0xda, 0x65, 0xba, 0xe7, 0x9e, 0x4a, 0x30, 0x7a, 0x03, 0x4a, - 0xd8, 0xd2, 0xd9, 0xf6, 0xd9, 0x09, 0xb7, 0x17, 0xb1, 0xa5, 0xd3, 0xcd, 0x08, 0x0a, 0xf6, 0x00, - 0x5b, 0xd5, 0x62, 0x5d, 0x5a, 0x2d, 0xb5, 0xe9, 0x6f, 0x74, 0x1b, 0xca, 0xb6, 0x63, 0x1a, 0xa6, - 0xd5, 0x21, 0xc7, 0xd5, 0x12, 0x95, 0x78, 0x29, 0xce, 0xda, 0x77, 0x29, 0x68, 0xef, 0xb8, 0x5d, - 0xb2, 0xf9, 0xaf, 0x3b, 0x15, 0xef, 0xe0, 0xb8, 0x4f, 0x1b, 0xb7, 0x03, 0x77, 0x94, 0x7a, 0x46, - 0x9c, 0xdb, 0x32, 0x54, 0xba, 0xde, 0x44, 0x47, 0xc7, 0x96, 0xdd, 0xe7, 0x47, 0x01, 0x74, 0xea, - 0x9e, 0x37, 0xd3, 0xf8, 0x55, 0x82, 0xb3, 0x2d, 0xd7, 0x68, 0x99, 0x16, 0xa1, 0x3b, 0xd9, 0x3b, - 0x76, 0x13, 0x8f, 0x2f, 0x22, 0x30, 0x17, 0x15, 0xf8, 0xaa, 0x07, 0x18, 0x72, 0x49, 0xe1, 0x9f, - 0xbb, 0x64, 0x09, 0x16, 0x63, 0xcc, 0x12, 0xb1, 0x69, 0x0f, 0xe6, 0x5a, 0xae, 0xf1, 0x10, 0xab, - 0xbd, 0xf4, 0xdb, 0x9a, 0x65, 0x6e, 0x58, 0xe9, 0x02, 0x9c, 0x0b, 0x4a, 0x15, 0xda, 0x7e, 0xc9, - 0x41, 0x91, 0x2e, 0x58, 0xba, 0xa7, 0xc9, 0xc5, 0x96, 0x3e, 0xd2, 0xc4, 0x46, 0x5e, 0xe0, 0x76, - 0xb0, 0x66, 0x0e, 0x4c, 0x6c, 0x11, 0xff, 0x59, 0x88, 0x09, 0xb4, 0x05, 0x45, 0x66, 0xbb, 0xcb, - 0x9d, 0x7a, 0x2d, 0xce, 0x29, 0x5c, 0x87, 0xe2, 0xfd, 0xf1, 0x2d, 0xf6, 0xf7, 0xc9, 0x3f, 0x4a, - 0x50, 0x09, 0x2c, 0x64, 0x5e, 0x0d, 0x74, 0x0d, 0x4e, 0x11, 0x47, 0xd5, 0xd5, 0x6e, 0x0f, 0x77, - 0xd4, 0xbe, 0x3d, 0x14, 0xbc, 0xe6, 0xfd, 0xe9, 0x2d, 0x3a, 0x8b, 0x56, 0x60, 0xde, 0xc1, 0xc4, - 0x74, 0xb0, 0xee, 0xe3, 0x58, 0xb4, 0x3a, 0xc9, 0x67, 0x39, 0xec, 0x16, 0x5c, 0x60, 0x13, 0x7d, - 0x6c, 0x91, 0x4e, 0x4c, 0xf4, 0x5a, 0x18, 0x2d, 0xbf, 0x13, 0x58, 0xe5, 0x3e, 0x66, 0x7e, 0x6a, - 0x9c, 0x81, 0x53, 0xdc, 0x4c, 0xe1, 0xde, 0xaf, 0x25, 0x28, 0xb7, 0x5c, 0xa3, 0x4d, 0x77, 0x7b, - 0x61, 0xd6, 0x3e, 0xb2, 0x84, 0x7f, 0xd9, 0x00, 0xfd, 0x7f, 0xe4, 0xc0, 0x1c, 0x75, 0xe0, 0x62, - 0x72, 0xd6, 0x1b, 0x39, 0x6d, 0x2c, 0xcc, 0xe6, 0xc7, 0xc3, 0x2c, 0x8f, 0xa1, 0x54, 0x4d, 0xe3, - 0x2c, 0x9c, 0x11, 0x4c, 0x04, 0xbf, 0xcf, 0x28, 0xbd, 0x1d, 0xef, 0x7e, 0xf7, 0xfe, 0x5d, 0x7a, - 0x0b, 0x30, 0xeb, 0x60, 0xd5, 0x15, 0xc4, 0xf8, 0x28, 0x86, 0x12, 0xd3, 0x2e, 0x28, 0xd9, 0xf4, - 0xd5, 0xbf, 0x3f, 0xd0, 0xfd, 0xac, 0xb6, 0x45, 0x93, 0xd1, 0xd4, 0x29, 0x6a, 0x11, 0xca, 0x16, - 0x3e, 0xea, 0xb0, 0x4d, 0x3c, 0x47, 0x59, 0xf8, 0x88, 0x4a, 0x0b, 0x25, 0x17, 0xf6, 0x1e, 0xa3, - 0x0a, 0x05, 0x9f, 0xef, 0x24, 0x38, 0x1f, 0x5e, 0xdf, 0xe5, 0x25, 0xc0, 0xd4, 0x94, 0x96, 0xa1, - 0xa2, 0xea, 0x7a, 0xc7, 0xaf, 0x28, 0xf2, 0xb4, 0xa2, 0x00, 0x55, 0xd7, 0x7d, 0x89, 0xf4, 0xba, - 0xf6, 0xed, 0x43, 0x2c, 0x30, 0x05, 0x8a, 0x39, 0xc9, 0x66, 0x39, 0x2c, 0xc4, 0x7e, 0x19, 0x96, - 0x62, 0xd9, 0x09, 0xfe, 0xc7, 0x34, 0x02, 0x07, 0x00, 0x2d, 0x3f, 0xeb, 0x4c, 0xcd, 0xff, 0x32, - 0xcc, 0x79, 0x2e, 0x8d, 0x64, 0xfe, 0x8a, 0x85, 0x8f, 0x7c, 0x99, 0x21, 0x6a, 0x75, 0xa8, 0xc5, - 0x6b, 0x16, 0xdc, 0x86, 0x01, 0xd7, 0xf2, 0xbc, 0x9e, 0x76, 0xda, 0x19, 0x09, 0x7a, 0xe2, 0x13, - 0x0f, 0xfa, 0x2c, 0xa8, 0x56, 0xf0, 0xfa, 0x9c, 0xd6, 0x1b, 0x21, 0x40, 0x86, 0xd7, 0x32, 0xa8, - 0x4d, 0xe9, 0xb9, 0x06, 0xd4, 0x93, 0xf4, 0x0b, 0x8e, 0xdf, 0xb2, 0xd0, 0xb2, 0xed, 0x98, 0xba, - 0x91, 0x14, 0x5a, 0x16, 0x60, 0x96, 0xa8, 0x8e, 0x81, 0xfd, 0xf0, 0xc8, 0x47, 0xe1, 0x88, 0x9e, - 0x8f, 0x46, 0xf4, 0xc0, 0x8b, 0x2f, 0x4c, 0xfe, 0xe2, 0x63, 0x5e, 0x36, 0xe3, 0x26, 0x18, 0x3f, - 0x2f, 0xd0, 0xd2, 0xd3, 0x9f, 0xd5, 0xb0, 0x79, 0x88, 0x13, 0xd3, 0x5b, 0xca, 0x35, 0xbc, 0x0f, - 0x45, 0xee, 0x59, 0xca, 0xbd, 0xb2, 0xb9, 0x9e, 0x90, 0x71, 0x42, 0x9a, 0x14, 0xbf, 0x70, 0xf4, - 0x37, 0xa3, 0xb7, 0x60, 0x86, 0xe6, 0x14, 0x9e, 0xcc, 0xd7, 0x26, 0x92, 0xc2, 0xd2, 0x27, 0xdb, - 0x18, 0x2e, 0x09, 0x66, 0xa6, 0x29, 0x09, 0xe4, 0xdf, 0x24, 0x98, 0x61, 0x09, 0x3e, 0x74, 0x18, - 0x52, 0xf4, 0x30, 0x16, 0x60, 0x36, 0x94, 0xe1, 0xf8, 0x28, 0x52, 0x32, 0xe6, 0x5f, 0xad, 0x64, - 0x2c, 0x4c, 0x5b, 0x32, 0x06, 0x8b, 0xd9, 0x99, 0x70, 0x31, 0x2b, 0xf7, 0xa0, 0xe8, 0xf7, 0x15, - 0xd1, 0x32, 0x5f, 0x1a, 0x2b, 0xf3, 0xc7, 0xd2, 0x58, 0x2e, 0xa6, 0x5b, 0x48, 0xe9, 0x36, 0xc2, - 0x55, 0xce, 0x23, 0xfa, 0x6e, 0x43, 0x07, 0x36, 0x71, 0xbd, 0x99, 0xf1, 0x84, 0x1b, 0x1f, 0x01, - 0xe2, 0xfd, 0xa4, 0x77, 0x0d, 0x69, 0x45, 0x6b, 0x3b, 0x19, 0x4d, 0x6d, 0x95, 0xbe, 0x24, 0x0f, - 0x28, 0xee, 0x30, 0x1b, 0x8e, 0x75, 0xab, 0x98, 0x26, 0xa1, 0x87, 0x98, 0x04, 0xa5, 0x6f, 0xf5, - 0x7a, 0xf6, 0x51, 0xcf, 0x74, 0x49, 0xb6, 0x1a, 0x6c, 0x79, 0x55, 0x0f, 0xa3, 0x5d, 0x6a, 0xfb, - 0xc3, 0x31, 0x35, 0x2b, 0x70, 0x25, 0x45, 0x8d, 0x78, 0xa9, 0x97, 0x40, 0x1e, 0xb7, 0x55, 0xac, - 0x76, 0x68, 0xd4, 0x6e, 0xd3, 0x94, 0xf4, 0x5a, 0x9c, 0xc1, 0xe2, 0xf3, 0xb8, 0x02, 0xc1, 0xc0, - 0xa2, 0xe1, 0x25, 0x90, 0x59, 0xee, 0xe3, 0xac, 0xef, 0x0b, 0xbc, 0xcb, 0xce, 0x4d, 0xd4, 0x65, - 0x47, 0x09, 0x2d, 0xc2, 0xc5, 0x31, 0x7d, 0x82, 0x8c, 0xe1, 0x7f, 0x68, 0xa0, 0x7e, 0xc4, 0x3a, - 0xbb, 0x7e, 0x3b, 0x07, 0xaa, 0x69, 0x65, 0x70, 0x5a, 0x02, 0xd0, 0x3c, 0x58, 0xc7, 0x52, 0xfb, - 0xd8, 0xbf, 0x71, 0x74, 0xe6, 0x81, 0xda, 0x1f, 0x67, 0xc1, 0xb2, 0x42, 0xac, 0x22, 0x41, 0xe6, - 0x31, 0xbd, 0x47, 0xcc, 0x75, 0xaf, 0x9b, 0x0f, 0xbb, 0x4c, 0x49, 0xba, 0x7c, 0x4a, 0x9b, 0xdf, - 0x20, 0xc8, 0xb7, 0x5c, 0x03, 0x7d, 0x0c, 0x95, 0xe0, 0x07, 0x97, 0x46, 0x42, 0xb8, 0x0d, 0x60, - 0xe4, 0xb5, 0x6c, 0x8c, 0x78, 0xdf, 0x1a, 0x9c, 0x0c, 0x7f, 0xd4, 0xb8, 0x9a, 0xba, 0x99, 0xa3, - 0xe4, 0xf5, 0x49, 0x50, 0x42, 0x89, 0xb0, 0x81, 0x85, 0xee, 0x74, 0x1b, 0x28, 0x26, 0xc3, 0x86, - 0x70, 0x4f, 0xdc, 0x83, 0xd3, 0x63, 0xed, 0x6e, 0x52, 0x3b, 0x15, 0x05, 0xca, 0xcd, 0x09, 0x81, - 0x42, 0xdb, 0x07, 0x50, 0x1e, 0xb5, 0x99, 0xf5, 0xc4, 0xae, 0x8d, 0x23, 0xe4, 0xd5, 0x2c, 0x84, - 0x10, 0xfc, 0x36, 0x14, 0x68, 0x43, 0xb9, 0x98, 0xd2, 0x09, 0xca, 0x57, 0x52, 0x16, 0x85, 0xa4, - 0x07, 0x30, 0xcb, 0x7b, 0xa7, 0xa5, 0x04, 0x38, 0x5b, 0x96, 0x57, 0x52, 0x97, 0x83, 0xf2, 0x78, - 0xb3, 0x93, 0x24, 0x8f, 0x2d, 0x27, 0xca, 0x0b, 0x37, 0x2b, 0xde, 0x81, 0x8d, 0x75, 0x2a, 0x49, - 0x07, 0x16, 0x05, 0x26, 0x1e, 0x58, 0x52, 0x2b, 0x82, 0x1c, 0x40, 0x31, 0x6d, 0xc8, 0xf5, 0x6c, - 0x31, 0x1c, 0x2a, 0x6f, 0x4c, 0x0c, 0x15, 0x3a, 0x87, 0x70, 0x36, 0xae, 0x77, 0x58, 0xcb, 0x96, - 0xe4, 0x63, 0xe5, 0xcd, 0xc9, 0xb1, 0xe3, 0xa6, 0x86, 0xda, 0x82, 0x74, 0x53, 0x83, 0xd0, 0x0c, - 0x53, 0xe3, 0xaa, 0x7e, 0xf4, 0x29, 0x9c, 0x8f, 0x2f, 0xf9, 0xd7, 0x27, 0x91, 0x25, 0xcc, 0xfd, - 0xdf, 0x34, 0xe8, 0xe0, 0xcd, 0xe4, 0xa5, 0xfc, 0x52, 0x6a, 0x1d, 0x9a, 0x78, 0x33, 0xc3, 0xc5, - 0xb6, 0x17, 0x0e, 0xc3, 0x85, 0xf6, 0xd5, 0x49, 0xca, 0x5b, 0x79, 0xa2, 0x52, 0x3a, 0xa8, 0x24, - 0xfc, 0x8d, 0x3f, 0x49, 0x49, 0x08, 0x95, 0xa8, 0x24, 0xf6, 0x63, 0x3d, 0xfa, 0x4a, 0x82, 0x6a, - 0x62, 0x61, 0xd4, 0x4c, 0x8c, 0x22, 0xf1, 0x1b, 0xe4, 0x5b, 0x53, 0x6e, 0x10, 0x34, 0x4c, 0x38, - 0x15, 0x2d, 0xfe, 0xfe, 0x93, 0x62, 0x47, 0x00, 0x27, 0x2b, 0x93, 0xe1, 0x82, 0x97, 0x3f, 0xa6, - 0xba, 0xba, 0x9e, 0x18, 0xe2, 0xa2, 0xd0, 0xc4, 0xcb, 0x9f, 0x5c, 0x52, 0xa1, 0x7d, 0x98, 0x8f, - 0xd4, 0x53, 0x2b, 0xd9, 0xcf, 0xf6, 0x3e, 0xc6, 0xf2, 0x8d, 0x89, 0x60, 0xc1, 0x47, 0x16, 0x5f, - 0x2a, 0xa5, 0x5c, 0x8a, 0x71, 0x74, 0xe2, 0x23, 0x4b, 0xad, 0x8e, 0xe8, 0x55, 0x4a, 0xac, 0x8d, - 0x9a, 0xa9, 0x4e, 0x8b, 0xe1, 0x70, 0x6b, 0xca, 0x0d, 0x3e, 0x8d, 0xed, 0x0f, 0x7f, 0x7e, 0x51, - 0x93, 0x9e, 0xbd, 0xa8, 0x49, 0x7f, 0xbc, 0xa8, 0x49, 0x4f, 0x5f, 0xd6, 0x4e, 0x3c, 0x7b, 0x59, - 0x3b, 0xf1, 0xfb, 0xcb, 0xda, 0x89, 0x47, 0x77, 0x0d, 0x93, 0x1c, 0x0c, 0xbb, 0x8a, 0x66, 0xf7, - 0x9b, 0x54, 0xf8, 0x0d, 0x0b, 0x93, 0x23, 0xdb, 0xf9, 0x84, 0x8f, 0x7a, 0x58, 0x37, 0xb0, 0xd3, - 0x3c, 0x0e, 0xfc, 0xeb, 0x8d, 0xfe, 0x4f, 0x90, 0xfe, 0xf3, 0xad, 0x79, 0xb8, 0xd1, 0x9d, 0xa5, - 0xbd, 0xdb, 0xcd, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x71, 0x68, 0x0f, 0xb4, 0x63, 0x1c, 0x00, - 0x00, + // 1863 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0xcf, 0x6f, 0x1b, 0x4f, + 0x15, 0xef, 0xda, 0x4e, 0x6c, 0x3f, 0xa7, 0x69, 0xbf, 0x9b, 0x7e, 0x53, 0x77, 0xd3, 0x38, 0xae, + 0xdb, 0xd0, 0x34, 0xa4, 0x6b, 0x25, 0x05, 0x55, 0x2d, 0x42, 0x25, 0x49, 0x55, 0x11, 0x24, 0x17, + 0xe4, 0x06, 0x21, 0x2a, 0x90, 0xb5, 0xde, 0x9d, 0x6c, 0xb6, 0xd8, 0xbb, 0xd6, 0xee, 0x38, 0x49, + 0x05, 0x42, 0x2a, 0x42, 0x88, 0x63, 0xcf, 0x88, 0x3f, 0x02, 0x71, 0xe1, 0x0f, 0xe0, 0x02, 0xb7, + 0x5e, 0x10, 0xdc, 0x8a, 0xda, 0x03, 0xff, 0x04, 0x07, 0xb4, 0x33, 0xb3, 0xe3, 0x9d, 0xfd, 0xed, + 0x96, 0x5e, 0xa2, 0xcc, 0xcc, 0x67, 0xde, 0xfb, 0xbc, 0x37, 0x33, 0xef, 0xc7, 0x1a, 0xd6, 0x5c, + 0x64, 0x22, 0xbb, 0x8b, 0x74, 0x47, 0x77, 0x91, 0x61, 0xe1, 0xee, 0xd9, 0x6e, 0x17, 0x5f, 0xa8, + 0x13, 0xd7, 0xc1, 0x8e, 0x2c, 0x93, 0x45, 0x95, 0x2f, 0xaa, 0x67, 0xbb, 0x4a, 0x4b, 0x77, 0xbc, + 0xb1, 0xe3, 0x75, 0x87, 0x9a, 0x87, 0xba, 0x67, 0xbb, 0x43, 0x84, 0xb5, 0xdd, 0xae, 0xee, 0x58, + 0x36, 0xdd, 0xa3, 0x5c, 0x67, 0xeb, 0x63, 0xcf, 0xf4, 0x65, 0x8d, 0x3d, 0x93, 0x2d, 0x5c, 0x33, + 0x1d, 0xd3, 0x21, 0xff, 0x76, 0xfd, 0xff, 0xd8, 0xec, 0x86, 0xe9, 0x38, 0xe6, 0x08, 0x75, 0xc9, + 0x68, 0x38, 0x3d, 0xe9, 0x62, 0x6b, 0x8c, 0x3c, 0xac, 0x8d, 0x27, 0x0c, 0xd0, 0x4a, 0x20, 0xe8, + 0x61, 0x0d, 0xa3, 0x8c, 0x75, 0xfc, 0x7a, 0x82, 0x3c, 0xba, 0xde, 0x79, 0x23, 0xc1, 0xd5, 0x9e, + 0x67, 0xee, 0x1b, 0xc6, 0x21, 0x59, 0x3f, 0x7e, 0x3d, 0x41, 0xf2, 0x4d, 0xa8, 0x6b, 0x53, 0x7c, + 0xea, 0xb8, 0x16, 0x7e, 0xdd, 0x94, 0xda, 0xd2, 0x56, 0xbd, 0x3f, 0x9b, 0x90, 0x9f, 0x40, 0x83, + 0xca, 0x1a, 0xf8, 0x82, 0x9a, 0xa5, 0xb6, 0xb4, 0xd5, 0xd8, 0x6b, 0xa9, 0x71, 0x67, 0xa8, 0x33, + 0x91, 0x7d, 0xd0, 0xf9, 0xff, 0x8f, 0x97, 0x7f, 0xf3, 0x9f, 0x3f, 0x6d, 0xcf, 0x04, 0x76, 0x14, + 0x68, 0x46, 0x29, 0xf4, 0x91, 0x37, 0x71, 0x6c, 0x0f, 0x75, 0xfe, 0x2a, 0xc1, 0x72, 0xcf, 0x33, + 0x0f, 0x5d, 0xa4, 0x61, 0x74, 0x38, 0xd2, 0x3c, 0x4f, 0xbe, 0x06, 0x0b, 0x9a, 0x31, 0xb6, 0x6c, + 0xc6, 0x8c, 0x0e, 0xe4, 0x26, 0x54, 0x2d, 0xcf, 0x9b, 0x22, 0xd7, 0x6b, 0x96, 0xda, 0xe5, 0xad, + 0x7a, 0x3f, 0x18, 0xca, 0x0a, 0xd4, 0xc6, 0x08, 0x6b, 0x86, 0x86, 0xb5, 0x66, 0x99, 0x6c, 0xe1, + 0x63, 0x79, 0x07, 0xe4, 0x90, 0x2d, 0x03, 0x6d, 0x38, 0x74, 0xd1, 0x59, 0xb3, 0x42, 0x50, 0x57, + 0x67, 0x94, 0xf7, 0xc9, 0xbc, 0xfc, 0x4d, 0x28, 0x9f, 0x20, 0xd4, 0x5c, 0x20, 0x16, 0xdf, 0x50, + 0xe9, 0x51, 0xaa, 0xfe, 0x51, 0xab, 0xec, 0xa8, 0xd5, 0x43, 0xc7, 0xb2, 0xfb, 0x3e, 0xea, 0x31, + 0xf8, 0x56, 0x52, 0x72, 0x9d, 0x07, 0xb0, 0x2a, 0x1a, 0x11, 0xd8, 0x27, 0xdf, 0x80, 0x9a, 0xee, + 0x4f, 0x0c, 0x2c, 0x83, 0xd9, 0x53, 0x25, 0xe3, 0x23, 0xa3, 0xf3, 0x67, 0x7a, 0x34, 0x74, 0xd7, + 0x8f, 0x5c, 0xe7, 0x15, 0xd2, 0x71, 0x8a, 0xf1, 0x61, 0x29, 0x25, 0x41, 0x4a, 0xa6, 0xf5, 0x1d, + 0x58, 0x7a, 0x35, 0x75, 0x2d, 0xcf, 0xb0, 0x74, 0x6c, 0x39, 0x36, 0xb3, 0x5b, 0x98, 0x93, 0x6f, + 0xc1, 0x92, 0x8b, 0x4e, 0x90, 0x8b, 0x6c, 0x1d, 0xf9, 0xe2, 0x17, 0x08, 0xa6, 0xc1, 0xe7, 0x8e, + 0x0c, 0xc1, 0xd2, 0x47, 0xe4, 0x2c, 0x05, 0xce, 0xdc, 0xd6, 0x75, 0x80, 0x09, 0x9d, 0x9a, 0x59, + 0x5b, 0x67, 0x33, 0x47, 0x46, 0xe7, 0xbf, 0xa5, 0xd0, 0x51, 0x1f, 0x68, 0x58, 0x3f, 0x95, 0x57, + 0x61, 0x91, 0x9e, 0x22, 0x43, 0xb3, 0x51, 0x44, 0x52, 0x29, 0x22, 0x49, 0xfe, 0x2e, 0xd4, 0x7c, + 0xa0, 0x66, 0xeb, 0xa8, 0x59, 0x6e, 0x97, 0xb7, 0x1a, 0x7b, 0xb7, 0x92, 0xae, 0x27, 0xd1, 0x71, + 0xc4, 0x80, 0x7d, 0xbe, 0x45, 0x70, 0x59, 0x25, 0xe2, 0xb2, 0x27, 0x00, 0x1e, 0xd6, 0x5c, 0x3c, + 0x30, 0x34, 0x1c, 0xdc, 0x04, 0x45, 0xa5, 0xaf, 0x54, 0x0d, 0x5e, 0xa9, 0x7a, 0x1c, 0xbc, 0xd2, + 0x83, 0xca, 0xdb, 0xf7, 0x1b, 0x52, 0xbf, 0x4e, 0xf6, 0x3c, 0xd5, 0x30, 0x92, 0xbf, 0x03, 0x35, + 0x64, 0x1b, 0x74, 0xfb, 0x62, 0xc1, 0xed, 0x55, 0x64, 0x1b, 0x64, 0xb3, 0x0c, 0x15, 0x67, 0x82, + 0xec, 0x66, 0xb5, 0x2d, 0x6d, 0xd5, 0xfa, 0xe4, 0x7f, 0xf9, 0x11, 0xd4, 0x1d, 0xd7, 0x32, 0x2d, + 0x7b, 0x80, 0x2f, 0x9a, 0x35, 0x22, 0xf1, 0x66, 0x92, 0xb5, 0x3f, 0x24, 0xa0, 0xe3, 0x8b, 0x7e, + 0xcd, 0x61, 0xff, 0x3d, 0x6e, 0xf8, 0x07, 0xc7, 0x7c, 0xda, 0x79, 0x14, 0xba, 0xa3, 0xc4, 0x33, + 0xfc, 0xdc, 0x36, 0xa0, 0x31, 0xf4, 0x27, 0x06, 0x06, 0xb2, 0x9d, 0x31, 0x3b, 0x0a, 0x20, 0x53, + 0x4f, 0xfd, 0x99, 0xce, 0x3f, 0x24, 0x58, 0xe9, 0x79, 0x66, 0xcf, 0xb2, 0x31, 0xd9, 0x49, 0xdf, + 0xb1, 0x97, 0x7a, 0x7c, 0x11, 0x81, 0xa5, 0xa8, 0xc0, 0xcf, 0x3d, 0x40, 0xc1, 0x25, 0x95, 0x4f, + 0x77, 0xc9, 0x3a, 0xac, 0x25, 0x98, 0xc5, 0x63, 0xd3, 0x31, 0x2c, 0xf5, 0x3c, 0xf3, 0x05, 0xd2, + 0x46, 0xd9, 0xb7, 0x35, 0xcf, 0x5c, 0x51, 0xe9, 0x2a, 0x5c, 0x0b, 0x4b, 0xe5, 0xda, 0xfe, 0x5e, + 0x82, 0x2a, 0x59, 0xb0, 0x0d, 0x5f, 0x93, 0x87, 0x6c, 0x63, 0xa6, 0x89, 0x8e, 0xfc, 0xc0, 0xed, + 0x22, 0xdd, 0x9a, 0x58, 0xc8, 0xc6, 0xc1, 0xb3, 0xe0, 0x13, 0xf2, 0x3e, 0x54, 0xa9, 0xed, 0x1e, + 0x73, 0xea, 0xdd, 0x24, 0xa7, 0x30, 0x1d, 0xaa, 0xff, 0x27, 0xb0, 0x38, 0xd8, 0xa7, 0xfc, 0x45, + 0x82, 0x46, 0x68, 0x21, 0xf7, 0x6a, 0xc8, 0x77, 0xe1, 0x0a, 0x76, 0x35, 0x43, 0x1b, 0x8e, 0xd0, + 0x40, 0x1b, 0x3b, 0x53, 0xce, 0x6b, 0x39, 0x98, 0xde, 0x27, 0xb3, 0xf2, 0x26, 0x2c, 0xbb, 0x08, + 0x5b, 0x2e, 0x32, 0x02, 0x1c, 0x8d, 0x56, 0x97, 0xd9, 0x2c, 0x83, 0x3d, 0x84, 0xeb, 0x74, 0x62, + 0x8c, 0x6c, 0x3c, 0x48, 0x88, 0x5e, 0xab, 0xb3, 0xe5, 0x1f, 0x84, 0x56, 0x99, 0x8f, 0xa9, 0x9f, + 0x3a, 0x5f, 0xc1, 0x15, 0x66, 0x26, 0x77, 0xef, 0xef, 0x25, 0xa8, 0xf7, 0x3c, 0xb3, 0x4f, 0x76, + 0xfb, 0x61, 0xd6, 0x39, 0xb7, 0xb9, 0x7f, 0xe9, 0x40, 0xfe, 0xf6, 0xcc, 0x81, 0x25, 0xe2, 0xc0, + 0xb5, 0xf4, 0xac, 0x37, 0x73, 0x5a, 0x2c, 0xcc, 0x96, 0xe3, 0x61, 0x96, 0xc5, 0x50, 0xa2, 0xa6, + 0xb3, 0x02, 0x5f, 0x71, 0x26, 0x9c, 0xdf, 0xaf, 0x08, 0xbd, 0x43, 0xff, 0x7e, 0x8f, 0xfe, 0xbf, + 0xf4, 0x56, 0x61, 0xd1, 0x45, 0x9a, 0xc7, 0x89, 0xb1, 0x51, 0x02, 0x25, 0xaa, 0x9d, 0x53, 0x72, + 0xc8, 0xab, 0xff, 0xf1, 0xc4, 0x08, 0xb2, 0xda, 0x3e, 0x49, 0x46, 0x73, 0xa7, 0xa8, 0x35, 0xa8, + 0xdb, 0xe8, 0x7c, 0x40, 0x37, 0xb1, 0x1c, 0x65, 0xa3, 0x73, 0x22, 0x4d, 0x48, 0x2e, 0xf4, 0x3d, + 0x46, 0x15, 0x72, 0x3e, 0x7f, 0x94, 0xe0, 0x6b, 0x71, 0xfd, 0x88, 0x95, 0x00, 0x73, 0x53, 0xda, + 0x80, 0x86, 0x66, 0x18, 0x83, 0xa0, 0xa2, 0x28, 0x93, 0x8a, 0x02, 0x34, 0xc3, 0x08, 0x24, 0x92, + 0xeb, 0x3a, 0x76, 0xce, 0x10, 0xc7, 0x54, 0x08, 0xe6, 0x32, 0x9d, 0x65, 0x30, 0x81, 0xfd, 0x06, + 0xac, 0x27, 0xb2, 0xe3, 0xfc, 0x2f, 0x48, 0x04, 0x0e, 0x01, 0x7a, 0x41, 0xd6, 0x99, 0x9b, 0xff, + 0x2d, 0x58, 0xf2, 0x5d, 0x1a, 0xc9, 0xfc, 0x0d, 0x1b, 0x9d, 0x07, 0x32, 0x05, 0x6a, 0x6d, 0x68, + 0x25, 0x6b, 0xe6, 0xdc, 0xa6, 0x21, 0xd7, 0xb2, 0xbc, 0x9e, 0x75, 0xda, 0x39, 0x09, 0xba, 0xf0, + 0x89, 0x87, 0x7d, 0x16, 0x56, 0xcb, 0x79, 0xfd, 0x9a, 0xd4, 0x1b, 0x02, 0x20, 0xc7, 0x6b, 0x39, + 0xd4, 0xe6, 0xf4, 0x5c, 0x07, 0xda, 0x69, 0xfa, 0x39, 0xc7, 0x3f, 0xd0, 0xd0, 0x72, 0xe0, 0x5a, + 0x86, 0x99, 0x16, 0x5a, 0x56, 0x61, 0x11, 0x6b, 0xae, 0x89, 0x82, 0xf0, 0xc8, 0x46, 0x62, 0x44, + 0x2f, 0x47, 0x23, 0x7a, 0xe8, 0xc5, 0x57, 0x8a, 0xbf, 0x78, 0xe1, 0x65, 0xbf, 0x91, 0x42, 0xb7, + 0x8e, 0x64, 0x1c, 0xee, 0xbf, 0x4f, 0x4e, 0xdf, 0x05, 0x7c, 0x28, 0xa4, 0xbc, 0xf0, 0xf5, 0x13, + 0x28, 0x70, 0x17, 0xd2, 0xf8, 0x43, 0x3d, 0xc8, 0x27, 0xdf, 0x57, 0x48, 0x81, 0x1c, 0xcc, 0xea, + 0xc8, 0x3a, 0x43, 0xa9, 0xa4, 0x33, 0x1e, 0xcb, 0x33, 0xa8, 0xb2, 0xf3, 0x27, 0x4c, 0x1b, 0x7b, + 0x3b, 0x29, 0x79, 0x51, 0xd0, 0xa4, 0x06, 0xe5, 0x6d, 0xb0, 0x59, 0xfe, 0x1e, 0x2c, 0x10, 0x27, + 0xb0, 0x92, 0x63, 0xbb, 0x90, 0x14, 0x9a, 0xe4, 0xe9, 0x46, 0xb1, 0x70, 0x59, 0x98, 0xa7, 0x70, + 0x51, 0xfe, 0x29, 0xc1, 0x02, 0x2d, 0x43, 0x84, 0x2b, 0x23, 0x45, 0xaf, 0xcc, 0x2a, 0x2c, 0x0a, + 0x79, 0x98, 0x8d, 0x22, 0x85, 0x6d, 0xf9, 0xf3, 0x0a, 0xdb, 0xca, 0xbc, 0x85, 0x6d, 0xb8, 0xe4, + 0x5e, 0x10, 0x4b, 0x6e, 0x65, 0x04, 0xd5, 0xa0, 0xfb, 0x89, 0x36, 0x23, 0x52, 0xac, 0x19, 0x89, + 0x25, 0xdb, 0x52, 0x42, 0x4f, 0x93, 0xd1, 0x13, 0x89, 0x17, 0xf3, 0x25, 0x89, 0x2e, 0xc2, 0x81, + 0x15, 0xae, 0x8a, 0x73, 0x02, 0x4d, 0xe7, 0x67, 0x20, 0xb3, 0xae, 0xd7, 0xbf, 0x86, 0xa4, 0xee, + 0x76, 0xdc, 0x9c, 0xd6, 0xbb, 0x49, 0xde, 0xbb, 0x0f, 0xe4, 0x77, 0x98, 0x0e, 0x63, 0x3d, 0x35, + 0x22, 0xa9, 0xf2, 0x05, 0xc2, 0x61, 0xe9, 0xfb, 0xa3, 0x91, 0x73, 0x3e, 0xb2, 0x3c, 0x9c, 0xaf, + 0x06, 0xd9, 0x7e, 0x6d, 0x46, 0x69, 0xd7, 0xfa, 0xc1, 0x30, 0xa6, 0x66, 0x13, 0x6e, 0x67, 0xa8, + 0xe1, 0x2f, 0xf5, 0x26, 0x28, 0x71, 0x5b, 0xf9, 0xea, 0x80, 0xe4, 0x96, 0x3e, 0x49, 0x9c, 0x5f, + 0xc4, 0x19, 0x34, 0x8b, 0xc4, 0x15, 0x70, 0x06, 0x36, 0x09, 0x2f, 0xa1, 0xfc, 0xf7, 0x0c, 0xe5, + 0x7d, 0x05, 0x61, 0xdf, 0x02, 0x4a, 0x85, 0xbe, 0x05, 0x44, 0x09, 0xad, 0xc1, 0x8d, 0x98, 0x3e, + 0x4e, 0xc6, 0x0c, 0x3e, 0x87, 0x10, 0x3f, 0x22, 0x83, 0x5e, 0xbf, 0xc3, 0x53, 0xcd, 0xb2, 0x73, + 0x38, 0xad, 0x03, 0xe8, 0x3e, 0x6c, 0x60, 0x6b, 0x63, 0x14, 0xdc, 0x38, 0x32, 0xf3, 0x5c, 0x1b, + 0xc7, 0x59, 0xd0, 0xdc, 0x95, 0xa8, 0x88, 0x93, 0x79, 0x45, 0xee, 0x11, 0x75, 0xdd, 0x97, 0xe6, + 0x43, 0x2f, 0x53, 0x9a, 0xae, 0x80, 0xd2, 0xde, 0xef, 0x56, 0xa0, 0xdc, 0xf3, 0x4c, 0xf9, 0xe7, + 0xd0, 0x08, 0x7f, 0x16, 0xea, 0xa4, 0x84, 0xdb, 0x10, 0x46, 0xd9, 0xce, 0xc7, 0xf0, 0xf7, 0xad, + 0xc3, 0x65, 0xf1, 0xd3, 0xcb, 0x9d, 0xcc, 0xcd, 0x0c, 0xa5, 0xec, 0x14, 0x41, 0x71, 0x25, 0xdc, + 0x06, 0x1a, 0xba, 0xb3, 0x6d, 0x20, 0x98, 0x1c, 0x1b, 0xc4, 0xce, 0x7d, 0x04, 0x57, 0x63, 0x4d, + 0x79, 0x5a, 0xd3, 0x17, 0x05, 0x2a, 0xdd, 0x82, 0x40, 0xae, 0xed, 0x27, 0x50, 0x9f, 0x35, 0xc3, + 0xed, 0xd4, 0xde, 0x92, 0x21, 0x94, 0xad, 0x3c, 0x04, 0x17, 0xfc, 0x7d, 0xa8, 0x90, 0xb6, 0x77, + 0x2d, 0xa3, 0x5f, 0x55, 0x6e, 0x67, 0x2c, 0x72, 0x49, 0xcf, 0x61, 0x91, 0x75, 0x78, 0xeb, 0x29, + 0x70, 0xba, 0xac, 0x6c, 0x66, 0x2e, 0x87, 0xe5, 0xb1, 0x96, 0x2c, 0x4d, 0x1e, 0x5d, 0x4e, 0x95, + 0x27, 0xb6, 0x54, 0xfe, 0x81, 0xc5, 0xfa, 0xa9, 0xb4, 0x03, 0x8b, 0x02, 0x53, 0x0f, 0x2c, 0xad, + 0x61, 0x92, 0x5d, 0x90, 0x13, 0x9a, 0xa5, 0x7b, 0xf9, 0x62, 0x18, 0x54, 0xd9, 0x2d, 0x0c, 0xe5, + 0x3a, 0xa7, 0xb0, 0x92, 0xd4, 0xe1, 0x6c, 0xe7, 0x4b, 0x0a, 0xb0, 0xca, 0x5e, 0x71, 0x6c, 0xdc, + 0x54, 0xa1, 0x79, 0xc9, 0x36, 0x35, 0x0c, 0xcd, 0x31, 0x35, 0xa9, 0x37, 0x91, 0x7f, 0x09, 0x5f, + 0x27, 0x37, 0x26, 0x3b, 0x45, 0x64, 0x71, 0x73, 0xbf, 0x35, 0x0f, 0x3a, 0xee, 0x67, 0xb1, 0xa6, + 0xcf, 0xf6, 0xb3, 0x80, 0xcd, 0xf1, 0x73, 0x62, 0xa1, 0xee, 0x3f, 0x08, 0xd6, 0xe7, 0xac, 0x67, + 0x96, 0xbf, 0xa9, 0x0f, 0x42, 0xac, 0xf1, 0xfd, 0x28, 0x2c, 0xd6, 0xf7, 0x77, 0x8a, 0x54, 0xd5, + 0x4a, 0xa1, 0x0a, 0x3e, 0xac, 0x44, 0xfc, 0x01, 0x24, 0x4d, 0x89, 0x80, 0x4a, 0x55, 0x92, 0xf8, + 0x4b, 0x86, 0xfc, 0x5b, 0x09, 0x9a, 0xa9, 0xf5, 0x58, 0x37, 0x35, 0x78, 0x25, 0x6f, 0x50, 0x1e, + 0xce, 0xb9, 0x81, 0xd3, 0xb0, 0xe0, 0x4a, 0xb4, 0xe6, 0xfc, 0x46, 0x86, 0x1d, 0x21, 0x9c, 0xa2, + 0x16, 0xc3, 0x85, 0xdf, 0x5c, 0x42, 0x51, 0x77, 0x2f, 0x35, 0xb2, 0x46, 0xa1, 0xa9, 0x6f, 0x2e, + 0xbd, 0x92, 0x93, 0x4f, 0x60, 0x39, 0x52, 0xc6, 0x6d, 0xe6, 0x47, 0x8b, 0x67, 0x08, 0x29, 0xf7, + 0x0b, 0xc1, 0xc2, 0x6f, 0x3b, 0xb9, 0x42, 0xcb, 0xb8, 0x14, 0x71, 0x74, 0xea, 0xdb, 0xce, 0x2c, + 0xca, 0xc8, 0x55, 0x4a, 0x2d, 0xc9, 0xba, 0x99, 0x4e, 0x4b, 0xe0, 0xf0, 0x70, 0xce, 0x0d, 0x01, + 0x8d, 0x83, 0x9f, 0xfe, 0xed, 0x43, 0x4b, 0x7a, 0xf7, 0xa1, 0x25, 0xfd, 0xfb, 0x43, 0x4b, 0x7a, + 0xfb, 0xb1, 0x75, 0xe9, 0xdd, 0xc7, 0xd6, 0xa5, 0x7f, 0x7d, 0x6c, 0x5d, 0x7a, 0xf9, 0xc4, 0xb4, + 0xf0, 0xe9, 0x74, 0xa8, 0xea, 0xce, 0xb8, 0x4b, 0x84, 0xdf, 0xb7, 0x11, 0x3e, 0x77, 0xdc, 0x5f, + 0xb0, 0xd1, 0x08, 0x19, 0x26, 0x72, 0xbb, 0x17, 0xa1, 0xdf, 0x25, 0xc9, 0x0f, 0xa6, 0xe4, 0x97, + 0xc9, 0xee, 0xd9, 0xee, 0x70, 0x91, 0xb4, 0x8c, 0x0f, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xb2, + 0xf7, 0xa5, 0xe0, 0x80, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2938,6 +3049,11 @@ type MsgClient interface { // UpdateProjectMetadata updates the project metadata. Only the admin of the // project can update the project. UpdateProjectMetadata(ctx context.Context, in *MsgUpdateProjectMetadata, opts ...grpc.CallOption) (*MsgUpdateProjectMetadataResponse, error) + // UpdateBatchMetadata updates the batch metadata. Only an "open" batch can be + // updated and only the issuer of the batch can update the batch. + // + // Since Revision 1 + UpdateBatchMetadata(ctx context.Context, in *MsgUpdateBatchMetadata, opts ...grpc.CallOption) (*MsgUpdateBatchMetadataResponse, error) // Bridge processes credits being sent back to the source chain. When credits // are sent back to the source chain, the credits are cancelled and an event // is emitted to be handled by an external bridge service. @@ -3116,6 +3232,15 @@ func (c *msgClient) UpdateProjectMetadata(ctx context.Context, in *MsgUpdateProj return out, nil } +func (c *msgClient) UpdateBatchMetadata(ctx context.Context, in *MsgUpdateBatchMetadata, opts ...grpc.CallOption) (*MsgUpdateBatchMetadataResponse, error) { + out := new(MsgUpdateBatchMetadataResponse) + err := c.cc.Invoke(ctx, "/regen.ecocredit.v1.Msg/UpdateBatchMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) Bridge(ctx context.Context, in *MsgBridge, opts ...grpc.CallOption) (*MsgBridgeResponse, error) { out := new(MsgBridgeResponse) err := c.cc.Invoke(ctx, "/regen.ecocredit.v1.Msg/Bridge", in, out, opts...) @@ -3267,6 +3392,11 @@ type MsgServer interface { // UpdateProjectMetadata updates the project metadata. Only the admin of the // project can update the project. UpdateProjectMetadata(context.Context, *MsgUpdateProjectMetadata) (*MsgUpdateProjectMetadataResponse, error) + // UpdateBatchMetadata updates the batch metadata. Only an "open" batch can be + // updated and only the issuer of the batch can update the batch. + // + // Since Revision 1 + UpdateBatchMetadata(context.Context, *MsgUpdateBatchMetadata) (*MsgUpdateBatchMetadataResponse, error) // Bridge processes credits being sent back to the source chain. When credits // are sent back to the source chain, the credits are cancelled and an event // is emitted to be handled by an external bridge service. @@ -3363,6 +3493,9 @@ func (*UnimplementedMsgServer) UpdateProjectAdmin(ctx context.Context, req *MsgU func (*UnimplementedMsgServer) UpdateProjectMetadata(ctx context.Context, req *MsgUpdateProjectMetadata) (*MsgUpdateProjectMetadataResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateProjectMetadata not implemented") } +func (*UnimplementedMsgServer) UpdateBatchMetadata(ctx context.Context, req *MsgUpdateBatchMetadata) (*MsgUpdateBatchMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateBatchMetadata not implemented") +} func (*UnimplementedMsgServer) Bridge(ctx context.Context, req *MsgBridge) (*MsgBridgeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Bridge not implemented") } @@ -3629,6 +3762,24 @@ func _Msg_UpdateProjectMetadata_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Msg_UpdateBatchMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateBatchMetadata) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateBatchMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/regen.ecocredit.v1.Msg/UpdateBatchMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateBatchMetadata(ctx, req.(*MsgUpdateBatchMetadata)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_Bridge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgBridge) if err := dec(in); err != nil { @@ -3847,6 +3998,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateProjectMetadata", Handler: _Msg_UpdateProjectMetadata_Handler, }, + { + MethodName: "UpdateBatchMetadata", + Handler: _Msg_UpdateBatchMetadata_Handler, + }, { MethodName: "Bridge", Handler: _Msg_Bridge_Handler, @@ -5089,6 +5244,73 @@ func (m *MsgBridge) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgUpdateBatchMetadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateBatchMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateBatchMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewMetadata) > 0 { + i -= len(m.NewMetadata) + copy(dAtA[i:], m.NewMetadata) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewMetadata))) + i-- + dAtA[i] = 0x1a + } + if len(m.BatchDenom) > 0 { + i -= len(m.BatchDenom) + copy(dAtA[i:], m.BatchDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.BatchDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Issuer) > 0 { + i -= len(m.Issuer) + copy(dAtA[i:], m.Issuer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Issuer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateBatchMetadataResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateBatchMetadataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateBatchMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgBridgeResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6244,6 +6466,36 @@ func (m *MsgBridge) Size() (n int) { return n } +func (m *MsgUpdateBatchMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Issuer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BatchDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.NewMetadata) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgUpdateBatchMetadataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgBridgeResponse) Size() (n int) { if m == nil { return 0 @@ -10018,6 +10270,202 @@ func (m *MsgBridge) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUpdateBatchMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateBatchMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateBatchMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Issuer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Issuer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BatchDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BatchDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewMetadata", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewMetadata = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateBatchMetadataResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateBatchMetadataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateBatchMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgBridgeResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/ecocredit/client/testsuite/suite.go b/x/ecocredit/client/testsuite/suite.go index 11070486e5..6c50bee35c 100644 --- a/x/ecocredit/client/testsuite/suite.go +++ b/x/ecocredit/client/testsuite/suite.go @@ -127,6 +127,7 @@ func (s *IntegrationTestSuite) SetupSuite() { Metadata: "metadata", StartDate: &startDate, EndDate: &endDate, + Open: true, }) // create a basket and set test value diff --git a/x/ecocredit/client/testsuite/tx.go b/x/ecocredit/client/testsuite/tx.go index 3d2b98335c..770378e0eb 100644 --- a/x/ecocredit/client/testsuite/tx.go +++ b/x/ecocredit/client/testsuite/tx.go @@ -1250,3 +1250,82 @@ func (s *IntegrationTestSuite) TestUpdateProjectMetadata() { }) } } + +func (s *IntegrationTestSuite) TestUpdateBatchMetadata() { + require := s.Require() + + issuer := s.addr1.String() + + testCases := []struct { + name string + args []string + expErr bool + expErrMsg string + }{ + { + name: "missing args", + args: []string{"foo"}, + expErr: true, + expErrMsg: "Error: accepts 2 arg(s), received 1", + }, + { + name: "too many args", + args: []string{"foo", "bar", "baz"}, + expErr: true, + expErrMsg: "Error: accepts 2 arg(s), received 3", + }, + { + name: "missing from flag", + args: []string{ + s.batchDenom, + "metadata", + }, + expErr: true, + expErrMsg: "Error: required flag(s) \"from\" not set", + }, + { + name: "valid", + args: []string{ + s.batchDenom, + "metadata", + fmt.Sprintf("--%s=%s", flags.FlagFrom, issuer), + }, + }, + { + name: "valid from key-name", + args: []string{ + s.batchDenom, + "metadata", + fmt.Sprintf("--%s=%s", flags.FlagFrom, s.val.Moniker), + }, + }, + { + name: "valid with amino-json", + args: []string{ + s.batchDenom, + "metadata", + fmt.Sprintf("--%s=%s", flags.FlagFrom, issuer), + fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), + }, + }, + } + + for _, tc := range testCases { + args := tc.args + s.Run(tc.name, func() { + cmd := client.TxUpdateBatchMetadataCmd() + args = append(args, s.commonTxFlags()...) + out, err := cli.ExecTestCLICmd(s.val.ClientCtx, cmd, args) + if tc.expErr { + require.Error(err) + require.Contains(out.String(), tc.expErrMsg) + } else { + require.NoError(err) + + var res sdk.TxResponse + require.NoError(s.val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) + require.Zero(res.Code, res.RawLog) + } + }) + } +} diff --git a/x/ecocredit/client/tx.go b/x/ecocredit/client/tx.go index 01160bbbc1..45b74e9ba5 100644 --- a/x/ecocredit/client/tx.go +++ b/x/ecocredit/client/tx.go @@ -10,13 +10,6 @@ import ( marketclient "github.com/regen-network/regen-ledger/x/ecocredit/marketplace/client" ) -const ( - FlagAddIssuers string = "add-issuers" - FlagRemoveIssuers string = "remove-issuers" - FlagReferenceID string = "reference-id" - FlagRetirementJurisdiction string = "retirement-jurisdiction" -) - // TxCmd returns a root CLI command handler for all x/ecocredit transaction commands. func TxCmd(name string) *cobra.Command { cmd := &cobra.Command{ @@ -41,6 +34,7 @@ func TxCmd(name string) *cobra.Command { baseclient.TxUpdateClassAdminCmd(), baseclient.TxUpdateProjectAdminCmd(), baseclient.TxUpdateProjectMetadataCmd(), + baseclient.TxUpdateBatchMetadataCmd(), basketclient.TxCreateBasketCmd(), basketclient.TxPutInBasketCmd(), basketclient.TxTakeFromBasketCmd(),