From b9c7fd11d356a7fb51d76b8a7f79425fca02e750 Mon Sep 17 00:00:00 2001 From: atheeshp <59333759+atheeshp@users.noreply.github.com> Date: Fri, 4 Feb 2022 14:07:45 +0530 Subject: [PATCH] feat: add `MsgWithdrawProposal` to group module (#10893) ## Description Closes: #9660 --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules) - [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [ ] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable) --- api/cosmos/group/v1beta1/events.pulsar.go | 522 ++++++++- api/cosmos/group/v1beta1/tx.pulsar.go | 1261 ++++++++++++++++++--- api/cosmos/group/v1beta1/tx_grpc.pb.go | 38 + api/cosmos/group/v1beta1/types.pulsar.go | 168 +-- proto/cosmos/group/v1beta1/events.proto | 7 + proto/cosmos/group/v1beta1/tx.proto | 15 + proto/cosmos/group/v1beta1/types.proto | 3 +- x/group/client/cli/tx.go | 51 + x/group/client/testutil/tx.go | 164 ++- x/group/codec.go | 2 + x/group/events.pb.go | 177 ++- x/group/keeper/keeper_test.go | 88 ++ x/group/keeper/msg_server.go | 62 + x/group/msgs.go | 36 + x/group/msgs_test.go | 49 + x/group/simulation/operations.go | 163 ++- x/group/simulation/operations_test.go | 70 +- x/group/spec/03_messages.md | 10 + x/group/spec/04_events.md | 7 + x/group/spec/05_client.md | 14 + x/group/spec/README.md | 2 + x/group/tx.pb.go | 509 +++++++-- x/group/types.pb.go | 175 +-- 23 files changed, 3135 insertions(+), 458 deletions(-) diff --git a/api/cosmos/group/v1beta1/events.pulsar.go b/api/cosmos/group/v1beta1/events.pulsar.go index 0d41c4a85f..31844ed5cc 100644 --- a/api/cosmos/group/v1beta1/events.pulsar.go +++ b/api/cosmos/group/v1beta1/events.pulsar.go @@ -2065,6 +2065,410 @@ func (x *fastReflection_EventCreateProposal) ProtoMethods() *protoiface.Methods } } +var ( + md_EventWithdrawProposal protoreflect.MessageDescriptor + fd_EventWithdrawProposal_proposal_id protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_group_v1beta1_events_proto_init() + md_EventWithdrawProposal = File_cosmos_group_v1beta1_events_proto.Messages().ByName("EventWithdrawProposal") + fd_EventWithdrawProposal_proposal_id = md_EventWithdrawProposal.Fields().ByName("proposal_id") +} + +var _ protoreflect.Message = (*fastReflection_EventWithdrawProposal)(nil) + +type fastReflection_EventWithdrawProposal EventWithdrawProposal + +func (x *EventWithdrawProposal) ProtoReflect() protoreflect.Message { + return (*fastReflection_EventWithdrawProposal)(x) +} + +func (x *EventWithdrawProposal) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_EventWithdrawProposal_messageType fastReflection_EventWithdrawProposal_messageType +var _ protoreflect.MessageType = fastReflection_EventWithdrawProposal_messageType{} + +type fastReflection_EventWithdrawProposal_messageType struct{} + +func (x fastReflection_EventWithdrawProposal_messageType) Zero() protoreflect.Message { + return (*fastReflection_EventWithdrawProposal)(nil) +} +func (x fastReflection_EventWithdrawProposal_messageType) New() protoreflect.Message { + return new(fastReflection_EventWithdrawProposal) +} +func (x fastReflection_EventWithdrawProposal_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_EventWithdrawProposal +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_EventWithdrawProposal) Descriptor() protoreflect.MessageDescriptor { + return md_EventWithdrawProposal +} + +// 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_EventWithdrawProposal) Type() protoreflect.MessageType { + return _fastReflection_EventWithdrawProposal_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_EventWithdrawProposal) New() protoreflect.Message { + return new(fastReflection_EventWithdrawProposal) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_EventWithdrawProposal) Interface() protoreflect.ProtoMessage { + return (*EventWithdrawProposal)(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_EventWithdrawProposal) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProposalId != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProposalId) + if !f(fd_EventWithdrawProposal_proposal_id, 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_EventWithdrawProposal) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.group.v1beta1.EventWithdrawProposal.proposal_id": + return x.ProposalId != uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.EventWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.EventWithdrawProposal 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_EventWithdrawProposal) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.group.v1beta1.EventWithdrawProposal.proposal_id": + x.ProposalId = uint64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.EventWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.EventWithdrawProposal 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_EventWithdrawProposal) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.group.v1beta1.EventWithdrawProposal.proposal_id": + value := x.ProposalId + return protoreflect.ValueOfUint64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.EventWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.EventWithdrawProposal 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_EventWithdrawProposal) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.group.v1beta1.EventWithdrawProposal.proposal_id": + x.ProposalId = value.Uint() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.EventWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.EventWithdrawProposal 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_EventWithdrawProposal) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.group.v1beta1.EventWithdrawProposal.proposal_id": + panic(fmt.Errorf("field proposal_id of message cosmos.group.v1beta1.EventWithdrawProposal is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.EventWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.EventWithdrawProposal 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_EventWithdrawProposal) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.group.v1beta1.EventWithdrawProposal.proposal_id": + return protoreflect.ValueOfUint64(uint64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.EventWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.EventWithdrawProposal 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_EventWithdrawProposal) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.group.v1beta1.EventWithdrawProposal", 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_EventWithdrawProposal) 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_EventWithdrawProposal) 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_EventWithdrawProposal) 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_EventWithdrawProposal) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*EventWithdrawProposal) + 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.ProposalId != 0 { + n += 1 + runtime.Sov(uint64(x.ProposalId)) + } + 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().(*EventWithdrawProposal) + 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 x.ProposalId != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProposalId)) + i-- + dAtA[i] = 0x8 + } + 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().(*EventWithdrawProposal) + 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: EventWithdrawProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: EventWithdrawProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProposalId", wireType) + } + x.ProposalId = 0 + 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++ + x.ProposalId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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_EventVote protoreflect.MessageDescriptor fd_EventVote_proposal_id protoreflect.FieldDescriptor @@ -2085,7 +2489,7 @@ func (x *EventVote) ProtoReflect() protoreflect.Message { } func (x *EventVote) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[5] + mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2489,7 +2893,7 @@ func (x *EventExec) ProtoReflect() protoreflect.Message { } func (x *EventExec) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[6] + mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3071,6 +3475,43 @@ func (x *EventCreateProposal) GetProposalId() uint64 { return 0 } +// EventWithdrawProposal is an event emitted when a proposal is withdrawn. +type EventWithdrawProposal struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // proposal_id is the unique ID of the proposal. + ProposalId uint64 `protobuf:"varint,1,opt,name=proposal_id,json=proposalId,proto3" json:"proposal_id,omitempty"` +} + +func (x *EventWithdrawProposal) Reset() { + *x = EventWithdrawProposal{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventWithdrawProposal) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventWithdrawProposal) ProtoMessage() {} + +// Deprecated: Use EventWithdrawProposal.ProtoReflect.Descriptor instead. +func (*EventWithdrawProposal) Descriptor() ([]byte, []int) { + return file_cosmos_group_v1beta1_events_proto_rawDescGZIP(), []int{5} +} + +func (x *EventWithdrawProposal) GetProposalId() uint64 { + if x != nil { + return x.ProposalId + } + return 0 +} + // EventVote is an event emitted when a voter votes on a proposal. type EventVote struct { state protoimpl.MessageState @@ -3084,7 +3525,7 @@ type EventVote struct { func (x *EventVote) Reset() { *x = EventVote{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[5] + mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3098,7 +3539,7 @@ func (*EventVote) ProtoMessage() {} // Deprecated: Use EventVote.ProtoReflect.Descriptor instead. func (*EventVote) Descriptor() ([]byte, []int) { - return file_cosmos_group_v1beta1_events_proto_rawDescGZIP(), []int{5} + return file_cosmos_group_v1beta1_events_proto_rawDescGZIP(), []int{6} } func (x *EventVote) GetProposalId() uint64 { @@ -3121,7 +3562,7 @@ type EventExec struct { func (x *EventExec) Reset() { *x = EventExec{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[6] + mi := &file_cosmos_group_v1beta1_events_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3135,7 +3576,7 @@ func (*EventExec) ProtoMessage() {} // Deprecated: Use EventExec.ProtoReflect.Descriptor instead. func (*EventExec) Descriptor() ([]byte, []int) { - return file_cosmos_group_v1beta1_events_proto_rawDescGZIP(), []int{6} + return file_cosmos_group_v1beta1_events_proto_rawDescGZIP(), []int{7} } func (x *EventExec) GetProposalId() uint64 { @@ -3172,27 +3613,31 @@ var file_cosmos_group_v1beta1_events_proto_rawDesc = []byte{ 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, - 0x6f, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x49, 0x64, 0x22, 0x2c, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x65, - 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x49, 0x64, 0x42, 0xdd, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, - 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x20, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x3a, 0x3a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x38, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, + 0x22, 0x2c, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x2c, + 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x42, 0xdd, 0x01, 0x0a, + 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, + 0x47, 0x58, 0xaa, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0xe2, 0x02, 0x20, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3207,15 +3652,16 @@ func file_cosmos_group_v1beta1_events_proto_rawDescGZIP() []byte { return file_cosmos_group_v1beta1_events_proto_rawDescData } -var file_cosmos_group_v1beta1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_cosmos_group_v1beta1_events_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_cosmos_group_v1beta1_events_proto_goTypes = []interface{}{ (*EventCreateGroup)(nil), // 0: cosmos.group.v1beta1.EventCreateGroup (*EventUpdateGroup)(nil), // 1: cosmos.group.v1beta1.EventUpdateGroup (*EventCreateGroupPolicy)(nil), // 2: cosmos.group.v1beta1.EventCreateGroupPolicy (*EventUpdateGroupPolicy)(nil), // 3: cosmos.group.v1beta1.EventUpdateGroupPolicy (*EventCreateProposal)(nil), // 4: cosmos.group.v1beta1.EventCreateProposal - (*EventVote)(nil), // 5: cosmos.group.v1beta1.EventVote - (*EventExec)(nil), // 6: cosmos.group.v1beta1.EventExec + (*EventWithdrawProposal)(nil), // 5: cosmos.group.v1beta1.EventWithdrawProposal + (*EventVote)(nil), // 6: cosmos.group.v1beta1.EventVote + (*EventExec)(nil), // 7: cosmos.group.v1beta1.EventExec } var file_cosmos_group_v1beta1_events_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type @@ -3292,7 +3738,7 @@ func file_cosmos_group_v1beta1_events_proto_init() { } } file_cosmos_group_v1beta1_events_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventVote); i { + switch v := v.(*EventWithdrawProposal); i { case 0: return &v.state case 1: @@ -3304,6 +3750,18 @@ func file_cosmos_group_v1beta1_events_proto_init() { } } file_cosmos_group_v1beta1_events_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventVote); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_group_v1beta1_events_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EventExec); i { case 0: return &v.state @@ -3322,7 +3780,7 @@ func file_cosmos_group_v1beta1_events_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_group_v1beta1_events_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 8, NumExtensions: 0, NumServices: 0, }, diff --git a/api/cosmos/group/v1beta1/tx.pulsar.go b/api/cosmos/group/v1beta1/tx.pulsar.go index fe7bae5866..1cecc26e86 100644 --- a/api/cosmos/group/v1beta1/tx.pulsar.go +++ b/api/cosmos/group/v1beta1/tx.pulsar.go @@ -8746,6 +8746,830 @@ func (x *fastReflection_MsgCreateProposalResponse) ProtoMethods() *protoiface.Me } } +var ( + md_MsgWithdrawProposal protoreflect.MessageDescriptor + fd_MsgWithdrawProposal_proposal_id protoreflect.FieldDescriptor + fd_MsgWithdrawProposal_address protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_group_v1beta1_tx_proto_init() + md_MsgWithdrawProposal = File_cosmos_group_v1beta1_tx_proto.Messages().ByName("MsgWithdrawProposal") + fd_MsgWithdrawProposal_proposal_id = md_MsgWithdrawProposal.Fields().ByName("proposal_id") + fd_MsgWithdrawProposal_address = md_MsgWithdrawProposal.Fields().ByName("address") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawProposal)(nil) + +type fastReflection_MsgWithdrawProposal MsgWithdrawProposal + +func (x *MsgWithdrawProposal) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawProposal)(x) +} + +func (x *MsgWithdrawProposal) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[18] + 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_MsgWithdrawProposal_messageType fastReflection_MsgWithdrawProposal_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawProposal_messageType{} + +type fastReflection_MsgWithdrawProposal_messageType struct{} + +func (x fastReflection_MsgWithdrawProposal_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawProposal)(nil) +} +func (x fastReflection_MsgWithdrawProposal_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawProposal) +} +func (x fastReflection_MsgWithdrawProposal_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawProposal +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawProposal) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawProposal +} + +// 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_MsgWithdrawProposal) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawProposal_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawProposal) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawProposal) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawProposal) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawProposal)(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_MsgWithdrawProposal) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.ProposalId != uint64(0) { + value := protoreflect.ValueOfUint64(x.ProposalId) + if !f(fd_MsgWithdrawProposal_proposal_id, value) { + return + } + } + if x.Address != "" { + value := protoreflect.ValueOfString(x.Address) + if !f(fd_MsgWithdrawProposal_address, 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_MsgWithdrawProposal) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.group.v1beta1.MsgWithdrawProposal.proposal_id": + return x.ProposalId != uint64(0) + case "cosmos.group.v1beta1.MsgWithdrawProposal.address": + return x.Address != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposal 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_MsgWithdrawProposal) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.group.v1beta1.MsgWithdrawProposal.proposal_id": + x.ProposalId = uint64(0) + case "cosmos.group.v1beta1.MsgWithdrawProposal.address": + x.Address = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposal 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_MsgWithdrawProposal) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.group.v1beta1.MsgWithdrawProposal.proposal_id": + value := x.ProposalId + return protoreflect.ValueOfUint64(value) + case "cosmos.group.v1beta1.MsgWithdrawProposal.address": + value := x.Address + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposal 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_MsgWithdrawProposal) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.group.v1beta1.MsgWithdrawProposal.proposal_id": + x.ProposalId = value.Uint() + case "cosmos.group.v1beta1.MsgWithdrawProposal.address": + x.Address = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposal 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_MsgWithdrawProposal) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.group.v1beta1.MsgWithdrawProposal.proposal_id": + panic(fmt.Errorf("field proposal_id of message cosmos.group.v1beta1.MsgWithdrawProposal is not mutable")) + case "cosmos.group.v1beta1.MsgWithdrawProposal.address": + panic(fmt.Errorf("field address of message cosmos.group.v1beta1.MsgWithdrawProposal is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposal 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_MsgWithdrawProposal) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.group.v1beta1.MsgWithdrawProposal.proposal_id": + return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.group.v1beta1.MsgWithdrawProposal.address": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposal")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposal 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_MsgWithdrawProposal) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.group.v1beta1.MsgWithdrawProposal", 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_MsgWithdrawProposal) 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_MsgWithdrawProposal) 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_MsgWithdrawProposal) 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_MsgWithdrawProposal) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawProposal) + 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.ProposalId != 0 { + n += 1 + runtime.Sov(uint64(x.ProposalId)) + } + l = len(x.Address) + 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().(*MsgWithdrawProposal) + 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.Address) > 0 { + i -= len(x.Address) + copy(dAtA[i:], x.Address) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Address))) + i-- + dAtA[i] = 0x12 + } + if x.ProposalId != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.ProposalId)) + i-- + dAtA[i] = 0x8 + } + 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().(*MsgWithdrawProposal) + 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: MsgWithdrawProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ProposalId", wireType) + } + x.ProposalId = 0 + 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++ + x.ProposalId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = 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_MsgWithdrawProposalResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_group_v1beta1_tx_proto_init() + md_MsgWithdrawProposalResponse = File_cosmos_group_v1beta1_tx_proto.Messages().ByName("MsgWithdrawProposalResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgWithdrawProposalResponse)(nil) + +type fastReflection_MsgWithdrawProposalResponse MsgWithdrawProposalResponse + +func (x *MsgWithdrawProposalResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgWithdrawProposalResponse)(x) +} + +func (x *MsgWithdrawProposalResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[19] + 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_MsgWithdrawProposalResponse_messageType fastReflection_MsgWithdrawProposalResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgWithdrawProposalResponse_messageType{} + +type fastReflection_MsgWithdrawProposalResponse_messageType struct{} + +func (x fastReflection_MsgWithdrawProposalResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgWithdrawProposalResponse)(nil) +} +func (x fastReflection_MsgWithdrawProposalResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawProposalResponse) +} +func (x fastReflection_MsgWithdrawProposalResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawProposalResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgWithdrawProposalResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgWithdrawProposalResponse +} + +// 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_MsgWithdrawProposalResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgWithdrawProposalResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgWithdrawProposalResponse) New() protoreflect.Message { + return new(fastReflection_MsgWithdrawProposalResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgWithdrawProposalResponse) Interface() protoreflect.ProtoMessage { + return (*MsgWithdrawProposalResponse)(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_MsgWithdrawProposalResponse) 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_MsgWithdrawProposalResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposalResponse")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposalResponse 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_MsgWithdrawProposalResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposalResponse")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposalResponse 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_MsgWithdrawProposalResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposalResponse")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposalResponse 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_MsgWithdrawProposalResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposalResponse")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposalResponse 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_MsgWithdrawProposalResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposalResponse")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposalResponse 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_MsgWithdrawProposalResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.group.v1beta1.MsgWithdrawProposalResponse")) + } + panic(fmt.Errorf("message cosmos.group.v1beta1.MsgWithdrawProposalResponse 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_MsgWithdrawProposalResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.group.v1beta1.MsgWithdrawProposalResponse", 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_MsgWithdrawProposalResponse) 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_MsgWithdrawProposalResponse) 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_MsgWithdrawProposalResponse) 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_MsgWithdrawProposalResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgWithdrawProposalResponse) + 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().(*MsgWithdrawProposalResponse) + 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().(*MsgWithdrawProposalResponse) + 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: MsgWithdrawProposalResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgWithdrawProposalResponse: 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_MsgVote protoreflect.MessageDescriptor fd_MsgVote_proposal_id protoreflect.FieldDescriptor @@ -8774,7 +9598,7 @@ func (x *MsgVote) ProtoReflect() protoreflect.Message { } func (x *MsgVote) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[18] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9394,7 +10218,7 @@ func (x *MsgVoteResponse) ProtoReflect() protoreflect.Message { } func (x *MsgVoteResponse) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[19] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9754,7 +10578,7 @@ func (x *MsgExec) ProtoReflect() protoreflect.Message { } func (x *MsgExec) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[20] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10218,7 +11042,7 @@ func (x *MsgExecResponse) ProtoReflect() protoreflect.Message { } func (x *MsgExecResponse) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[21] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11421,6 +12245,79 @@ func (x *MsgCreateProposalResponse) GetProposalId() uint64 { return 0 } +// MsgWithdrawProposal is the Msg/WithdrawProposal request type. +type MsgWithdrawProposal struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // proposal is the unique ID of the proposal. + ProposalId uint64 `protobuf:"varint,1,opt,name=proposal_id,json=proposalId,proto3" json:"proposal_id,omitempty"` + // address is the admin of the group policy or one of the proposer of the proposal. + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *MsgWithdrawProposal) Reset() { + *x = MsgWithdrawProposal{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawProposal) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawProposal) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawProposal.ProtoReflect.Descriptor instead. +func (*MsgWithdrawProposal) Descriptor() ([]byte, []int) { + return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{18} +} + +func (x *MsgWithdrawProposal) GetProposalId() uint64 { + if x != nil { + return x.ProposalId + } + return 0 +} + +func (x *MsgWithdrawProposal) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +// MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type. +type MsgWithdrawProposalResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgWithdrawProposalResponse) Reset() { + *x = MsgWithdrawProposalResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgWithdrawProposalResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgWithdrawProposalResponse) ProtoMessage() {} + +// Deprecated: Use MsgWithdrawProposalResponse.ProtoReflect.Descriptor instead. +func (*MsgWithdrawProposalResponse) Descriptor() ([]byte, []int) { + return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{19} +} + // MsgVote is the Msg/Vote request type. type MsgVote struct { state protoimpl.MessageState @@ -11443,7 +12340,7 @@ type MsgVote struct { func (x *MsgVote) Reset() { *x = MsgVote{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[18] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11457,7 +12354,7 @@ func (*MsgVote) ProtoMessage() {} // Deprecated: Use MsgVote.ProtoReflect.Descriptor instead. func (*MsgVote) Descriptor() ([]byte, []int) { - return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{18} + return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{20} } func (x *MsgVote) GetProposalId() uint64 { @@ -11505,7 +12402,7 @@ type MsgVoteResponse struct { func (x *MsgVoteResponse) Reset() { *x = MsgVoteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[19] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11519,7 +12416,7 @@ func (*MsgVoteResponse) ProtoMessage() {} // Deprecated: Use MsgVoteResponse.ProtoReflect.Descriptor instead. func (*MsgVoteResponse) Descriptor() ([]byte, []int) { - return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{19} + return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{21} } // MsgExec is the Msg/Exec request type. @@ -11537,7 +12434,7 @@ type MsgExec struct { func (x *MsgExec) Reset() { *x = MsgExec{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[20] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11551,7 +12448,7 @@ func (*MsgExec) ProtoMessage() {} // Deprecated: Use MsgExec.ProtoReflect.Descriptor instead. func (*MsgExec) Descriptor() ([]byte, []int) { - return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{20} + return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{22} } func (x *MsgExec) GetProposalId() uint64 { @@ -11578,7 +12475,7 @@ type MsgExecResponse struct { func (x *MsgExecResponse) Reset() { *x = MsgExecResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[21] + mi := &file_cosmos_group_v1beta1_tx_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11592,7 +12489,7 @@ func (*MsgExecResponse) ProtoMessage() {} // Deprecated: Use MsgExecResponse.ProtoReflect.Descriptor instead. func (*MsgExecResponse) Descriptor() ([]byte, []int) { - return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{21} + return file_cosmos_group_v1beta1_tx_proto_rawDescGZIP(), []int{23} } var File_cosmos_group_v1beta1_tx_proto protoreflect.FileDescriptor @@ -11744,128 +12641,144 @@ var file_cosmos_group_v1beta1_tx_proto_rawDesc = []byte{ 0x22, 0x3c, 0x0a, 0x19, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0xe8, - 0x01, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x76, - 0x6f, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x06, 0x63, - 0x68, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, - 0x04, 0x65, 0x78, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x52, 0x04, 0x65, 0x78, 0x65, 0x63, 0x3a, 0x0a, 0x82, - 0xe7, 0xb0, 0x2a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x22, 0x11, 0x0a, 0x0f, 0x4d, 0x73, 0x67, - 0x56, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x07, - 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, - 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, - 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x22, 0x11, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x45, 0x78, - 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x2a, 0x0a, 0x04, 0x45, 0x78, - 0x65, 0x63, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x58, 0x45, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x45, 0x43, - 0x5f, 0x54, 0x52, 0x59, 0x10, 0x01, 0x32, 0xfd, 0x09, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x61, - 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x76, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x10, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x29, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x22, 0x6a, + 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x6f, + 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x4d, 0x73, + 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x07, 0x4d, 0x73, + 0x67, 0x56, 0x6f, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, + 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, + 0x6f, 0x69, 0x63, 0x65, 0x52, 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x04, 0x65, 0x78, 0x65, 0x63, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, + 0x65, 0x63, 0x52, 0x04, 0x65, 0x78, 0x65, 0x63, 0x3a, 0x0a, 0x82, 0xe7, 0xb0, 0x2a, 0x05, 0x76, + 0x6f, 0x74, 0x65, 0x72, 0x22, 0x11, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x45, 0x78, + 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x72, 0x3a, 0x0b, 0x82, 0xe7, 0xb0, 0x2a, 0x06, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x22, 0x11, 0x0a, 0x0f, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x2a, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x14, 0x0a, + 0x10, 0x45, 0x58, 0x45, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x45, 0x43, 0x5f, 0x54, 0x52, 0x59, 0x10, + 0x01, 0x32, 0xef, 0x0a, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x61, 0x0a, 0x0b, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x2c, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x12, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x1a, + 0x33, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x13, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x73, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x63, 0x6f, + 0x6d, 0x69, 0x6e, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x16, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x73, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x9d, 0x01, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x40, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x8b, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x1a, 0x3a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x64, 0x6d, 0x69, + 0x6e, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, - 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x12, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9d, 0x01, 0x0a, 0x1f, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x40, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x56, 0x6f, - 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, - 0x65, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, - 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x1a, - 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xd9, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x63, + 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x19, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3a, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x27, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x10, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x4d, 0x73, 0x67, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x57, + 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, 0x12, + 0x1d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x1a, 0x25, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x56, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x45, 0x78, 0x65, 0x63, 0x12, 0x1d, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, - 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x20, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x3a, 0x3a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0xd9, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, + 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x14, 0x43, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0xe2, 0x02, 0x20, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, + 0x3a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -11881,7 +12794,7 @@ func file_cosmos_group_v1beta1_tx_proto_rawDescGZIP() []byte { } var file_cosmos_group_v1beta1_tx_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_cosmos_group_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_cosmos_group_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_cosmos_group_v1beta1_tx_proto_goTypes = []interface{}{ (Exec)(0), // 0: cosmos.group.v1beta1.Exec (*MsgCreateGroup)(nil), // 1: cosmos.group.v1beta1.MsgCreateGroup @@ -11902,22 +12815,24 @@ var file_cosmos_group_v1beta1_tx_proto_goTypes = []interface{}{ (*MsgUpdateGroupPolicyMetadataResponse)(nil), // 16: cosmos.group.v1beta1.MsgUpdateGroupPolicyMetadataResponse (*MsgCreateProposal)(nil), // 17: cosmos.group.v1beta1.MsgCreateProposal (*MsgCreateProposalResponse)(nil), // 18: cosmos.group.v1beta1.MsgCreateProposalResponse - (*MsgVote)(nil), // 19: cosmos.group.v1beta1.MsgVote - (*MsgVoteResponse)(nil), // 20: cosmos.group.v1beta1.MsgVoteResponse - (*MsgExec)(nil), // 21: cosmos.group.v1beta1.MsgExec - (*MsgExecResponse)(nil), // 22: cosmos.group.v1beta1.MsgExecResponse - (*Member)(nil), // 23: cosmos.group.v1beta1.Member - (*anypb.Any)(nil), // 24: google.protobuf.Any - (Choice)(0), // 25: cosmos.group.v1beta1.Choice + (*MsgWithdrawProposal)(nil), // 19: cosmos.group.v1beta1.MsgWithdrawProposal + (*MsgWithdrawProposalResponse)(nil), // 20: cosmos.group.v1beta1.MsgWithdrawProposalResponse + (*MsgVote)(nil), // 21: cosmos.group.v1beta1.MsgVote + (*MsgVoteResponse)(nil), // 22: cosmos.group.v1beta1.MsgVoteResponse + (*MsgExec)(nil), // 23: cosmos.group.v1beta1.MsgExec + (*MsgExecResponse)(nil), // 24: cosmos.group.v1beta1.MsgExecResponse + (*Member)(nil), // 25: cosmos.group.v1beta1.Member + (*anypb.Any)(nil), // 26: google.protobuf.Any + (Choice)(0), // 27: cosmos.group.v1beta1.Choice } var file_cosmos_group_v1beta1_tx_proto_depIdxs = []int32{ - 23, // 0: cosmos.group.v1beta1.MsgCreateGroup.members:type_name -> cosmos.group.v1beta1.Member - 23, // 1: cosmos.group.v1beta1.MsgUpdateGroupMembers.member_updates:type_name -> cosmos.group.v1beta1.Member - 24, // 2: cosmos.group.v1beta1.MsgCreateGroupPolicy.decision_policy:type_name -> google.protobuf.Any - 24, // 3: cosmos.group.v1beta1.MsgUpdateGroupPolicyDecisionPolicy.decision_policy:type_name -> google.protobuf.Any - 24, // 4: cosmos.group.v1beta1.MsgCreateProposal.msgs:type_name -> google.protobuf.Any + 25, // 0: cosmos.group.v1beta1.MsgCreateGroup.members:type_name -> cosmos.group.v1beta1.Member + 25, // 1: cosmos.group.v1beta1.MsgUpdateGroupMembers.member_updates:type_name -> cosmos.group.v1beta1.Member + 26, // 2: cosmos.group.v1beta1.MsgCreateGroupPolicy.decision_policy:type_name -> google.protobuf.Any + 26, // 3: cosmos.group.v1beta1.MsgUpdateGroupPolicyDecisionPolicy.decision_policy:type_name -> google.protobuf.Any + 26, // 4: cosmos.group.v1beta1.MsgCreateProposal.msgs:type_name -> google.protobuf.Any 0, // 5: cosmos.group.v1beta1.MsgCreateProposal.exec:type_name -> cosmos.group.v1beta1.Exec - 25, // 6: cosmos.group.v1beta1.MsgVote.choice:type_name -> cosmos.group.v1beta1.Choice + 27, // 6: cosmos.group.v1beta1.MsgVote.choice:type_name -> cosmos.group.v1beta1.Choice 0, // 7: cosmos.group.v1beta1.MsgVote.exec:type_name -> cosmos.group.v1beta1.Exec 1, // 8: cosmos.group.v1beta1.Msg.CreateGroup:input_type -> cosmos.group.v1beta1.MsgCreateGroup 3, // 9: cosmos.group.v1beta1.Msg.UpdateGroupMembers:input_type -> cosmos.group.v1beta1.MsgUpdateGroupMembers @@ -11928,21 +12843,23 @@ var file_cosmos_group_v1beta1_tx_proto_depIdxs = []int32{ 13, // 14: cosmos.group.v1beta1.Msg.UpdateGroupPolicyDecisionPolicy:input_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyDecisionPolicy 15, // 15: cosmos.group.v1beta1.Msg.UpdateGroupPolicyMetadata:input_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyMetadata 17, // 16: cosmos.group.v1beta1.Msg.CreateProposal:input_type -> cosmos.group.v1beta1.MsgCreateProposal - 19, // 17: cosmos.group.v1beta1.Msg.Vote:input_type -> cosmos.group.v1beta1.MsgVote - 21, // 18: cosmos.group.v1beta1.Msg.Exec:input_type -> cosmos.group.v1beta1.MsgExec - 2, // 19: cosmos.group.v1beta1.Msg.CreateGroup:output_type -> cosmos.group.v1beta1.MsgCreateGroupResponse - 4, // 20: cosmos.group.v1beta1.Msg.UpdateGroupMembers:output_type -> cosmos.group.v1beta1.MsgUpdateGroupMembersResponse - 6, // 21: cosmos.group.v1beta1.Msg.UpdateGroupAdmin:output_type -> cosmos.group.v1beta1.MsgUpdateGroupAdminResponse - 8, // 22: cosmos.group.v1beta1.Msg.UpdateGroupMetadata:output_type -> cosmos.group.v1beta1.MsgUpdateGroupMetadataResponse - 10, // 23: cosmos.group.v1beta1.Msg.CreateGroupPolicy:output_type -> cosmos.group.v1beta1.MsgCreateGroupPolicyResponse - 12, // 24: cosmos.group.v1beta1.Msg.UpdateGroupPolicyAdmin:output_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyAdminResponse - 14, // 25: cosmos.group.v1beta1.Msg.UpdateGroupPolicyDecisionPolicy:output_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyDecisionPolicyResponse - 16, // 26: cosmos.group.v1beta1.Msg.UpdateGroupPolicyMetadata:output_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyMetadataResponse - 18, // 27: cosmos.group.v1beta1.Msg.CreateProposal:output_type -> cosmos.group.v1beta1.MsgCreateProposalResponse - 20, // 28: cosmos.group.v1beta1.Msg.Vote:output_type -> cosmos.group.v1beta1.MsgVoteResponse - 22, // 29: cosmos.group.v1beta1.Msg.Exec:output_type -> cosmos.group.v1beta1.MsgExecResponse - 19, // [19:30] is the sub-list for method output_type - 8, // [8:19] is the sub-list for method input_type + 19, // 17: cosmos.group.v1beta1.Msg.WithdrawProposal:input_type -> cosmos.group.v1beta1.MsgWithdrawProposal + 21, // 18: cosmos.group.v1beta1.Msg.Vote:input_type -> cosmos.group.v1beta1.MsgVote + 23, // 19: cosmos.group.v1beta1.Msg.Exec:input_type -> cosmos.group.v1beta1.MsgExec + 2, // 20: cosmos.group.v1beta1.Msg.CreateGroup:output_type -> cosmos.group.v1beta1.MsgCreateGroupResponse + 4, // 21: cosmos.group.v1beta1.Msg.UpdateGroupMembers:output_type -> cosmos.group.v1beta1.MsgUpdateGroupMembersResponse + 6, // 22: cosmos.group.v1beta1.Msg.UpdateGroupAdmin:output_type -> cosmos.group.v1beta1.MsgUpdateGroupAdminResponse + 8, // 23: cosmos.group.v1beta1.Msg.UpdateGroupMetadata:output_type -> cosmos.group.v1beta1.MsgUpdateGroupMetadataResponse + 10, // 24: cosmos.group.v1beta1.Msg.CreateGroupPolicy:output_type -> cosmos.group.v1beta1.MsgCreateGroupPolicyResponse + 12, // 25: cosmos.group.v1beta1.Msg.UpdateGroupPolicyAdmin:output_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyAdminResponse + 14, // 26: cosmos.group.v1beta1.Msg.UpdateGroupPolicyDecisionPolicy:output_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyDecisionPolicyResponse + 16, // 27: cosmos.group.v1beta1.Msg.UpdateGroupPolicyMetadata:output_type -> cosmos.group.v1beta1.MsgUpdateGroupPolicyMetadataResponse + 18, // 28: cosmos.group.v1beta1.Msg.CreateProposal:output_type -> cosmos.group.v1beta1.MsgCreateProposalResponse + 20, // 29: cosmos.group.v1beta1.Msg.WithdrawProposal:output_type -> cosmos.group.v1beta1.MsgWithdrawProposalResponse + 22, // 30: cosmos.group.v1beta1.Msg.Vote:output_type -> cosmos.group.v1beta1.MsgVoteResponse + 24, // 31: cosmos.group.v1beta1.Msg.Exec:output_type -> cosmos.group.v1beta1.MsgExecResponse + 20, // [20:32] is the sub-list for method output_type + 8, // [8:20] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name 8, // [8:8] is the sub-list for extension extendee 0, // [0:8] is the sub-list for field type_name @@ -12172,7 +13089,7 @@ func file_cosmos_group_v1beta1_tx_proto_init() { } } file_cosmos_group_v1beta1_tx_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgVote); i { + switch v := v.(*MsgWithdrawProposal); i { case 0: return &v.state case 1: @@ -12184,7 +13101,7 @@ func file_cosmos_group_v1beta1_tx_proto_init() { } } file_cosmos_group_v1beta1_tx_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgVoteResponse); i { + switch v := v.(*MsgWithdrawProposalResponse); i { case 0: return &v.state case 1: @@ -12196,7 +13113,7 @@ func file_cosmos_group_v1beta1_tx_proto_init() { } } file_cosmos_group_v1beta1_tx_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgExec); i { + switch v := v.(*MsgVote); i { case 0: return &v.state case 1: @@ -12208,6 +13125,30 @@ func file_cosmos_group_v1beta1_tx_proto_init() { } } file_cosmos_group_v1beta1_tx_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgVoteResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_group_v1beta1_tx_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgExec); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_group_v1beta1_tx_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MsgExecResponse); i { case 0: return &v.state @@ -12226,7 +13167,7 @@ func file_cosmos_group_v1beta1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_group_v1beta1_tx_proto_rawDesc, NumEnums: 1, - NumMessages: 22, + NumMessages: 24, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cosmos/group/v1beta1/tx_grpc.pb.go b/api/cosmos/group/v1beta1/tx_grpc.pb.go index 73c1bccbc0..bd21660625 100644 --- a/api/cosmos/group/v1beta1/tx_grpc.pb.go +++ b/api/cosmos/group/v1beta1/tx_grpc.pb.go @@ -40,6 +40,8 @@ type MsgClient interface { UpdateGroupPolicyMetadata(ctx context.Context, in *MsgUpdateGroupPolicyMetadata, opts ...grpc.CallOption) (*MsgUpdateGroupPolicyMetadataResponse, error) // CreateProposal submits a new proposal. CreateProposal(ctx context.Context, in *MsgCreateProposal, opts ...grpc.CallOption) (*MsgCreateProposalResponse, error) + // WithdrawProposal aborts a proposal. + WithdrawProposal(ctx context.Context, in *MsgWithdrawProposal, opts ...grpc.CallOption) (*MsgWithdrawProposalResponse, error) // Vote allows a voter to vote on a proposal. Vote(ctx context.Context, in *MsgVote, opts ...grpc.CallOption) (*MsgVoteResponse, error) // Exec executes a proposal. @@ -135,6 +137,15 @@ func (c *msgClient) CreateProposal(ctx context.Context, in *MsgCreateProposal, o return out, nil } +func (c *msgClient) WithdrawProposal(ctx context.Context, in *MsgWithdrawProposal, opts ...grpc.CallOption) (*MsgWithdrawProposalResponse, error) { + out := new(MsgWithdrawProposalResponse) + err := c.cc.Invoke(ctx, "/cosmos.group.v1beta1.Msg/WithdrawProposal", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) Vote(ctx context.Context, in *MsgVote, opts ...grpc.CallOption) (*MsgVoteResponse, error) { out := new(MsgVoteResponse) err := c.cc.Invoke(ctx, "/cosmos.group.v1beta1.Msg/Vote", in, out, opts...) @@ -175,6 +186,8 @@ type MsgServer interface { UpdateGroupPolicyMetadata(context.Context, *MsgUpdateGroupPolicyMetadata) (*MsgUpdateGroupPolicyMetadataResponse, error) // CreateProposal submits a new proposal. CreateProposal(context.Context, *MsgCreateProposal) (*MsgCreateProposalResponse, error) + // WithdrawProposal aborts a proposal. + WithdrawProposal(context.Context, *MsgWithdrawProposal) (*MsgWithdrawProposalResponse, error) // Vote allows a voter to vote on a proposal. Vote(context.Context, *MsgVote) (*MsgVoteResponse, error) // Exec executes a proposal. @@ -213,6 +226,9 @@ func (UnimplementedMsgServer) UpdateGroupPolicyMetadata(context.Context, *MsgUpd func (UnimplementedMsgServer) CreateProposal(context.Context, *MsgCreateProposal) (*MsgCreateProposalResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateProposal not implemented") } +func (UnimplementedMsgServer) WithdrawProposal(context.Context, *MsgWithdrawProposal) (*MsgWithdrawProposalResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawProposal not implemented") +} func (UnimplementedMsgServer) Vote(context.Context, *MsgVote) (*MsgVoteResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Vote not implemented") } @@ -394,6 +410,24 @@ func _Msg_CreateProposal_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } +func _Msg_WithdrawProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawProposal) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawProposal(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.group.v1beta1.Msg/WithdrawProposal", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawProposal(ctx, req.(*MsgWithdrawProposal)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_Vote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgVote) if err := dec(in); err != nil { @@ -473,6 +507,10 @@ var Msg_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateProposal", Handler: _Msg_CreateProposal_Handler, }, + { + MethodName: "WithdrawProposal", + Handler: _Msg_WithdrawProposal_Handler, + }, { MethodName: "Vote", Handler: _Msg_Vote_Handler, diff --git a/api/cosmos/group/v1beta1/types.pulsar.go b/api/cosmos/group/v1beta1/types.pulsar.go index c60caa6f89..fa92c112e2 100644 --- a/api/cosmos/group/v1beta1/types.pulsar.go +++ b/api/cosmos/group/v1beta1/types.pulsar.go @@ -6283,6 +6283,9 @@ const ( Proposal_STATUS_CLOSED Proposal_Status = 2 // Final status of a proposal when the group was modified before the final tally. Proposal_STATUS_ABORTED Proposal_Status = 3 + // A proposal can be deleted before the voting start time by the owner. When this happens the final status + // is Withdrawn. + Proposal_STATUS_WITHDRAWN Proposal_Status = 4 ) // Enum value maps for Proposal_Status. @@ -6292,12 +6295,14 @@ var ( 1: "STATUS_SUBMITTED", 2: "STATUS_CLOSED", 3: "STATUS_ABORTED", + 4: "STATUS_WITHDRAWN", } Proposal_Status_value = map[string]int32{ "STATUS_UNSPECIFIED": 0, "STATUS_SUBMITTED": 1, "STATUS_CLOSED": 2, "STATUS_ABORTED": 3, + "STATUS_WITHDRAWN": 4, } ) @@ -7188,7 +7193,7 @@ var file_cosmos_group_v1beta1_types_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, - 0x01, 0x22, 0xa7, 0x0b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x1f, + 0x01, 0x22, 0xda, 0x0b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -7233,7 +7238,7 @@ var file_cosmos_group_v1beta1_types_proto_rawDesc = []byte{ 0x0e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x06, 0x53, 0x74, + 0x41, 0x6e, 0x79, 0x52, 0x04, 0x6d, 0x73, 0x67, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x31, 0x0a, 0x12, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x19, 0x8a, 0x9d, 0x20, 0x15, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, @@ -7246,84 +7251,87 @@ var file_cosmos_group_v1beta1_types_proto_rawDesc = []byte{ 0x73, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x19, 0x8a, 0x9d, 0x20, 0x15, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, - 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x22, 0xda, 0x01, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x55, 0x4c, - 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, - 0x19, 0x8a, 0x9d, 0x20, 0x15, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x12, 0x52, 0x45, - 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x55, 0x4e, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, - 0x10, 0x01, 0x1a, 0x1d, 0x8a, 0x9d, 0x20, 0x19, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x12, 0x2f, 0x0a, 0x0f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x41, 0x43, 0x43, 0x45, - 0x50, 0x54, 0x45, 0x44, 0x10, 0x02, 0x1a, 0x1a, 0x8a, 0x9d, 0x20, 0x16, 0x50, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x52, 0x45, 0x4a, - 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x1a, 0x8a, 0x9d, 0x20, 0x16, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x22, 0x99, 0x02, 0x0a, 0x0e, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x42, 0x0a, 0x1b, - 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x21, 0x8a, - 0x9d, 0x20, 0x1d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x12, 0x3d, 0x0a, 0x17, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x55, 0x4c, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, 0x1a, 0x20, 0x8a, - 0x9d, 0x20, 0x1c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4e, 0x6f, 0x74, 0x52, 0x75, 0x6e, 0x12, - 0x3e, 0x0a, 0x17, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x55, - 0x4c, 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x1a, 0x21, 0x8a, 0x9d, - 0x20, 0x1d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, - 0x3e, 0x0a, 0x17, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x55, - 0x4c, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x1a, 0x21, 0x8a, 0x9d, - 0x20, 0x1d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x1a, - 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x3a, 0x04, 0x88, 0xa0, 0x1f, 0x00, 0x22, 0x89, 0x01, 0x0a, 0x05, - 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x79, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x79, 0x65, 0x73, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, - 0x0d, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x74, 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x74, 0x6f, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x3a, 0x04, 0x88, 0xa0, 0x1f, 0x00, 0x22, 0xf2, 0x01, 0x0a, 0x04, 0x56, 0x6f, 0x74, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, - 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x76, 0x6f, 0x74, 0x65, - 0x72, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x52, - 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x05, 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, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, - 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x74, 0x2a, 0x64, 0x0a, 0x06, - 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, - 0x0a, 0x09, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x01, 0x12, 0x0e, 0x0a, - 0x0a, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x59, 0x45, 0x53, 0x10, 0x02, 0x12, 0x12, 0x0a, - 0x0e, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, 0x49, 0x4e, 0x10, - 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x56, 0x45, 0x54, 0x4f, - 0x10, 0x04, 0x42, 0xdc, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x0a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x42, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xa2, 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, - 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x20, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x3a, 0x3a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x62, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x10, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x4e, 0x10, 0x04, 0x1a, 0x1b, 0x8a, 0x9d, + 0x20, 0x17, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x6e, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x22, + 0xda, 0x01, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x12, 0x52, 0x45, + 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x1a, 0x19, 0x8a, 0x9d, 0x20, 0x15, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x35, 0x0a, + 0x12, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x55, 0x4e, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, + 0x5a, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x1d, 0x8a, 0x9d, 0x20, 0x19, 0x50, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x55, 0x6e, 0x66, 0x69, 0x6e, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x41, + 0x43, 0x43, 0x45, 0x50, 0x54, 0x45, 0x44, 0x10, 0x02, 0x1a, 0x1a, 0x8a, 0x9d, 0x20, 0x16, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x0f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, + 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x1a, 0x8a, 0x9d, 0x20, 0x16, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x22, 0x99, 0x02, 0x0a, + 0x0e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x42, 0x0a, 0x1b, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x55, + 0x4c, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x1a, 0x21, 0x8a, 0x9d, 0x20, 0x1d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x17, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, + 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, + 0x1a, 0x20, 0x8a, 0x9d, 0x20, 0x1c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4e, 0x6f, 0x74, 0x52, + 0x75, 0x6e, 0x12, 0x3e, 0x0a, 0x17, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x02, 0x1a, + 0x21, 0x8a, 0x9d, 0x20, 0x1d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x17, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x4f, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x55, 0x4c, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x1a, + 0x21, 0x8a, 0x9d, 0x20, 0x1d, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x45, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x3a, 0x04, 0x88, 0xa0, 0x1f, 0x00, 0x22, 0x89, + 0x01, 0x0a, 0x05, 0x54, 0x61, 0x6c, 0x6c, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x79, 0x65, 0x73, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x79, 0x65, 0x73, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x62, 0x73, 0x74, 0x61, 0x69, 0x6e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x65, 0x74, 0x6f, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x65, 0x74, 0x6f, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x04, 0x88, 0xa0, 0x1f, 0x00, 0x22, 0xf2, 0x01, 0x0a, 0x04, 0x56, + 0x6f, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x05, 0x76, 0x6f, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x76, + 0x6f, 0x74, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x6f, 0x69, + 0x63, 0x65, 0x52, 0x06, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x47, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 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, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, + 0x1f, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x41, 0x74, 0x2a, + 0x64, 0x0a, 0x06, 0x43, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x48, 0x4f, + 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x4e, 0x4f, 0x10, 0x01, + 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x59, 0x45, 0x53, 0x10, 0x02, + 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x42, 0x53, 0x54, 0x41, + 0x49, 0x4e, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x48, 0x4f, 0x49, 0x43, 0x45, 0x5f, 0x56, + 0x45, 0x54, 0x4f, 0x10, 0x04, 0x42, 0xdc, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x42, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x47, 0x58, 0xaa, 0x02, 0x14, 0x43, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0xca, 0x02, 0x14, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x20, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x5c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x16, 0x43, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/cosmos/group/v1beta1/events.proto b/proto/cosmos/group/v1beta1/events.proto index 18289d4559..5f2484cb5d 100644 --- a/proto/cosmos/group/v1beta1/events.proto +++ b/proto/cosmos/group/v1beta1/events.proto @@ -41,6 +41,13 @@ message EventCreateProposal { uint64 proposal_id = 1; } +// EventWithdrawProposal is an event emitted when a proposal is withdrawn. +message EventWithdrawProposal { + + // proposal_id is the unique ID of the proposal. + uint64 proposal_id = 1; +} + // EventVote is an event emitted when a voter votes on a proposal. message EventVote { diff --git a/proto/cosmos/group/v1beta1/tx.proto b/proto/cosmos/group/v1beta1/tx.proto index 4bdf013281..5296746f5e 100644 --- a/proto/cosmos/group/v1beta1/tx.proto +++ b/proto/cosmos/group/v1beta1/tx.proto @@ -42,6 +42,9 @@ service Msg { // CreateProposal submits a new proposal. rpc CreateProposal(MsgCreateProposal) returns (MsgCreateProposalResponse); + // WithdrawProposal aborts a proposal. + rpc WithdrawProposal(MsgWithdrawProposal) returns (MsgWithdrawProposalResponse); + // Vote allows a voter to vote on a proposal. rpc Vote(MsgVote) returns (MsgVoteResponse); @@ -258,6 +261,18 @@ message MsgCreateProposalResponse { uint64 proposal_id = 1; } +// MsgWithdrawProposal is the Msg/WithdrawProposal request type. +message MsgWithdrawProposal { + // proposal is the unique ID of the proposal. + uint64 proposal_id = 1; + + // address is the admin of the group policy or one of the proposer of the proposal. + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type. +message MsgWithdrawProposalResponse {} + // MsgVote is the Msg/Vote request type. message MsgVote { option (cosmos.msg.v1.signer) = "voter"; diff --git a/proto/cosmos/group/v1beta1/types.proto b/proto/cosmos/group/v1beta1/types.proto index e6a33568d6..3a5b6dea86 100644 --- a/proto/cosmos/group/v1beta1/types.proto +++ b/proto/cosmos/group/v1beta1/types.proto @@ -178,10 +178,9 @@ message Proposal { // Final status of a proposal when the group was modified before the final tally. STATUS_ABORTED = 3 [(gogoproto.enumvalue_customname) = "ProposalStatusAborted"]; - // TODO: do we want to support a withdrawn operation? // A proposal can be deleted before the voting start time by the owner. When this happens the final status // is Withdrawn. - // STATUS_WITHDRAWN = 4 [(gogoproto.enumvalue_customname) = "Withdrawn"]; + STATUS_WITHDRAWN = 4 [(gogoproto.enumvalue_customname) = "ProposalStatusWithdrawn"]; } // Status represents the high level position in the life cycle of the proposal. Initial value is Submitted. diff --git a/x/group/client/cli/tx.go b/x/group/client/cli/tx.go index af5e461d30..8f0c5ddad9 100644 --- a/x/group/client/cli/tx.go +++ b/x/group/client/cli/tx.go @@ -539,6 +539,57 @@ Parameters: return cmd } +// MsgWithdrawProposalCmd creates a CLI command for Msg/WithdrawProposal. +func MsgWithdrawProposalCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "withdraw-proposal [proposal-id] [group-policy-admin-or-proposer]", + Short: "Withdraw a submitted proposal", + Long: `Withdraw a submitted proposal. + +Parameters: + proposal-id: unique ID of the proposal. + group-policy-admin-or-proposer: either admin of the group policy or one the proposer of the proposal. + (note: --from flag will be ignored here) +`, + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + err := cmd.Flags().Set(flags.FlagFrom, args[1]) + if err != nil { + return err + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposalID, err := strconv.ParseUint(args[0], 10, 64) + if err != nil { + return err + } + + msg := &group.MsgWithdrawProposal{ + ProposalId: proposalID, + Address: clientCtx.GetFromAddress().String(), + } + + if err != nil { + return err + } + + if err = msg.ValidateBasic(); err != nil { + return fmt.Errorf("message validation failed: %w", err) + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + // MsgVoteCmd creates a CLI command for Msg/Vote. func MsgVoteCmd() *cobra.Command { cmd := &cobra.Command{ diff --git a/x/group/client/testutil/tx.go b/x/group/client/testutil/tx.go index 397d5a792a..8827bbb166 100644 --- a/x/group/client/testutil/tx.go +++ b/x/group/client/testutil/tx.go @@ -76,11 +76,16 @@ func (s *IntegrationTestSuite) SetupSuite() { } // create a group - validMembers := fmt.Sprintf(`{"members": [{ - "address": "%s", - "weight": "3", - "metadata": "%s" - }]}`, val.Address.String(), validMetadata) + validMembers := fmt.Sprintf(` + { + "members": [ + { + "address": "%s", + "weight": "3", + "metadata": "%s" + } + ] + }`, val.Address.String(), validMetadata) validMembersFile := testutil.WriteToNewTempFile(s.T(), validMembers) out, err := cli.ExecTestCLICmd(val.ClientCtx, client.MsgCreateGroupCmd(), append( @@ -1505,6 +1510,155 @@ func (s *IntegrationTestSuite) TestTxVote() { } } +func (s *IntegrationTestSuite) TestTxWithdrawProposal() { + val := s.network.Validators[0] + clientCtx := val.ClientCtx + + var commonFlags = []string{ + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + } + + ids := make([]string, 2) + + validTxFileName := getTxSendFileName(s, s.groupPolicies[1].Address, val.Address.String()) + for i := 0; i < 2; i++ { + out, err := cli.ExecTestCLICmd(val.ClientCtx, client.MsgCreateProposalCmd(), + append( + []string{ + s.groupPolicies[1].Address, + val.Address.String(), + validTxFileName, + "", + fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), + }, + commonFlags..., + ), + ) + s.Require().NoError(err, out.String()) + + var txResp sdk.TxResponse + s.Require().NoError(val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &txResp), out.String()) + s.Require().Equal(uint32(0), txResp.Code, out.String()) + ids[i] = s.getProposalIdFromTxResponse(txResp) + } + + testCases := []struct { + name string + args []string + expectErr bool + expectErrMsg string + respType proto.Message + expectedCode uint32 + }{ + { + "correct data", + append( + []string{ + ids[0], + val.Address.String(), + }, + commonFlags..., + ), + false, + "", + &sdk.TxResponse{}, + 0, + }, + { + "already withdrawn proposal", + append( + []string{ + ids[0], + val.Address.String(), + }, + commonFlags..., + ), + true, + "cannot withdraw a proposal with the status of STATUS_WITHDRAWN", + &sdk.TxResponse{}, + 0, + }, + { + "proposal not found", + append( + []string{ + "222", + "wrongAdmin", + }, + commonFlags..., + ), + true, + "not found", + &sdk.TxResponse{}, + 0, + }, + { + "invalid proposal", + append( + []string{ + "abc", + val.Address.String(), + }, + commonFlags..., + ), + true, + "invalid syntax", + &sdk.TxResponse{}, + 0, + }, + { + "wrong admin", + append( + []string{ + ids[1], + "wrongAdmin", + }, + commonFlags..., + ), + true, + "key not found", + &sdk.TxResponse{}, + 0, + }, + } + + for _, tc := range testCases { + tc := tc + + s.Run(tc.name, func() { + cmd := client.MsgWithdrawProposalCmd() + + out, err := cli.ExecTestCLICmd(clientCtx, cmd, tc.args) + if tc.expectErr { + s.Require().Contains(out.String(), tc.expectErrMsg) + } else { + s.Require().NoError(err, out.String()) + s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) + + txResp := tc.respType.(*sdk.TxResponse) + s.Require().Equal(tc.expectedCode, txResp.Code, out.String()) + } + }) + } +} + +func (s *IntegrationTestSuite) getProposalIdFromTxResponse(txResp sdk.TxResponse) string { + s.Require().Greater(len(txResp.Logs), 0) + s.Require().NotNil(txResp.Logs[0].Events) + events := txResp.Logs[0].Events + createProposalEvent, _ := sdk.TypedEventToEvent(&group.EventCreateProposal{}) + + for _, e := range events { + if e.Type == createProposalEvent.Type { + return strings.ReplaceAll(e.Attributes[0].Value, "\"", "") + } + } + + return "" +} + func (s *IntegrationTestSuite) TestTxExec() { val := s.network.Validators[0] clientCtx := val.ClientCtx diff --git a/x/group/codec.go b/x/group/codec.go index 8a1d492d1a..c901a03cfd 100644 --- a/x/group/codec.go +++ b/x/group/codec.go @@ -22,6 +22,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgUpdateGroupPolicyDecisionPolicy{}, "cosmos-sdk/MsgUpdateGroupPolicyDecisionPolicy", nil) cdc.RegisterConcrete(&MsgUpdateGroupPolicyMetadata{}, "cosmos-sdk/MsgUpdateGroupPolicyMetadata", nil) cdc.RegisterConcrete(&MsgCreateProposal{}, "cosmos-sdk/group/MsgCreateProposal", nil) + cdc.RegisterConcrete(&MsgWithdrawProposal{}, "cosmos-sdk/group/MsgWithdrawProposal", nil) cdc.RegisterConcrete(&MsgVote{}, "cosmos-sdk/group/MsgVote", nil) cdc.RegisterConcrete(&MsgExec{}, "cosmos-sdk/group/MsgExec", nil) } @@ -37,6 +38,7 @@ func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { &MsgUpdateGroupPolicyDecisionPolicy{}, &MsgUpdateGroupPolicyMetadata{}, &MsgCreateProposal{}, + &MsgWithdrawProposal{}, &MsgVote{}, &MsgExec{}, ) diff --git a/x/group/events.pb.go b/x/group/events.pb.go index c298b3ddc8..8d480f105f 100644 --- a/x/group/events.pb.go +++ b/x/group/events.pb.go @@ -253,6 +253,52 @@ func (m *EventCreateProposal) GetProposalId() uint64 { return 0 } +// EventWithdrawProposal is an event emitted when a proposal is withdrawn. +type EventWithdrawProposal struct { + // proposal_id is the unique ID of the proposal. + ProposalId uint64 `protobuf:"varint,1,opt,name=proposal_id,json=proposalId,proto3" json:"proposal_id,omitempty"` +} + +func (m *EventWithdrawProposal) Reset() { *m = EventWithdrawProposal{} } +func (m *EventWithdrawProposal) String() string { return proto.CompactTextString(m) } +func (*EventWithdrawProposal) ProtoMessage() {} +func (*EventWithdrawProposal) Descriptor() ([]byte, []int) { + return fileDescriptor_7879e051fb126fc0, []int{5} +} +func (m *EventWithdrawProposal) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventWithdrawProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventWithdrawProposal.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 *EventWithdrawProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventWithdrawProposal.Merge(m, src) +} +func (m *EventWithdrawProposal) XXX_Size() int { + return m.Size() +} +func (m *EventWithdrawProposal) XXX_DiscardUnknown() { + xxx_messageInfo_EventWithdrawProposal.DiscardUnknown(m) +} + +var xxx_messageInfo_EventWithdrawProposal proto.InternalMessageInfo + +func (m *EventWithdrawProposal) GetProposalId() uint64 { + if m != nil { + return m.ProposalId + } + return 0 +} + // EventVote is an event emitted when a voter votes on a proposal. type EventVote struct { // proposal_id is the unique ID of the proposal. @@ -263,7 +309,7 @@ func (m *EventVote) Reset() { *m = EventVote{} } func (m *EventVote) String() string { return proto.CompactTextString(m) } func (*EventVote) ProtoMessage() {} func (*EventVote) Descriptor() ([]byte, []int) { - return fileDescriptor_7879e051fb126fc0, []int{5} + return fileDescriptor_7879e051fb126fc0, []int{6} } func (m *EventVote) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -309,7 +355,7 @@ func (m *EventExec) Reset() { *m = EventExec{} } func (m *EventExec) String() string { return proto.CompactTextString(m) } func (*EventExec) ProtoMessage() {} func (*EventExec) Descriptor() ([]byte, []int) { - return fileDescriptor_7879e051fb126fc0, []int{6} + return fileDescriptor_7879e051fb126fc0, []int{7} } func (m *EventExec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -351,6 +397,7 @@ func init() { proto.RegisterType((*EventCreateGroupPolicy)(nil), "cosmos.group.v1beta1.EventCreateGroupPolicy") proto.RegisterType((*EventUpdateGroupPolicy)(nil), "cosmos.group.v1beta1.EventUpdateGroupPolicy") proto.RegisterType((*EventCreateProposal)(nil), "cosmos.group.v1beta1.EventCreateProposal") + proto.RegisterType((*EventWithdrawProposal)(nil), "cosmos.group.v1beta1.EventWithdrawProposal") proto.RegisterType((*EventVote)(nil), "cosmos.group.v1beta1.EventVote") proto.RegisterType((*EventExec)(nil), "cosmos.group.v1beta1.EventExec") } @@ -358,7 +405,7 @@ func init() { func init() { proto.RegisterFile("cosmos/group/v1beta1/events.proto", fileDescriptor_7879e051fb126fc0) } var fileDescriptor_7879e051fb126fc0 = []byte{ - // 280 bytes of a gzipped FileDescriptorProto + // 295 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0xd6, 0x4f, 0x2f, 0xca, 0x2f, 0x2d, 0xd0, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x2d, 0x4b, 0xcd, 0x2b, 0x29, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x81, @@ -370,13 +417,14 @@ var fileDescriptor_7879e051fb126fc0 = []byte{ 0x92, 0x52, 0x94, 0x5a, 0x5c, 0x0c, 0xd6, 0xc3, 0xe9, 0x24, 0x71, 0x69, 0x8b, 0x2e, 0xcc, 0xf5, 0x8e, 0x10, 0x99, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0xf4, 0x20, 0x98, 0x42, 0xb8, 0x69, 0x48, 0x96, 0x53, 0x60, 0x9a, 0x19, 0x97, 0x30, 0x92, 0xdb, 0x02, 0x8a, 0xf2, 0x0b, 0xf2, 0x8b, 0x13, 0x73, - 0x84, 0xe4, 0xb9, 0xb8, 0x0b, 0xa0, 0x6c, 0x84, 0x87, 0xb8, 0x60, 0x42, 0x9e, 0x29, 0x4a, 0x3a, - 0x5c, 0x9c, 0x60, 0x7d, 0x61, 0xf9, 0x25, 0xa9, 0xc4, 0xab, 0x76, 0xad, 0x48, 0x4d, 0x26, 0xa8, - 0xda, 0xc9, 0xee, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, - 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x54, 0xd2, 0x33, - 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xa1, 0x11, 0x08, 0xa5, 0x74, 0x8b, 0x53, 0xb2, - 0xf5, 0x2b, 0x20, 0x69, 0x22, 0x89, 0x0d, 0x1c, 0xa9, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x78, 0x22, 0x27, 0x30, 0x2a, 0x02, 0x00, 0x00, + 0x84, 0xe4, 0xb9, 0xb8, 0x0b, 0xa0, 0x6c, 0x84, 0x87, 0xb8, 0x60, 0x42, 0x9e, 0x29, 0x4a, 0x16, + 0x5c, 0xa2, 0x60, 0x7d, 0xe1, 0x99, 0x25, 0x19, 0x29, 0x45, 0x89, 0xe5, 0xc4, 0xeb, 0xd4, 0xe1, + 0xe2, 0x04, 0xeb, 0x0c, 0xcb, 0x2f, 0x49, 0x25, 0x5e, 0xb5, 0x6b, 0x45, 0x6a, 0x32, 0x41, 0xd5, + 0x4e, 0x76, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, + 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0xa5, 0x92, 0x9e, 0x59, + 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0x0b, 0x8d, 0x7a, 0x28, 0xa5, 0x5b, 0x9c, 0x92, 0xad, + 0x5f, 0x01, 0x49, 0x4d, 0x49, 0x6c, 0xe0, 0xe4, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xcc, + 0x13, 0x16, 0xd0, 0x64, 0x02, 0x00, 0x00, } func (m *EventCreateGroup) Marshal() (dAtA []byte, err error) { @@ -523,6 +571,34 @@ func (m *EventCreateProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *EventWithdrawProposal) 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 *EventWithdrawProposal) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventWithdrawProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ProposalId != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.ProposalId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *EventVote) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -652,6 +728,18 @@ func (m *EventCreateProposal) Size() (n int) { return n } +func (m *EventWithdrawProposal) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ProposalId != 0 { + n += 1 + sovEvents(uint64(m.ProposalId)) + } + return n +} + func (m *EventVote) Size() (n int) { if m == nil { return 0 @@ -1053,6 +1141,75 @@ func (m *EventCreateProposal) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventWithdrawProposal) 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: EventWithdrawProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventWithdrawProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProposalId", wireType) + } + m.ProposalId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProposalId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + 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 *EventVote) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/group/keeper/keeper_test.go b/x/group/keeper/keeper_test.go index 4d6b6bc52c..8c7e49805b 100644 --- a/x/group/keeper/keeper_test.go +++ b/x/group/keeper/keeper_test.go @@ -1370,6 +1370,94 @@ func (s *TestSuite) TestCreateProposal() { } } +func (s *TestSuite) TestWithdrawProposal() { + addrs := s.addrs + addr2 := addrs[1] + addr5 := addrs[4] + groupPolicy := s.groupPolicyAddr + + msgSend := &banktypes.MsgSend{ + FromAddress: s.groupPolicyAddr.String(), + ToAddress: addr2.String(), + Amount: sdk.Coins{sdk.NewInt64Coin("test", 100)}, + } + + proposers := []string{addr2.String()} + proposalID := createProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) + + specs := map[string]struct { + preRun func(sdkCtx sdk.Context) uint64 + proposalId uint64 + admin string + expErrMsg string + }{ + "wrong admin": { + preRun: func(sdkCtx sdk.Context) uint64 { + return createProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) + }, + admin: addr5.String(), + expErrMsg: "unauthorized", + }, + "wrong proposalId": { + preRun: func(sdkCtx sdk.Context) uint64 { + return 1111 + }, + admin: proposers[0], + expErrMsg: "not found", + }, + "happy case with proposer": { + preRun: func(sdkCtx sdk.Context) uint64 { + return createProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) + }, + proposalId: proposalID, + admin: proposers[0], + }, + "already closed proposal": { + preRun: func(sdkCtx sdk.Context) uint64 { + pId := createProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) + _, err := s.keeper.WithdrawProposal(s.ctx, &group.MsgWithdrawProposal{ + ProposalId: pId, + Address: proposers[0], + }) + s.Require().NoError(err) + return pId + }, + proposalId: proposalID, + admin: proposers[0], + expErrMsg: "cannot withdraw a proposal with the status of STATUS_WITHDRAWN", + }, + "happy case with group admin address": { + preRun: func(sdkCtx sdk.Context) uint64 { + return createProposal(s.ctx, s, []sdk.Msg{msgSend}, proposers) + }, + proposalId: proposalID, + admin: groupPolicy.String(), + }, + } + for msg, spec := range specs { + spec := spec + s.Run(msg, func() { + pId := spec.preRun(s.sdkCtx) + + _, err := s.keeper.WithdrawProposal(s.ctx, &group.MsgWithdrawProposal{ + ProposalId: pId, + Address: spec.admin, + }) + + if spec.expErrMsg != "" { + s.Require().Error(err) + s.Require().Contains(err.Error(), spec.expErrMsg) + return + } + + s.Require().NoError(err) + resp, err := s.keeper.Proposal(s.ctx, &group.QueryProposalRequest{ProposalId: pId}) + s.Require().NoError(err) + s.Require().Equal(resp.GetProposal().Status, group.ProposalStatusWithdrawn) + }) + } +} + func (s *TestSuite) TestVote() { addrs := s.addrs addr1 := addrs[0] diff --git a/x/group/keeper/msg_server.go b/x/group/keeper/msg_server.go index fdc669ee81..06b7b78d2e 100644 --- a/x/group/keeper/msg_server.go +++ b/x/group/keeper/msg_server.go @@ -485,6 +485,68 @@ func (k Keeper) CreateProposal(goCtx context.Context, req *group.MsgCreatePropos return &group.MsgCreateProposalResponse{ProposalId: id}, nil } +func (k Keeper) WithdrawProposal(goCtx context.Context, req *group.MsgWithdrawProposal) (*group.MsgWithdrawProposalResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + id := req.ProposalId + address := req.Address + + proposal, err := k.getProposal(ctx, id) + if err != nil { + return nil, err + } + + // Ensure the proposal can be withdrawn. + if proposal.Status != group.ProposalStatusSubmitted { + return nil, sdkerrors.Wrapf(errors.ErrInvalid, "cannot withdraw a proposal with the status of %s", proposal.Status.String()) + } + + var policyInfo group.GroupPolicyInfo + if policyInfo, err = k.getGroupPolicyInfo(ctx, proposal.Address); err != nil { + return nil, sdkerrors.Wrap(err, "load group policy") + } + + storeUpdates := func() (*group.MsgWithdrawProposalResponse, error) { + if err := k.proposalTable.Update(ctx.KVStore(k.key), id, &proposal); err != nil { + return nil, err + } + return &group.MsgWithdrawProposalResponse{}, nil + } + + // check address is the group policy admin. + if address == policyInfo.Address { + err = ctx.EventManager().EmitTypedEvent(&group.EventWithdrawProposal{ProposalId: id}) + if err != nil { + return nil, err + } + + proposal.Result = group.ProposalResultUnfinalized + proposal.Status = group.ProposalStatusWithdrawn + return storeUpdates() + } + + // if address is not group policy admin then check whether he is in proposers list. + validProposer := false + for _, proposer := range proposal.Proposers { + if proposer == address { + validProposer = true + break + } + } + + if !validProposer { + return nil, sdkerrors.Wrapf(errors.ErrUnauthorized, "given address is neither group policy admin nor in proposers: %s", address) + } + + err = ctx.EventManager().EmitTypedEvent(&group.EventWithdrawProposal{ProposalId: id}) + if err != nil { + return nil, err + } + + proposal.Result = group.ProposalResultUnfinalized + proposal.Status = group.ProposalStatusWithdrawn + return storeUpdates() +} + func (k Keeper) Vote(goCtx context.Context, req *group.MsgVote) (*group.MsgVoteResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) id := req.ProposalId diff --git a/x/group/msgs.go b/x/group/msgs.go index c76209250a..4d842a2f55 100644 --- a/x/group/msgs.go +++ b/x/group/msgs.go @@ -599,6 +599,42 @@ func (m MsgCreateProposal) UnpackInterfaces(unpacker types.AnyUnpacker) error { return tx.UnpackInterfaces(unpacker, m.Msgs) } +var _ sdk.Msg = &MsgWithdrawProposal{} + +// Route Implements Msg. +func (m MsgWithdrawProposal) Route() string { return sdk.MsgTypeURL(&m) } + +// Type Implements Msg. +func (m MsgWithdrawProposal) Type() string { return sdk.MsgTypeURL(&m) } + +// GetSignBytes Implements Msg. +func (m MsgWithdrawProposal) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) +} + +// GetSigners returns the expected signers for a MsgWithdrawProposal. +func (m MsgWithdrawProposal) GetSigners() []sdk.AccAddress { + admin, err := sdk.AccAddressFromBech32(m.Address) + if err != nil { + panic(err) + } + return []sdk.AccAddress{admin} +} + +// ValidateBasic does a sanity check on the provided data +func (m MsgWithdrawProposal) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(m.Address) + if err != nil { + return sdkerrors.Wrap(err, "admin") + } + + if m.ProposalId == 0 { + return sdkerrors.Wrap(errors.ErrEmpty, "proposal id") + } + + return nil +} + var _ sdk.Msg = &MsgVote{} // Route Implements Msg. diff --git a/x/group/msgs_test.go b/x/group/msgs_test.go index 1d47eb9ba4..884b5d5dfe 100644 --- a/x/group/msgs_test.go +++ b/x/group/msgs_test.go @@ -721,6 +721,55 @@ func TestMsgVote(t *testing.T) { } } +func TestMsgWithdrawProposal(t *testing.T) { + testCases := []struct { + name string + msg *group.MsgWithdrawProposal + expErr bool + errMsg string + }{ + { + "invalid address", + &group.MsgWithdrawProposal{ + Address: "address", + }, + true, + "decoding bech32 failed", + }, + { + "proposal id is required", + &group.MsgWithdrawProposal{ + Address: member1.String(), + }, + true, + "proposal id: value is empty", + }, + { + "valid msg", + &group.MsgWithdrawProposal{ + Address: member1.String(), + ProposalId: 1, + }, + false, + "", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + msg := tc.msg + err := msg.ValidateBasic() + if tc.expErr { + require.Error(t, err) + require.Contains(t, err.Error(), tc.errMsg) + } else { + require.NoError(t, err) + require.Equal(t, msg.Type(), sdk.MsgTypeURL(&group.MsgWithdrawProposal{})) + } + }) + } +} + func TestMsgExec(t *testing.T) { testCases := []struct { name string diff --git a/x/group/simulation/operations.go b/x/group/simulation/operations.go index 9fd304e2b7..ab71a71d2d 100644 --- a/x/group/simulation/operations.go +++ b/x/group/simulation/operations.go @@ -34,6 +34,7 @@ var ( TypeMsgUpdateGroupPolicyDecisionPolicy = sdk.MsgTypeURL(&group.MsgUpdateGroupPolicyDecisionPolicy{}) TypeMsgUpdateGroupPolicyMetadata = sdk.MsgTypeURL(&group.MsgUpdateGroupPolicyMetadata{}) TypeMsgCreateProposal = sdk.MsgTypeURL(&group.MsgCreateProposal{}) + TypeMsgWithdrawProposal = sdk.MsgTypeURL(&group.MsgWithdrawProposal{}) TypeMsgVote = sdk.MsgTypeURL(&group.MsgVote{}) TypeMsgExec = sdk.MsgTypeURL(&group.MsgExec{}) ) @@ -44,17 +45,18 @@ const ( OpMsgUpdateGroupAdmin = "op_weight_msg_update_group_admin" OpMsgUpdateGroupMetadata = "op_wieght_msg_update_group_metadata" OpMsgUpdateGroupMembers = "op_weight_msg_update_group_members" - OpMsgCreateGroupPolicy = "op_weight_msg_create_group_account" - OpMsgUpdateGroupPolicyAdmin = "op_weight_msg_update_group_account_admin" - OpMsgUpdateGroupPolicyDecisionPolicy = "op_weight_msg_update_group_account_decision_policy" - OpMsgUpdateGroupPolicyMetaData = "op_weight_msg_update_group_account_metadata" + OpMsgCreateGroupPolicy = "op_weight_msg_create_group_policy" + OpMsgUpdateGroupPolicyAdmin = "op_weight_msg_update_group_policy_admin" + OpMsgUpdateGroupPolicyDecisionPolicy = "op_weight_msg_update_group_policy_decision_policy" + OpMsgUpdateGroupPolicyMetaData = "op_weight_msg_update_group_policy_metadata" OpMsgCreateProposal = "op_weight_msg_create_proposal" + OpMsgWithdrawProposal = "op_weight_msg_withdraw_proposal" OpMsgVote = "op_weight_msg_vote" - OpMsgExec = "ops_weight_msg_exec" + OpMsgExec = "op_weight_msg_exec" ) -// If update group or group account txn's executed, `SimulateMsgVote` & `SimulateMsgExec` txn's returns `noOp`. -// That's why we have less weight for update group & group-account txn's. +// If update group or group policy txn's executed, `SimulateMsgVote` & `SimulateMsgExec` txn's returns `noOp`. +// That's why we have less weight for update group & group-policy txn's. const ( WeightMsgCreateGroup = 100 WeightMsgCreateGroupPolicy = 100 @@ -67,6 +69,7 @@ const ( WeightMsgUpdateGroupPolicyAdmin = 5 WeightMsgUpdateGroupPolicyDecisionPolicy = 5 WeightMsgUpdateGroupPolicyMetadata = 5 + WeightMsgWithdrawProposal = 20 ) const GroupMemberWeight = 40 @@ -87,6 +90,7 @@ func WeightedOperations( weightMsgCreateProposal int weightMsgVote int weightMsgExec int + weightMsgWithdrawProposal int ) appParams.GetOrGenerate(cdc, OpMsgCreateGroup, &weightMsgCreateGroup, nil, @@ -144,8 +148,22 @@ func WeightedOperations( weightMsgUpdateGroupPolicyMetadata = WeightMsgUpdateGroupPolicyMetadata }, ) + appParams.GetOrGenerate(cdc, OpMsgWithdrawProposal, &weightMsgWithdrawProposal, nil, + func(_ *rand.Rand) { + weightMsgWithdrawProposal = WeightMsgWithdrawProposal + }, + ) - return simulation.WeightedOperations{ + // create two proposals for weightedOperations + var createProposalOps simulation.WeightedOperations + for i := 0; i < 2; i++ { + createProposalOps = append(createProposalOps, simulation.NewWeightedOperation( + weightMsgCreateProposal, + SimulateMsgCreateProposal(ak, bk, k), + )) + } + + wPreCreateProposalOps := simulation.WeightedOperations{ simulation.NewWeightedOperation( weightMsgCreateGroup, SimulateMsgCreateGroup(ak, bk), @@ -154,9 +172,12 @@ func WeightedOperations( weightMsgCreateGroupPolicy, SimulateMsgCreateGroupPolicy(ak, bk, k), ), + } + + wPostCreateProposalOps := simulation.WeightedOperations{ simulation.NewWeightedOperation( - weightMsgCreateProposal, - SimulateMsgCreateProposal(ak, bk, k), + WeightMsgWithdrawProposal, + SimulateMsgWithdrawProposal(ak, bk, k), ), simulation.NewWeightedOperation( weightMsgVote, @@ -191,6 +212,8 @@ func WeightedOperations( SimulateMsgUpdateGroupPolicyMetadata(ak, bk, k), ), } + + return append(wPreCreateProposalOps, append(createProposalOps, wPostCreateProposalOps...)...) } // SimulateMsgCreateGroup generates a MsgCreateGroup with random values @@ -699,6 +722,118 @@ func SimulateMsgUpdateGroupPolicyMetadata(ak group.AccountKeeper, } } +// SimulateMsgWithdrawProposal generates a MsgWithdrawProposal with random values +func SimulateMsgWithdrawProposal(ak group.AccountKeeper, + bk group.BankKeeper, k keeper.Keeper) simtypes.Operation { + return func( + r *rand.Rand, app *baseapp.BaseApp, sdkCtx sdk.Context, accounts []simtypes.Account, chainID string) (simtypes.OperationMsg, []simtypes.FutureOperation, error) { + g, groupPolicy, _, _, err := randomGroupPolicy(r, k, ak, sdkCtx, accounts) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, ""), nil, err + } + if g == nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "no group found"), nil, nil + } + if groupPolicy == nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "no group policy found"), nil, nil + } + + groupPolicyAddr := groupPolicy.Address + ctx := sdk.WrapSDKContext(sdkCtx) + + policy := groupPolicy.GetDecisionPolicy() + err = policy.Validate(*g) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, err.Error()), nil, nil + } + + proposalsResult, err := k.ProposalsByGroupPolicy(ctx, &group.QueryProposalsByGroupPolicyRequest{Address: groupPolicyAddr}) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "fail to query group info"), nil, err + } + + proposals := proposalsResult.GetProposals() + if len(proposals) == 0 { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "no proposals found"), nil, nil + } + + var proposal *group.Proposal + proposalID := -1 + + for _, p := range proposals { + if p.Status == group.ProposalStatusSubmitted { + timeout := p.Timeout + proposal = p + proposalID = int(p.ProposalId) + if timeout.Before(sdkCtx.BlockTime()) || timeout.Equal(sdkCtx.BlockTime()) { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "voting period ended: skipping"), nil, nil + } + break + } + } + + // return no-op if no proposal found + if proposalID == -1 { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "no proposals found"), nil, nil + } + + // Ensure that group and group policy haven't been modified since the proposal submission. + if proposal.GroupPolicyVersion != groupPolicy.Version { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "group policy has been modified"), nil, nil + } + + // Ensure the group hasn't been modified. + if proposal.GroupVersion != g.Version { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "group has been modified"), nil, nil + } + + // select a random proposer + proposers := proposal.Proposers + n := randIntInRange(r, len(proposers)) + proposerIdx := findAccount(accounts, proposers[n]) + proposer := accounts[proposerIdx] + proposerAcc := ak.GetAccount(sdkCtx, proposer.Address) + + spendableCoins := bk.SpendableCoins(sdkCtx, proposer.Address) + fees, err := simtypes.RandomFees(r, sdkCtx, spendableCoins) + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "fee error"), nil, err + } + + msg := group.MsgWithdrawProposal{ + ProposalId: uint64(proposalID), + Address: proposer.Address.String(), + } + + txGen := simappparams.MakeTestEncodingConfig().TxConfig + tx, err := helpers.GenTx( + txGen, + []sdk.Msg{&msg}, + fees, + helpers.DefaultGenTxGas, + chainID, + []uint64{proposerAcc.GetAccountNumber()}, + []uint64{proposerAcc.GetSequence()}, + proposer.PrivKey, + ) + + if err != nil { + return simtypes.NoOpMsg(group.ModuleName, TypeMsgUpdateGroupPolicyMetadata, "unable to generate mock tx"), nil, err + } + + _, _, err = app.SimDeliver(txGen.TxEncoder(), tx) + + if err != nil { + if strings.Contains(err.Error(), "group was modified") || strings.Contains(err.Error(), "group policy was modified") { + return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "no-op:group/group-policy was modified"), nil, nil + } + return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "unable to deliver tx"), nil, err + } + + return simtypes.NewOperationMsg(&msg, true, "", nil), nil, err + } +} + // SimulateMsgVote generates a MsgVote with random values func SimulateMsgVote(ak group.AccountKeeper, bk group.BankKeeper, k keeper.Keeper) simtypes.Operation { @@ -802,8 +937,8 @@ func SimulateMsgVote(ak group.AccountKeeper, _, _, err = app.SimDeliver(txGen.TxEncoder(), tx) if err != nil { - if strings.Contains(err.Error(), "group was modified") || strings.Contains(err.Error(), "group account was modified") { - return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "no-op:group/group-account was modified"), nil, nil + if strings.Contains(err.Error(), "group was modified") || strings.Contains(err.Error(), "group policy was modified") { + return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "no-op:group/group-policy was modified"), nil, nil } return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } @@ -877,8 +1012,8 @@ func SimulateMsgExec(ak group.AccountKeeper, _, _, err = app.SimDeliver(txGen.TxEncoder(), tx) if err != nil { - if strings.Contains(err.Error(), "group was modified") || strings.Contains(err.Error(), "group account was modified") { - return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "no-op:group/group-account was modified"), nil, nil + if strings.Contains(err.Error(), "group was modified") || strings.Contains(err.Error(), "group policy was modified") { + return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "no-op:group/group-policy was modified"), nil, nil } return simtypes.NoOpMsg(group.ModuleName, msg.Type(), "unable to deliver tx"), nil, err } diff --git a/x/group/simulation/operations_test.go b/x/group/simulation/operations_test.go index 31e082434e..5e191db8eb 100644 --- a/x/group/simulation/operations_test.go +++ b/x/group/simulation/operations_test.go @@ -52,6 +52,8 @@ func (suite *SimTestSuite) TestWeightedOperations() { {simulation.WeightMsgCreateGroup, group.MsgCreateGroup{}.Route(), simulation.TypeMsgCreateGroup}, {simulation.WeightMsgCreateGroupPolicy, group.MsgCreateGroupPolicy{}.Route(), simulation.TypeMsgCreateGroupPolicy}, {simulation.WeightMsgCreateProposal, group.MsgCreateProposal{}.Route(), simulation.TypeMsgCreateProposal}, + {simulation.WeightMsgCreateProposal, group.MsgCreateProposal{}.Route(), simulation.TypeMsgCreateProposal}, + {simulation.WeightMsgWithdrawProposal, group.MsgWithdrawProposal{}.Route(), simulation.TypeMsgWithdrawProposal}, {simulation.WeightMsgVote, group.MsgVote{}.Route(), simulation.TypeMsgVote}, {simulation.WeightMsgExec, group.MsgExec{}.Route(), simulation.TypeMsgExec}, {simulation.WeightMsgUpdateGroupMetadata, group.MsgUpdateGroupMetadata{}.Route(), simulation.TypeMsgUpdateGroupMetadata}, @@ -67,7 +69,6 @@ func (suite *SimTestSuite) TestWeightedOperations() { // the following checks are very much dependent from the ordering of the output given // by WeightedOperations. if the ordering in WeightedOperations changes some tests // will fail - // fmt.Printf("%v %v\n", operationMsg, w.Weight()) suite.Require().Equal(expected[i].weight, w.Weight(), "weight should be the same") suite.Require().Equal(expected[i].opMsgRoute, operationMsg.Route, "route should be the same") suite.Require().Equal(expected[i].opMsgName, operationMsg.Name, "operation Msg name should be the same") @@ -215,6 +216,73 @@ func (suite *SimTestSuite) TestSimulateCreateProposal() { suite.Require().Len(futureOperations, 0) } +func (suite *SimTestSuite) TestWithdrawProposal() { + // setup 1 account + s := rand.NewSource(1) + r := rand.New(s) + accounts := suite.getTestingAccounts(r, 3) + acc := accounts[0] + + // setup a group + ctx := sdk.WrapSDKContext(suite.ctx) + addr := acc.Address.String() + groupRes, err := suite.app.GroupKeeper.CreateGroup(ctx, + &group.MsgCreateGroup{ + Admin: addr, + Members: []group.Member{ + { + Address: addr, + Weight: "1", + }, + }, + }, + ) + suite.Require().NoError(err) + + // setup a group account + accountReq := &group.MsgCreateGroupPolicy{ + Admin: addr, + GroupId: groupRes.GroupId, + Metadata: nil, + } + err = accountReq.SetDecisionPolicy(group.NewThresholdDecisionPolicy("1", time.Hour)) + suite.Require().NoError(err) + groupPolicyRes, err := suite.app.GroupKeeper.CreateGroupPolicy(ctx, accountReq) + suite.Require().NoError(err) + + // setup a proposal + proposalReq, err := group.NewMsgCreateProposalRequest(groupPolicyRes.Address, []string{addr}, []sdk.Msg{ + &banktypes.MsgSend{ + FromAddress: groupPolicyRes.Address, + ToAddress: addr, + Amount: sdk.Coins{sdk.NewInt64Coin("token", 100)}, + }, + }, []byte{}, 0) + suite.Require().NoError(err) + _, err = suite.app.GroupKeeper.CreateProposal(ctx, proposalReq) + suite.Require().NoError(err) + + // begin a new block + suite.app.BeginBlock(abci.RequestBeginBlock{ + Header: tmproto.Header{ + Height: suite.app.LastBlockHeight() + 1, + AppHash: suite.app.LastCommitID().Hash, + }, + }) + + // execute operation + op := simulation.SimulateMsgWithdrawProposal(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.GroupKeeper) + operationMsg, futureOperations, err := op(r, suite.app.BaseApp, suite.ctx, accounts, "") + suite.Require().NoError(err) + + var msg group.MsgWithdrawProposal + err = group.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg) + suite.Require().NoError(err) + suite.Require().True(operationMsg.OK) + suite.Require().Equal(addr, msg.Address) + suite.Require().Len(futureOperations, 0) +} + func (suite *SimTestSuite) TestSimulateVote() { // setup 1 account s := rand.NewSource(1) diff --git a/x/group/spec/03_messages.md b/x/group/spec/03_messages.md index e4f6744b47..de772cc7be 100644 --- a/x/group/spec/03_messages.md +++ b/x/group/spec/03_messages.md @@ -86,6 +86,16 @@ An optional `Exec` value can be provided to try to execute the proposal immediat It's expecting to fail if metadata length is greater than `MaxMetadataLen` config. +## Msg/WithdrawProposal + +A proposal can be withdrawn using `MsgWithdrawProposal` which has a `address` (can be either proposer or policy admin) and a `proposal_id` (which has to be withdrawn). + ++++ https://github.com/cosmos/cosmos-sdk/blob/f2d6f0e4bb1a9bd7f7ae3cdc4702c9d3d1fc0329/proto/cosmos/group/v1beta1/tx.proto#L251-L258 + +It's expecting to fail if: +- the signer is neither policy address nor proposer of the proposal. +- the proposal is already closed or aborted. + ## Msg/Vote A new vote can be created with the `MsgVote`, given a proposal id, a voter address, a choice (yes, no, veto or abstain) and some optional metadata bytes. diff --git a/x/group/spec/04_events.md b/x/group/spec/04_events.md index 2a52cb1bfc..3fda91e1aa 100644 --- a/x/group/spec/04_events.md +++ b/x/group/spec/04_events.md @@ -41,6 +41,13 @@ The group module emits the following events: | message | action | /cosmos.group.v1beta1.Msg/CreateProposal | | cosmos.group.v1beta1.EventCreateProposal | proposal_id | {proposalId} | +## EventWithdrawProposal + +| Type | Attribute Key | Attribute Value | +|--------------------------------------------|---------------|--------------------------------------------| +| message | action | /cosmos.group.v1beta1.Msg/WithdrawProposal | +| cosmos.group.v1beta1.EventWithdrawProposal | proposal_id | {proposalId} | + ## EventVote | Type | Attribute Key | Attribute Value | diff --git a/x/group/spec/05_client.md b/x/group/spec/05_client.md index 4b09fb6816..b4831376c8 100644 --- a/x/group/spec/05_client.md +++ b/x/group/spec/05_client.md @@ -523,6 +523,20 @@ Example: simd tx group create-proposal cosmos1.. cosmos1.. msg_tx.json "AQ==" ``` +#### withdraw-proposal + +The `withdraw-proposal` command allows users to withdraw a proposal. + +```bash +simd tx group withdraw-proposal [proposal-id] [group-policy-admin-or-proposer] +``` + +Example: + +```bash +simd tx group withdraw-proposal 1 cosmos1.. +``` + #### vote The `vote` command allows users to vote on a proposal. diff --git a/x/group/spec/README.md b/x/group/spec/README.md index d832f0b4b4..2be92e04ba 100644 --- a/x/group/spec/README.md +++ b/x/group/spec/README.md @@ -38,6 +38,7 @@ This module allows the creation and management of on-chain multisig accounts and - [Msg/UpdateGroupPolicyDecisionPolicy](03_messages.md#msgupdategrouppolicydecisionpolicy) - [Msg/UpdateGroupPolicyMetadata](03_messages.md#msgupdategrouppolicymetadata) - [Msg/CreateProposal](03_messages.md#msgcreateproposal) + - [Msg/WithdrawProposal](03_messages.md#msgwithdrawproposal) - [Msg/Vote](03_messages.md#msgvote) - [Msg/Exec](03_messages.md#msgexec) 4. **[Events](04_events.md)** @@ -46,6 +47,7 @@ This module allows the creation and management of on-chain multisig accounts and - [EventCreateGroupPolicy](04_events.md#eventcreategrouppolicy) - [EventUpdateGroupPolicy](04_events.md#eventupdategrouppolicy) - [EventCreateProposal](04_events.md#eventcreateproposal) + - [EventWithdrawProposal](04_events.md#eventwithdrawproposal) - [EventVote](04_events.md#eventvote) - [EventExec](04_events.md#eventexec) 5. **[Client](05_client.md)** diff --git a/x/group/tx.pb.go b/x/group/tx.pb.go index 7039c40a3a..ba56347486 100644 --- a/x/group/tx.pb.go +++ b/x/group/tx.pb.go @@ -950,6 +950,98 @@ func (m *MsgCreateProposalResponse) GetProposalId() uint64 { return 0 } +// MsgWithdrawProposal is the Msg/WithdrawProposal request type. +type MsgWithdrawProposal struct { + // proposal is the unique ID of the proposal. + ProposalId uint64 `protobuf:"varint,1,opt,name=proposal_id,json=proposalId,proto3" json:"proposal_id,omitempty"` + // address is the admin of the group policy or one of the proposer of the proposal. + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *MsgWithdrawProposal) Reset() { *m = MsgWithdrawProposal{} } +func (m *MsgWithdrawProposal) String() string { return proto.CompactTextString(m) } +func (*MsgWithdrawProposal) ProtoMessage() {} +func (*MsgWithdrawProposal) Descriptor() ([]byte, []int) { + return fileDescriptor_da0de9d603d844fb, []int{18} +} +func (m *MsgWithdrawProposal) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgWithdrawProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgWithdrawProposal.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 *MsgWithdrawProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithdrawProposal.Merge(m, src) +} +func (m *MsgWithdrawProposal) XXX_Size() int { + return m.Size() +} +func (m *MsgWithdrawProposal) XXX_DiscardUnknown() { + xxx_messageInfo_MsgWithdrawProposal.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgWithdrawProposal proto.InternalMessageInfo + +func (m *MsgWithdrawProposal) GetProposalId() uint64 { + if m != nil { + return m.ProposalId + } + return 0 +} + +func (m *MsgWithdrawProposal) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +// MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type. +type MsgWithdrawProposalResponse struct { +} + +func (m *MsgWithdrawProposalResponse) Reset() { *m = MsgWithdrawProposalResponse{} } +func (m *MsgWithdrawProposalResponse) String() string { return proto.CompactTextString(m) } +func (*MsgWithdrawProposalResponse) ProtoMessage() {} +func (*MsgWithdrawProposalResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_da0de9d603d844fb, []int{19} +} +func (m *MsgWithdrawProposalResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgWithdrawProposalResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgWithdrawProposalResponse.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 *MsgWithdrawProposalResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgWithdrawProposalResponse.Merge(m, src) +} +func (m *MsgWithdrawProposalResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgWithdrawProposalResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgWithdrawProposalResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgWithdrawProposalResponse proto.InternalMessageInfo + // MsgVote is the Msg/Vote request type. type MsgVote struct { // proposal is the unique ID of the proposal. @@ -969,7 +1061,7 @@ func (m *MsgVote) Reset() { *m = MsgVote{} } func (m *MsgVote) String() string { return proto.CompactTextString(m) } func (*MsgVote) ProtoMessage() {} func (*MsgVote) Descriptor() ([]byte, []int) { - return fileDescriptor_da0de9d603d844fb, []int{18} + return fileDescriptor_da0de9d603d844fb, []int{20} } func (m *MsgVote) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1041,7 +1133,7 @@ func (m *MsgVoteResponse) Reset() { *m = MsgVoteResponse{} } func (m *MsgVoteResponse) String() string { return proto.CompactTextString(m) } func (*MsgVoteResponse) ProtoMessage() {} func (*MsgVoteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_da0de9d603d844fb, []int{19} + return fileDescriptor_da0de9d603d844fb, []int{21} } func (m *MsgVoteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1082,7 +1174,7 @@ func (m *MsgExec) Reset() { *m = MsgExec{} } func (m *MsgExec) String() string { return proto.CompactTextString(m) } func (*MsgExec) ProtoMessage() {} func (*MsgExec) Descriptor() ([]byte, []int) { - return fileDescriptor_da0de9d603d844fb, []int{20} + return fileDescriptor_da0de9d603d844fb, []int{22} } func (m *MsgExec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1133,7 +1225,7 @@ func (m *MsgExecResponse) Reset() { *m = MsgExecResponse{} } func (m *MsgExecResponse) String() string { return proto.CompactTextString(m) } func (*MsgExecResponse) ProtoMessage() {} func (*MsgExecResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_da0de9d603d844fb, []int{21} + return fileDescriptor_da0de9d603d844fb, []int{23} } func (m *MsgExecResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1182,6 +1274,8 @@ func init() { proto.RegisterType((*MsgUpdateGroupPolicyMetadataResponse)(nil), "cosmos.group.v1beta1.MsgUpdateGroupPolicyMetadataResponse") proto.RegisterType((*MsgCreateProposal)(nil), "cosmos.group.v1beta1.MsgCreateProposal") proto.RegisterType((*MsgCreateProposalResponse)(nil), "cosmos.group.v1beta1.MsgCreateProposalResponse") + proto.RegisterType((*MsgWithdrawProposal)(nil), "cosmos.group.v1beta1.MsgWithdrawProposal") + proto.RegisterType((*MsgWithdrawProposalResponse)(nil), "cosmos.group.v1beta1.MsgWithdrawProposalResponse") proto.RegisterType((*MsgVote)(nil), "cosmos.group.v1beta1.MsgVote") proto.RegisterType((*MsgVoteResponse)(nil), "cosmos.group.v1beta1.MsgVoteResponse") proto.RegisterType((*MsgExec)(nil), "cosmos.group.v1beta1.MsgExec") @@ -1191,72 +1285,75 @@ func init() { func init() { proto.RegisterFile("cosmos/group/v1beta1/tx.proto", fileDescriptor_da0de9d603d844fb) } var fileDescriptor_da0de9d603d844fb = []byte{ - // 1039 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x41, 0x6f, 0x1b, 0x45, - 0x14, 0xf6, 0xd4, 0xdb, 0x24, 0x7e, 0x2e, 0x6e, 0xb2, 0x35, 0xc5, 0x59, 0x12, 0xdb, 0x2c, 0x01, - 0x8c, 0x49, 0x76, 0x89, 0x53, 0x04, 0xb2, 0x2a, 0x44, 0x92, 0x1a, 0x64, 0x09, 0xa3, 0xb0, 0xa5, - 0x08, 0xb8, 0x58, 0x6b, 0xef, 0xb0, 0x5d, 0x88, 0x77, 0x56, 0x9e, 0x4d, 0x1a, 0x5f, 0x7b, 0x42, - 0xea, 0x85, 0x3f, 0x80, 0x84, 0x84, 0xc4, 0x81, 0x13, 0x87, 0x5e, 0xb8, 0x72, 0xaa, 0x38, 0x55, - 0x9c, 0x38, 0xa1, 0x2a, 0x39, 0x80, 0xc4, 0x81, 0x5f, 0x80, 0x84, 0x3c, 0xb3, 0x3b, 0xf1, 0x36, - 0xeb, 0x78, 0x6d, 0x45, 0x3d, 0x25, 0xb3, 0xef, 0x7b, 0xef, 0x7d, 0xdf, 0x9b, 0x37, 0xf3, 0xc6, - 0xb0, 0xda, 0x25, 0xb4, 0x47, 0xa8, 0x6e, 0xf7, 0xc9, 0x81, 0xa7, 0x1f, 0x6e, 0x76, 0xb0, 0x6f, - 0x6e, 0xea, 0xfe, 0x91, 0xe6, 0xf5, 0x89, 0x4f, 0xe4, 0x3c, 0x37, 0x6b, 0xcc, 0xac, 0x05, 0x66, - 0x25, 0x6f, 0x13, 0x9b, 0x30, 0x80, 0x3e, 0xfc, 0x8f, 0x63, 0x95, 0x65, 0x8e, 0x6d, 0x73, 0x43, - 0xe0, 0x18, 0x98, 0x6c, 0x42, 0xec, 0x7d, 0xac, 0xb3, 0x55, 0xe7, 0xe0, 0x4b, 0xdd, 0x74, 0x07, - 0x81, 0xa9, 0x1c, 0x4f, 0x60, 0xe0, 0xe1, 0xd0, 0xf9, 0x85, 0x00, 0xd1, 0xa3, 0xb6, 0x7e, 0xb8, - 0x39, 0xfc, 0xc3, 0x0d, 0xea, 0x8f, 0x08, 0x72, 0x2d, 0x6a, 0xef, 0xf6, 0xb1, 0xe9, 0xe3, 0x0f, - 0x86, 0xfe, 0xb2, 0x06, 0x97, 0x4d, 0xab, 0xe7, 0xb8, 0x05, 0x54, 0x46, 0x95, 0xcc, 0x4e, 0xe1, - 0xf7, 0x87, 0x1b, 0xa1, 0x84, 0x6d, 0xcb, 0xea, 0x63, 0x4a, 0x6f, 0xfb, 0x7d, 0xc7, 0xb5, 0x0d, - 0x0e, 0x93, 0x6f, 0xc2, 0x7c, 0x0f, 0xf7, 0x3a, 0xb8, 0x4f, 0x0b, 0x97, 0xca, 0xe9, 0x4a, 0xb6, - 0xb6, 0xa2, 0xc5, 0x29, 0xd6, 0x5a, 0x0c, 0xb4, 0x23, 0x3d, 0xfa, 0xb3, 0x94, 0x32, 0x42, 0x17, - 0x59, 0x81, 0x85, 0x1e, 0xf6, 0x4d, 0xcb, 0xf4, 0xcd, 0x42, 0xba, 0x8c, 0x2a, 0x57, 0x0c, 0xb1, - 0xae, 0xc3, 0xfd, 0xbf, 0x7e, 0xae, 0xf2, 0x2c, 0xea, 0x16, 0x5c, 0x8f, 0xf2, 0x34, 0x30, 0xf5, - 0x88, 0x4b, 0xb1, 0xbc, 0x0c, 0x0b, 0x2c, 0x51, 0xdb, 0xb1, 0x18, 0x65, 0xc9, 0x98, 0x67, 0xeb, - 0xa6, 0xa5, 0xfe, 0x82, 0xe0, 0xf9, 0x16, 0xb5, 0xef, 0x78, 0x56, 0xe8, 0xd5, 0x0a, 0xd2, 0x4e, - 0x2b, 0x72, 0x34, 0xc9, 0xa5, 0x48, 0x12, 0xb9, 0x09, 0x39, 0x2e, 0xa6, 0x7d, 0xc0, 0xf2, 0xd0, - 0x42, 0x3a, 0x71, 0x19, 0x9e, 0xe3, 0x9e, 0x9c, 0x20, 0x8d, 0x08, 0x2e, 0xc1, 0x6a, 0x2c, 0xf5, - 0x50, 0xb7, 0xfa, 0x03, 0x82, 0x6b, 0x51, 0xc4, 0x36, 0xa3, 0x7a, 0x81, 0xd2, 0xde, 0x82, 0x8c, - 0x8b, 0xef, 0xb5, 0x79, 0xb8, 0xf4, 0x84, 0x70, 0x0b, 0x2e, 0xbe, 0xc7, 0x18, 0x44, 0x64, 0xac, - 0xc2, 0x8b, 0x31, 0x24, 0x85, 0x88, 0x07, 0x88, 0xed, 0x6b, 0x44, 0x26, 0xdf, 0xfd, 0x8b, 0xd4, - 0x91, 0xb4, 0xc9, 0xca, 0x50, 0x8c, 0x27, 0x23, 0xf8, 0x3e, 0x41, 0x90, 0x8f, 0xf6, 0xe1, 0x1e, - 0xd9, 0x77, 0xba, 0x83, 0x67, 0xc4, 0x56, 0xfe, 0x18, 0xae, 0x5a, 0xb8, 0xeb, 0x50, 0x87, 0xb8, - 0x6d, 0x8f, 0x65, 0x2e, 0x48, 0x65, 0x54, 0xc9, 0xd6, 0xf2, 0x1a, 0xbf, 0x1f, 0xb4, 0xf0, 0x7e, - 0xd0, 0xb6, 0xdd, 0xc1, 0x8e, 0xfc, 0xdb, 0xc3, 0x8d, 0xdc, 0xad, 0xc0, 0x81, 0x33, 0x35, 0x72, - 0x56, 0x64, 0x5d, 0xcf, 0x7d, 0xf3, 0x7d, 0x29, 0x35, 0x52, 0x04, 0x03, 0x56, 0xe2, 0x14, 0x8a, - 0xf3, 0x56, 0x83, 0x79, 0x93, 0x2b, 0x9a, 0xa8, 0x35, 0x04, 0xaa, 0xbf, 0x22, 0x58, 0x8e, 0x56, - 0x96, 0x07, 0x9d, 0xad, 0x63, 0x47, 0x18, 0x5c, 0x4a, 0xc8, 0xe0, 0x22, 0x5a, 0xf9, 0x65, 0x78, - 0x69, 0xac, 0x06, 0xd1, 0x20, 0xff, 0x20, 0x50, 0xe3, 0x50, 0xd1, 0x4d, 0x78, 0x26, 0x92, 0x63, - 0x7a, 0x25, 0x7d, 0xc1, 0xbd, 0xb2, 0x0e, 0xd5, 0xc9, 0x62, 0x45, 0x6d, 0x7e, 0x42, 0xac, 0xb5, - 0xce, 0xc0, 0x67, 0x3e, 0xf2, 0xb3, 0x54, 0x25, 0xe9, 0x5d, 0xf0, 0x2a, 0xac, 0x9d, 0xc7, 0x55, - 0x88, 0xfa, 0x17, 0xc1, 0x92, 0x38, 0x2f, 0x7b, 0x7d, 0xe2, 0x11, 0x6a, 0xee, 0xcf, 0x72, 0x48, - 0xe4, 0x15, 0xc8, 0x78, 0xcc, 0x3f, 0x1c, 0xa5, 0x19, 0xe3, 0xf4, 0xc3, 0xb9, 0xb7, 0x42, 0x05, - 0xa4, 0x1e, 0xb5, 0x69, 0x41, 0x62, 0x83, 0x27, 0x76, 0x7b, 0x0d, 0x86, 0x90, 0x35, 0x90, 0xf0, - 0x11, 0xee, 0x16, 0x2e, 0x97, 0x51, 0x25, 0x57, 0x53, 0xe2, 0x47, 0x54, 0xe3, 0x08, 0x77, 0x0d, - 0x86, 0xab, 0xcb, 0xe1, 0x86, 0x9f, 0x32, 0x51, 0x6f, 0xb2, 0xb3, 0x1c, 0x15, 0x2c, 0x6e, 0x87, - 0x12, 0x64, 0xbd, 0xe0, 0xdb, 0xe9, 0x40, 0x86, 0xf0, 0x53, 0xd3, 0x52, 0xff, 0x46, 0x30, 0xdf, - 0xa2, 0xf6, 0xa7, 0xc4, 0x9f, 0x0c, 0x1e, 0x36, 0xc4, 0x21, 0xf1, 0x71, 0x7f, 0xe2, 0xf6, 0x72, - 0x98, 0x7c, 0x03, 0xe6, 0xba, 0x77, 0x89, 0xd3, 0xc5, 0xac, 0x44, 0xb9, 0x71, 0x33, 0x78, 0x97, - 0x61, 0x8c, 0x00, 0x1b, 0x29, 0xad, 0xf4, 0x54, 0x69, 0xa7, 0x2d, 0x18, 0x6f, 0x21, 0xc6, 0x46, - 0x5d, 0x82, 0xab, 0x81, 0x52, 0xd1, 0x2d, 0x0e, 0x13, 0x3f, 0xc4, 0x4f, 0x16, 0xff, 0x26, 0xcc, - 0x51, 0xc7, 0x76, 0x13, 0xa8, 0x0f, 0x70, 0xf5, 0xec, 0x30, 0x79, 0xb0, 0x08, 0xb2, 0x33, 0x6a, - 0x41, 0xf6, 0x6a, 0x15, 0x24, 0x96, 0x3a, 0x0f, 0x8b, 0x8d, 0xcf, 0x1a, 0xbb, 0xed, 0x3b, 0x1f, - 0xdd, 0xde, 0x6b, 0xec, 0x36, 0xdf, 0x6f, 0x36, 0x6e, 0x2d, 0xa6, 0xe4, 0x2b, 0xb0, 0xc0, 0xbe, - 0x7e, 0x62, 0x7c, 0xbe, 0x88, 0x6a, 0xff, 0x65, 0x20, 0xdd, 0xa2, 0xb6, 0x6c, 0x42, 0x76, 0xf4, - 0x75, 0xb8, 0x36, 0xe6, 0x55, 0x13, 0x99, 0x18, 0xca, 0x7a, 0x12, 0x94, 0xe8, 0x99, 0x43, 0x90, - 0x63, 0x9e, 0x68, 0x6f, 0x8c, 0x8d, 0x71, 0x16, 0xac, 0x6c, 0x4d, 0x01, 0x16, 0x79, 0x3d, 0x58, - 0x3c, 0xf3, 0x7a, 0x7a, 0x3d, 0x49, 0x20, 0x06, 0x55, 0x36, 0x13, 0x43, 0x45, 0xc6, 0x01, 0x5c, - 0x8b, 0x7b, 0xea, 0xac, 0x27, 0x63, 0xcf, 0xd1, 0xca, 0x8d, 0x69, 0xd0, 0x22, 0x35, 0x85, 0xa5, - 0xb3, 0xaf, 0x96, 0x6a, 0x92, 0x7d, 0xe2, 0x58, 0xa5, 0x96, 0x1c, 0x2b, 0x92, 0xde, 0x47, 0x70, - 0x7d, 0xcc, 0xd0, 0xd7, 0x93, 0xa8, 0x18, 0x71, 0x50, 0xde, 0x9e, 0xd2, 0x41, 0x90, 0xf8, 0x0e, - 0x41, 0x69, 0xd2, 0x3c, 0x7e, 0x27, 0x79, 0xf0, 0xa8, 0xa7, 0xf2, 0xde, 0xac, 0x9e, 0x82, 0xdf, - 0x03, 0x04, 0xcb, 0xe3, 0x67, 0x62, 0x2d, 0x79, 0x7c, 0xd1, 0x21, 0xf5, 0xe9, 0x7d, 0x04, 0x9b, - 0xaf, 0x20, 0xf7, 0xd4, 0x2c, 0x7b, 0x6d, 0xc2, 0xc6, 0x87, 0x40, 0x45, 0x4f, 0x08, 0x14, 0xb9, - 0x3e, 0x04, 0x89, 0xcd, 0x81, 0xd5, 0xb1, 0x8e, 0x43, 0xb3, 0xf2, 0xca, 0xb9, 0xe6, 0xd1, 0x68, - 0xec, 0x76, 0x1b, 0x1f, 0x6d, 0x68, 0x3e, 0x27, 0xda, 0xe8, 0x5d, 0xb9, 0xf3, 0xee, 0xa3, 0xe3, - 0x22, 0x7a, 0x7c, 0x5c, 0x44, 0x4f, 0x8e, 0x8b, 0xe8, 0xdb, 0x93, 0x62, 0xea, 0xf1, 0x49, 0x31, - 0xf5, 0xc7, 0x49, 0x31, 0xf5, 0xc5, 0x9a, 0xed, 0xf8, 0x77, 0x0f, 0x3a, 0x5a, 0x97, 0xf4, 0x82, - 0x9f, 0xe8, 0xc1, 0x9f, 0x0d, 0x6a, 0x7d, 0xad, 0x1f, 0xf1, 0x9f, 0xe1, 0x9d, 0x39, 0x36, 0x7d, - 0xb7, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x20, 0xc7, 0x27, 0xc7, 0x1e, 0x10, 0x00, 0x00, + // 1077 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0xc4, 0x6e, 0x3e, 0x9e, 0x8b, 0x9b, 0x6c, 0x4d, 0x71, 0x96, 0xc4, 0x36, 0x26, 0x80, + 0x31, 0xc9, 0x2e, 0x71, 0x8a, 0x40, 0x56, 0x85, 0x48, 0x52, 0x83, 0x2c, 0x61, 0x14, 0xb6, 0x94, + 0xaf, 0x8b, 0xb5, 0xf6, 0x0e, 0x9b, 0x2d, 0xb1, 0x67, 0xe5, 0xd9, 0x7c, 0xf8, 0xda, 0x13, 0x52, + 0x2f, 0xfc, 0x03, 0x48, 0x48, 0x48, 0x1c, 0x38, 0x71, 0xe8, 0x85, 0x2b, 0xa7, 0x8a, 0x53, 0xc5, + 0x89, 0x13, 0xaa, 0x92, 0x03, 0x48, 0x1c, 0xfa, 0x2f, 0x20, 0xcf, 0xec, 0x4e, 0xbc, 0xf1, 0xae, + 0xbd, 0xb6, 0xa2, 0x9c, 0x92, 0xd9, 0xf9, 0xbd, 0xf7, 0x7e, 0xbf, 0x79, 0x6f, 0xe6, 0x3d, 0x19, + 0x56, 0x5b, 0x84, 0xb6, 0x09, 0x55, 0xcd, 0x2e, 0x39, 0xb4, 0xd5, 0xa3, 0xcd, 0x26, 0x76, 0xf4, + 0x4d, 0xd5, 0x39, 0x51, 0xec, 0x2e, 0x71, 0x88, 0x94, 0xe6, 0xdb, 0x0a, 0xdb, 0x56, 0xdc, 0x6d, + 0x39, 0x6d, 0x12, 0x93, 0x30, 0x80, 0xda, 0xff, 0x8f, 0x63, 0xe5, 0x65, 0x8e, 0x6d, 0xf0, 0x0d, + 0xd7, 0xd0, 0xdd, 0x32, 0x09, 0x31, 0x0f, 0xb0, 0xca, 0x56, 0xcd, 0xc3, 0x6f, 0x54, 0xbd, 0xd3, + 0x73, 0xb7, 0xf2, 0xc1, 0x04, 0x7a, 0x36, 0xf6, 0x8c, 0x5f, 0x72, 0x11, 0x6d, 0x6a, 0xaa, 0x47, + 0x9b, 0xfd, 0x3f, 0x7c, 0xa3, 0xf0, 0x33, 0x82, 0x54, 0x9d, 0x9a, 0xbb, 0x5d, 0xac, 0x3b, 0xf8, + 0xa3, 0xbe, 0xbd, 0xa4, 0xc0, 0x35, 0xdd, 0x68, 0x5b, 0x9d, 0x0c, 0xca, 0xa3, 0xe2, 0xc2, 0x4e, + 0xe6, 0xcf, 0xc7, 0x1b, 0x9e, 0x84, 0x6d, 0xc3, 0xe8, 0x62, 0x4a, 0xef, 0x39, 0x5d, 0xab, 0x63, + 0x6a, 0x1c, 0x26, 0xdd, 0x81, 0xb9, 0x36, 0x6e, 0x37, 0x71, 0x97, 0x66, 0x66, 0xf2, 0xf1, 0x62, + 0xb2, 0xbc, 0xa2, 0x04, 0x29, 0x56, 0xea, 0x0c, 0xb4, 0x93, 0x78, 0xf2, 0x77, 0x2e, 0xa6, 0x79, + 0x26, 0x92, 0x0c, 0xf3, 0x6d, 0xec, 0xe8, 0x86, 0xee, 0xe8, 0x99, 0x78, 0x1e, 0x15, 0xaf, 0x6b, + 0x62, 0x5d, 0x81, 0x87, 0xff, 0xfc, 0x5a, 0xe2, 0x51, 0x0a, 0x5b, 0x70, 0xcb, 0xcf, 0x53, 0xc3, + 0xd4, 0x26, 0x1d, 0x8a, 0xa5, 0x65, 0x98, 0x67, 0x81, 0x1a, 0x96, 0xc1, 0x28, 0x27, 0xb4, 0x39, + 0xb6, 0xae, 0x19, 0x85, 0xdf, 0x10, 0xbc, 0x58, 0xa7, 0xe6, 0x7d, 0xdb, 0xf0, 0xac, 0xea, 0x6e, + 0xd8, 0x49, 0x45, 0x0e, 0x06, 0x99, 0xf1, 0x05, 0x91, 0x6a, 0x90, 0xe2, 0x62, 0x1a, 0x87, 0x2c, + 0x0e, 0xcd, 0xc4, 0x23, 0x1f, 0xc3, 0x0b, 0xdc, 0x92, 0x13, 0xa4, 0x3e, 0xc1, 0x39, 0x58, 0x0d, + 0xa4, 0xee, 0xe9, 0x2e, 0xfc, 0x84, 0xe0, 0xa6, 0x1f, 0xb1, 0xcd, 0xa8, 0x5e, 0xa2, 0xb4, 0x77, + 0x60, 0xa1, 0x83, 0x8f, 0x1b, 0xdc, 0x5d, 0x7c, 0x8c, 0xbb, 0xf9, 0x0e, 0x3e, 0x66, 0x0c, 0x7c, + 0x32, 0x56, 0xe1, 0xe5, 0x00, 0x92, 0x42, 0xc4, 0x23, 0xc4, 0xf2, 0xea, 0x93, 0xc9, 0xb3, 0x7f, + 0x99, 0x3a, 0xa2, 0x16, 0x59, 0x1e, 0xb2, 0xc1, 0x64, 0x04, 0xdf, 0x67, 0x08, 0xd2, 0xfe, 0x3a, + 0xdc, 0x23, 0x07, 0x56, 0xab, 0x77, 0x45, 0x6c, 0xa5, 0x4f, 0xe1, 0x86, 0x81, 0x5b, 0x16, 0xb5, + 0x48, 0xa7, 0x61, 0xb3, 0xc8, 0x99, 0x44, 0x1e, 0x15, 0x93, 0xe5, 0xb4, 0xc2, 0xdf, 0x07, 0xc5, + 0x7b, 0x1f, 0x94, 0xed, 0x4e, 0x6f, 0x47, 0xfa, 0xe3, 0xf1, 0x46, 0xea, 0xae, 0x6b, 0xc0, 0x99, + 0x6a, 0x29, 0xc3, 0xb7, 0xae, 0xa4, 0xbe, 0xfb, 0x31, 0x17, 0x1b, 0x38, 0x04, 0x0d, 0x56, 0x82, + 0x14, 0x8a, 0xfb, 0x56, 0x86, 0x39, 0x9d, 0x2b, 0x1a, 0xab, 0xd5, 0x03, 0x16, 0x7e, 0x47, 0xb0, + 0xec, 0x3f, 0x59, 0xee, 0x74, 0xba, 0x8a, 0x1d, 0x60, 0x30, 0x13, 0x91, 0xc1, 0x65, 0x94, 0xf2, + 0xab, 0xf0, 0x4a, 0xa8, 0x06, 0x51, 0x20, 0xff, 0x21, 0x28, 0x04, 0xa1, 0xfc, 0x49, 0xb8, 0x12, + 0xc9, 0x01, 0xb5, 0x12, 0xbf, 0xe4, 0x5a, 0x59, 0x87, 0xd2, 0x78, 0xb1, 0xe2, 0x6c, 0x7e, 0x41, + 0xac, 0xb4, 0x86, 0xe0, 0x53, 0x5f, 0xf9, 0x69, 0x4e, 0x25, 0xea, 0x5b, 0xf0, 0x3a, 0xac, 0x8d, + 0xe2, 0x2a, 0x44, 0x3d, 0x47, 0xb0, 0x24, 0xee, 0xcb, 0x5e, 0x97, 0xd8, 0x84, 0xea, 0x07, 0xd3, + 0x5c, 0x12, 0x69, 0x05, 0x16, 0x6c, 0x66, 0xef, 0xb5, 0xd2, 0x05, 0xed, 0xfc, 0xc3, 0xc8, 0x57, + 0xa1, 0x08, 0x89, 0x36, 0x35, 0x69, 0x26, 0xc1, 0x1a, 0x4f, 0x60, 0x7a, 0x35, 0x86, 0x90, 0x14, + 0x48, 0xe0, 0x13, 0xdc, 0xca, 0x5c, 0xcb, 0xa3, 0x62, 0xaa, 0x2c, 0x07, 0xb7, 0xa8, 0xea, 0x09, + 0x6e, 0x69, 0x0c, 0x57, 0x91, 0xbc, 0x84, 0x9f, 0x33, 0x29, 0xdc, 0x61, 0x77, 0xd9, 0x2f, 0x58, + 0xbc, 0x0e, 0x39, 0x48, 0xda, 0xee, 0xb7, 0xf3, 0x86, 0x0c, 0xde, 0xa7, 0x9a, 0x51, 0x78, 0xc0, + 0xba, 0xd6, 0x17, 0x96, 0xb3, 0x6f, 0x74, 0xf5, 0x63, 0x71, 0x60, 0xe3, 0xec, 0xa6, 0xc9, 0xb5, + 0xdb, 0x7c, 0x2e, 0xc6, 0x12, 0xa9, 0xfb, 0x17, 0xc1, 0x5c, 0x9d, 0x9a, 0x9f, 0x13, 0x67, 0x3c, + 0xef, 0x7e, 0x6d, 0x1e, 0x11, 0x07, 0x77, 0xc7, 0x46, 0xe7, 0x30, 0xe9, 0x36, 0xcc, 0xb6, 0xf6, + 0x89, 0xd5, 0xc2, 0x2c, 0x5b, 0xa9, 0xb0, 0x71, 0x60, 0x97, 0x61, 0x34, 0x17, 0xeb, 0xcb, 0x72, + 0xe2, 0x42, 0x96, 0x27, 0xcd, 0x1d, 0xaf, 0x66, 0xc6, 0xa6, 0xb0, 0x04, 0x37, 0x5c, 0xa5, 0x42, + 0xbd, 0xc5, 0xc4, 0xf7, 0xf1, 0xe3, 0xc5, 0xbf, 0x0d, 0xb3, 0xd4, 0x32, 0x3b, 0x11, 0xd4, 0xbb, + 0xb8, 0x4a, 0xb2, 0x1f, 0xdc, 0x5d, 0xb8, 0xd1, 0x19, 0x35, 0x37, 0x7a, 0xa9, 0x04, 0x09, 0x16, + 0x3a, 0x0d, 0x8b, 0xd5, 0x2f, 0xab, 0xbb, 0x8d, 0xfb, 0x9f, 0xdc, 0xdb, 0xab, 0xee, 0xd6, 0x3e, + 0xac, 0x55, 0xef, 0x2e, 0xc6, 0xa4, 0xeb, 0x30, 0xcf, 0xbe, 0x7e, 0xa6, 0x7d, 0xb5, 0x88, 0xca, + 0xcf, 0x01, 0xe2, 0x75, 0x6a, 0x4a, 0x3a, 0x24, 0x07, 0x07, 0xd5, 0xb5, 0x90, 0x01, 0xcb, 0xd7, + 0xbc, 0xe4, 0xf5, 0x28, 0x28, 0x51, 0xbe, 0x47, 0x20, 0x05, 0x4c, 0x8b, 0x6f, 0x85, 0xfa, 0x18, + 0x06, 0xcb, 0x5b, 0x13, 0x80, 0x45, 0x5c, 0x1b, 0x16, 0x87, 0x06, 0xb9, 0x37, 0xa3, 0x38, 0x62, + 0x50, 0x79, 0x33, 0x32, 0x54, 0x44, 0xec, 0xc1, 0xcd, 0xa0, 0xa9, 0x6b, 0x3d, 0x1a, 0x7b, 0x8e, + 0x96, 0x6f, 0x4f, 0x82, 0x16, 0xa1, 0x29, 0x2c, 0x0d, 0x0f, 0x50, 0xa5, 0x28, 0x79, 0xe2, 0x58, + 0xb9, 0x1c, 0x1d, 0x2b, 0x82, 0x3e, 0x44, 0x70, 0x2b, 0x64, 0xfe, 0x50, 0xa3, 0xa8, 0x18, 0x30, + 0x90, 0xdf, 0x9d, 0xd0, 0x40, 0x90, 0xf8, 0x01, 0x41, 0x6e, 0xdc, 0x68, 0xf0, 0x5e, 0x74, 0xe7, + 0x7e, 0x4b, 0xf9, 0x83, 0x69, 0x2d, 0x05, 0xbf, 0x47, 0x08, 0x96, 0xc3, 0xdb, 0x73, 0x39, 0xba, + 0x7f, 0x51, 0x21, 0x95, 0xc9, 0x6d, 0x04, 0x9b, 0x07, 0x90, 0xba, 0xd0, 0x56, 0xdf, 0x18, 0x93, + 0x78, 0x0f, 0x28, 0xab, 0x11, 0x81, 0x83, 0x17, 0x70, 0xa8, 0x27, 0x85, 0x5f, 0xc0, 0x8b, 0xd0, + 0x11, 0x17, 0x30, 0xac, 0xfb, 0x48, 0x1f, 0x43, 0x82, 0x75, 0x9e, 0xd5, 0x50, 0xd3, 0xfe, 0xb6, + 0xfc, 0xda, 0xc8, 0xed, 0x41, 0x6f, 0xec, 0x3d, 0x0d, 0xf7, 0xd6, 0xdf, 0x1e, 0xe1, 0x6d, 0xf0, + 0x75, 0xde, 0x79, 0xff, 0xc9, 0x69, 0x16, 0x3d, 0x3d, 0xcd, 0xa2, 0x67, 0xa7, 0x59, 0xf4, 0xfd, + 0x59, 0x36, 0xf6, 0xf4, 0x2c, 0x1b, 0xfb, 0xeb, 0x2c, 0x1b, 0xfb, 0x7a, 0xcd, 0xb4, 0x9c, 0xfd, + 0xc3, 0xa6, 0xd2, 0x22, 0x6d, 0xf7, 0xf7, 0x09, 0xf7, 0xcf, 0x06, 0x35, 0xbe, 0x55, 0x4f, 0xf8, + 0x6f, 0x10, 0xcd, 0x59, 0x36, 0x7a, 0x6c, 0xfd, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x0b, 0x1d, 0x8e, + 0x60, 0x1b, 0x11, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1289,6 +1386,8 @@ type MsgClient interface { UpdateGroupPolicyMetadata(ctx context.Context, in *MsgUpdateGroupPolicyMetadata, opts ...grpc.CallOption) (*MsgUpdateGroupPolicyMetadataResponse, error) // CreateProposal submits a new proposal. CreateProposal(ctx context.Context, in *MsgCreateProposal, opts ...grpc.CallOption) (*MsgCreateProposalResponse, error) + // WithdrawProposal aborts a proposal. + WithdrawProposal(ctx context.Context, in *MsgWithdrawProposal, opts ...grpc.CallOption) (*MsgWithdrawProposalResponse, error) // Vote allows a voter to vote on a proposal. Vote(ctx context.Context, in *MsgVote, opts ...grpc.CallOption) (*MsgVoteResponse, error) // Exec executes a proposal. @@ -1384,6 +1483,15 @@ func (c *msgClient) CreateProposal(ctx context.Context, in *MsgCreateProposal, o return out, nil } +func (c *msgClient) WithdrawProposal(ctx context.Context, in *MsgWithdrawProposal, opts ...grpc.CallOption) (*MsgWithdrawProposalResponse, error) { + out := new(MsgWithdrawProposalResponse) + err := c.cc.Invoke(ctx, "/cosmos.group.v1beta1.Msg/WithdrawProposal", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) Vote(ctx context.Context, in *MsgVote, opts ...grpc.CallOption) (*MsgVoteResponse, error) { out := new(MsgVoteResponse) err := c.cc.Invoke(ctx, "/cosmos.group.v1beta1.Msg/Vote", in, out, opts...) @@ -1422,6 +1530,8 @@ type MsgServer interface { UpdateGroupPolicyMetadata(context.Context, *MsgUpdateGroupPolicyMetadata) (*MsgUpdateGroupPolicyMetadataResponse, error) // CreateProposal submits a new proposal. CreateProposal(context.Context, *MsgCreateProposal) (*MsgCreateProposalResponse, error) + // WithdrawProposal aborts a proposal. + WithdrawProposal(context.Context, *MsgWithdrawProposal) (*MsgWithdrawProposalResponse, error) // Vote allows a voter to vote on a proposal. Vote(context.Context, *MsgVote) (*MsgVoteResponse, error) // Exec executes a proposal. @@ -1459,6 +1569,9 @@ func (*UnimplementedMsgServer) UpdateGroupPolicyMetadata(ctx context.Context, re func (*UnimplementedMsgServer) CreateProposal(ctx context.Context, req *MsgCreateProposal) (*MsgCreateProposalResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateProposal not implemented") } +func (*UnimplementedMsgServer) WithdrawProposal(ctx context.Context, req *MsgWithdrawProposal) (*MsgWithdrawProposalResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WithdrawProposal not implemented") +} func (*UnimplementedMsgServer) Vote(ctx context.Context, req *MsgVote) (*MsgVoteResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Vote not implemented") } @@ -1632,6 +1745,24 @@ func _Msg_CreateProposal_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } +func _Msg_WithdrawProposal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgWithdrawProposal) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).WithdrawProposal(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.group.v1beta1.Msg/WithdrawProposal", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).WithdrawProposal(ctx, req.(*MsgWithdrawProposal)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_Vote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgVote) if err := dec(in); err != nil { @@ -1708,6 +1839,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "CreateProposal", Handler: _Msg_CreateProposal_Handler, }, + { + MethodName: "WithdrawProposal", + Handler: _Msg_WithdrawProposal_Handler, + }, { MethodName: "Vote", Handler: _Msg_Vote_Handler, @@ -2385,6 +2520,64 @@ func (m *MsgCreateProposalResponse) MarshalToSizedBuffer(dAtA []byte) (int, erro return len(dAtA) - i, nil } +func (m *MsgWithdrawProposal) 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 *MsgWithdrawProposal) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgWithdrawProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if m.ProposalId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ProposalId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MsgWithdrawProposalResponse) 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 *MsgWithdrawProposalResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgWithdrawProposalResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func (m *MsgVote) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2824,6 +3017,31 @@ func (m *MsgCreateProposalResponse) Size() (n int) { return n } +func (m *MsgWithdrawProposal) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.ProposalId != 0 { + n += 1 + sovTx(uint64(m.ProposalId)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgWithdrawProposalResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgVote) Size() (n int) { if m == nil { return 0 @@ -4779,6 +4997,157 @@ func (m *MsgCreateProposalResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgWithdrawProposal) 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: MsgWithdrawProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgWithdrawProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProposalId", wireType) + } + m.ProposalId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProposalId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", 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.Address = 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 *MsgWithdrawProposalResponse) 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: MsgWithdrawProposalResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgWithdrawProposalResponse: 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 *MsgVote) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/group/types.pb.go b/x/group/types.pb.go index 39ded0a057..651c52fbe5 100644 --- a/x/group/types.pb.go +++ b/x/group/types.pb.go @@ -83,6 +83,9 @@ const ( ProposalStatusClosed Proposal_Status = 2 // Final status of a proposal when the group was modified before the final tally. ProposalStatusAborted Proposal_Status = 3 + // A proposal can be deleted before the voting start time by the owner. When this happens the final status + // is Withdrawn. + ProposalStatusWithdrawn Proposal_Status = 4 ) var Proposal_Status_name = map[int32]string{ @@ -90,6 +93,7 @@ var Proposal_Status_name = map[int32]string{ 1: "STATUS_SUBMITTED", 2: "STATUS_CLOSED", 3: "STATUS_ABORTED", + 4: "STATUS_WITHDRAWN", } var Proposal_Status_value = map[string]int32{ @@ -97,6 +101,7 @@ var Proposal_Status_value = map[string]int32{ "STATUS_SUBMITTED": 1, "STATUS_CLOSED": 2, "STATUS_ABORTED": 3, + "STATUS_WITHDRAWN": 4, } func (x Proposal_Status) String() string { @@ -773,90 +778,92 @@ func init() { func init() { proto.RegisterFile("cosmos/group/v1beta1/types.proto", fileDescriptor_e091dfce5c49c8b6) } var fileDescriptor_e091dfce5c49c8b6 = []byte{ - // 1321 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4d, 0x6f, 0xdb, 0xc6, - 0x16, 0x15, 0x25, 0x59, 0x1f, 0x57, 0xb6, 0x2c, 0x0c, 0xfc, 0x12, 0x59, 0x4e, 0x64, 0x46, 0x79, - 0x0f, 0x30, 0xde, 0x83, 0xa5, 0x67, 0xf7, 0x63, 0x11, 0x34, 0x69, 0x29, 0x9a, 0x4e, 0x55, 0x38, - 0x92, 0x4b, 0x4a, 0x6e, 0x9b, 0x45, 0x05, 0x8a, 0x9c, 0xc8, 0x6c, 0x25, 0x8e, 0x40, 0x8e, 0xdc, - 0xa8, 0xbf, 0x20, 0xd5, 0x2a, 0xcb, 0x76, 0x21, 0x20, 0x40, 0x17, 0x5d, 0x17, 0xc8, 0x8f, 0x08, - 0xba, 0x0a, 0xba, 0x2a, 0xba, 0x68, 0x8b, 0x64, 0x93, 0x75, 0xd1, 0x1f, 0x50, 0x70, 0x66, 0x18, - 0x87, 0x89, 0xa2, 0xc4, 0x41, 0x57, 0xe6, 0xcc, 0x9c, 0x73, 0xe7, 0x9e, 0x7b, 0xae, 0x67, 0x46, - 0x20, 0x5b, 0xc4, 0x1f, 0x12, 0xbf, 0xd6, 0xf7, 0xc8, 0x78, 0x54, 0x3b, 0xd9, 0xe9, 0x61, 0x6a, - 0xee, 0xd4, 0xe8, 0x64, 0x84, 0xfd, 0xea, 0xc8, 0x23, 0x94, 0xa0, 0x35, 0x8e, 0xa8, 0x32, 0x44, - 0x55, 0x20, 0x4a, 0x6b, 0x7d, 0xd2, 0x27, 0x0c, 0x50, 0x0b, 0xbe, 0x38, 0xb6, 0x54, 0xee, 0x13, - 0xd2, 0x1f, 0xe0, 0x1a, 0x1b, 0xf5, 0xc6, 0xb7, 0x6a, 0xf6, 0xd8, 0x33, 0xa9, 0x43, 0x5c, 0xb1, - 0xbe, 0xf9, 0xfc, 0x3a, 0x75, 0x86, 0xd8, 0xa7, 0xe6, 0x70, 0x24, 0x00, 0xeb, 0x7c, 0xb3, 0x2e, - 0x8f, 0x2c, 0x76, 0x16, 0x4b, 0xcf, 0x73, 0x4d, 0x77, 0xc2, 0x97, 0x2a, 0x3f, 0x4a, 0x90, 0xba, - 0x81, 0x87, 0x3d, 0xec, 0xa1, 0x5d, 0x48, 0x9b, 0xb6, 0xed, 0x61, 0xdf, 0x2f, 0x4a, 0xb2, 0xb4, - 0x95, 0xad, 0x17, 0x7f, 0xbe, 0xbf, 0x1d, 0x4a, 0x50, 0xf8, 0x8a, 0x41, 0x3d, 0xc7, 0xed, 0xeb, - 0x21, 0x10, 0x9d, 0x83, 0xd4, 0x57, 0xd8, 0xe9, 0x1f, 0xd3, 0x62, 0x3c, 0xa0, 0xe8, 0x62, 0x84, - 0x4a, 0x90, 0x19, 0x62, 0x6a, 0xda, 0x26, 0x35, 0x8b, 0x09, 0x59, 0xda, 0x5a, 0xd6, 0x9f, 0x8e, - 0xd1, 0xfb, 0x90, 0x31, 0x6d, 0x1b, 0xdb, 0x5d, 0x93, 0x16, 0x93, 0xb2, 0xb4, 0x95, 0xdb, 0x2d, - 0x55, 0x79, 0x82, 0xd5, 0x30, 0xc1, 0x6a, 0x3b, 0x14, 0x57, 0xcf, 0x3c, 0xf8, 0x6d, 0x33, 0x76, - 0xf7, 0xf7, 0x4d, 0x89, 0x6d, 0x8a, 0x6d, 0x85, 0x56, 0xae, 0x43, 0x9a, 0xa7, 0xec, 0xa3, 0xf7, - 0x20, 0x3d, 0xe4, 0x9f, 0x45, 0x49, 0x4e, 0x6c, 0xe5, 0x76, 0x2f, 0x54, 0xe7, 0xd5, 0xbc, 0xca, - 0xf1, 0xf5, 0x64, 0x10, 0x4c, 0x0f, 0x29, 0x95, 0xa9, 0x04, 0xe7, 0xdb, 0xc7, 0x1e, 0xf6, 0x8f, - 0xc9, 0xc0, 0xde, 0xc3, 0x96, 0xe3, 0x3b, 0xc4, 0x3d, 0x24, 0x03, 0xc7, 0x9a, 0xa0, 0x0b, 0x90, - 0xa5, 0xe1, 0x12, 0xaf, 0x87, 0x7e, 0x3a, 0x81, 0xae, 0x42, 0x3a, 0xa8, 0x3f, 0x19, 0x73, 0xe1, - 0xb9, 0xdd, 0xf5, 0x17, 0x24, 0xec, 0x09, 0xff, 0xb8, 0x82, 0x6f, 0x99, 0x02, 0xc1, 0xb9, 0x82, - 0x7e, 0xba, 0xbf, 0x9d, 0x8f, 0x6e, 0x58, 0xf9, 0x4b, 0x82, 0xec, 0xf5, 0x20, 0xe9, 0x86, 0x7b, - 0x8b, 0xa0, 0x75, 0xc8, 0x30, 0x05, 0x5d, 0x87, 0xef, 0x9e, 0xd4, 0xd3, 0x6c, 0xdc, 0xb0, 0x51, - 0x15, 0x96, 0x4c, 0x7b, 0xe8, 0xb8, 0xbc, 0xe4, 0x0b, 0x5c, 0xe2, 0xb0, 0x85, 0x5e, 0x14, 0x21, - 0x7d, 0x82, 0xbd, 0x20, 0x0b, 0x66, 0x45, 0x52, 0x0f, 0x87, 0xe8, 0x12, 0x2c, 0x53, 0x42, 0xcd, - 0x41, 0x57, 0xf8, 0xbb, 0xc4, 0x4a, 0x90, 0x63, 0x73, 0x9f, 0x70, 0x93, 0x55, 0x00, 0xcb, 0xc3, - 0x26, 0xe5, 0x56, 0xa6, 0xce, 0x60, 0x65, 0x56, 0xf0, 0x14, 0x5a, 0xf9, 0x1c, 0x72, 0x4c, 0xb5, - 0x68, 0xc2, 0x05, 0xba, 0xdf, 0x86, 0x14, 0x37, 0x4e, 0x94, 0x7c, 0xa1, 0xd5, 0xba, 0xc0, 0x56, - 0x9e, 0xc4, 0x61, 0x95, 0x6d, 0xc0, 0xcb, 0xcc, 0x8a, 0xfb, 0x26, 0x9d, 0xfe, 0x6c, 0x62, 0xf1, - 0x97, 0x18, 0x92, 0x38, 0xbb, 0x21, 0xc9, 0x97, 0x1b, 0xb2, 0x14, 0x35, 0xe4, 0x63, 0x58, 0xb5, - 0x45, 0xc7, 0x74, 0x47, 0x4c, 0x8b, 0x28, 0xf9, 0xda, 0x0b, 0x25, 0x57, 0xdc, 0x49, 0x7d, 0x4e, - 0x8b, 0xe9, 0x79, 0x3b, 0xda, 0xe3, 0x51, 0x03, 0xd3, 0x6f, 0x64, 0xe0, 0x95, 0xcc, 0x9d, 0x7b, - 0x9b, 0xb1, 0x27, 0xf7, 0x36, 0xa5, 0xca, 0x0f, 0x39, 0xc8, 0x1c, 0x7a, 0x64, 0x44, 0x7c, 0x73, - 0x80, 0x36, 0x21, 0x37, 0x12, 0xdf, 0xa7, 0x5e, 0x42, 0x38, 0xd5, 0xb0, 0x9f, 0x35, 0x21, 0xfe, - 0xba, 0x26, 0x2c, 0x6a, 0xe5, 0x77, 0x21, 0xcb, 0xa3, 0x07, 0x87, 0x41, 0x52, 0x4e, 0x2c, 0x8c, - 0x78, 0x0a, 0x45, 0xd7, 0x61, 0xd9, 0x1f, 0xf7, 0x86, 0x0e, 0x15, 0x65, 0x58, 0x3a, 0x43, 0x19, - 0x72, 0x4f, 0x99, 0x0a, 0x45, 0x97, 0x61, 0x85, 0x77, 0x48, 0x68, 0x60, 0x8a, 0x69, 0x5e, 0x66, - 0x93, 0x47, 0xc2, 0xc5, 0xff, 0xc3, 0x1a, 0x07, 0x71, 0x0b, 0x9f, 0x62, 0xd3, 0x0c, 0x8b, 0xfa, - 0xa7, 0x9d, 0x1a, 0x32, 0xae, 0x42, 0xca, 0xa7, 0x26, 0x1d, 0xfb, 0xc5, 0x8c, 0x2c, 0x6d, 0xe5, - 0x77, 0xff, 0x33, 0xbf, 0xed, 0xc3, 0xc2, 0x57, 0x0d, 0x06, 0xd6, 0x05, 0x29, 0xa0, 0x7b, 0xd8, - 0x1f, 0x0f, 0x68, 0x31, 0xfb, 0x5a, 0x74, 0x9d, 0x81, 0x75, 0x41, 0x42, 0x1f, 0x00, 0x9c, 0x10, - 0x8a, 0xbb, 0x41, 0x34, 0x5c, 0x04, 0x56, 0x9b, 0x8d, 0xf9, 0x21, 0xda, 0xe6, 0x60, 0x30, 0x11, - 0x47, 0x6c, 0x36, 0x20, 0x05, 0x99, 0x60, 0x74, 0xed, 0xf4, 0xa8, 0xcc, 0x9d, 0xe5, 0xb4, 0x17, - 0x24, 0x74, 0x04, 0xab, 0xf8, 0x36, 0xb6, 0xc6, 0x94, 0x78, 0x5d, 0xa1, 0x64, 0x99, 0x29, 0xd9, - 0x7e, 0x85, 0x12, 0x4d, 0xb0, 0x84, 0xa2, 0x3c, 0x8e, 0x8c, 0xd1, 0x16, 0x24, 0x87, 0x7e, 0xdf, - 0x2f, 0xae, 0xb0, 0x7b, 0x63, 0xee, 0x3f, 0x91, 0xce, 0x10, 0x95, 0x87, 0x12, 0xa4, 0x78, 0x55, - 0xd1, 0x0e, 0x20, 0xa3, 0xad, 0xb4, 0x3b, 0x46, 0xb7, 0xd3, 0x34, 0x0e, 0x35, 0xb5, 0xb1, 0xdf, - 0xd0, 0xf6, 0x0a, 0xb1, 0xd2, 0xfa, 0x74, 0x26, 0xff, 0x2b, 0xdc, 0x99, 0x63, 0x1b, 0xee, 0x89, - 0x39, 0x70, 0x6c, 0xb4, 0x03, 0x05, 0x41, 0x31, 0x3a, 0xf5, 0x1b, 0x8d, 0x76, 0x5b, 0xdb, 0x2b, - 0x48, 0xa5, 0x8d, 0xe9, 0x4c, 0x3e, 0x1f, 0x25, 0x18, 0x61, 0x2f, 0xa1, 0xff, 0xc1, 0x8a, 0xa0, - 0xa8, 0x07, 0x2d, 0x43, 0xdb, 0x2b, 0xc4, 0x4b, 0xc5, 0xe9, 0x4c, 0x5e, 0x8b, 0xe2, 0xd5, 0x01, - 0xf1, 0xb1, 0x8d, 0xb6, 0x21, 0x2f, 0xc0, 0x4a, 0xbd, 0xa5, 0x07, 0xd1, 0x13, 0xf3, 0xd2, 0x51, - 0x7a, 0xc4, 0xa3, 0xd8, 0x2e, 0x25, 0xef, 0x7c, 0x5f, 0x8e, 0x55, 0x7e, 0x95, 0x20, 0x25, 0xea, - 0xb0, 0x03, 0x48, 0xd7, 0x8c, 0xce, 0x41, 0x7b, 0x91, 0x24, 0x8e, 0x0d, 0x25, 0xbd, 0xf3, 0x0c, - 0x65, 0xbf, 0xd1, 0x54, 0x0e, 0x1a, 0x37, 0x99, 0xa8, 0x8b, 0xd3, 0x99, 0xbc, 0x1e, 0xa5, 0x74, - 0xdc, 0x5b, 0x8e, 0x6b, 0x0e, 0x9c, 0xaf, 0xb1, 0x8d, 0x6a, 0xb0, 0x2a, 0x68, 0x8a, 0xaa, 0x6a, - 0x87, 0x6d, 0x26, 0xac, 0x34, 0x9d, 0xc9, 0xe7, 0xa2, 0x1c, 0xc5, 0xb2, 0xf0, 0x88, 0x46, 0x08, - 0xba, 0xf6, 0x91, 0xa6, 0x72, 0x6d, 0x73, 0x08, 0x3a, 0xfe, 0x02, 0x5b, 0xa7, 0xe2, 0xbe, 0x8b, - 0x43, 0x3e, 0x6a, 0x3e, 0xaa, 0xc3, 0x86, 0xf6, 0xa9, 0xa6, 0x76, 0xda, 0x2d, 0xbd, 0x3b, 0x57, - 0xed, 0xa5, 0xe9, 0x4c, 0xbe, 0x18, 0x46, 0x8d, 0x92, 0x43, 0xd5, 0x57, 0xe1, 0xfc, 0xf3, 0x31, - 0x9a, 0xad, 0x76, 0x57, 0xef, 0x34, 0x0b, 0x52, 0x49, 0x9e, 0xce, 0xe4, 0x0b, 0xf3, 0xf9, 0x4d, - 0x42, 0xf5, 0xb1, 0x8b, 0xae, 0xbd, 0x48, 0x37, 0x3a, 0xaa, 0xaa, 0x19, 0x46, 0x21, 0xbe, 0x68, - 0x7b, 0x63, 0x6c, 0x59, 0xc1, 0xd9, 0x37, 0x87, 0xbf, 0xaf, 0x34, 0x0e, 0x3a, 0xba, 0x56, 0x48, - 0x2c, 0xe2, 0xef, 0x9b, 0xce, 0x60, 0xec, 0x61, 0x5e, 0x9b, 0x2b, 0xc9, 0xe0, 0xb4, 0xae, 0x7c, - 0x23, 0xc1, 0x12, 0xfb, 0x77, 0x45, 0x1b, 0x90, 0x9d, 0x60, 0xbf, 0x6b, 0x91, 0xb1, 0x4b, 0xc5, - 0x33, 0x27, 0x33, 0xc1, 0xbe, 0x1a, 0x8c, 0x83, 0x3b, 0xcf, 0x25, 0x62, 0x8d, 0xbf, 0xef, 0xd2, - 0x2e, 0xe1, 0x4b, 0x97, 0x61, 0xc5, 0xec, 0xf9, 0xd4, 0x74, 0x5c, 0xb1, 0xce, 0xee, 0x3e, 0x7d, - 0x59, 0x4c, 0x72, 0xd0, 0x45, 0x80, 0x13, 0x4c, 0xc3, 0x08, 0x49, 0xfe, 0x88, 0x0a, 0x66, 0xd8, - 0xb2, 0xc8, 0xe5, 0x4f, 0x09, 0x92, 0x47, 0x84, 0xe2, 0x57, 0xdf, 0x18, 0x55, 0x58, 0x0a, 0x8e, - 0x15, 0xef, 0xd5, 0x0f, 0x1f, 0x06, 0x0b, 0x1e, 0x0c, 0xd6, 0x31, 0x71, 0x2c, 0xcc, 0x92, 0xcb, - 0xbf, 0xec, 0xc1, 0xa0, 0x32, 0x8c, 0x2e, 0xb0, 0x0b, 0x6f, 0xe7, 0x7f, 0xea, 0xae, 0xf8, 0xaf, - 0x0d, 0x29, 0xbe, 0x2d, 0x3a, 0x07, 0x48, 0xfd, 0xb0, 0xd5, 0x50, 0xb5, 0x68, 0x43, 0xa2, 0x15, - 0xc8, 0x8a, 0xf9, 0x66, 0xab, 0x20, 0xa1, 0x3c, 0x80, 0x18, 0x7e, 0xa6, 0x19, 0x85, 0x38, 0x42, - 0x90, 0x17, 0x63, 0xa5, 0x6e, 0xb4, 0x95, 0x46, 0xb3, 0x90, 0x40, 0xab, 0x90, 0x13, 0x73, 0x47, - 0x5a, 0xbb, 0x55, 0x48, 0xd6, 0xaf, 0x3d, 0x78, 0x54, 0x96, 0x1e, 0x3e, 0x2a, 0x4b, 0x7f, 0x3c, - 0x2a, 0x4b, 0x77, 0x1f, 0x97, 0x63, 0x0f, 0x1f, 0x97, 0x63, 0xbf, 0x3c, 0x2e, 0xc7, 0x6e, 0xfe, - 0xbb, 0xef, 0xd0, 0xe3, 0x71, 0xaf, 0x6a, 0x91, 0xa1, 0xf8, 0xa9, 0x20, 0xfe, 0x6c, 0xfb, 0xf6, - 0x97, 0xb5, 0xdb, 0xfc, 0x37, 0x4d, 0x2f, 0xc5, 0x04, 0xbd, 0xf5, 0x77, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xa5, 0xd8, 0x7b, 0xb8, 0xea, 0x0c, 0x00, 0x00, + // 1345 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4f, 0x6f, 0x13, 0xc7, + 0x1b, 0xce, 0x3a, 0x8e, 0xff, 0xbc, 0x4e, 0x1c, 0x6b, 0x94, 0x1f, 0x38, 0x0e, 0x38, 0x8b, 0xf9, + 0x55, 0x8a, 0x5a, 0xc5, 0x6e, 0xd2, 0x3f, 0x07, 0x54, 0x68, 0xd7, 0x9b, 0x0d, 0xb8, 0x0a, 0x76, + 0xba, 0xbb, 0x4e, 0x5a, 0x0e, 0xb5, 0xd6, 0xbb, 0x83, 0xb3, 0xad, 0xbd, 0x63, 0xed, 0x8e, 0x03, + 0xee, 0xb5, 0x17, 0xea, 0x13, 0xc7, 0xf6, 0x60, 0x09, 0xa9, 0x9f, 0xa0, 0x12, 0x1f, 0x02, 0xf5, + 0x84, 0x7a, 0xaa, 0x38, 0xb4, 0x15, 0x5c, 0x38, 0x57, 0xfd, 0x00, 0xd5, 0xce, 0xcc, 0x12, 0x0c, + 0xc6, 0x10, 0xd4, 0x53, 0x76, 0x66, 0x9e, 0xe7, 0x9d, 0xf7, 0x7d, 0x9e, 0x37, 0x33, 0x63, 0x90, + 0x6d, 0x12, 0xf4, 0x48, 0x50, 0xe9, 0xf8, 0x64, 0xd0, 0xaf, 0x1c, 0x6f, 0xb5, 0x31, 0xb5, 0xb6, + 0x2a, 0x74, 0xd8, 0xc7, 0x41, 0xb9, 0xef, 0x13, 0x4a, 0xd0, 0x0a, 0x47, 0x94, 0x19, 0xa2, 0x2c, + 0x10, 0x85, 0x95, 0x0e, 0xe9, 0x10, 0x06, 0xa8, 0x84, 0x5f, 0x1c, 0x5b, 0x28, 0x76, 0x08, 0xe9, + 0x74, 0x71, 0x85, 0x8d, 0xda, 0x83, 0x9b, 0x15, 0x67, 0xe0, 0x5b, 0xd4, 0x25, 0x9e, 0x58, 0x5f, + 0x7f, 0x71, 0x9d, 0xba, 0x3d, 0x1c, 0x50, 0xab, 0xd7, 0x17, 0x80, 0x55, 0xbe, 0x59, 0x8b, 0x47, + 0x16, 0x3b, 0x8b, 0xa5, 0x17, 0xb9, 0x96, 0x37, 0xe4, 0x4b, 0xa5, 0x5f, 0x24, 0x48, 0x5c, 0xc7, + 0xbd, 0x36, 0xf6, 0xd1, 0x36, 0x24, 0x2d, 0xc7, 0xf1, 0x71, 0x10, 0xe4, 0x25, 0x59, 0xda, 0x48, + 0x57, 0xf3, 0xbf, 0xdd, 0xdf, 0x8c, 0x4a, 0x50, 0xf8, 0x8a, 0x41, 0x7d, 0xd7, 0xeb, 0xe8, 0x11, + 0x10, 0x9d, 0x81, 0xc4, 0x2d, 0xec, 0x76, 0x8e, 0x68, 0x3e, 0x16, 0x52, 0x74, 0x31, 0x42, 0x05, + 0x48, 0xf5, 0x30, 0xb5, 0x1c, 0x8b, 0x5a, 0xf9, 0x79, 0x59, 0xda, 0x58, 0xd4, 0x9f, 0x8d, 0xd1, + 0xa7, 0x90, 0xb2, 0x1c, 0x07, 0x3b, 0x2d, 0x8b, 0xe6, 0xe3, 0xb2, 0xb4, 0x91, 0xd9, 0x2e, 0x94, + 0x79, 0x82, 0xe5, 0x28, 0xc1, 0xb2, 0x19, 0x15, 0x57, 0x4d, 0x3d, 0xf8, 0x63, 0x7d, 0xee, 0xee, + 0x9f, 0xeb, 0x12, 0xdb, 0x14, 0x3b, 0x0a, 0x2d, 0x5d, 0x85, 0x24, 0x4f, 0x39, 0x40, 0x9f, 0x40, + 0xb2, 0xc7, 0x3f, 0xf3, 0x92, 0x3c, 0xbf, 0x91, 0xd9, 0x3e, 0x57, 0x9e, 0xa6, 0x79, 0x99, 0xe3, + 0xab, 0xf1, 0x30, 0x98, 0x1e, 0x51, 0x4a, 0x23, 0x09, 0xce, 0x9a, 0x47, 0x3e, 0x0e, 0x8e, 0x48, + 0xd7, 0xd9, 0xc1, 0xb6, 0x1b, 0xb8, 0xc4, 0xdb, 0x27, 0x5d, 0xd7, 0x1e, 0xa2, 0x73, 0x90, 0xa6, + 0xd1, 0x12, 0xd7, 0x43, 0x3f, 0x99, 0x40, 0x97, 0x21, 0x19, 0xea, 0x4f, 0x06, 0xbc, 0xf0, 0xcc, + 0xf6, 0xea, 0x4b, 0x25, 0xec, 0x08, 0xff, 0x78, 0x05, 0x3f, 0xb2, 0x0a, 0x04, 0xe7, 0x12, 0xfa, + 0xf5, 0xfe, 0x66, 0x76, 0x72, 0xc3, 0xd2, 0x3f, 0x12, 0xa4, 0xaf, 0x86, 0x49, 0xd7, 0xbc, 0x9b, + 0x04, 0xad, 0x42, 0x8a, 0x55, 0xd0, 0x72, 0xf9, 0xee, 0x71, 0x3d, 0xc9, 0xc6, 0x35, 0x07, 0x95, + 0x61, 0xc1, 0x72, 0x7a, 0xae, 0xc7, 0x25, 0x9f, 0xe1, 0x12, 0x87, 0xcd, 0xf4, 0x22, 0x0f, 0xc9, + 0x63, 0xec, 0x87, 0x59, 0x30, 0x2b, 0xe2, 0x7a, 0x34, 0x44, 0x17, 0x60, 0x91, 0x12, 0x6a, 0x75, + 0x5b, 0xc2, 0xdf, 0x05, 0x26, 0x41, 0x86, 0xcd, 0x1d, 0x72, 0x93, 0x55, 0x00, 0xdb, 0xc7, 0x16, + 0xe5, 0x56, 0x26, 0x4e, 0x61, 0x65, 0x5a, 0xf0, 0x14, 0x5a, 0xfa, 0x1a, 0x32, 0xac, 0x6a, 0xd1, + 0x84, 0x33, 0xea, 0xfe, 0x10, 0x12, 0xdc, 0x38, 0x21, 0xf9, 0x4c, 0xab, 0x75, 0x81, 0x2d, 0x3d, + 0x8d, 0xc1, 0x32, 0xdb, 0x80, 0xcb, 0xcc, 0xc4, 0x7d, 0x9b, 0x4e, 0x7f, 0x3e, 0xb1, 0xd8, 0x2b, + 0x0c, 0x99, 0x3f, 0xbd, 0x21, 0xf1, 0x57, 0x1b, 0xb2, 0x30, 0x69, 0xc8, 0x17, 0xb0, 0xec, 0x88, + 0x8e, 0x69, 0xf5, 0x59, 0x2d, 0x42, 0xf2, 0x95, 0x97, 0x24, 0x57, 0xbc, 0x61, 0x75, 0x4a, 0x8b, + 0xe9, 0x59, 0x67, 0xb2, 0xc7, 0x27, 0x0d, 0x4c, 0xbe, 0x95, 0x81, 0x97, 0x52, 0x77, 0xee, 0xad, + 0xcf, 0x3d, 0xbd, 0xb7, 0x2e, 0x95, 0x1e, 0x65, 0x20, 0xb5, 0xef, 0x93, 0x3e, 0x09, 0xac, 0x2e, + 0x5a, 0x87, 0x4c, 0x5f, 0x7c, 0x9f, 0x78, 0x09, 0xd1, 0x54, 0xcd, 0x79, 0xde, 0x84, 0xd8, 0x9b, + 0x9a, 0x30, 0xab, 0x95, 0x3f, 0x86, 0x34, 0x8f, 0x1e, 0x1e, 0x06, 0x71, 0x79, 0x7e, 0x66, 0xc4, + 0x13, 0x28, 0xba, 0x0a, 0x8b, 0xc1, 0xa0, 0xdd, 0x73, 0xa9, 0x90, 0x61, 0xe1, 0x14, 0x32, 0x64, + 0x9e, 0x31, 0x15, 0x8a, 0x2e, 0xc2, 0x12, 0xef, 0x90, 0xc8, 0xc0, 0x04, 0xab, 0x79, 0x91, 0x4d, + 0x1e, 0x08, 0x17, 0xdf, 0x87, 0x15, 0x0e, 0xe2, 0x16, 0x3e, 0xc3, 0x26, 0x19, 0x16, 0x75, 0x4e, + 0x3a, 0x35, 0x62, 0x5c, 0x86, 0x44, 0x40, 0x2d, 0x3a, 0x08, 0xf2, 0x29, 0x59, 0xda, 0xc8, 0x6e, + 0xbf, 0x33, 0xbd, 0xed, 0x23, 0xe1, 0xcb, 0x06, 0x03, 0xeb, 0x82, 0x14, 0xd2, 0x7d, 0x1c, 0x0c, + 0xba, 0x34, 0x9f, 0x7e, 0x23, 0xba, 0xce, 0xc0, 0xba, 0x20, 0xa1, 0xcf, 0x00, 0x8e, 0x09, 0xc5, + 0xad, 0x30, 0x1a, 0xce, 0x03, 0xd3, 0x66, 0x6d, 0x7a, 0x08, 0xd3, 0xea, 0x76, 0x87, 0xe2, 0x88, + 0x4d, 0x87, 0xa4, 0x30, 0x13, 0x8c, 0xae, 0x9c, 0x1c, 0x95, 0x99, 0xd3, 0x9c, 0xf6, 0x82, 0x84, + 0x0e, 0x60, 0x19, 0xdf, 0xc6, 0xf6, 0x80, 0x12, 0xbf, 0x25, 0x2a, 0x59, 0x64, 0x95, 0x6c, 0xbe, + 0xa6, 0x12, 0x4d, 0xb0, 0x44, 0x45, 0x59, 0x3c, 0x31, 0x46, 0x1b, 0x10, 0xef, 0x05, 0x9d, 0x20, + 0xbf, 0xc4, 0xee, 0x8d, 0xa9, 0xff, 0x44, 0x3a, 0x43, 0x94, 0xbe, 0x8f, 0x41, 0x82, 0xab, 0x8a, + 0xb6, 0x00, 0x19, 0xa6, 0x62, 0x36, 0x8d, 0x56, 0xb3, 0x6e, 0xec, 0x6b, 0x6a, 0x6d, 0xb7, 0xa6, + 0xed, 0xe4, 0xe6, 0x0a, 0xab, 0xa3, 0xb1, 0xfc, 0xbf, 0x68, 0x67, 0x8e, 0xad, 0x79, 0xc7, 0x56, + 0xd7, 0x75, 0xd0, 0x16, 0xe4, 0x04, 0xc5, 0x68, 0x56, 0xaf, 0xd7, 0x4c, 0x53, 0xdb, 0xc9, 0x49, + 0x85, 0xb5, 0xd1, 0x58, 0x3e, 0x3b, 0x49, 0x30, 0xa2, 0x5e, 0x42, 0xef, 0xc1, 0x92, 0xa0, 0xa8, + 0x7b, 0x0d, 0x43, 0xdb, 0xc9, 0xc5, 0x0a, 0xf9, 0xd1, 0x58, 0x5e, 0x99, 0xc4, 0xab, 0x5d, 0x12, + 0x60, 0x07, 0x6d, 0x42, 0x56, 0x80, 0x95, 0x6a, 0x43, 0x0f, 0xa3, 0xcf, 0x4f, 0x4b, 0x47, 0x69, + 0x13, 0x3f, 0x8c, 0x7d, 0x92, 0xce, 0x61, 0xcd, 0xbc, 0xb6, 0xa3, 0x2b, 0x87, 0xf5, 0x5c, 0x7c, + 0x5a, 0x3a, 0x87, 0x2e, 0x3d, 0x72, 0x7c, 0xeb, 0x96, 0x57, 0x88, 0xdf, 0xf9, 0xb9, 0x38, 0x57, + 0x7a, 0x24, 0x41, 0x42, 0x48, 0xb7, 0x05, 0x48, 0xd7, 0x8c, 0xe6, 0x9e, 0x39, 0x4b, 0x05, 0x8e, + 0x8d, 0x54, 0xf8, 0xe8, 0x39, 0xca, 0x6e, 0xad, 0xae, 0xec, 0xd5, 0x6e, 0x30, 0x1d, 0xce, 0x8f, + 0xc6, 0xf2, 0xea, 0x24, 0xa5, 0xe9, 0xdd, 0x74, 0x3d, 0xab, 0xeb, 0x7e, 0x87, 0x1d, 0x54, 0x81, + 0x65, 0x41, 0x53, 0x54, 0x55, 0xdb, 0x37, 0x99, 0x16, 0x85, 0xd1, 0x58, 0x3e, 0x33, 0xc9, 0x51, + 0x6c, 0x1b, 0xf7, 0xe9, 0x04, 0x41, 0xd7, 0x3e, 0xd7, 0x54, 0x2e, 0xc7, 0x14, 0x82, 0x8e, 0xbf, + 0xc1, 0x36, 0xc5, 0x8e, 0x28, 0xee, 0xa7, 0x18, 0x64, 0x27, 0xfb, 0x05, 0x55, 0x61, 0x4d, 0xfb, + 0x52, 0x53, 0x9b, 0x66, 0x43, 0x6f, 0x4d, 0xad, 0xf6, 0xc2, 0x68, 0x2c, 0x9f, 0x8f, 0xa2, 0x4e, + 0x92, 0xa3, 0xaa, 0x2f, 0xc3, 0xd9, 0x17, 0x63, 0xd4, 0x1b, 0x66, 0x4b, 0x6f, 0xd6, 0x73, 0x52, + 0x41, 0x1e, 0x8d, 0xe5, 0x73, 0xd3, 0xf9, 0x75, 0x42, 0xf5, 0x81, 0x87, 0xae, 0xbc, 0x4c, 0x37, + 0x9a, 0xaa, 0xaa, 0x19, 0x46, 0x2e, 0x36, 0x6b, 0x7b, 0x63, 0x60, 0xdb, 0xe1, 0x71, 0x39, 0x85, + 0xbf, 0xab, 0xd4, 0xf6, 0x9a, 0xba, 0x96, 0x9b, 0x9f, 0xc5, 0xdf, 0xb5, 0xdc, 0xee, 0xc0, 0xc7, + 0x5c, 0x9b, 0x4b, 0xf1, 0xf0, 0x80, 0x2f, 0xfd, 0x20, 0xc1, 0x02, 0xfb, 0x0f, 0x47, 0x6b, 0x90, + 0x1e, 0xe2, 0xa0, 0x65, 0x93, 0x81, 0x47, 0xc5, 0xcb, 0x28, 0x35, 0xc4, 0x81, 0x1a, 0x8e, 0xc3, + 0x6b, 0xd2, 0x23, 0x62, 0x8d, 0x3f, 0x09, 0x93, 0x1e, 0xe1, 0x4b, 0x17, 0x61, 0xc9, 0x6a, 0x07, + 0xd4, 0x72, 0x3d, 0xb1, 0xce, 0xae, 0x4b, 0x7d, 0x51, 0x4c, 0x72, 0xd0, 0x79, 0x80, 0x63, 0x4c, + 0xa3, 0x08, 0x71, 0xfe, 0xee, 0x0a, 0x67, 0xd8, 0xb2, 0xc8, 0xe5, 0x6f, 0x09, 0xe2, 0x07, 0x84, + 0xe2, 0xd7, 0x5f, 0x32, 0x65, 0x58, 0x08, 0x4f, 0x22, 0xff, 0xf5, 0x6f, 0x25, 0x06, 0x0b, 0xdf, + 0x18, 0xf6, 0x11, 0x71, 0x6d, 0xcc, 0x92, 0xcb, 0xbe, 0xea, 0x8d, 0xa1, 0x32, 0x8c, 0x2e, 0xb0, + 0x33, 0x2f, 0xf4, 0xff, 0xea, 0x7a, 0x79, 0xd7, 0x81, 0x04, 0xdf, 0x16, 0x9d, 0x01, 0xa4, 0x5e, + 0x6b, 0xd4, 0x54, 0x6d, 0xb2, 0x21, 0xd1, 0x12, 0xa4, 0xc5, 0x7c, 0xbd, 0x91, 0x93, 0x50, 0x16, + 0x40, 0x0c, 0xbf, 0xd2, 0x8c, 0x5c, 0x0c, 0x21, 0xc8, 0x8a, 0xb1, 0x52, 0x35, 0x4c, 0xa5, 0x56, + 0xcf, 0xcd, 0xa3, 0x65, 0xc8, 0x88, 0xb9, 0x03, 0xcd, 0x6c, 0xe4, 0xe2, 0xd5, 0x2b, 0x0f, 0x1e, + 0x17, 0xa5, 0x87, 0x8f, 0x8b, 0xd2, 0x5f, 0x8f, 0x8b, 0xd2, 0xdd, 0x27, 0xc5, 0xb9, 0x87, 0x4f, + 0x8a, 0x73, 0xbf, 0x3f, 0x29, 0xce, 0xdd, 0xf8, 0x7f, 0xc7, 0xa5, 0x47, 0x83, 0x76, 0xd9, 0x26, + 0x3d, 0xf1, 0xeb, 0x42, 0xfc, 0xd9, 0x0c, 0x9c, 0x6f, 0x2b, 0xb7, 0xf9, 0xcf, 0xa0, 0x76, 0x82, + 0x15, 0xf4, 0xc1, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x6d, 0xca, 0xed, 0x16, 0x1d, 0x0d, 0x00, + 0x00, } func (this *GroupPolicyInfo) Equal(that interface{}) bool {